Точное обнаружение объектов в реальном времени

Источник: https://en.wikipedia.org/wiki/Object_detection Автор: Mtheiler

Я планировал прочитать основные документы по обнаружению объектов (хотя я просмотрел большинство из них, теперь я буду читать их подробно, достаточно хорошо, чтобы написать о них в блоге). Документы связаны с обнаружением объектов на основе глубокого обучения. Не стесняйтесь давать предложения или задавать сомнения, я сделаю все возможное, чтобы помочь всем. Любой, кто начинает работать в этой области, может пропустить многие из этих статей. Я также напишу приоритет/важность статей, как только прочитаю их все.
Я написал блог, принимая во внимание читателей, похожих на меня, и все еще учащихся. Хотя я постараюсь изо всех сил написать суть статьи, подробно изучив документ из различных источников, включая блоги, коды и видео, в случае, если вы обнаружите какую-либо ошибку, не стесняйтесь выделить ее или добавить комментарий в блог. Я упомянул список документов, которые я буду освещать в конце блога.

Давайте начнем :)

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

Я разделю блог на 3 части:

  1. Модель
  2. Обучение
  3. Вывод

Модель

Модель SSD можно разделить на 3 части и мы подробно обсудим каждую из них:

  1. Базовая сеть
  2. Вспомогательная сеть
  3. Сеть прогнозирования

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

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

Поля по умолчанию

SSD вводит концепцию блоков по умолчанию, которые аналогичны блокам привязки в более быстрой RCNN. Для каждой ячейки карты объектов создаются поля по умолчанию с разным масштабом и соотношением сторон. Масштаб и соотношение сторон зависят от типа объектов, которые мы хотим распознать. Например, в случае, если в нашей задаче возможны только квадратные блоки, нам понадобится только одно соотношение сторон 1:1. Поскольку SSD имеет дело с более общими наборами данных с несколькими классами, всего 5 соотношений сторон (1,2,3,1/2,1/3) используются для создания полей по умолчанию.

Для каждой вспомогательной свертки используется разная шкала. Под масштабом мы подразумеваем размер поля по умолчанию по сравнению с исходным изображением. Эта шкала также является гиперпараметром и должна корректироваться в зависимости от используемого нами набора данных. В статье SSD эта шкала была рассчитана как:

Здесь m — общее количество примененных вспомогательных сверток, а k — тот, для которого мы вычисляем масштаб. Smin и Smax, использованные в исходной статье, равны 0,2 и 0,9 соответственно. Здесь 0,2 означает, что каждое поле по умолчанию будет в 0,2 раза больше исходного изображения. Мы можем сформулировать расчет ширины и высоты поля по умолчанию как:

Здесь s — масштаб, а — соотношение сторон.

Центр поля по умолчанию рассчитывается как:

(i+0.5)/f, (j+0.5)/f

где i,j ϵ [0,f] и f — размер карты признаков.

Таким образом, для карты объектов размером 4 * 4 поле по умолчанию в ячейке карты объектов (0,0) будет иметь центр в (0,125,0,125) на исходном изображении.

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

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

Таким образом, общее количество прогнозов, сгенерированных из каждой карты признаков размером (m*n), равно (c+4)*k*m*n. Здесь c — количество классов (мы также включим фоновый класс), а k — количество полей по умолчанию в каждой ячейке карты объектов (k = 5, если мы используем 5 соотношений сторон, определенных выше), а 4 здесь означает 4 координаты, которые предсказано.

Обучение

Поскольку общее количество прогнозов очень велико по сравнению с ящиками истинности, нам нужно найти, какое предсказание соответствует истинности. Поскольку наши предсказания смещены к полям по умолчанию, мы можем сопоставить предсказание с истинностью основания, найдя перекрытие между каждым полем истинности основания и полем по умолчанию, поле по умолчанию с максимальным перекрытием будет соответствовать согласованному предсказанию. Это перекрытие рассчитывается с использованием индекса Жаккара. Таким образом, блоки по умолчанию с лучшим перекрытием Jaccard с основной истиной считаются совпадающими. Ячейки по умолчанию, в которых Jaccard перекрывается выше порогового значения (обычно 0,5), также считаются совпадающими. Это упрощает задачу обучения, позволяя сети прогнозировать более высокий балл для нескольких перекрывающихся блоков.

Теперь, когда мы сопоставили прогнозы с истинной истиной, мы можем определить функцию потерь. Перед этим у нас остается еще одна техническая деталь, так как количество положительных прогнозов будет очень меньше (например, общее количество прогнозов по SSD равно 8732, но количество наземных истин будет ~ 10 или 20, может быть, больше, но все же значительно меньше) в сравнение с отрицательным прогнозом, поэтому мы не можем включить все отрицательные прогнозы из-за значительного дисбаланса классов (все отрицательные прогнозы будут принадлежать фоновому классу). Чтобы уменьшить количество отрицательных выборок, мы используем жесткий отрицательный майнинг. Жесткий отрицательный майнинг означает, что мы будем сортировать все отрицательные прогнозы на основе их оценки достоверности и будем включать только лучшие k прогнозов. Соотношение отрицательных и положительных образцов используется как 3:1 в оригинальной статье.

Потеря

