Объяснение функции Йоло Лосс


16

Я пытаюсь понять функцию потери Yolo v2:

λcoordi=0S2j=0B1ijobj[(xix^i)2+(yiy^i)2]+λcoordi=0S2j=0B1ijobj[(wiw^i)2+(hih^i)2]+i=0S2j=0B1ijobj(CiC^i)2+λnoobji=0S2j=0B1ijnoobj(CiC^i)2+i=0S21iobjcclasses(pi(c)p^i(c))2

Если кто-то может детализировать функцию.


5
никто не может помочь вам без контекста ... по крайней мере, скажите нам, из какой это бумаги.
bdeonovic

1
«Я не понимаю» и «подробно описать функцию» слишком широки. Пожалуйста, попробуйте определить конкретные вопросы. Обратите внимание, что уже существует множество вопросов, касающихся Йоло , некоторые из которых могут предоставить вам хотя бы часть того, что вы ищете
Glen_b -Reinstate Monica

1
Я бы добавил свой ответ, если бы вы указали на то, что не ясно из этого превосходного объяснения: medium.com/@jonathan_hui/…
Аксакал,

1
В этом блоге здесь есть подробное графическое объяснение yolo и yolov2. Это действительно отвечает на вопрос о функции потерь. Ifind это очень полезно для начинающих и более продвинутых пользователей.
MBoaretto

Ответы:


18

Объяснение различных терминов:

  • 3 константы являются просто константами, чтобы учесть еще один аспект функции потерь. В статье λ c o o r d является высшим, чтобы иметь большее значение в первом членеλλcoord
  • Предсказание YOLO представляет собой вектор : предсказания B bbox для каждой ячейки сетки и предсказание класса C для каждой ячейки сетки (где C - количество классов). 5 выходов bbox блока j ячейки i являются координатами центра bbox x i j y i j , высоты h i j , ширины w i j и индекса достоверности C i jSS(B5+C)BCCxij yijhijwijCij
  • Я полагаю, что значения со шляпой являются реальными значениями, прочитанными на этикетке, а значения без шляпы - предсказанными. Так что реальное значение от метки для доверительного балла для каждого BBox C я J ? Это пересечение объединения предсказанного ограничивающего прямоугольника с ярлыком.C^ij
  • равно1,когда в ячейкеiесть объект,и0 вдругом месте1iobj1i0
  • "обозначает, чтоj-й предиктор ограничивающего прямоугольника в ячейкеiотвечает за это предсказание". Другими словами, он равен1,если в ячейкеiесть объект,и достоверностьj-х предикторов этой ячейки является самой высокой среди всех предикторов этой ячейки. 1 n o o b j i j - почти то же самое, за исключением того, что оно имеет значение 1, когда в ячейкеiнет объектов NO1ijobjji1ij1ijnoobji

Обратите внимание, что я использовал два индекса и j для каждого предсказания bbox, в статье это не так, потому что всегда есть коэффициент 1 o b j i j или 1 n o o b j i j, поэтому нет двусмысленной интерпретации: J выбран тот , что соответствует самому высокому доверительному счету в этой ячейке.ij1ijobj1ijnoobjj

Более общее объяснение каждого термина суммы:

  1. этот термин наказывают за плохую локализацию центра клеток
  2. этот термин штрафует ограничивающий прямоугольник с неточной высотой и шириной. Квадратный корень присутствует так, что ошибки в маленьких ограничивающих прямоугольниках более штрафуют, чем ошибки в больших ограничивающих прямоугольниках
  3. этот термин пытается сделать показатель доверия равным IOU между объектом и прогнозом, когда есть один объект
  4. Пытается сделать показатель достоверности близким к когда в ячейке нет объекта0
  5. Это простая классификация потерь (не объясняется в статье)

1
Второй пункт должен быть B*(5+C)? По крайней мере, это так для YOLO v3.
sachinruk

@sachinruk это отражает изменения в модели между оригинальным YOLO и v2 и v3.
Дэвид Рафаэли

12

λcoordi=0S2j=0B1ijobj[(xix^i)2+(yiy^i)2]+λcoordi=0S2j=0B1ijobj[(wiw^i)2+(hih^i)2]+i=0S2j=0B1ijobj(CiC^i)2+λnoobji=0S2j=0B1ijnoobj(CiC^i)2+i=0S21iobjcclasses(pi(c)p^i(c))2

Разве функция YOLOv2 Loss не выглядит страшно? Это не на самом деле! Это одна из самых смелых, самых умных функций потерь.

Давайте сначала посмотрим, что на самом деле предсказывает сеть.

Если вспомнить, YOLOv2 предсказывает обнаружения на карте объектов 13x13, так что в общей сложности у нас есть 169 карт / ячеек.

