„Nie bądź dla siebie zbyt trudny” zrealizował Deep Learning

To historia uświadomienia sobie, że społeczność Deep Learning miała w tym roku - „nie karać zbytnio swoich modeli za to, że się mylili”. Ta świadomość przyszła, gdy naukowcy uderzali głowami o ścianę, próbując wszelkiego rodzaju hacków do wykrywania wielu obiektów. Ale potem przyszedł zmieniacz gier z Facebook AI Research (FAIR) - Focal Loss for Dense Object Detection - który przyniósł uświadomienie, że być może jesteśmy zbyt surowi, i po raz kolejny jeden wgląd (zamieniony w równanie matematyczne) usunął wszystkie nieład.

Zacznijmy od pewnego tła. Aby móc trenować dowolną sieć neuronową, potrzebujemy 3 rzeczy:

  1. Dane
  2. Architektura sieci neuronowej
  3. Funkcja utraty

Zadaniem funkcji utraty jest uzyskanie niskiej liczby, gdy sygnał wyjściowy z sieci neuronowej jest bliski rzeczywistej wartości i odwrotnie. W ten sposób karze sieć neuronową za to, że się myli.

Jeśli spojrzymy na historię wykrywania wielu obiektów, powstały dwie klasy modeli (prawie w tym samym czasie pod koniec 2015 r.) Do kompleksowego wykrywania (1-etapowego) wielu obiektów: YOLO (tylko patrzysz raz) i SSD (Single Shot Multibox Detector), które były przedstawicielami dwóch możliwych architektur, jakie mogliśmy mieć, przyklejając niestandardową głowę do wstępnie przeszkolonej sieci splotowej - takiej jak ResNet.

YOLO reprezentowało klasę modeli, w której wypluwamy jeden długi wektor z w pełni połączonej warstwy liniowej, natomiast podejście aktywacji splotowych w niestandardowej głowicy zapoczątkowała klasa modeli SSD.

Od czasu wydania YOLO i SSD, prawie wszystko się zmieniło w kierunku SSD - do tego stopnia, że ​​YOLOv3 (wersja YOLO 3) robi to teraz na SSD, ponieważ SSD wykorzystuje pole receptywne aktywacji splotowych.

Pole recepcyjne aktywacji jest niczym innym jak częścią danych wejściowych, która była zaangażowana w obliczenie tej aktywacji. Zauważ, że pole odbiorcze nie tylko mówi, że „wejścia wewnątrz tego prostokąta są odpowiedzialne za tę aktywację”, ale także że „ze wszystkich wejść wewnątrz tego prostokąta, te znajdujące się w centrum są bardziej odpowiedzialne za tę aktywację niż inne” .

Źródło: http://cs231n.github.io/convolutional-networks/

Receptive Field pozwala nam powiedzieć coś takiego:

Aktywacja wyjścia warstwy splotowej u góry z lewej strony będzie odpowiedzialna za obiekty w lewej górnej części obrazu, aktywacja wyjścia warstwy splotowej u góry z prawej strony będzie odpowiedzialna za obiekty w dolnej części obrazu z prawej strony i tak dalej .

Nasza funkcja utraty może teraz spojrzeć na każdą z wyjściowych aktywacji splotowych i zdecydować, czy ta aktywacja jest w stanie poprawnie odzwierciedlić współrzędne pola granicznego i klasy obiektów w jego polu odbiorczym. To okazuje się trudne do zrobienia :(. Wiąże się to z „problemem dopasowania”, który rozwiązuje się poprzez posiadanie zakotwiczonych skrzynek (lub domyślnych skrzynek) i znajdowanie ich nakładania się (Indeks Jaccard lub Przecięcie nad Unią) z każdym z gruntów obiekty prawdy. Następnie, jak opisano w dokumencie SSD, do każdej skrzynki kontrolnej przypisany jest indeks lub tło obiektu prawdziwej ziemi.

Uwaga: jeśli ostatni akapit nie miał większego sensu, przeczytaj albo o dysku SSD, albo poczekaj na mój następny wpis na blogu, aby zrozumieć, w jaki sposób interpretujemy aktywacje i nimi manipulujemy!

Gdy miniemy etap dopasowywania, jesteśmy w zasadzie skończeni. Możemy wziąć aktywacje odpowiadające dopasowanym skrzynkom kotwiczącym i wziąć straty L1 dla współrzędnych ramki ograniczającej plus straty Cross Entropy do klasyfikacji, aby mieć naszą funkcję straty.

Ale to wciąż nie daje nam świetnych rezultatów. Model nie sprawdza się w przypadku małych obiektów na obrazie. I wgląd w to, dlaczego to nie zadziałało, pochodzi z dokumentu Focal Loss for Dense Object Detection.

Posiadamy skrzynie kotwiące o różnej ziarnistości. Mniejsze skrzynki kotwiczne prawdopodobnie będą odpowiedzialne za znajdowanie małych obiektów na obrazie. Ponieważ jednak większość tych mniejszych skrzynek kotwicznych podczas naszego treningu zawiera tło, nigdy nie nabierają pewności w przewidywaniu innych klas. I dlaczego nie nabierają pewności siebie - ponieważ karamy ich zbyt surowo za to, że się mylą. I o to chodziło! Dokument „Ogniskowa ogniskowej” przekształcił ten wgląd w matematyczną formułę, jak pokazano poniżej, i całkowicie zmienił grę!

Źródło: papier do ogniskowania

Niebieska linia na powyższym wykresie oznacza utratę entropii krzyżowej. Oś y pokazuje utratę entropii krzyżowej, której model musi doświadczyć, jeśli przewiduje klasę prawdziwości podłoża z prawdopodobieństwem x (na osi x). Chodzi o to, że nawet jeśli model przewiduje właściwą rzecz z prawdopodobieństwem 0,6, nadal bardzo ją karamy. Tak więc, nawet jeśli model chce przewidzieć odpowiednią klasę, nie ma w tym żadnej korzyści, a ponieważ jest w tle przez większość czasu, model kończy się mówiąc o tle, chyba że jest cholernie pewien innej klasy. Zatem sztuczka polega na zmianie funkcji utraty, aby wyglądała bardziej jak zielona lub fioletowa linia na wykresie. W dokumencie dotyczącym utraty ogniskowej pomnożono stratę przez krzyżową entropię przez współczynnik, aby uczynić go mniej trudnym dla modelu i dało świetne wyniki, co można sprawdzić tutaj.