Расширенный обмен данными Tesla AI DAY — одноступенчатая серия YOLO (1)

искусственный интеллект глубокое обучение
Расширенный обмен данными Tesla AI DAY — одноступенчатая серия YOLO (1)

Это 23-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления

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

ironman_evolution.jpg

Сегодня поговорим и напишем о YOLOv1, YOLOv1 должен быть уникальным в обнаружении целей, немного похожим на состояние веб-интерфейса vue сегодня. И это продолжало нас удивлять по пути. YOLO — это аббревиатура You Only Look Once, Как следует из названия, это одноэтапная структура обнаружения целей и сквозная структура обнаружения целей. YOLOV1 успешно преобразовал проблему обнаружения объектов в проблему регрессии. В Интернете есть много статей и видеороликов о YOLO, и я надеюсь, что мои статьи могут принести вам различный контент и помочь вам лучше понять текущую популярную систему обнаружения нескольких целей YOLO.

ввод и вывод

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

Входные данные имеют размер 448 x 448 x 3. Поскольку два полносвязных слоя должны быть соединены в конце сети, полносвязный слой требует входных данных фиксированного размера, поэтому размер входных данных необходимо изменить.

Последний слой FC получает вывод 1470 x 1, повторно обработайте этот вывод, чтобы получить тензор 7 x 7 x 30, то есть каждая ячейка, наконец, имеет 30-мерный вывод, представляющий результат прогнозирования.

yolov1_001.jpeg

  • Выходной вектор представляет результат прогнозирования[c,x,y,w,h][c,x,y,w,h]
  • x,y,w,hx,y,w,hПредставляет информацию о местоположении, которая является центральной точкой ограничивающей рамки, а также шириной и высотой ограничивающей рамки соответственно.
  • Pr(Object)Pr(Object)Какова вероятность, что это передний план, и его нужно умножать на ИоУ, зачем мне его умножать на ИоУ? рамка переднего плана ближе к реальной ограничивающей рамке цели. .
  • Pr(Classi,Object)Pr(Class_i,Object)Категория, обнаруженная как передний план, так называемый передний план означает, что в этой сетке имеется целевая категория, которая используется для вывода категории, к которой принадлежит обнаруженная цель. По формуле это условная вероятность, поэтому вероятность можно выразить какPr(ClassiObject)×Pr(Object)×IoUpredtruth=Pr(Classi)×IoUpredtruthPr(Class_i|Object)\times Pr(Object) \times IoU_{pred}^{truth} = Pr(Class_i) \times IoU_{pred}^{truth}
  • Каждая сетка отвечает за обнаружение объектов
  • S×S×(B×(1+4)+C)=7×7×30=1470S \times S \times (B \times (1+4) + C) = 7 \times 7 \times 30 = 1470

025.png

Как выходное значение нейронной сети сопоставляется с изображением для вывода и сравнения с реальным значением?В сети YOLOv1 ширина и высота вывода представляют собой десятичные числа от 0 до 1, которые необходимо умножить на реальную ширину и высоту изображения

wpred=0.25wimg=0.25×448=112\begin{aligned} w_{pred} = 0.25\\ w_{img} = 0.25 \times 448 = 112 \end{aligned}

026.png

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

сетевая структура

Сначала на ImageNet предварительно обучаются первые 20 слоев в сети, а затем после этих 20 слоев для обучения подключаются 4 слоя свертки и 2 слоя полносвязных слоев. Итак, первые 20 слоев инициализируются предварительно обученной сетью, а последние 6 слоев инициализируются случайным образом и обновляют веса в процессе обучения. Кроме того, поскольку обнаружение требует больше информации о деталях изображения, во время обучения размер входного изображения равномерно изменяется от224×224224 \times 224настроить на448×448448 \times 448.

YOLOv1 — это в основном 24-слойная сверточная структура, представляющая собой сетевую структуру, состоящую из сверточных слоев и полностью связанных слоев. Вместо использования Maxpooling в качестве понижающей дискретизации используется свертка с размером ядра 1x1 и шагом 2. Функции активации, используемые в середине, все LeakyReLU.В эпоху YOLOv1 нет пакетной нормализации.После извлечения признаков с помощью свертки будет получен вектор признаков, а после свертки будет получена матрица 7 x 7 x 3.

