Каковы новые функции YOLO v3?

машинное обучение

Эта статья составлена ​​из статьи на медиуме: Что нового в YOLO v3?Немного удалено. Нажмите, чтобы прочитать исходный текст, вы можете перейти непосредственно к исходному тексту, вам нужно перевернуть стену!

Вы смотрите только один раз, или YOLO, — это один из самых быстрых алгоритмов обнаружения объектов. Хотя это уже не самый точный алгоритм обнаружения объектов, это очень хороший выбор, когда вам нужно обнаружение в реальном времени без слишком большой потери точности.

В первой половине 2018 года вышла третья версия YOLO, и этот пост призван объяснить изменения, внесенные в YOLO v3. Это не статья, объясняющая, что такое YOLO. Я предполагаю, что вы знаете, как работает YOLO v2. Если это не так, я предлагаю вам ознакомиться со статьей Джозефа Редмона и др., чтобы узнать, как работает YOLO.

YOLO v3: лучше, но не быстрее, сильнее

Официальное название статьи YOLO v2 — «YOLO9000: Better, Faster, Stronger», что выглядит как полезный молочный напиток для детей, а не как алгоритм обнаружения целевых объектов.

YOLO 9000 раньше был самым быстрым и одним из самых точных алгоритмов. Однако с появлением таких алгоритмов, как RetinaNet, он перестал быть точным. Тем не менее, это по-прежнему один из самых быстрых алгоритмов.

Чтобы повысить точность, YOLO v3 идет на компромисс со скоростью. В то время как более ранние версии могут работать со скоростью 45 кадров в секунду на Titan X, текущая версия работает со скоростью около 30 кадров в секунду. Это связано с повышенной сложностью базовой архитектуры Darknet.

Darknet-53

YOLO v2 использует специальную глубокую архитектуру darknet-19, изначально 19-уровневую сеть плюс 11 уровней для обнаружения объектов. YOLO v2 с 30-уровневой архитектурой часто сталкивается с проблемами при обнаружении мелких объектов. Это связано с тем, что слой уменьшает входные данные, что приводит к потере мелких деталей. Чтобы решить эту проблему, YOLO v2 использует карты объектов, которые объединяют карты объектов из предыдущих слоев для захвата объектов низкого уровня.

Однако в архитектуре YOLO v2 по-прежнему отсутствуют некоторые наиболее важные элементы, которые являются основными элементами большинства современных современных алгоритмов. Например, нет оставшихся блоков, пропусков соединений и повышения частоты дискретизации. И YOLO v3 включает их все.

Во-первых, YOLO v3 использует вариант Darknet, который изначально обучал 53-уровневую сеть на Imagenet. Затем на него укладываются 53 слоя для задач обнаружения, так что YOLO v3 имеет106-уровневая полностью сверточная базовая архитектура. Вот почему YOLO v3 медленнее, чем YOLO v2. На следующей картинке показано, как сейчас выглядит архитектура YOLO:

Обнаружение по трем шкалам

Новая архитектура может похвастаться остаточными пропускными соединениями и повышающей дискретизацией.Наиболее заметной особенностью v3 является то, что он может обнаруживать в трех разных масштабах.. YOLO — это полностью сверточная сеть, окончательный результат которой генерируется путем применения ядра 1 x 1 к карте объектов.В YOLO v3 обнаружение осуществляется путем применения ядра 1 × 1 к трем картам функций разного размера в трех разных местах в сети..

Ядро обнаружения имеет форму1 × 1 × (В × (5 + С)). Здесь B — количество ограничивающих рамок, которые может предсказать каждая ячейка на карте объектов, «5» означает 4 атрибута ограничивающей рамки и 1 достоверность объекта, а C — количество классов. В YOLO v3, обученном с помощью COCO, B = 3 и C = 80, поэтому размер ядра составляет 1 x 1 x 255. Карты объектов, сгенерированные этим ядром, имеют ту же высоту и ширину, что и предыдущие карты объектов, и обладают свойствами обнаружения по глубине, как описано выше.

Изображение получено из:blog.paper space.com/how-to-imp out…

