На основе различных современных архитектур обнаружения объектов

Оглавление

  1. Мотивация
  2. Понимание дизайна YOLO
  3. Специальная модель: дизайн
  4. Тренировки и выступления
  5. Заключение и замечания
  6. "Использованная литература"

1.0: Мотивация

Сверточные нейронные сети - это нейронные сети с разреженными связями, предназначенные для обработки структурированных данных. Первоначально концептуально разработанные в конце 1960-х годов, они были смоделированы по образцу зрительной коры головного мозга кошек [1], а в конце 1980-х годов были разработаны и протестированы для распознавания изображений. Это положило начало области компьютерного зрения, поскольку раньше не было эффективного способа работы с изображениями. Одной из первых задач, выполняемых CNN, была классификация изображений, например, работа Яна Лекуна в 1989 году [2] по классификации рукописных цифр, набор данных которой позже стал печально известным набором данных MNIST-digits.

С годами, когда вычислительные мощности росли в геометрической прогрессии, все более сложные задачи решались с помощью все более сложных архитектур CNN. Одна из задач выходит за рамки распознавания объектов и направлена ​​на локализацию (прогнозирование местоположения и размера объекта на изображении) объекта. Хотя это не звучит намного сложнее, чем распознавание объектов, это было областью интереса в сообществе компьютерного зрения в течение многих лет, принося много успехов и неудач. Ранние попытки, такие как семейство сверточных сетей R-CNN, использовали многоэтапный подход, обычно с классификационной сетью в сочетании с алгоритмом предложения региона для локализации [3]. Позже сети, подобные семейству YOLO, выполняли локализацию и классификацию объектов с помощью одной свертки, что привело к значительному ускорению, настолько, что стало возможным обнаружение в реальном времени. Фактически, сеть обнаружения объектов в этой статье во многом вдохновлена ​​оригинальным дизайном YOLO. Цель моего проекта не в том, чтобы превзойти архитектуру YOLO с точки зрения точности прогнозов, а в том, чтобы исследовать и решать проблему обнаружения объектов путем создания собственной модели самостоятельно.

2.0: Понимание дизайна YOLO

Для построения сети локализации и обнаружения объектов я черпал вдохновение в одной из самых известных нейронных сетей для этой цели. YOLO или You Only Look Once, как следует из названия, представляет собой однопроходную сверточную нейронную сеть, в которой прогноз создается с помощью одной сверточной модели, в отличие от Семейство многоэтапных нейронных сетей R-CNN, в котором в дополнение к CNN есть этап предложения региона. Оригинальная статья YOLO [4] была написана в 2015 году, и с тех пор было внесено множество улучшений, а последняя версия, YOLOv5, была выпущена в июне 2020 года. Хотя мой дизайн не будет точной копией YOLO, в целом концепция все еще остается - модель является сквозной (другими словами, это однопроходный дизайн), а на выходе - тензор 3 ранга (тензор с формой (x, y, z)) вместо вектора, используемого большинство классификаторов. Схема сети YOLO показана ниже:

Выходной слой состоит из 7 × 7 = 49 ячеек, и каждая ячейка соответствует месту на исходном изображении. В каждой ячейке YOLO предсказывает 30 характеристик. Количество функций, предсказываемых каждой ячейкой, представлено формулой 5B + C, где B - это количество ограничивающих рамок для каждой ячейки, а C - количество классов. Каждая ограничивающая рамка состоит из 5 характеристик: x, y, ширины и высоты рамки, а также уровня достоверности. YOLO прогнозирует 2 ограничивающих прямоугольника на ячейку, поэтому у нас есть 10 выходных функций, предназначенных для ограничивающих прямоугольников. Остальные 20 функций представляют количество классов в наборе данных Pascal VOC. См. Рисунок ниже для получения более подробной информации.

3.0: Пользовательская модель: дизайн

В том же году было опубликовано YOLO, были опубликованы и другие прорывные методы, такие как Batch Normalization и Residual connections, поэтому они были включены в более поздние версии YOLO. В то время как дизайн YOLO основан на традиционном наложении слоев свертки и максимального объединения, в моем дизайне реализованы некоторые из этих атрибутов.

Моя модель состоит из 6 основных блоков - первые два блока состоят из 3 слоев свертки, слоя пакетной нормализации и, наконец, слоя объединения, а следующие 3 блока заменяют слои свертки начальными слоями для высокоуровневого извлечения признаков. Эти два блока также содержат остаточные пропускные соединения, позволяющие активациям первого уровня обходить второй уровень, напрямую комбинируясь с выводом свертки третьего уровня. Эти остаточные связи были исследованы Каймингом Хе и др. [5], и было показано, что они значительно уменьшают эффекты исчезающих / взрывающихся градиентов, что может происходить в очень глубоких нейронных сетях. Наконец, сеть завершается выходным блоком, который выводит тензор 3 ранга, аналогичный YOLO.

3.1: Извлечение функций низкого уровня

