[Глубокое обучение] Самое терпеливое и подробное объяснение алгоритма обнаружения целей YOLO

искусственный интеллект глубокое обучение
[Глубокое обучение] Самое терпеливое и подробное объяснение алгоритма обнаружения целей YOLO

YOLO — это алгоритм обнаружения целей, предложенный в 2016 году. В то время относительно превосходные алгоритмы обнаружения целей включали R-CNN, Fast R-CNN и т. д., но алгоритм YOLO все еще был очень новым и захватывающим.

YOLO — это аббревиатура от You look only Once.Общая идея состоит в том, что вы можете предсказать это, как только взглянете на него.Вдохновение исходит от нас, людей, потому что, когда люди смотрят на картинку, они могут узнать различные типы целей на ней. картинка с первого взгляда.

YOLO выигрывает своей простотой и скоростью.

  • YOLO — это единая нейронная сеть для сквозного прогнозирования без множества шагов и процессов.
  • YOLO очень быстрый, достигает 45 кадров в секунду в реальном времени и даже 155 кадров в секунду в упрощенной версии.

Этот пост в блоге основан на YOLO v1.Последняя версия эволюционировала до YOLO v3, но я все же думаю, что лучше начать с самых основных идей.

Бумажный адрес YOLO V1

Прогнозирование целей YOLO похоже на рыбалку

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

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

Но YOLO совсем другой.

在这里插入图片描述

Если рассматривать обнаружение цели как процесс ловли рыбы, а другие алгоритмы должны точно стрелять по одной гарпуном, то YOLO намного грубее.

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

Идея алгоритма YOLO.

Идея алгоритма YOLO на самом деле довольно проста.

在这里插入图片描述

  1. Масштабировать входное изображение
  2. Подайте изображение в свёрточную нейронную сеть для предсказания
  3. Окончательный результат получается путем установления порога достоверности прогнозируемого результата.

Детали алгоритма поясняются ниже.

Разделить изображения

YOLO разделит входное изображение на сетки SxS.Если центральная точка цели попадает в сетку, соответствующая сетка отвечает за прогнозирование размера и категории цели.

在这里插入图片描述
В приведенном выше примере изображения центральная точка собаки попадает в синюю сетку, поэтому синяя сетка отвечает за информационный прогноз этой цели.

Прогнозы для каждой цели сетки

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

C =P r(o bj) ∗I OU p red t rut h C=Pr(obj)∗IOU истинапред C = Pr(obj) * IOU_{истина}^{пред} C = Pr(ob j)∗IOU истина p красный

Но следует отметить, что если сетка не содержит мишени, то Pr(obj)Pr(obj) Pr(obj)Pr(obj) равно 0, в противном случае равно 1, поэтому C эквивалентно предсказанный bbox То же, что и долговая расписка GroundTruth.

Каждый bbox состоит из 5 предикторов: x, y, w, h, достоверность.

x, y — коэффициент смещения центральной точки bbox относительно соответствующей сетки, а их значения находятся в диапазоне от 0 до 1, то есть они нормированы относительно размера сетки.

Кроме того, и w, и h нормализованы, поэтому их значения находятся в диапазоне от 0 до 1.

w и h — пропорции bbox относительно размера всего изображения.

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

Каждая сетка предсказывает условные вероятности C в дополнение к bbox P r(класс i ∣Ojbect) Pr(классi∣Ojbect) Pr(класс_{i}|Ojbect) P r(класс s i ∣Ojbect) .

Эта условная вероятность относится к распределению вероятностей целевой категории при наличии цели в сетке.

Условная вероятность предназначена для каждой сетки, а не для каждого блока, поскольку каждая сетка предсказывает B блоков.

На этапе тестирования YOLO будет умножать условную вероятность на достоверность каждого блока.

在这里插入图片描述

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

在这里插入图片描述
YOLO делит входное изображение на сетки SxS, каждая из которых предсказывает условную вероятность блоков B и целевых категорий C, и каждый блок содержит 5 параметров x, y, w, h, достоверность.

Следовательно, окончательный результат прогнозирования YOLO может быть интегрирован в размер SS(5*B+C) тензор.

Все значения B, S и C определяются разработчиком сетевой структуры.Когда YOLO v1 оценивается в наборе данных PASCAL VOC, S = 7, B = 2.
Поскольку этот набор данных имеет 20 категорий, поэтому C = 20, применяя предыдущую формулу, размер тензора в окончательном прогнозе равен 7.730.

Дизайн сетевой структуры YOLO

YOLO основан на CNN, и автор статьи сказал, что он был вдохновлен структурой GooLeNet, а затем построил новую сетевую структуру.