Прежде чем идти дальше, я хотел бы отметитьШаг сети, т. е. слой, определяется как скорость, с которой он понижает дискретизацию входных данных.. В следующем примере я предполагаю, что у нас есть входное изображение размером 416 x 416.

YOLO v3 предсказывает по трем шкалам, уменьшая входное изображение с размерами 32, 16 и 8 соответственно..

Первое обнаружение осуществляется слоем 82. Для первых 81 слоя изображения уменьшаются сетью, так что 81-й слой имеет шаг 32. Если размер нашего изображения 416×416, результирующая карта объектов имеет размер 13×13. Здесь используется ядро ​​обнаружения 1 x 1, что дает нам карту признаков обнаружения 13 x 13 x 255.

Далее карта объектов из слоя 79 проходит через несколько сверточных слоев, и 2-кратная апсемплинг увеличивается до размерности 26×26. Затем эта карта объектов глубоко связана с картой объектов из слоя 61. Затем комбинированная карта признаков снова проходит через несколько сверточных слоев 1×1, чтобы объединить признаки из более ранних слоев (61). После второго обнаружения через 94-й слой генерируется карта признаков обнаружения размером 26 × 26 × 255.

Аналогичный процесс повторяется снова, при этом карта объектов из слоя 91 проходит через небольшое количество сверточных слоев, прежде чем будет глубоко связана с картой объектов из слоя 36. Как и прежде, следуют несколько сверточных слоев 1×1, чтобы объединить информацию из предыдущих слоев (36). Мы делаем последние 3 удвоения на слое 106, в результате чего получаются карты объектов размером 52 x 52 x 255.

Лучше обнаруживает меньшие целевые объекты

Различные уровни обнаружения помогают решить проблему обнаружения мелких объектов, которая является распространенной проблемой в YOLO v2. Объединение слоев повышающей дискретизации с предыдущими слоями помогает сохранить мелкие детали, что хорошо для обнаружения мелких объектов.

Слои 13 х 13 отвечают за обнаружение крупных объектов, в то время как слои 52 х 52 обнаруживают объекты меньшего размера, а слои 26 х 26 обнаруживают объекты среднего размера.

выбрать поле привязки

YOLO v3 использует в общей сложности 9 точечных ящиков. По три в каждой шкале. Если вы обучаете YOLO на своем собственном наборе данных, вам следует использовать кластеризацию K-средних для создания 9 якорей.

Затем отсортируйте якоря в порядке убывания размера. Назначьте три самые большие опорные точки на первую шкалу, следующие три опорные точки на вторую шкалу и последние три опорные точки на третью шкалу.

больше ограничивающих рамок на изображение

YOLO v3 предсказывает больше ограничивающих рамок, чем YOLO v2, если входные изображения имеют одинаковый размер. Например, при исходном разрешении 416 x 416 YOLO v2 предсказывает 13 x 13 x 5 = 845 блоков. В каждой ячейке сетки обнаруживаются 5 ящиков с использованием 5 якорей.

И YOLO v3 предсказывает коробки 3 разных масштабов. Для того же изображения размером 416 x 416 количество предсказанных блоков равно 10 647. это означаетYOLO v3 в 10 раз превышает количество ящиков, предсказанное YOLO v2. Вы можете легко представить, почему он медленнее, чем YOLO v2. В каждом масштабе каждая сетка может использовать 3 привязки для прогнозирования 3 блоков. Поскольку имеется три шкалы, общее количество используемых анкерных ящиков составляет 9, по 3 для каждой шкалы.

Изменение функции потерь

Ранее функция потерь YOLO v2 выглядела так.

Изображение из:Семья P Eddie.com/Media/files…

Я знаю, что эта формула сложная, но, пожалуйста, обратите внимание на последние три формулы. Из них первый наказывает прогнозы оценок объектов для ограничивающих рамок, отвечающих за предсказание объектов (в идеале эти оценки должны быть равны 1), второй — для ограничивающих рамок без объектов (в идеале оценки должны быть равны нулю), а последний наказывает прогнозирующие объекты. ограничивающей рамки.

Последние три члена в YOLO v2 представляют собой ошибки в квадрате, тогда как в YOLO v3 они были заменены членами кросс-энтропийной ошибки. другими словами,Достоверность объектов и предсказания классов в YOLO v3 теперь предсказываются с помощью логистической регрессии..