Первые два блока похожи на другие популярные сверточные архитектуры - они используют сверточные слои для извлечения низкоуровневых функций из изображения, таких как края, диагонали, кривые, цвет и т. Д.

Следует отметить использование блоков SeparableConv2D вместо обычного Conv2D. Слои разделенной по глубине свертки разделяют обычную операцию свертки на этап глубинной свертки, а также этап точечной свертки, что значительно сокращает количество требуемых вычислений. Другими словами, разделимые по глубине сверточные слои вычисляют результат намного быстрее, чем традиционный сверточный слой.

Первые два блока также включают пакетную нормализацию между третьим сверточным слоем и его функцией активации, чтобы уменьшить внутренний ковариантный сдвиг, а также обеспечить эффекты регуляризации. Цель первых двух блоков - изучить скрытое пространство нижнего уровня; такие функции, как края, кривые, углы, области сплошного цвета и т. д., поэтому я выбрал размеры ядра 7 × 7 и 5 × 5 для захвата больших блоков пикселей.

3.2: Извлечение функций высокого уровня

Следующие три блока состоят из начальных слоев [6]. Начальная архитектура представляет собой разреженную структуру нейронной сети, которая обучает несколько слоев свертки с разными размерами ядра, позволяя сети узнать, какой размер ядра лучше всего подходит для этого уровня. Слои свёртки 1 × 1 до / после используются для уменьшения размерности, что значительно увеличивает производительность начальной сети. Эта архитектура использовалась в хорошо известной модели GoogLeNet, победившей в конкурсе ILSVRC 2014.

Как и первые два блока conv, три начальных блока также используют остаточные соединения пропуска, позволяющие модели определять идеальное количество слоев. По мере того, как мы углубляемся в сеть, количество каналов увеличивается, чтобы изучать более высокоуровневые функции. Хотя это не показано на диаграммах, нелинейность ReLU используется между каждым начальным уровнем, за исключением последнего каждого блока, логиты которого из последнего начального уровня передаются в пакетную нормализацию перед переходом к слоям активации и максимального объединения.

3.3: Выходные слои

Наконец, последний слой состоит из трех операций свертки. Выходные данные достоверность и класс используют точечные фильтры (1 × 1) для вычисления выходных данных, а в разделе ограничивающая рамка используются две свертки 1 × 1. слои, расположенные между сверточным слоем 9 × 9, что позволяет выходным данным ограничивающего прямоугольника зависеть от нескольких соседних пикселей. Эти три выхода секции после конкатенации становятся тензором 13 × 13 × 1005. Начиная со слоя уверенности, вычисляется одна карта признаков, в результате чего получается тензор 13 × 13 × 1. Уровень достоверности представляет наличие объекта в одной из 169 ячеек. Если какая-либо ячейка содержит центр объекта, эта ячейка будет иметь значение 1. Каждая ячейка ограничена предсказанием только одного объекта. Уровень уверенности завершается сигмовидной активацией перед объединением. Цель уровня достоверности - определить, есть ли в ячейке объект. Это будет использоваться во время вывода, где мы можем легко выбрать ограничивающие прямоугольники и прогноз класса тогда и только тогда, когда ячейка содержит объект.

Следующий слой свертки предсказывает координаты ограничивающей рамки, выводя x, y, ширину и высоту для каждой ячейки. Все эти значения масштабируются в диапазоне от 0 до 1, где 1 соответствует длине всей стороны изображения. Слой BBOX выводит тензор формы 13 × 13 × 4, который предполагает, что каждая ячейка получит прогноз ограничивающего прямоугольника, независимо от того, присутствует ли объект или нет. Здесь и появляется результат достоверности - мы принимаем координаты ограничивающего прямоугольника только если оценка достоверности превышает определенный порог. Это предотвратит переполнение наших выходных прогнозов ограничивающими прямоугольниками из каждой ячейки. Логиты используются без учета нелинейностей с целью регрессии.

Последние 1000 каналов посвящены прогнозам классов. Каждая ячейка будет предсказывать одноразовое кодирование 1000 классов из набора данных ImageNet, если под ячейкой есть объект. Для целей прогнозирования нескольких классов по оси каналов вычисляется softmax логитов. После объединения трех выходных данных мы получаем тензор с формой 13 × 13 × 1005.

Сравнивая это с выходным YOLO, общая идея довольно похожа. Однако с YOLO выходные данные содержат намного больше каналов для ограничивающего прямоугольника, поскольку каждая ячейка предсказывает несколько прямоугольников. Необработанный вывод затем пропускается через фильтр Non-Max Suppression (NMS) для удаления лишних ограничивающих рамок. Наша модель пытается предсказать одну ограничивающую рамку на ячейку, что, хотя она может быть несколько нестабильной во время обучения, не требует использования NMS.

3.4: Функция затрат

Часто мы используем стандартные функции стоимости из библиотек машинного обучения, такие как MSE или категориальная кросс-энтропия, однако для этого «смешанного» вывода тензора нам нужно было определить пользовательскую функцию потерь. Наша функция потерь представляет собой смесь трех различных типов потерь, которые применяются к соответствующему срезу в выходном тензоре. Здесь три термина написаны на отдельных строках, чтобы их было легче различать.