функция потерь

Фактически, для YOLO это может включать не только YOLO, но и многоцелевые среды обнаружения, такие как FastRCNN, Чтобы по-настоящему понять эти структуры, вам необходимо полностью понять функцию потерь. Итак, сегодня мы подробно объясним функцию потерь YOLOv1. Для значения потерь при обнаружении целей, таких как проблемы регрессии и классификации, которые мы делали в прошлом, достаточно рассмотреть только одну или простую потерю.Здесь нам нужно измерить потерю с нескольких аспектов, включая потерю локализации, цель потеря обнаружения и потеря классификации 3 части

027.png

Потеря местоположения

yolov1_003.jpeg

i=0S2j=0BIijobj[(xix^i)2+(yiy^i)2+(wiw^i)2++(hih^i)2]\sum_{i=0}^{S^2} \sum_{j=0}^B \mathbb{I}_{ij}^{obj} \left[ (x_i - \hat{x}_i)^2 + (y_i - \hat{y}_i)^2 + (w_i - \hat{w}_i)^2 + + (h_i - \hat{h}_i)^2 \right]
  • Квадрат разницы можно использовать в качестве функции потерь для вычисления отклонения прогнозируемого ограничивающего прямоугольника и положения центра между прямоугольниками, а также отклонения ширины и высоты.
  • Iijobj\mathbb{I}_{ij}^{obj}Представляет j-ю ограничивающую рамку в i-й сетке, 1, если она отвечает за прогнозирование, в противном случае 0, мы учитываем только значение потерь при обнаружении объектов с сетками переднего плана.

028.png

I51obj=((0.70.7)2+(0.50.5)2+(0.50.5)2+(0.750.7)2)\mathbb{I}_{51}^{obj} =\left( (0.7 - 0.7)^2 + (0.5 - 0.5)^2 + (0.5 - 0.5)^2+ (0.75 - 0.7)^2 \right)
I51obj=((0.60.6)2+(0.50.5)2+(0.20.2)2+(0.30.25)2)\mathbb{I}_{51}^{obj} =\left( (0.6 - 0.6)^2 + (0.5 - 0.5)^2 + (0.2 - 0.2)^2+ (0.3 - 0.25)^2 \right)

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

i=0S2j=0BIijobj[(xix^i)2+(wiw^i)2+(hih^i)2]\sum_{i=0}^{S^2} \sum_{j=0}^B \mathbb{I}_{ij}^{obj} \left[ (x_i - \hat{x}_i)^2 + ( \sqrt{w_i} - \sqrt{\hat{w}_i} )^2 + (\sqrt{h_i} - \sqrt{\hat{h}}_i)^2 \right]
I51obj=((0.60.6)2+(0.50.5)2+(0.20.2)2+(0.30.25)2)+I51obj=((0.60.6)2+(0.50.5)2+(0.20.2)2+(0.30.25)2)=I51obj×(0.03)2+I71obj×(0.048)2\mathbb{I}_{51}^{obj} =\left( (0.6 - 0.6)^2 + (0.5 - 0.5)^2 + (0.2 - 0.2)^2+ (0.3 - 0.25)^2 \right) + \mathbb{I}_{51}^{obj} =\left( (0.6 - 0.6)^2 + (0.5 - 0.5)^2 + (0.2 - 0.2)^2+ (0.3 - 0.25)^2 \right) = \mathbb{I}_{51}^{obj} \times (0.03)^2 + \mathbb{I}_{71}^{obj} \times (0.048)^2

целевая потеря

i=0s2j=0B(CiC^i)2\sum_{i=0}^{s^2}\sum_{j=0}^B (C_i - \hat{C}_i)^2
i 1 2 3 4 5 6 7 8 9
CiCiC_iCi 0 0 0 1 1 0 1 0 0
C^iCi\hat{C}_iC^i 0.1 0.1 0.1 0.1 0.6 0.1 0.6 0.1 0.1
CiC^iCiCiC_i - \шляпа{C}_iCi −C^i 0.1 0.1 0.1 0.1 0.4 0.1 0.4 0.1 0.1

