Я пытаюсь понять функцию потери Yolo v2:
Если кто-то может детализировать функцию.
Я пытаюсь понять функцию потери Yolo v2:
Если кто-то может детализировать функцию.
Ответы:
Объяснение различных терминов:
Обратите внимание, что я использовал два индекса и j для каждого предсказания bbox, в статье это не так, потому что всегда есть коэффициент 1 o b j i j или 1 n o o b j i j, поэтому нет двусмысленной интерпретации: J выбран тот , что соответствует самому высокому доверительному счету в этой ячейке.
Более общее объяснение каждого термина суммы:
B*(5+C)
? По крайней мере, это так для YOLO v3.
Разве функция YOLOv2 Loss не выглядит страшно? Это не на самом деле! Это одна из самых смелых, самых умных функций потерь.
Давайте сначала посмотрим, что на самом деле предсказывает сеть.
Если вспомнить, YOLOv2 предсказывает обнаружения на карте объектов 13x13, так что в общей сложности у нас есть 169 карт / ячеек.
У нас есть 5 якорных ящиков. Для каждой коробки якоря нам нужны предметность-показатель достоверности (был ли найден какой - либо объект?), 4 координаты ( и ) для коробки якоря, и 20 лучших классов. Грубо это можно рассматривать как 20 координат, 5 доверительных оценок и 100 вероятностей классов для всех 5 предсказаний якорных ячеек, вместе взятых.
Нам есть о чем беспокоиться:
Все потери являются среднеквадратичными ошибками, кроме классификационных потерь, в которых используется функция кросс-энтропии .
Теперь давайте разберем код на изображении.
Нам нужно рассчитать потери для каждого якорного ящика (всего 5)
Нам нужно сделать это для каждой из 13x13 ячеек, где S = 12 (так как мы начинаем индекс с 0)
вар1 | вар2 | (var1 - var2) ^ 2 | (sqrtvar1 - sqrtvar2) ^ 2
0,0300 | 0,020 | 9.99e-05 | 0,001
0,0330 | 0,022 | 0,00012 | 0,0011
0.0693 | 0,046 | 0.000533 | 0,00233
0,2148 | 0,143 | 0,00512 | 0,00723
0,3030 | 0,202 | 0,01 | 0,01
0,8808 | 0,587 | 0.0862 | 0,0296
4.4920 | 2.994 | 2,2421 | 0,1512
Не так страшно, верно!
Читайте ЗДЕСЬ для получения дополнительной информации.
Ваша функция потерь для YOLO v1, а не для YOLO v2. Меня также смутило различие в двух функциях потери, и похоже, что многие люди: https://groups.google.com/forum/#!topic/darknet/TJ4dN9R4iJk
Статья YOLOv2 объясняет отличие в архитектуре от YOLOv1 следующим образом:
Мы удаляем полностью связанные слои из YOLO (v1) и используем якорные блоки для прогнозирования ограничивающих прямоугольников ... При переходе к якорным боксам мы также отделяем механизм прогнозирования класса от пространственного расположения и вместо этого прогнозируем класс и объектность для каждого якорного ящика.
Я пытаюсь угадать функцию потерь в YOLOv2 и обсуждаю ее здесь: https://fairyonice.github.io/Part_4_Object_Detection_with_Yolo_using_VOC_2012_data_loss.html
Вот моя учебная записка
Функция потерь: ошибка в квадрате суммы
Только один ограничивающий прямоугольник должен отвечать за каждый объект. Мы назначаем одного предиктора, который будет отвечать за прогнозирование объекта, на основе которого прогноз имеет наивысшую текущую долговую расписку с истинностью основания.
а. Потеря от координаты ограниченного блока (x, y) Обратите внимание, что потеря происходит из одного ограничивающего прямоугольника из одной ячейки сетки. Даже если объект не в ячейке сетки, как наземная истина.
б. Потери от ширины w и высоты h. Обратите внимание, что потеря происходит из-за одного ограничивающего прямоугольника из одной ячейки сетки, даже если объект не находится в ячейке сетки как наземная правда.
с. Утрата от уверенности в каждой связанной коробке. Не то, чтобы потеря исходила от одного ограничивающего прямоугольника от одной ячейки сетки, даже если объект не находится в ячейке сетки как наземная истина.
Функция потерь только штрафует классификацию, если в ячейке сетки присутствует объект obj. Он также штрафует координаты ограничивающего прямоугольника, если этот прямоугольник отвечает за наземный прямоугольник (самый высокий IOU)
Формула потери, которую вы написали, относится к исходной потере бумаги YOLO , а не к потере v2 или v3.
Есть несколько основных различий между версиями. Я предлагаю прочитать документы или проверить реализации кода. Документы: v2 , v3 .
Некоторые основные различия, которые я заметил:
Вероятность класса рассчитывается для каждого ограничивающего прямоугольника (следовательно, теперь вывод равен S ∗ S ∗ B * (5 + C) вместо S S (B * 5 + C))
Координаты ограничивающего прямоугольника теперь имеют другое представление
В v3 они используют 3 коробки по 3 разным «масштабам»
Вы можете попытаться вникнуть в мельчайшие подробности потери, либо взглянув на реализацию python / keras v2 , v3 (ищите функцию yolo_loss) или непосредственно на реализацию c v3 (ищите delta_yolo_box и delta_yolo_class).