Функция стоимости делится на три части, соответствующие трем частям выходного тензора. Давайте сначала определим переменные, используемые в функции стоимости:

  • λ₁, λ₂, λ₃: произвольные константы, используемые для масштабирования членов функции стоимости.
  • p: достоверность определенной ячейки.
  • S: клетки
  • x, y, w, h: расположение, а также ширина и высота ограничивающих рамок, масштабируемых в диапазоне от 0 до 1 относительно длины стороны изображения.
  • c: метка класса.

Первый член в функции стоимости вычисляет двоичную кросс-энтропийную потерю доверительного уровня. Ранее мы упоминали, что уровень достоверности предсказывает, существует ли объект в каждой ячейке. Этот член будет уговаривать сеть предсказывать 0, если метка ячейки равна 0, и предсказывать 1, если метка ячейки равна 1. Мы берем сумму по всем 169 ячейкам, а затем умножаем ее на скаляр, который будет обсуждаться позже.

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

Наконец, третий член вычисляет категориальные перекрестные энтропийные потери для 1000 классов. Еще раз, только ячейки с меткой достоверности, установленной на 1, будут оценивать его потерю. Из-за 1000 классов этот термин часто занимает больше всего времени, чтобы минимизировать его.

Каждый из этих членов умножается на скаляр λₓ. Эти скаляры регулируют относительную важность каждой секционной стоимости и получаются экспериментально. Например, если мы посчитали, что потеря классов уменьшается очень медленно, мы можем позволить модели больше сосредоточиться на сокращении потери классов за счет увеличения ее относительного веса. Несмотря на то, что общая заявленная сумма убытков больше, потеря класса в действительности будет значительно меньше. Мы использовали λ₁ = 1, λ₂ = 5 и λ₃ = 5.

4.0: Обучение и производительность

Эта модель обучалась на RTX 3090 в течение 6 дней. Изначально я был нацелен на две недели, но из-за дедлайнов пришлось рано остановиться. Хотя я планирую продолжить обучение и оптимизацию модели после публикации этой статьи, пока что модель способна делать значимые прогнозы. Иногда довольно приятно видеть, что модель возвращает точные предсказания ограничивающих прямоугольников и классов:

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

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

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

Наконец, бывают случаи, когда нейронная сеть полностью разваливается и делает прогнозы, которые иногда удивительны, а иногда забавны. В этих двух примерах как ограничивающие прямоугольники, так и классы неверны.

5.0: Заключение и примечания

В целом у этой нейронной сети есть свои сильные и слабые стороны. Я обнаружил, что он дает желаемые результаты, возможно, в 40% случаев, а в других случаях он либо допускает незначительные ошибки, либо полностью облажается. Хотя это, очевидно, не работает так же хорошо, как модели YOLO (чего не должно было быть), этот проект действительно достиг своей цели по исследованию проблем создания модели CNN для пользовательского обнаружения объектов.

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

6.0: Ссылки

[1] Д. Хубел и Т. Н. Визель, Меню списка журналов, Онлайн-библиотека Wiley. [Онлайн]. Доступно: https://doi.org/10.1113/jphysiol.1959.sp006308. [Дата обращения: 23 августа 2021 г.].

[2] Й. ЛеКун, Б. Бозер, Дж. С. Денкер, Д. Хендерсон, Р. Э. Ховард, У. Хаббард и Л. Д. Джекель, Обратное распространение, применяемое для распознавания рукописного почтового индекса. [Онлайн]. Доступно: http://yann.lecun.com/exdb/publis/pdf/lecun-89e.pdf. [Дата обращения: 23 августа 2021 г.].

[3] Р. Ганди, R-CNN, fast R-CNN, Faster R-CNN, YOLO - алгоритмы обнаружения объектов, Medium, 09 июля 2018 г. [Онлайн]. Доступно: https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e. [Дата обращения: 23 августа 2021 г.].

[4] Дж. Редмон, С. Диввала, Р. Гиршик и А. Фархади, Вы только посмотрите один раз: унифицированное обнаружение объектов в реальном времени, 8 июня 2015 г. [Онлайн]. Доступно: https://arxiv.org/pdf/1506.02640.pdf. [Дата обращения: 23 августа 2021 г.].

[5] К. Хе, Х. Чжан, С. Рен и Дж. Сан, Глубокое остаточное обучение для распознавания изображений, arXiv.org, 10 декабря 2015 г. [Онлайн]. Доступно: https://arxiv.org/abs/1512.03385. [Дата обращения: 23 августа 2021 г.].

[6] Ч. Сегеди, В. Лю, Ю. Цзя, П. Серманет, С. Рид, Д. Ангелов, Д. Эрхан, В. Ванхауке и А. Рабинович, Углубление извилин, arXiv.org, 17 сентября 2014 г. [Онлайн]. Доступно: https://arxiv.org/abs/1409.4842. [Дата обращения: 23 августа 2021 г.].