Нам нужен компонент местоположения и классификации в функции потерь.

Математика, написанная выше, проще, чем кажется, поэтому не волнуйтесь, мы ее расшифруем.

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

Потеря локализации:

SSD использует центр, ширину и высоту в качестве схемы координат.

Так как SSD вычисляет смещения от полей по умолчанию, истинность наземного пространства будет значением смещения между истинностью на земле и полем по умолчанию, а не фактическим расположением центра. Для координат центра это вычисление смещения представляет собой просто разницу между наземным центром истинности и центром коробки по умолчанию (см. термины g^cx и g^cy в изображении с потерями, d^cx и d^cy означают расположение центра коробки по умолчанию, и это делится на ширину и высоту поля по умолчанию, чтобы нормализовать значения от 0 до 1 и не сохранять их с точки зрения фактического размера, поскольку он может меняться при изменении размера изображения.). Для расчета ширины и высоты это смещение рассчитывается в логарифмическом масштабе. Таким образом будет:

Во-первых, сигма для всех положительных образцов, а вторая сигма для cx, cy, ширины и высоты и, таким образом, будет выполняться 4 раза. Здесь j и i используются, потому что количество основных истин и блоков по умолчанию не совпадает, поэтому мы считаем, что j-е основное истинное значение будет соответствовать i-му блоку по умолчанию. Вы можете обратиться здесь, чтобы понять о гладкой потере l1.

Здесь термин x_ij — это просто двоичный флаг, который равен 1 для положительного образца и 0 для отрицательного образца, чтобы показать, что вклад отрицательных образцов в потерю локализации равен 0.

Потеря классификации

Это нормальная кросс-энтропийная потеря. В случае потери локализации нет оснований для отрицательного предсказания, поэтому эти выборки не вносят вклада в потерю локализации. Но в случае потери классификации отрицательные образцы имеют истинный класс, т.е. фоновый класс. Таким образом, Lconf имеет два термина: первый термин связан с положительными выборками (p определяет индекс класса истинности основания), а второй термин связан с отрицательными выборками (таким образом, мы использовали 0 вместо p, потому что фоновый класс будет иметь 0 индексов). Поскольку мы используем жесткий отрицательный майнинг, количество отрицательных выборок будет сначала отфильтровано, и все отрицательные выборки не будут вносить вклад в функцию потерь.

Вывод

  1. Передайте изображение через сеть, сеть вернет 8732 показателя достоверности и 8732 смещения ограничивающей рамки.
  2. Преобразуйте смещения ограничительной рамки в исходную форму, т.е. добавьте эти смещения в рамки по умолчанию (отменив то, что обсуждалось в разделе «Потеря локализации»).
  3. Примените не максимальное подавление, чтобы подавить большинство прогнозов.

ПС. Пожалуйста, прочитайте первую ссылку, даже если вы полностью понимаете SSD, я никак не могу написать это так ясно и так подробно. Это очень подробно, поэтому я не упомянул эту ссылку в начале.

Мир…

Использованная литература:

  1. https://github.com/sgrvinod/a-PyTorch-Tutorial-to-Object-Detection
  2. https://towardsdatascience.com/non-maximum-suppression-nms-93ce178e177c

Список статей:

  1. OverFeat: интегрированное распознавание, локализация и обнаружение с использованием сверточных сетей. [Ссылка на блог]
  2. Богатые иерархии функций для точного обнаружения объектов и семантической сегментации (RCNN). [Ссылка на блог]
  3. Объединение пространственных пирамид в глубоких сверточных сетях для визуального распознавания (SPPNet). [Ссылка на блог]
  4. Fast R-CNN [Ссылка на блог]
  5. Быстрее R-CNN: к обнаружению объектов в реальном времени с сетями региональных предложений. [Ссылка на блог]
  6. Вы только посмотрите один раз: унифицированное обнаружение объектов в реальном времени. [Ссылка на блог]
  7. SSD: однокадровый детектор MultiBox. ← Вы завершили этот блог.
  8. Пирамидные сети для обнаружения объектов. [Ссылка на блог]
  9. DSSD: деконволюционный детектор единичных импульсов. [Ссылка на блог]
  10. Фокусная потеря для обнаружения плотных объектов (сетка Retina). [Ссылка на блог]
  11. YOLOv3: постепенное улучшение. [Ссылка на блог]
  12. СНАЙПЕР: Эффективное многомасштабное обучение. [Ссылка на блог]
  13. Представления с высоким разрешением для маркировки пикселей и областей. [Ссылка на блог]
  14. FCOS: полностью сверточное одноэтапное обнаружение объектов. [Ссылка на блог]
  15. Объекты как точки. [Ссылка на блог]
  16. CornerNet-Lite: эффективное обнаружение объектов на основе ключевых точек. [Ссылка на блог]
  17. CenterNet: триплеты Keypoint для обнаружения объектов. [Ссылка на блог]
  18. CBNet: новая композитная магистральная сетевая архитектура для обнаружения объектов. [Ссылка на блог]
  19. EfficientDet: Масштабируемое и эффективное обнаружение объектов. [Ссылка на блог]
  20. YOLOv4: Оптимальная скорость и точность обнаружения объектов. [Ссылка на блог]