Próbuję zrozumieć funkcję utraty Yolo v2:
Jeśli jakakolwiek osoba może szczegółowo opisać tę funkcję.
Próbuję zrozumieć funkcję utraty Yolo v2:
Jeśli jakakolwiek osoba może szczegółowo opisać tę funkcję.
Odpowiedzi:
Objaśnienie różnych terminów:
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 j
Bardziej ogólne wyjaśnienie każdego terminu sumy:
B*(5+C)
? Przynajmniej tak jest w przypadku YOLO v3.
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.
Mamy kilka rzeczy do zmartwienia:
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)
Musimy to zrobić dla każdej z komórek 13x13, gdzie S = 12 (ponieważ zaczynamy indeks od 0)
ma wartość 1, gdy w komórce znajduje się obiekt, w przeciwnym razie 0.
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.
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.
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
Oto moja notatka do nauki
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
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.
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.
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.
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)
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).