Objaśnienie funkcji utraty Yolo

16

Próbuję zrozumieć funkcję utraty 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

Jeśli jakakolwiek osoba może szczegółowo opisać tę funkcję.

Kamel BOUYACOUB
źródło
5
nikt nie może ci pomóc bez kontekstu ... przynajmniej powiedz nam, z jakiego papieru to jest.
bdeonovic
1
„Nie rozumiem” i „szczegółowo opisuję funkcję” są zbyt szerokie. Spróbuj zidentyfikować konkretne pytania. Zauważ, że jest już wiele pytań związanych z Yolo , z których niektóre mogą dostarczyć przynajmniej części tego, czego szukasz
Glen_b
1
Dodałbym moją odpowiedź, jeśli
wskazałbyś,
1
W tym blogu tutaj znajduje się szczegółowy graficzny wyjaśnienie YOLO i yolov2. Odpowiada na pytanie dotyczące funkcji straty. Ifind jest to bardzo przydatne dla początkujących i bardziej zaawansowanych użytkowników.
MBoaretto,

Odpowiedzi:

18

Objaśnienie różnych terminów:

  • Stałe 3 są tylko stałymi uwzględniającymi więcej niż jeden aspekt funkcji straty. W artykule jest najwyższy, aby mieć większe znaczenie w pierwszym semestrzeλ c o o r dλλcoord
  • Przewidywanie YOLO jest Wektor: przewidywania bbox dla każdej komórki sieci i przewidywania klasy dla każdej komórki sieci (gdzie jest liczbą klas). 5 wyjść bbox pola j komórki i to współrzędne środka tte pola b_x , wysokość , szerokość i indeks ufnościB C C x i j y i j h i j w i j C i jSS(B5+C)BCCxij yijhijwijCij
  • Wyobrażam sobie, że wartości z czapką są rzeczywistymi wartościami odczytanymi z etykiety, a te bez czapki są przewidywanymi. Jaka jest zatem prawdziwa wartość z etykiety dla wyniku ufności dla każdego bbox ? Jest to przecięcie nad połączeniem przewidywanej ramki granicznej z tą z etykiety.C^ij
  • 1i01iobj ma wartość gdy w komórce znajduje się obiekt, a gdzie indziej1i0
  • ji1ij 1 n o o b j i j i1ijobj "oznacza, że predyktor ramki ograniczającej w komórce jest odpowiedzialny za tę prognozę". Innymi słowy, jest równa jeśli w komórce znajduje się obiekt, a pewność predyktorów tej komórki jest najwyższa spośród wszystkich predyktorów tej komórki. jest prawie taki sam, z wyjątkiem tego, że ma wartość 1, gdy w komórce nie ma żadnych obiektówji1ij1ijnoobji

Zauważ, że użyłem dwóch indeksów i dla każdej prognozy bbox, nie jest tak w tym artykule, ponieważ zawsze jest czynnik lub więc nie ma dwuznacznej interpretacji: wybrane jest tym, które odpowiada najwyższemu ufności w tej komórce.j 1 o b j i j 1 n o o b j i j jij1ijobj1ijnoobjj

Bardziej ogólne wyjaśnienie każdego terminu sumy:

  1. termin ten karze złą lokalizację centrum komórek
  2. termin ten penalizuje obwiednię niedokładną wysokością i szerokością. Występuje pierwiastek kwadratowy, więc błędy w małych obwiedniach są bardziej karalne niż błędy w dużych obwiedniach.
  3. termin ten próbuje wyrównać wynik ufności do IOU między obiektem a prognozą, gdy istnieje jeden obiekt
  4. Próbuje uzyskać wynik ufności bliski gdy w komórce nie ma żadnego obiektu0
  5. Jest to prosta utrata klasyfikacji (nie wyjaśniono w artykule)
użytkownik7573566
źródło
1
Czy powinien to być drugi punkt B*(5+C)? Przynajmniej tak jest w przypadku YOLO v3.
sachinruk
@sachinruk odzwierciedla to zmiany w modelu między oryginalnym YOLO a wersją v2 i v3.
David Refaeli
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

Czy funkcja utraty YOLOv2 nie wygląda przerażająco? To nie jest tak naprawdę! Jest to jedna z najodważniejszych i najinteligentniejszych funkcji utraty na rynku.

Najpierw spójrzmy na to, co sieć faktycznie przewiduje.

Jeśli podsumujemy, YOLOv2 przewiduje wykrycia na mapie obiektów 13x13, więc w sumie mamy 169 map / komórek.

Mamy 5 skrzynek kotwicznych. Dla każdej skrzynki kontrolnej potrzebujemy Oceny Pewności Obiektywności (czy znaleziono jakiś obiekt?), 4 Współrzędne ( i ) dla skrzynki kontrolnej i 20 najlepszych klas. Można to z grubsza postrzegać jako 20 współrzędnych, 5 wyników ufności i 100 prawdopodobieństw klasowych dla wszystkich 5 prognoz zakotwiczonych razem.tx,ty,tw,th

