Я намагаюся зрозуміти функцію втрати Yolo v2:
Якщо будь-яка людина може деталізувати функцію.
Я намагаюся зрозуміти функцію втрати Yolo v2:
Якщо будь-яка людина може деталізувати функцію.
Відповіді:
Пояснення різних термінів:
Зауважте, що я використовував два індекси і для кожного прогнозування bbox, це не так у статті, оскільки завжди є фактор або тому немає багатозначної інтерпретації: вибраний - це той, що відповідає найвищій довіри в цій комірці.j 1 o b j i j 1 n o o b j i j j
Більш загальне пояснення кожного члена суми:
B*(5+C)
? Принаймні, так це стосується YOLO v3.
Чи не виглядає функція втрати YOLOv2 страшною? Це насправді! Це одна з найсміливіших, найрозумніших функцій втрат навколо.
Давайте спочатку розглянемо, що насправді прогнозує мережа.
Якщо ми резюмуємо, YOLOv2 прогнозує виявлення на карті розмірів 13x13, тож у нас 169 карт / комірок.
У нас є 5 анкерних ящиків. Для кожного ящика для прив’язки нам потрібний показник впевненості об'єкта (чи знайдено який-небудь об’єкт?), 4 координати ( і ) для анкерної коробки та 20 топ-класів. Це грубо можна зрозуміти, як 20 координат, 5 балів довіри та 100 ймовірностей класу для всіх 5 прогнозів вікна якоря.
У нас є кілька проблем, про які слід турбуватися:
Усі втрати - це середньоквадратичні помилки, крім класифікаційних втрат, в яких використовується функція перехресної ентропії .
Тепер давайте порушимо код на зображенні.
Нам потрібно обчислити втрати для кожного ящика з якоря (всього 5)
Нам потрібно зробити це для кожної клітинки 13x13, де S = 12 (оскільки ми починаємо індекс з 0)
дорівнює 1, коли в комірці є об'єкт , інакше 0.
var1 | var2 | (var1 - var2) ^ 2 | (sqrtvar1 - sqrtvar2) ^ 2
0,0300 | 0,020 | 9,99е-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 прямо не визначає свою функцію втрат.
Я намагаюся вгадати функцію втрати YOLOv2 і обговорити її тут: https://fairyonice.github.io/Part_4_Object_Detection_with_Yolo_using_VOC_2012_data_loss.html
Ось моя навчальна записка
Функція втрати: помилка в квадраті
а. Причина: легко оптимізувати b. Проблема: (1) Не ідеально відповідає нашій меті максимальної середньої точності. (2) У кожному зображенні багато комірок сітки не містять жодного об'єкта. Це підштовхує оцінки довіри цих комірок до 0, часто переважаючи градієнт від клітин, що містять об'єкт. c. Рішення: збільшити втрати від прогнозування координат обмежувального поля та зменшити втрати від прогнозування достовірності у вікнах, що не містять об'єктів. Ми використовуємо два параметри і = 0,5 д. Помилка у квадратній сумі також однаково зважує помилки у великих коробках та невеликих коробках
За кожний предмет повинен відповідати лише один обмежувальний ящик. Ми призначаємо одного передбачувача, який відповідає за передбачення об'єкта, на основі якого прогнозування має найвищий поточний IOU з основною істиною.
а. Втрата від пов'язаної координати поля (x, y) Зверніть увагу, що втрати відбуваються від одного обмежувального поля з однієї комірки сітки. Навіть якщо obj не в комірці сітки як основна правда.
б. Втрати від ширини w та висоти h. Зауважте, що втрата відбувається через одне обмежувальне поле з однієї комірки сітки, навіть якщо об'єкт не знаходиться в комірці сітки як основна істина.
c. Втрата від впевненості у кожному зв'язаному полі. Мало того, що втрати виникають через одне обмежувальне поле з однієї сітки сітки, навіть якщо об'єкт не знаходиться в комірці сітки як основна істина.
Функція втрати санкціонує лише класифікацію, якщо obj присутній у комірці сітки. Він також карає координату обмежувальної коробки, якщо це поле відповідає за заземлення (найвищий IOU)
Формула втрат, яку ви написали, - це оригінальна втрата паперу YOLO , а не втрата v2 або v3.
Існують деякі основні відмінності між версіями. Я пропоную прочитати статті або перевірити виконання коду. Документи: v2 , v3 .
Деякі основні відмінності я помітив:
Вірогідність класу обчислюється за обмежувальним вікном (отже, тепер вихід S ∗ S ∗ B * (5 + C) замість S S (B * 5 + C))
Координати обмежувального поля тепер мають інше зображення
У v3 вони використовують 3 поля в трьох різних "масштабах"
Ви можете спробувати потрапити до деталей збитковості збитків, дивлячись на реалізацію python / keras v2 , v3 (шукати функцію yolo_loss) або безпосередньо на c виконання v3 (шукайте delta_yolo_box та delta_yolo_class).