YOLO заменяет модуль GooLeNet Inception ядром свертки 1x1 для уменьшения размерности.

YOLO имеет 24 сверточных слоя, за которыми следуют 2 полносвязных слоя.

Ниже приведена его сетевая структура.

在这里插入图片描述
Как видите, окончательный результат предсказания YOLO — это тензор 7x7x30.

在这里插入图片描述
Это изображение также может примерно иллюстрировать структуру окончательного предсказанного тензора.

Тренировочный процесс YOLO

YOLO использует первые 20 сверточных слоев и 1 полносвязный слой для обучения распознаванию общих категорий в ImageNet и достигает относительно высокой точности.

После этого авторы YOLO добавили к предварительно обученной структуре 4 сверточных слоя и 1 полносвязный слой для обучения распознаванию целей.

Поскольку он хочет улучшить общую производительность распознавания целей, размер входного изображения составляет 224x224, когда YOLO выполняет предварительное обучение в ImageNet, но при выполнении специального обучения распознаванию целей на PASCAL VOC размер входного изображения становится 448x448.

За исключением последнего слоя, который использует линейную функцию активации, все остальные слои используют дырявый Relu.

Настройки потерь YOLO

Мы все знаем, что выбор подходящей потери очень важен для обучения нейронной сети.

И я думаю, что только поняв принципы расчета потерь YOLO, мы сможем по-настоящему понять суть алгоритма YOLO.

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

Авторы YOLO используют сумму квадратов ошибок (сумму квадратов ошибок) в качестве потерь для оптимизации во время обучения.

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

Ошибка суммы в квадрате заставит функцию Loss иметь одинаковый вес ошибки для предсказания местоположения и предсказания категории.

Реальность такова, что YOLO предсказывает 7 на каждом изображении.72 = 98 блоков, но только несколько блоков содержат цель, а те блоки, которые не содержат цели, их достоверность быстро станет 0 в процессе обучения, поэтому, какие сетки содержат цель, они предсказывают градиент блока. Он изменится Таким образом, вся система прогнозирования находится в несбалансированном и нестабильном состоянии, и потеря может в конечном итоге не сойтись.

Чтобы исправить и улучшить ситуацию, авторы YOLO скорректировали ошибку координат bbox и вес ошибки достоверности при отсутствии цели, а также добавили различные штрафные коэффициенты, равные 5 и 0,5 соответственно. .

Зачем это делать?

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

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

Сказав это, у меня есть вопрос для размышления:
Если вы хотите уменьшить влияние уверенности без объекта на общую потерю, почему бы не сделать это до крайности? Не лучше ли было бы изменить штрафной коэффициент с 0,5 до 0?

У меня нет стандартного ответа, но я понимаю, что это разбалансирует систему YOLO и потеряет способность предсказывать фон, поэтому она также потеряет какую-то всеобъемлющую способность.

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

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

Затем спрогнозируйте большой bbox, ширина GroundTruth равна 100, прогнозируемое значение равно 99, тогда ошибка также равна 1.

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

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

Все еще используя предыдущий пример, предсказание ширины маленького bbox = 3, истинность = 4, а ошибка составляет 0,067. Предсказание ширины большого блока = 99, достоверность = 100, ошибка 0,0025.

Так что эта проблема прекрасно решена.

Окончательный убыток становится составным убытком, формула выглядит следующим образом:

在这里插入图片描述

Следует отметить, что каждая сетка YOLO предсказывает два bbox, и, наконец, только один bbox отвечает за позицию bbox, представляющую соответствующую цель.Они сравниваются с помощью Confidence, то есть сравнения IOU, и побеждает тот, у кого более высокий балл. При подсчете потерь может участвовать только этот ящик.

Другие конкретные стратегии обучения заключаются в следующем:

  1. Для первой эпохи скорость обучения медленно меняется с 0,001 до 0,01.
  2. Для следующих 75 эпох скорость обучения фиксируется на уровне 0,01.
  3. Затем тренируйтесь в течение 30 эпох с 0,001.
  4. Наконец, тренируйтесь в течение 40 эпох с 0,0001.
  5. Чтобы избежать переобучения, YOLO использует отсев и увеличение данных во время обучения.

Суммировать

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

  • YOLO - это процесс заброса рыболовной сети, и все целевые позиционирования выполняются одновременно.
  • Причина, по которой YOLO работает быстро, заключается в том, что входное изображение делится на сетки с относительно грубой детализацией, а затем делаются прогнозы.
  • Суть алгоритма YOLO отражена в его дизайне Loss и в том, как автор улучшает Loss для проблемы, Такой способ мышления о проблемах является наиболее достойным нашего изучения.