Mamy kilka rzeczy do zmartwienia:

  • xi,yi , czyli położenie środka ciężkości skrzynki kotwicznej
  • wi,hi czyli szerokość i wysokość skrzynki kotwiczącej
  • Ci , czyli Objectness , tj. Wynik pewności, czy istnieje obiekt, czy nie, oraz
  • pi(c) , który jest utratą klasyfikacji.
  • Musimy nie tylko przeszkolić sieć w wykrywaniu obiektu, jeśli w komórce znajduje się obiekt, musimy również ukarać sieć, jeśli przewiduje obiekt w komórce, gdy nie było żadnego. Jak to robimy? Używamy maski ( i ) dla każdej komórki. Jeśli pierwotnie istniał obiekt to 1, a inne komórki bez obiektu mają wartość 0. jest tylko odwrotnością , gdzie jest 1 jeśli nie było żadnego obiektu w komórce i 0, jeśli było.𝟙iobj𝟙inoobj𝟙iobj𝟙inoobj𝟙iobj
  • Musimy to zrobić dla wszystkich 169 komórek i
  • Musimy to zrobić 5 razy (dla każdej skrzynki kotwicznej).

Wszystkie straty są błędami średniej kwadratowej , z wyjątkiem utraty klasyfikacji, która wykorzystuje funkcję entropii krzyżowej .