Когда мы обучаем детектор, для каждого поля наземной истины мы назначаем ограничивающую рамку, привязки которой больше всего перекрывают поле наземной истины.

Больше никакой классификации softmax

YOLO v3 теперь выполняет многоуровневую классификацию обнаруженных объектов на изображениях.

В раннем YOLO авторы использовали категорию softmax, принимая категорию с наивысшим баллом в качестве категории целевого объекта, содержащегося в ограничивающей рамке. Это было изменено в YOLO v3.

Классификация Softmax основана на предположении, что категории являются взаимоисключающими, просто говоря, что если объект принадлежит к одной категории, он не принадлежит к другой категории. Это отлично работает в наборе данных COCO.

Однако, когда мы имеем в наборе данныхPersonиWomenкатегории вышеприведенные предположения неверны. Вот почему авторы YOLO не использовали классификацию softmax. Вместо этого для прогнозирования оценки каждого класса используется логистическая регрессия, а для прогнозирования нескольких меток для объектов используется пороговое значение. Категории с оценками выше этого порога будут присвоены этому полю.

Ориентиры

YOLO v3 работает наравне с другими современными детекторами, такими как RetinaNet, иCOCO MAP 50 Контрольный показательСредняя скорость быстрее. Это также лучше, чем SSD и его варианты. Ниже приведено сравнение производительности, приведенное в статье.

Производительность YOLO и RetinaNet в тесте COCO 50

Но, но, тем не менее, YOLO теряет более высокое значение IoU на бенчмарке COCO для обнаружения отказа. Я не буду объяснять, как работает тест COCO, так как это выходит за рамки этой статьи, но 50 в тесте COCO 50 — это мера того, насколько хорошо прогнозируемая ограничивающая рамка выравнивается с истинной рамкой объекта. Здесь 50 соответствует 0,5 IoU. Если IoU между прогнозом и истинным блоком меньше 0,5, прогноз классифицируется как неправильно локализованный и помечается как ложноположительный.

В бенчмарках чем выше значение (например, COCO 75), тем более точно должны быть выровнены поля, чтобы не быть отклоненными метрикой оценки. Здесь YOLO превосходит RetinaNet, потому что его ограничивающие рамки не выровнены, как RetinaNet. Ниже приведена подробная таблица с дополнительными тестами.

RetinaNet превосходит YOLO в тесте COCO 75

испытать это

вы можете использовать этоРепозиторий на гитхабеПриведенный код запускает детектор на изображении или видео. Этот код требует PyTorch 0.3+, OpenCV 3 и Python 3.5. Скачав код, вы можете поэкспериментировать с ним.

разные масштабы
python detect.py --scales 1 --images imgs/img3.jpg

При обнаружении в масштабе 1 мы видим, что некоторые крупные объекты подбираются, но несколько машин пропускаются.

python detect.py --scales 2 --images imgs/img3.jpg

В масштабе 2 мы не обнаруживаем никаких целевых объектов

python detect.py --scales 3 --images imgs/img3.jpg

На самом крупном масштабе 3 видно, что обнаруживаются только мелкие целевые объекты, на масштабе 1 они не обнаруживаются.

различные входные разрешения
python detect.py --reso 320 --images imgs/imgs4.jpg

Разрешение входного изображения: 320 x 320

python detect.py --reso 416 --images imgs/imgs4.jpg

Разрешение входного изображения: 416 x 416

python detect.py --reso 608 --images imgs/imgs4.jpg

Здесь мы обнаружили на один стул меньше, чем раньше

python detect.py --reso 960 --images imgs/imgs4.jpg 

Здесь детектор ошибся: «человек» справа

Как вы можете видеть выше, большие входные разрешения не очень помогают, но они могут помочь в обнаружении изображений небольших объектов. С другой стороны, большее входное разрешение увеличивает время вывода. Это гиперпараметр, который необходимо настроить в соответствии с приложением.

Вы также можете поэкспериментировать с другими показателями, такими как размер пакета, достоверность объекта и пороговые значения NMS. Подробные инструкции находятся в файле ReadMe.

дальнейшее чтение

image