2×(0.4)2+7×(0.1)2=0.32+0.072 \times (0.4)^2 + 7 \times (0.1)^2 = 0.32 + 0.07

Потому что на практике в YOLOv1 49 сеток 7 x 7 x 2, и каждая сетка предоставляет 2 поля предсказания, так что всего 98 полей, и среди них проблема в том, что значение потери цели не обнаружено. в потерях приходится относительно большая доля. То есть в процессе обучения больше внимания будет уделяться фоновой части, игнорируя при этом изучение основной части.

2×(0.4)2+96×(0.1)2=0.32+0.962 \times (0.4)^2 + 96 \times (0.1)^2 = 0.32 + 0.96

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

i=0S2j=0SIijobj(CiC^i)2+λnoobji=0S2j=0SIijobj(CiC^i)2\sum_{i=0}^{S^2} \sum_{j=0}^S \mathbb{I}_{ij}^{obj} (C_i - \hat{C}_i)^2 + \lambda_{noobj} \sum_{i=0}^{S^2} \sum_{j=0}^S \mathbb{I}_{ij}^{obj}(C_i - \hat{C}_i)^2

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

i=0S2Iijobjcеclasses(pi(c)p^i(c))2\sum_{i=0}^{S^2} \mathbb{I}_{ij}^{obj} \sum_{c \in classes} (p_i(c) - \hat{p}_i(c))^2

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

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

Существующие проблемы

029.png

  • Когда две цели появляются в одной и той же сетке, в обучении YOLOv1 возникнут некоторые проблемы.Центральная точка автомобиля и человека, как показано на рисунке, попадают в одну и ту же сетку, и YOLOv1 не может давать правильные прогнозы.На самом деле, там по-прежнему много случаев, поэтому этот недостаток - это проблема, которую необходимо решить для YOLOv1.Когда позже будут представлены YOLOv2 и YOLOv3, вы увидите, как разработчики YOLO решают эту проблему шаг за шагом.
  • Каждая сетка может обнаруживать не более одного объекта, поэтому даже если центры нескольких объектов одной категории попадают в одну и ту же сетку, YOLOv1 все равно сложно обнаружить.
  • На самом деле все эти проблемы связаны с конструкцией YOLOv1, поэтому их нельзя решить регулировкой параметров
  • YOLOv1 требует много данных для обучения, особенно для записи соотношений сторон ограничительной рамки, которые YOLOv1 не видел в учебных материалах, для которых эффект обнаружения цели будет хуже

030.png

  • Судя по фоновой ошибке на приведенном выше рисунке, частота ошибок YOLOv1 из-за неправильной оценки фона как переднего плана намного ниже, чем у Fast R-CNN. Почему такой результат, ведь в YOLOv1 всего 98 сеток для тестирования, а в Fast R-CNN около 2000 сеток для детектирования, поэтому нетрудно понять, почему Fast R-CNN прост в использовании на переднем плане. задний план.
  • Что касается способности обнаружения переднего плана, YOLOv1 немного ниже, чем Fast R-CNN, что то же самое, что и выше, потому что Fast R-CNN использует гораздо больше кадров-кандидатов для обнаружения целей, чем YOLOv1, поэтому эффект обнаружения должен быть лучше.
  • С точки зрения точности позиционирования это означает, что классификация верна.Количество IoU между прогнозируемой ограничивающей рамкой этих правильно классифицированных объектов и реальной ограничивающей рамкой составляет от 0,1 до 0,5.Чем выше число, тем хуже точность позиционирования. , YOLOv1 Требует больше усилий, чем Fast R-CNN с точки зрения точности локализации.

031.png

Мы смотрим на результаты тестирования Faster R-CNN и YOLOv1 на наборе данных PASCAL VOC 2007 для сравнения. Производительность YOLO в секунду намного больше, чем производительность Faster R-CNN при 18 кадрах в секунду, поэтому с точки зрения скорости и производительности YOLO в то время имеет абсолютное преимущество.