Teraz złammy kod na obrazie.

  • Musimy obliczyć straty dla każdej skrzynki kontrolnej (łącznie 5)

    • j=0B reprezentuje tę część, gdzie B = 4 (5 - 1, ponieważ indeks zaczyna się od 0)
  • Musimy to zrobić dla każdej z komórek 13x13, gdzie S = 12 (ponieważ zaczynamy indeks od 0)

    • i=0S2 reprezentuje tę część.
  • 𝟙ijobj ma wartość 1, gdy w komórce znajduje się obiekt, w przeciwnym razie 0.i

  • 𝟙ijnoobj ma wartość 1, gdy w komórce nie ma żadnego obiektu, w przeciwnym razie 0.i
  • 𝟙iobj ma wartość 1, gdy przewidywana jest określona klasa, w przeciwnym razie 0.
  • λ są stałymi. λ jest najwyższe dla współrzędnych, aby bardziej skupić się na wykrywaniu (pamiętaj, że w YOLOv2 najpierw szkolimy go do rozpoznawania, a następnie do wykrywania, ciężkie karanie za rozpoznanie to strata czasu, raczej skupiamy się na uzyskaniu najlepszych ramek ograniczających!)
  • Możemy również zauważyć, że są pod pierwiastkiem kwadratowym. Odbywa się to w celu ukarania mniejszych obwiedni, ponieważ potrzebujemy lepszego przewidywania na mniejszych obiektach niż na większych obiektach (wezwanie autora). Sprawdź poniższą tabelę i zaobserwuj, w jaki sposób mniejsze kary są bardziej karane, jeśli zastosujemy metodę „pierwiastka kwadratowego” (spójrz na punkt przegięcia, gdy mamy 0,3 i 0,2 jako wartości wejściowe) (PS: Zachowałem stosunek var1 i var2 to samo dla wyjaśnienia):wi,hi

        var1 | var2 | (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

Nie takie straszne, prawda!

Przeczytaj TUTAJ, aby uzyskać więcej informacji.

RShravan
źródło
1
Czy i i in \ sum powinny zaczynać się od 1 zamiast 0?
webbertiger
1
Tak, to prawda, webertiger, odpowiednio zaktualizowałem odpowiedź. Dzięki!
RShravan
Czy 1, gdy w komórce i znajduje się obiekt obwiedni j? i nie dla wszystkich j? jak wybieramy j, która ma być ustawiona na jeden, a reszta na zero. tj. jaka jest prawidłowa skala / kotwica, w której jest włączona. 1ijobj
sachinruk
1
Uważam, że S powinno nadal mieć 13 lat, ale jeśli sumowanie zaczyna się od 0, powinno kończyć sięS21
Julian
4
@RShravan, mówisz: „Wszystkie straty są błędami średnich kwadratów, z wyjątkiem strat klasyfikacji, które wykorzystują funkcję entropii krzyżowej”. Czy możesz wytłumaczyć? W tym równaniu wygląda również jak MSE. Z góry dziękuję
Julian
3

Twoja funkcja utraty dotyczy YOLO v1, a nie YOLO v2. Byłem również zdezorientowany różnicą w dwóch funkcjach utraty i wydaje się, że wiele osób to: https://groups.google.com/forum/#!topic/darknet/TJ4dN9R4iJk

Artykuł YOLOv2 wyjaśnia różnicę w architekturze od YOLOv1 w następujący sposób:

Usuwamy w pełni połączone warstwy z YOLO (v1) i używamy ramek kontrolnych do przewidywania ramek ograniczających ... Kiedy przechodzimy do ramek kontrolnych, oddzielamy również mechanizm przewidywania klas od położenia przestrzennego i zamiast tego przewidujemy klasę i obiektywizm dla każdej skrzynki kontrolnej.

Oznacza to, że prawdopodobieństwo zaufanie powyżej powinno zależeć nie tylko na i , ale również indeks polu kotwicy, powiedzmy . Dlatego strata musi być inna niż powyżej. Niestety papier YOLOv2 nie określa wprost swojej funkcji utraty.pi(c)icj

Próbuję odgadnąć funkcję utraty YOLOv2 i omawiam ją tutaj: https://fairyonice.github.io/Part_4_Object_Detection_with_Yolo_using_VOC_2012_data_loss.html

Wróżka
źródło
1

Oto moja notatka do nauki

  1. Funkcja straty: błąd kwadratu

    za. Powód: łatwy do optymalizacji b. Problem: (1) Nie jest idealnie zgodny z naszym celem maksymalizacji średniej precyzji. (2) Na każdym obrazie wiele komórek siatki nie zawiera żadnego obiektu. To przesuwa oceny ufności tych komórek w kierunku 0, często obezwładniając gradient z komórek zawierających obiekt. do. Rozwiązanie: zwiększ straty wynikające z przewidywań współrzędnych ramki ograniczającej i zmniejsz straty wynikające z przewidywań pewności z pól, które nie zawierają obiektów. Używamy dwóch parametrów i = 0,5 d. Błąd zsumowany do kwadratu również waży błędy w dużych i małych polach

    λcoord=5
    λnoobj

  2. Tylko jedna obwiednia powinna być odpowiedzialna za każdy obiekt. Przypisujemy jeden predyktor, który jest odpowiedzialny za przewidywanie obiektu, na podstawie którego predykcja ma najwyższy bieżący IOU z prawdą podstawową.

za. Utrata ze współrzędnej obwiedni (x, y) Należy pamiętać, że utrata pochodzi z jednego obwiedni z jednej komórki siatki. Nawet jeśli obiekt nie znajduje się w komórce siatki jako podstawowa prawda.

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

b. Utrata od szerokości w i wysokości h. Zauważ, że utrata pochodzi z jednej ramki granicznej z jednej komórki siatki, nawet jeśli obiekt nie znajduje się w komórce siatki jako podstawowa prawda.

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

do. Utrata zaufania w każdej oprawionej ramce. Nie chodzi o to, że strata pochodzi z jednego obwiedni z jednego pola siatki, nawet jeśli obiekt nie znajduje się w komórce siatki jako podstawowa prawda.

{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
d. Utrata z klasowego prawdopodobieństwa komórki siatki , tylko gdy obiekt znajduje się w komórce siatki jako podstawowa prawda.

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

Funkcja utraty powoduje karanie klasyfikacji tylko wtedy, gdy obiekt jest obecny w komórce siatki. Karane jest również współrzędne pola granicznego, jeśli to pole jest odpowiedzialne za pole naziemne (najwyższe IOU)

Roy
źródło
Pytanie o „C”, w artykule, zaufanie jest wartością obiektu lub brak obiektu wyprowadzoną przez IOU; czy to tylko na czas testu, czy też służy to funkcji kosztu szkolenia? Myślałem, że po prostu odejmujemy wartość C od wyniku i etykiety (tak jak zrobiliśmy to z wartościami siatki), ale czy to nieprawda?
moondra
0

Napisana przez ciebie formuła straty dotyczy pierwotnej utraty papieru YOLO , a nie straty w wersji 2 lub 3.

Istnieją pewne główne różnice między wersjami. Sugeruję przeczytanie artykułów lub sprawdzenie implementacji kodu. Artykuły: v2 , v3 .

Zauważyłem kilka głównych różnic:

  • Prawdopodobieństwo klas jest obliczane dla ramki granicznej (stąd wyjście wynosi teraz S ∗ S ∗ B * (5 + C) zamiast S S (B * 5 + C))

  • Współrzędne ramki granicznej mają teraz inną reprezentację

  • W wersji 3 używają 3 pól w 3 różnych „skalach”

Możesz spróbować zapoznać się z drobiazgowymi szczegółami utraty, albo patrząc na implementację python / keras v2 , v3 (poszukaj funkcji yolo_loss) lub bezpośrednio na implementację c v3 (poszukaj delta_yolo_box i delta_yolo_class).

David Refaeli
źródło