Что такое йоло yolo
Значение YOLO. Как расшифровывается и переводится эта фраза
Что значит YOLO и как переводится
Итак, перво-наперво, YOLO это аббревиатура, которая расшифровывается как You Only Live Once. Если кто не силен в английском языке, то поясню. Фраза переводится как «Живешь только раз».
Теперь уже стало гораздо понятнее, как же интерпретировать данную фразу. И тут то и возникают сложности. Некоторые считают, что фраза «Живем лишь раз» это некий призыв к действию, и оно действительно так, с этим не поспоришь. А вот к каким именно действиям, тут уже и каждый накручивает что хочет. Многие этим оправдывают курение, алкоголь и другие «радости». Вот как всегда, народ любит все перевернуть с ног на голову. А тут еще и новомодное словцо подвернулось. К слову, опять же, как и со SWAG’ом, многие даже и расшифровки не знают.
Примеры картинок, которые демонстрируют понимание YOLO среди подростков из группы вконтакте:
Ну и какой образ у вас формируется? Свободолюбивый человек, курящий, в татушках и постоянно тусующийся. Нужно ведь успеть все попробовать и жить в свое удовольствие. Но только это не верно! YOLO не подразумевает путь саморазрушения!
Истинное значение
Claypot Tofu Сайгон Экспресс
Пещера Халонг во Вьетнаме
Фотографии взяты с сайта bigpicture.ru.
Вот таким, в моем понимании, должно быть YOLO. Когда ты живешь и получаешь удовольствие от жизни, где бы ты не находился, не отвлекаясь на проблемы. Хочешь поехать куда-то, так не откладывай это на завтра, ведь пожить для себя это не преступление.
Теперь вы знаете, что такое YOLO, а также понимаете его истинное значение, а не выдуманное в социальных сетях.
Комментарии:
Говнарям больше нравится вариант «упс, опять обблевался, с кем не бывает, YOLO =)»
Инвесторы говорят про FOMO и YOLO. Что это вообще такое?
Миллениалы и зумеры устанавливают новые правила жизни в самых разных сферах, и инвестиций это тоже касается. С начала 2010-х в соцсетях англоговорящих стран появились новые акронимы (сокращения), придуманные молодым поколением, — FOMO и YOLO.
Изначально они к финансам отношения не имели. Оба выражения передают эмоциональные состояния, когда поведение человека основано на каком-то импульсе, а не на доводах разума.
FOMO — сокращение от Fear of Missing Out (англ. — «страх упущенной выгоды»). Используется в соответствии с прямым значением этого выражения — в ситуациях, когда страх упустить возможности, какие-либо ценные ресурсы становится причиной определенных действий.
YOLO — сокращение от You Only Live Once (англ. — «живем только раз»). Применяется, когда человек действует в соответствии с потребностью получить желаемое прямо сейчас, не откладывая это на будущее, даже если позже это нечто будет обладать большей ценностью.
Изначально акронимы стали популярны в англоязычных Twitter и Facebook. FOMO и YOLO чаще использовались в качестве хештегов, чтобы выразить свое мнение по поводу различных ситуаций — от отношения к работе до жизненной философии.
Если YOLO распространен среди юной аудитории соцсетей и употребляется в более позитивном контексте, то FOMO чаще используется возрастными пользователями интернета и отражает тревожное состояние и необходимость сложного выбора.
YOLO, FOMO и деньги
Оба выражения со временем распространились на мир инвестиций и финансов. Деньги сами по себе и как средство получения других благ зачастую смешаны с эмоциями и нерациональными желаниями — поэтому такие сложные психологические состояния стало удобно описывать лаконичными YOLO и FOMO.
Миллениалы не слишком заботятся о своем будущем, предпочитая использовать ресурсы в настоящем. Примерно у 66% работающих миллениалов нет сбережений ко времени выхода на пенсию, они не тратят и не откладывают деньги на квартиры, предпочитая арендовать. Поэтому только у 47% из них к пенсии будет свое жилье, подсчитали в исследовательской организации The Resolution Foundation.
Это одновременно и YOLO, и FOMO-эффект: они живут сегодняшним днем, поэтому все тратят (YOLO); делают они так потому, что боятся пропустить все те блага, которые можно получить за деньги (FOMO).
В мире инвестиций FOMO- и YOLO-эффекты работают аналогичным образом. Когда инвестор принимает решение о вложениях на основе эмоций — на фоне не обеспеченного фундаментальными показателями роста акций, медийной популярности компании или ее первых лиц, то действует из страха остаться в стороне, пока другие получают прибыль, — это FOMO.
Если человек, заработав на фондовом рынке, не реинвестирует свои средства, а тратит на дорогие и, возможно, ненужные вещи, — это YOLO.
Несмотря на то что многие из них не обладали достаточными знаниями о фондовом рынке, они начали инвестировать, не думая о последствиях.
Отражением этих процессов является финтех Robinhood, который зафиксировал появление более 3 млн новых аккаунтов за время пандемии. Большинство из этих инвесторов были новичками на бирже, поэтому позже, когда они потеряли деньги и столкнулись со сложностями при использовании приложения, на стартап посыпались жалобы и штрафы от SEC.
«Американские тинейджеры просто не знают, что русские живут так испокон веков. Только у нас это «авось» называется. Обыкновенный русский авось. Вот как объяснить русскому человеку необходимость личного финансового планирования, формирования собственного капитала и управления им? Это крайне трудно», — говорит Владимир Верещак.
По его словам, клиенты довольно часто нарушают согласованный ранее личный финансовый план, так как им хочется попробовать себя в трейдинге и рискованных активах. Новости об успехах в криптовалютах, сделках с IPO или отдельных акциях вызывают у них желание присоединиться к этому процессу, так как кажется, что «нечто большое» проходит мимо, говорит Верещак.
Жертвы FOMO и YOLO: кто они?
Оба этих принципа могут быть опасны для личных финансов и инвестиций. Финансовый консультант Наталья Смирнова считает, что FOMO и YOLO приводят к неконтролируемому потреблению и отсутствию инвестиций и сбережений на черный день.
При этом в стране такое поведение характерно не только для миллениалов, но и для всех тех, кто в осознанном возрасте потерял свои сбережения в период перестройки, денежных реформ, дефолта 1998-го, банковского кризиса 2004-го, кризиса 2008-го.
Эти люди считают, что лучше успеть насладиться деньгами сейчас, чем отложить их и потом потерять, говорит Наталья Смирнова. Усиливать такие эмоциональные шаги может любой негативный опыт — от неудачных инвестиций в новостройку до банального мошенничества.
По словам Смирновой, FOMO и YOLO чаще всего проявляется у людей, склонных к инфантильности, и тех, кто не зарабатывает самостоятельно: богатых наследников, жен или мужей обеспеченных супругов.
Обобщенный портрет последователя принципов FOMO и YOLO, по мнению Натальи Смирновой, может обладать следующими характеристиками:
Сейчас молодые инвесторы с синдромом упущенной выгоды (FOMO) покупают акции Tesla не из-за дивидендов, а потому что «Маск прикольный», говорит он. Это приводит к тому, что меняется философия фондового рынка, бурный рост компании получают на хайпе, а не из-за реальных финансовых результатов.
Как защититься от FOMO- и YOLO-мышления?
Чтобы не стать жертвой FOMO и YOLO, нужно понимать свои жизненные потребности и стремиться к планированию будущего, советуют финансовые консультанты.
«Чтобы спокойно заниматься творчеством, проектами, я подсчитала необходимый для этого пассивный доход. Дальше я подсчитала, какой объем капитала нужен, чтобы получать при умеренной инвестиционной стратегии необходимую сумму в год. Ну и далее — встала на путь накопления этого капитала. К инвестициям на будущее надо относиться именно как к вкладу в создание свободы, а не как к ее урезанию здесь и сейчас», — говорит Наталья Смирнова.
«Главные помощники в инвестициях — опыт и время. Так как YOLO и FOMO в основном подвержены молодые люди в возрасте 18–32 лет, то потерянные деньги и время научат их принимать решения не на эмоциональной волне или по рекомендациям из соцсетей, а с холодным рассудком, используя аналитические данные. Основной совет прост: перестать слушать инфошум и вести себя осознанно. Как в инвестициях, так и в жизни», — считает Игорь Файнман.
В ответ на усталость от крайностей YOLO и FOMO появился новый подход к жизни — JOMO (Joy of Missing Out) — «радость от упущенных возможностей». Он может быть и эмоциональной реакцией организма на выгорание после YOLO и FOMO, и более сбалансированным жизненным принципом. JOMO учит прислушиваться к себе и жить осознанно, поступая в соответствии со своими ценностями.
Больше новостей об инвестициях вы найдете в нашем телеграм-канале «Сам ты инвестор!».
Алгоритм YOLO простым языком
Jun 24 · 4 min read
Что такое YOLO? Эта аббревиатура расшифровывается как “You Only Look Once” (“Стоит только раз взглянуть”). YOLO — современный алгоритм глубокого обучения, который широко используется для обнаружения объектов. Он был разработан Джозефом Редмоном и Али Фархади в 2016 году.
Чем YOLO отличается от других алгоритмов глубокого обучения для обнаружения объектов?
Основное отличие YOLO от других алгоритмов сверточной нейронно й сети (CNN), используемых для обнаружения объектов, заключается в том, что он очень быстро опознает объекты в режиме реального времени. Принцип работы YOLO подразумевает ввод сразу всего изображения, которое проходит через сверточную нейронную сеть только один раз. Именно поэтому он называется “Стоит только раз взглянуть”. В других алгоритмах этот процесс происходит многократно, то есть изображение проходит через CNN снова и снова. Так что YOLO обладает преимуществом высокоскоростного обнаружения объектов, чем не могут похвастать другие алгоритмы.
Представьте себе автомобиль, оснащенный функцией самостоятельного вождения, который использует обычный алгоритм обнаружения объектов сети CNN. Если алгоритм заметит впереди препятствие, машина затормозит сама. Но в данном случае все будет происходить медленно, и алгоритм увидит объект-препятствие довольно поздно. Это может привести к аварии. Теперь представьте себе ту же ситуацию с YOLO. На этот раз автомобиль оснащен алгоритмом YOLO и остановится как раз вовремя, так как очень быстро обнаружит препятствие в режиме реального времени.
Как работает YOLO?
Алгоритм YOLO был обучен на определенном типе набора данных, который состоит из 80 различных типов классов (см. ниже):
Алгоритм YOLO способен обнаруживать все эти 80 видов объектов на изображении. Он также может быть специально обучен, чтобы легко находить новые объекты. Набор данных, который использовался для обучения обнаружения 80 классов объектов, известен под названием “Coco”.
Мы расскажем о работе алгоритма YOLO очень кратко и просто, так как эта статья предназначена для новичков!
Сначала изображение, которое вводится в сеть, разделяется на секции. Возьмем для примера матрицу-сетку 3×3.
Итак, этому изображению был дан формат матрицы размером 3×3. На данном фото в общей сложности 9 секций. Каждая из них имеет определенные параметры. Если мы допустим, что общее количество классов, которые мы ищем на рисунке, равно 3 (предположительно это будут человек, автомобиль и самолет), то каждая секция будет иметь в общей сложности 8 параметров. Но почему именно 8? Потому что каждая секция содержит 5 параметров и три параметра класса. Эти 5 параметров перечислены ниже:
Чтобы комментировать эти параметры, нам нужно знать, что такое ограничивающие рамки. При подготовке обучающих данных мы должны выделить объект, который хотим обнаружить на изображении. Делаем мы это с помощью ограничивающих рамок. Как правило, они представляют собой квадраты или прямоугольники, которые выделяют определенную часть изображения (как на примере ниже):
В данном случае нам нужно обнаружить автомобили, поэтому мы помещаем ограничивающие рамки вокруг всех автомобилей, присутствующих на нем. Теперь нам необходимо узнать значения 5 параметров в каждой секции в матрице 3×3. Ниже представлена фотография отдельной секции, в которой есть автомобиль.
Красная точка в середине обозначает центр ограничивающей рамки. Горизонтальная синяя стрелка — это параметр “tx” (расстояние между красной точкой и самой левой частью этой секции). Вертикальная синяя стрелка — это “ty” (расстояние между красной точкой и самой верхней частью секции). Горизонтальная белая стрелка — это ширина ограничительной рамки по отношению к секции (параметр “tw”). Вертикальная белая стрелка обозначает высоту ограничивающей рамки по отношению к секции и указывается как “th”.
Параметр “po”, также известный как индекс объектности, выражает вероятность успешного обнаружения объекта в ограничивающей рамке. И да, вы угадали, значение 0,99 на первой картинке этой статьи— индекс объектности, указывающий на наличие лица в ограничивающей рамке, которая его окружает. Индексы “p1”, “p2” и “p3” говорят нам о вероятности того, что этот объект окажется человеком, автомобилем или самолетом соответственно. Все 9 секций, присутствующих в матрице 3×3, имеют эти 8 параметров, и именно они помогают алгоритму YOLO точно обнаружить объект.
Заключение
Работа алгоритма YOLO по корректному обнаружению объектов не обходится без некоторых сложностей. Здесь мы просто хотели дать вам краткое представление о его функционировании простым языком.
Как работает Object Tracking на YOLO и DeepSort
Object Tracking — очень интересное направление, которое изучается и эволюционирует не первый десяток лет. Сейчас многие разработки в этой области построены на глубоком обучении, которое имеет преимущество над стандартными алгоритмами, так как нейронные сети могут аппроксимировать функции зачастую лучше.
Но как именно работает Object Tracking? Есть множество Deep Learning решений для этой задачи, и сегодня я хочу рассказать о распространенном решении и о математике, которая стоит за ним.
Итак, в этой статье я попробую простыми словами и формулами рассказать про:
YOLO — отличный object detector
Сразу нужно сделать очень важную пометку, которую нужно запомнить — Object Detection это не Object Tracking. Для многих это не будет новостью, но часто люди путают эти понятия. Простыми словами:
Object Detection — это просто определение объектов на картинке/кадре. То есть алгоритм или нейронная сеть определяют объект и записывают его позицию и bounding boxes (параметры прямоугольников вокруг объектов). Пока что речи о других кадрах не идет, и алгоритм работает только с одним.
Object Tracking — здесь совсем другое дело. Здесь задача не просто определить объекты на кадре, но еще и связать информацию с предыдущих кадров таким образом, чтобы не терять объект, или сделать его уникальным.
То есть Object Tracker включает в себя Object Detection для определения объектов, и другие алгоритмы для понимания какой объект на новом кадре принадлежит какому из предыдущего кадра.
Поэтому Object Detection играет очень важную роль в задаче трэкинга.
Почему YOLO? Да потому что YOLO считается эффективнее многих других алгоритмов для определения объектов. Вот небольшой график для сравнения от создателей YOLO:
Здесь мы рассматриваем YOLOv3-4, поскольку это самые последние версии и они эффективнее предыдущих.
Архитектуры разных Object Detectors
Итак, существует несколько архитектур нейронных сетей, созданных для определения объектов. Они в основном разделяются на «двухуровневые», такие как RCNN, fast RCNN и faster RCNN, и «одноуровневые», такие как YOLO.
«Двухуровневые» нейронные сети, перечисленные выше, используют так называемые регионы на картинке, чтобы определить, находится ли в этом регионе определенный объект.
Обычно это выглядит так (для faster RCNN, которая является самой быстрой из перечисленных двухуровневых систем):
Но в этих нейронных сетях есть две ключевые проблемы: они не смотрят на картинку «полностью», а только на отдельные регионы, и они относительно медленные.
В чем же крутость YOLO? В том, что эта архитектура не имеет двух проблем свыше, и она доказала неоднократно свою эффективность.
Вообще архитектура YOLO в первых блоках не сильно отличается по «логике блоков» от других детекторов, то есть на вход подается картинка, дальше создаются feature maps с помощью CNN (правда в YOLO используется своя CNN под названием Darknet-53), затем эти feature maps определенным образом анализируются (об этом чуть позже), выдавая на выходе позиции и размеры bounding boxes и классы, которым они принадлежат.
Но что такое Neck, Dense Prediction и Sparse Prediction?
С Sparse Prediction мы разобрались немного ранее — это просто повторение того, как двухуровневые алгоритмы работают: определяют по отдельности регионы и затем классифицируют эти регионы.
Neck (или «шея») — это отдельный блок, который создан для того, чтобы агрегировать информацию от отдельных слоев с предыдущих блоков (как показано на рисунке выше) для увеличения аккуратности предсказания. Если Вас заинтересовало это — можете погуглить термины «Path Aggregation Network», «Spatial Attention Module» и «Spatial Pyramid Pooling».
И, наконец, то, что отличает YOLO от всех других архитектур — блок под названием (на нашей картинке выше) Dense Prediction. На нем мы сфокусируемся чуть сильнее, потому что это очень интересное решение, которое как раз позволило YOLO вырваться в лидеры по эффективности определения объектов.
YOLO (You Only Look Once) несет в себе философию смотреть на картинку один раз, и за этот один просмотр (то есть один прогон картинки через одну нейронную сеть) делать все необходимые определения объектов. Как это происходит?
Итак, на выходе от работы YOLO мы обычно хотим вот это:
Что делает YOLO когда учится на данных (простыми словами):
Шаг 1: Обычно картинки решейпят под размер 416×416 перед началом обучения нейронной сети, чтобы можно было их подавать батчами (для ускорения обучения).
Шаг 2: Делим картинку (пока что мысленно) на клетки размером axa. В YOLOv3-4 принято делить на клетки размером 13×13 (о различных скейлах поговорим чуть позже, чтобы было понятнее).
Теперь фокусируемся на эти клеточках, на которые мы разделили картинку/кадр. Такие клетки, которые называются grid cells, лежат в основе идеи YOLO. Каждая клетка является «якорем», к которому прикрепляются bounding boxes. То есть вокруг клетки рисуются несколько прямоугольников для определения объекта (поскольку непонятно, какой формы прямоугольник будет наиболее подходящим, их рисуют сразу несколько и разных форм), и их позиции, ширина и высота вычисляются относительно центра этой клетки.
Как же рисуются эти прямоугольники (bounding boxes) вокруг клетки? Как определяется их размер и позиция? Здесь в борьбу вступает техника anchor boxes (в переводе — якорные коробки, или «якорные прямоугольники»). Они задаются в самом начале либо самим пользователем, либо их размеры определяются исходя из размеров bounding boxes, которые есть в датасете, на котором будет тренироваться YOLO (используется K-means clustering и IoU для определения самых подходящих размеров). Обычно задают порядка 3 различных anchor boxes, которые будут нарисованы вокруг (или внутри) одной клетки:
Зачем это сделано? Сейчас все будет понятно, так как мы обсудим то, как YOLO обучается.
Шаг 3. Картинка из датасета прогоняется через нашу нейронную сеть (заметим, что кроме картинки в тренировочном датасете у нас должны быть определенны позиции и размеры настоящих bounding boxes для объектов, которые есть на ней. Это называется «аннотация» и делается это в основном вручную).
Давайте теперь подумаем, что нам нужно получить на выходе.
Для каждой клетки, нам нужно понять две принципиальные вещи:
1. На выходе для каждой клетки мы хотим получить:
2. Output должен включать в себя вот такие параметры:
Как определяется objectness? На самом деле этот параметр определяется с помощью метрики IoU во время обучения. Метрика IoU работает так:
В начале Вы можете выставить порог для этой метрики, и если Ваш предсказанный bounding box будет выше этого порога, то у него будет objectness равной единице, а все остальные bounding boxes, у которых objectness ниже, будут исключены. Эта величина objectness понадобится нам, когда мы будем считать общий confidence score (на сколько мы уверены, что это именно нужный нам объект расположен внутри предсказанного прямоугольника) у каждого определенного объекта.
А теперь начинается самое интересное. Представим, что мы создатели YOLO и нам нужно натренировать ее на то, чтобы распознавать людей на кадре/картинке. Мы подаем картинку из датасета в YOLO, там происходит feature extraction в начале, а в конце у нас получается CNN слой, который рассказывает нам о всех клеточках, на которые мы «разделили» нашу картинку. И если этот слой рассказывает нам «неправду» о клеточках на картинке, то у нас должен быть большой Loss, чтобы потом его уменьшать при подаче в нейронную сеть следующих картинок.
Чтобы было совсем понятно, есть очень простая схема с тем, как YOLO создает этот последний слой:
Как мы видим из картинки, этот слой, размером 13×13 (для картинок изначального размера 416×416) для того, чтобы рассказывать про «каждую клетку» на картинке. Из этого последнего слоя и достается информация, которую мы хотим.
YOLO предсказывает 5 параметров (для каждого anchor box для определенной клетки):
Чтобы было легче понять, есть хорошая визуализация на эту тему:
Как можно понять их этой картинки, задача YOLO — максимально точно предсказать эти параметры, чтобы максимально точно определять объект на картинке. А confidence score, который определяется для каждого предсказанного bounding box, является неким фильтром для того, чтобы отсеять совсем неточные предсказания. Для каждого предсказанного bounding box мы умножаем его IoU на вероятность того, что это определенный объект (вероятностное распределение рассчитывается во время обучения нейронной сети), берем лучшую вероятность из всех возможных, и если число после умножения превышает определенный порог, то мы можем оставить этот предсказанный bounding box на картинке.
Дальше, когда у нас остались только предсказанные bounding boxes с высоким confidence score, наши предсказания (если их визуализировать) могут выглядеть примерно вот так:
Мы можем теперь использовать технику NMS (non-max suppression), чтобы отфильтровать bounding boxes таким образом, чтобы для одного объекта был только один предсказанный bounding box.
Нужно также знать, что YOLOv3-4 предсказывают на 3-х разных скейлах. То есть картинка делится на 64 grid cells, на 256 клеток и на 1024 клетки, чтобы также видеть маленькие объекты. Для каждой группы клеток алгоритм повторяет необходимые действия во время предсказания/обучения, которые были описаны сверху.
В YOLOv4 было использовано много техник для увеличения точности модели без сильной потери скорости. Но для самого предсказания оставили Dense Prediction таким же, как и у YOLOv3. Если Вы интересуетесь тем, что же такого магического сделали авторы, чтобы поднять так точность не теряя скорости, есть отличная статья, написанная про YOLOv4.
Надеюсь мне удалось немного донести то, как работает YOLO в целом (точнее последние две версии, то есть YOLOv3 и YOLOv4), и в Вас это пробудит желание воспользоваться этой моделью в будущем, или узнать про ее работу чуть подробнее.
Раз мы разобрались с, пожалуй, лучшей нейронной сетью для Object Detection (если оценивать скорость/качество), давайте наконец перейдем к тому, как же нам связывать информацию о наших определенных YOLO объектов между кадрами видео. Как программа может понимать, что человек на предыдущем кадре — это тот же человек, что и на новом?
Deep SORT
Для понимания этой технологии, следует сначала разобраться с парой математических аспектов — расстояние Махалонобиса и фильтр Калмана.
Рассмотрим очень простой пример, чтобы интуитивно понять, что такое расстояние Махолонобиса и зачем оно нужно. Многим, наверное, известно, что такое евклидово расстояние. Обычно, это расстояние от одной точки до другой в евклидовом пространстве:
Допустим, у нас есть две переменные — X1 и X2. Для каждой из них у нас есть много измерений.
Теперь, допустим, у нас появилось 2 новых измерения:
Как понять, какое из этих двух значений наиболее подходит для нашего распределения? На глаз все очевидно — точка 2 нам подходит. Но вот евклидово расстояние до среднего значения у обоих точек одинаково. Соответственно, простое евклидово расстояние до среднего значения нам не подойдет.
Как мы видим из картинки Выше, переменные между собой коррелируют, и довольно сильно. Если бы они не коррелировали между собой, или коррелировали намного меньше, мы могли бы закрыть глаза и применить евклидово расстояние для определенных задач, но здесь нам нужно сделать поправку на корреляцию и принять ее во внимание.
С этим как раз справляется расстояние Махалонобиса. Поскольку в обычно датасетах переменных больше чем двух, вместо корреляции мы будем использовать ковариационную матрицу:
Что на самом деле делает расстояние Махалонобиса:
Давайте разберемся, что означают составляющие нашей формулы:
Не будем пожалуй вдаваться в детали линейной алгебры, все что нам следует понять — мы измеряем расстояние между точками таким образом, чтобы принять во внимание дисперсию наших переменных и ковариацию между ними.
Чтобы понять, что это крутая, проверенная штука, которая может применяться в очень многих областях, достаточно знать, что фильтр Калмана применялся в 1960-х. Да-да, я намекаю именно на это — полет на Луну. Он применялся там в нескольких местах, включая работу с траекторий полета туда и обратно. Фильтр Калмана также часто применяется в анализе временных рядов на финансовых рынках, в анализе показателей различных датчиков на заводах, предприятиях и много где еще. Надеюсь, мне удалось вас немного заинтриговать и мы вкратце опишем фильтр Калмана и как он работает. Я также советую прочитать вот эту статью на Хабре, если Вы хотите узнать о нем подробнее.
Мы разберем сейчас одномерный пример, чтобы просто понять как работает фильтр Калмана для одной переменной. Для нескольких переменных алгоритм никак не отличается, правда там будут задействованы матрицы, о которых я кратко упомяну в процессе.
Допустим у нас есть термометр и чашка с водой, температуру которой мы хотим измерить. У термометра есть своя погрешность в 4 градуса по Цельсию. Допустим, настоящая температура воды в чашке порядка 72 градусов.
Фильтр Калмана считает 3 принципиально важные вещи:
1) Усиление Калмана (Kalman Gain):
Сразу прошу прощения за картинки, у Хабра какие-то проблемы с формулами (или я не до конца разобрался почему они у меня не отображаются).
2) Оцениваем значение нужной нам переменной на ЭТОМ этапе, с учетом посчитанного нами усиления Калмана и показаний с датчиков (в нашем случае, показание термометра), а также значений с предыдущего этапа, который происходил в прошлом.
3) Оцениваем НОВУЮ ошибку (неопределенность), чтобы применить ее на следующем этапе:
Таким образом, весь алгоритм может выглядеть вот так:
Итак, допустим мы задали изначальную температуру 69 градусов (прикинули примерно), с ошибкой в 2 градуса. Тогда, зная, что у термометра погрешность примерно 4 градуса (ага, супер точный термометр, ну это в моей Вселенной), наше значение KG по формуле (1) будет равно 2/(2+4) = 0.33. Дальше мы можем легко измерить наше новое значение воды (более точное), вставив термометр в воду и померив температуру. Получилось 70 градусов (допустим), и теперь мы можем более точно оценить температуру воды в стакане. Она будет равна по формуле (2), где нам теперь известно все, 68+0.33(70-68)=68.66. А наша новая ошибка по формуле (3) будет равна (1-0.33)2 = 1.32. Теперь на следующих шагах мы будем применять соответсвенно вычисленные нами новые значения для ошибки, температуры воды, и будем смотреть на новые показания прибора, когда мы его заново опустим в воду. График будет выглядеть примерно вот так:
Это потрясающе, как фильтр Калмана может избавлять нас от шума и помогать находить настоящее значение!
Если же у нас есть несколько величин, которые мы хотим использовать для предсказания, то мы будем использовать матрицы, а алгоритм не поменяется, правда немного изменится то, как мы считаем определенные величины (об этом вы можете прочитать в разных постах на Хабре о фильтре Калмана, одну из них я прикреплял выше).
DeepSORT — наконец-то!
Итак, мы теперь знаем, что такое фильтр Калмана и расстояние Махалонобиса. Технология DeepSORT просто связывает эти два понятия между собой для того, чтобы переносить информацию от одного кадра к другому, и добавляет новую метрику, под названием appearance. Сначала с помощью object detection определяются позиция, размер и класс одного bounding box. Потом можно в принципе применить Венгерский алгоритм, чтобы связать определенные объекты с ID объектов, которые раньше были на кадре и отслеживаются с помощью фильтров Калмана — и все будет супер, как в оригинальном SORT. Но технология DeepSORT позволяет улучшить точность определения и уменьшить количество переключений между объектами, когда, допустим, один человек на кадре загораживает ненадолго другого, и теперь человек, которого загородили, считается новым объектом. Как она это делает?
Она добавляет крутой элемент в свою работу — так называемый «внешний вид» людей, которые появляются на кадре (appearance). Этот внешний вид был натренирован отдельной нейронной сетью, которая была создана авторами DeepSORT. Они использовали порядка 1,100,000 картинок с более 1000 разных людей, чтобы нейронная сеть правильно предсказывала В оригинальном SORT есть проблема — так как там не используется внешний вид объекта, то по факту, когда объект что-то закрывает на несколько кадров (например, другой человек или колона внутри здания), то алгоритм затем присваивает другой ID этому человеку — в следствие чего так называемая «память» об объектах у оригинального SORT довольно краткосрочная.
Итак, теперь объекты имеют два свойства — их динамика движения и их внешний вид. Для динамики у нас есть показатели, которые фильтруются и предсказываются с помощью фильтра Калмана — (u,v,a,h,u’,v’,a’,h’), где u,v — это позиция предсказанного прямоугольника по X и Y, a — это соотношение сторон предсказанного прямоугольника (aspect ratio), h — высота прямоугольника, ну и производные по каждой величине. Для внешнего вида тренировали нейронную сеть, которая имела структуру:
И в конце выдавала feature vector, размером 128×1. А дальше, вместо того, чтобы считать дистанцию между определенными объектами с помощью YOLO, и объектами, за которыми мы уже следили на кадре, а потом приписывать определенный ID просто с помощью расстояния Махалонобиса, авторы создали новую метрику для подсчета расстояния, которая включает в себя как предсказания с помощью фильтров Калмана, так и «косинусовое расстояние» (cosine distance), как называют его иначе, коэффициент Отиаи.
В итоге расстояние от определенного YOLO объекта до предсказанного фильтром Калмана объекта (или объекта, который уже есть в числе тех, который наблюдался на предыдущих кадрах) равно:
Где Da — это дистанция по внешней схожести, а Dk — расстояние Махалонобиса. Дальше эта гибридная дистанция применяется в Венгерском алгоритме, чтобы как раз правильно отсортировать определенные объекты с имеющимися ID.
Таким образом, простая дополнительная метрика Da помогла создать новый, элегантный алгоритм DeepSORT, который применяется во многих проблемах и является довольно популярным в задаче Object Tracking.
Статья получилась довольно увесистой, спасибо тем, кто дочитал до конца! Надеюсь, мне удалось рассказать что-то новое и помочь Вам в понимании того, как работает Object Tracking на YOLO и DeepSORT.