Sto cercando di capire la funzione di perdita di Yolo v2:
Se qualcuno può dettagliare la funzione.
Sto cercando di capire la funzione di perdita di Yolo v2:
Se qualcuno può dettagliare la funzione.
Risposte:
Spiegazione dei diversi termini:
Nota che ho usato due indici e per ogni previsioni Bbox, questo non è il caso in questo articolo, perché c'è sempre un fattore o quindi non esiste un'interpretazione ambigua: il scelto è quello corrispondente al punteggio di confidenza più alto in quella cella.j 1 o b j i j j
Spiegazione più generale di ogni termine della somma:
B*(5+C)
? Questo è il caso di YOLO v3.
La funzione di perdita YOLOv2 non sembra spaventosa? In realtà non lo è! È una delle funzioni di perdita più audaci e intelligenti in circolazione.
Diamo prima un'occhiata a ciò che la rete prevede realmente.
Se ricapitoliamo, YOLOv2 prevede rilevamenti su una mappa caratteristica 13x13, quindi in totale abbiamo 169 mappe / celle.
Abbiamo 5 scatole di ancoraggio. Per ogni casella di ancoraggio abbiamo bisogno del punteggio di obiettività-fiducia (se è stato trovato qualche oggetto?), 4 coordinate ( e ) per la casella di ancoraggio e 20 classi principali. Questo può essere visto grossolanamente come 20 coordinate, 5 punteggi di confidenza e 100 probabilità di classe per tutte e 5 le previsioni del riquadro di ancoraggio messe insieme.
Abbiamo alcune cose di cui preoccuparsi:
Tutte le perdite sono errori al quadrato medio , ad eccezione della perdita di classificazione, che utilizza la funzione di entropia incrociata .
Ora, rompiamo il codice nell'immagine.
Dobbiamo calcolare le perdite per ogni scatola di ancoraggio (5 in totale)
Dobbiamo farlo per ciascuna delle celle 13x13 dove S = 12 (poiché iniziamo l'indice da 0)
è 1 quando c'è un oggetto nella cella , altrimenti 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,00,233 mila
0,2148 | 0.143 | 0,00512 | 0,00,723 mila
0.3030 | 0,202 | 0,01 | 0.01
0.8808 | 0,587 | 0,0862 | 0,0296
4.4920 | 2.994 | 2.2421 | 0,1512
Non così spaventoso, giusto!
Leggi QUI per ulteriori dettagli.
La tua funzione di perdita è per YOLO v1 e non per YOLO v2. Sono stato anche confuso con la differenza nelle due funzioni di perdita e sembra che molte persone lo siano: https://groups.google.com/forum/#!topic/darknet/TJ4dN9R4iJk
Il documento YOLOv2 spiega la differenza di architettura rispetto a YOLOv1 come segue:
Rimuoviamo i livelli completamente collegati da YOLO (v1) e utilizziamo i riquadri di ancoraggio per prevedere i riquadri di delimitazione ... Quando passiamo ai riquadri di ancoraggio, disaccoppiamo anche il meccanismo di predizione della classe dalla posizione spaziale e prediamo invece classe e obiettività per ogni ancoraggio.
Ciò significa che la probabilità di confidenza sopra dovrebbe dipendere non solo da e ma anche da un indice di anchor box, diciamo . Pertanto, la perdita deve essere diversa da quella sopra. Sfortunatamente, la carta YOLOv2 non afferma esplicitamente la sua funzione di perdita.
Cerco di indovinare la funzione di perdita di YOLOv2 e di discuterne qui: https://fairyonice.github.io/Part_4_Object_Detection_with_Yolo_using_VOC_2012_data_loss.html
Ecco la mia nota di studio
Funzione di perdita: errore di somma quadrata
un. Motivo: facile da ottimizzare b. Problema: (1) non si allinea perfettamente con il nostro obiettivo di massimizzare la precisione media. (2) In ogni immagine, molte celle della griglia non contengono alcun oggetto. Questo spinge i punteggi di confidenza di quelle celle verso 0, spesso sopraffacendo il gradiente dalle celle che contengono un oggetto. c. Soluzione: aumentare la perdita derivante dalle previsioni delle coordinate del riquadro di delimitazione e ridurre la perdita derivante dalle previsioni di confidenza delle caselle che non contengono oggetti. Utilizziamo due parametri e = 0,5 d. L'errore di somma quadrata equivale ugualmente a pesare errori in scatole grandi e piccole
Solo un riquadro di selezione dovrebbe essere responsabile per ciascun oggetto. Assegniamo a un predittore il compito di predire un oggetto in base al quale la previsione ha l'IOU corrente più elevato con la verità di base.
un. Perdita dalla coordinata del riquadro associato (x, y) Si noti che la perdita proviene da un riquadro di delimitazione da una cella della griglia. Anche se obj non nella cella della griglia come verità di base.
b. Perdita da larghezza w e altezza h. Si noti che la perdita proviene da un riquadro di delimitazione da una cella della griglia, anche se l'oggetto non si trova nella cella della griglia come verità di base.
c. Perdita dalla fiducia in ogni riquadro rilegato. Non che la perdita provenga da un riquadro di delimitazione da una griglia cel, anche se l'oggetto non si trova nella cella della griglia come verità di base.
La funzione di perdita penalizza la classificazione solo se obj è presente nella cella della griglia. Penalizza anche le coordinate del riquadro di delimitazione se quella casella è responsabile del riquadro di terra (IOU più elevato)
La formula di perdita che hai scritto riguarda la perdita di carta originale YOLO , non la perdita v2 o v3.
Ci sono alcune differenze importanti tra le versioni. Suggerisco di leggere i documenti o di controllare le implementazioni del codice. Documenti: v2 , v3 .
Alcune differenze principali che ho notato:
La probabilità di classe viene calcolata per rettangolo di selezione (quindi l'output è ora S ∗ S ∗ B * (5 + C) anziché S S (B * 5 + C))
Le coordinate del riquadro di delimitazione ora hanno una rappresentazione diversa
Nella v3 usano 3 scatole attraverso 3 diverse "scale"
Puoi provare ad entrare nei dettagli nitidi della perdita, sia guardando l'implementazione python / keras v2 , v3 (cerca la funzione yolo_loss) o direttamente l'implementazione c v3 (cerca delta_yolo_box e delta_yolo_class).