У нас есть 5 якорных ящиков. Для каждой коробки якоря нам нужны предметность-показатель достоверности (был ли найден какой - либо объект?), 4 координаты ( tx,ty,tw, и th ) для коробки якоря, и 20 лучших классов. Грубо это можно рассматривать как 20 координат, 5 доверительных оценок и 100 вероятностей классов для всех 5 предсказаний якорных ячеек, вместе взятых.

Нам есть о чем беспокоиться:

  • xi,yi , где находится центр тяжести якорного ящика
  • wi,hi - ширина и высота якорного ящика
  • Ci , который являетсяОбъектностью, то есть оценкой достоверности того, существует объект или нет, и
  • pi(c) , которая является классификационной потерей.
  • 𝟙iobj𝟙inoobj𝟙iobj𝟙inoobj𝟙iobj, Где оно равно 1 , если не было нет объекта в ячейке и 0 , если не было.
  • Нам нужно сделать это для всех 169 ячеек, и
  • Нам нужно сделать это 5 раз (для каждого якорного ящика).

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

Теперь давайте разберем код на изображении.

  • Нам нужно рассчитать потери для каждого якорного ящика (всего 5)

    • j=0B представляет эту часть, где В = 4 (5 - 1, так как индекс начинается с 0)
  • Нам нужно сделать это для каждой из 13x13 ячеек, где S = 12 (так как мы начинаем индекс с 0)

    • i=0S2 представляет эту часть.
  • 𝟙ijobji

  • 𝟙ijnoobji
  • 𝟙iobj
  • λs постоянные. λ является наибольшим для координат, чтобы больше сосредоточиться на обнаружении (помните, что в YOLOv2 мы сначала обучаем его распознаванию, а затем обнаружению, штрафование за распознавание - пустая трата времени, скорее мы сосредоточены на получении лучших ограничительных рамок!)
  • wi,hi

        вар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

Не так страшно, верно!

Читайте ЗДЕСЬ для получения дополнительной информации.


1
Должны ли i и j in \ sum начинаться с 1 вместо 0?
Веббертигер

1
Да, это правильно, webertiger, соответственно обновили ответ. Благодарность!
RShravan

1ijobj

1
S21

3
@RShravan, вы говорите: «Все потери являются среднеквадратичными ошибками, за исключением потери классификации, которая использует функцию кросс-энтропии». Могли бы вы объяснить? В этом уравнении это выглядит как MSE. Заранее спасибо
Джулиан

3

Ваша функция потерь для YOLO v1, а не для YOLO v2. Меня также смутило различие в двух функциях потери, и похоже, что многие люди: https://groups.google.com/forum/#!topic/darknet/TJ4dN9R4iJk

Статья YOLOv2 объясняет отличие в архитектуре от YOLOv1 следующим образом:

Мы удаляем полностью связанные слои из YOLO (v1) и используем якорные блоки для прогнозирования ограничивающих прямоугольников ... При переходе к якорным боксам мы также отделяем механизм прогнозирования класса от пространственного расположения и вместо этого прогнозируем класс и объектность для каждого якорного ящика.

pi(c)icj

Я пытаюсь угадать функцию потерь в YOLOv2 и обсуждаю ее здесь: https://fairyonice.github.io/Part_4_Object_Detection_with_Yolo_using_VOC_2012_data_loss.html


1

Вот моя учебная записка

  1. Функция потерь: ошибка в квадрате суммы

    λcoord=5
    λnoobj

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

а. Потеря от координаты ограниченного блока (x, y) Обратите внимание, что потеря происходит из одного ограничивающего прямоугольника из одной ячейки сетки. Даже если объект не в ячейке сетки, как наземная истина.

{λcoordi=0S2[(xix^i)2+(yiyi^)2]responsible bounding box0 other

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

{λcoordi=0S2[(wiw^i)2+(hih^i)2]responsible bounding box0 other

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

{i=0S2(CiC^i)2obj in grid cell and responsible bounding boxλnoobji=0S2(CiC^i)2obj not in grid cell and responsible bounding box0other

{i=0S2cclasses(pi(c)p^i(c))2obj in grid cell0other

Функция потерь только штрафует классификацию, если в ячейке сетки присутствует объект obj. Он также штрафует координаты ограничивающего прямоугольника, если этот прямоугольник отвечает за наземный прямоугольник (самый высокий IOU)


Вопрос о 'C', в статье, доверие - это значение объекта «объект или нет», умноженное на IOU; это только для времени тестирования или для функции стоимости обучения? Я думал, что мы просто вычитаем значение C из выходных данных и меток (так же, как мы делали со значениями сетки), но это неправильно?
Мундра

0

Формула потери, которую вы написали, относится к исходной потере бумаги 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).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.