J'essaie de comprendre la fonction de perte de Yolo v2:
Si quelqu'un peut détailler la fonction.
neural-networks
loss-functions
object-detection
yolo
Kamel BOUYACOUB
la source
la source
Réponses:
Explication des différents termes:
Notez que j'ai utilisé deux index et j pour chaque prédiction bbox, ce n'est pas le cas dans l'article car il y a toujours un facteur 1 o b j i j ou 1 n o o b j i j donc il n'y a pas d'interprétation ambiguë: le j choisi est celui correspondant au score de confiance le plus élevé dans cette cellule.je j 1o b jje j 1n o o b jje j j
Explication plus générale de chaque terme de la somme:
la source
B*(5+C)
? C'est du moins le cas pour YOLO v3.La fonction de perte YOLOv2 ne fait-elle pas peur? Ce n'est pas vraiment! C'est l'une des fonctions de perte les plus audacieuses et les plus intelligentes du marché.
Voyons d'abord ce que le réseau prédit réellement.
Si nous récapitulons, YOLOv2 prédit des détections sur une carte d'entités 13x13, donc au total, nous avons 169 cartes / cellules.
Nous avons 5 boîtes d'ancrage. Pour chaque boîte d'ancrage nous avons besoin objectness-confiance Score (si un objet a été trouvé?), 4 coordonnées (tX, ty, tw, et th ) pour la zone d'ancrage, et 20 classes de haut. Cela peut être grossièrement considéré comme 20 coordonnées, 5 scores de confiance et 100 probabilités de classe pour les 5 prédictions de la boîte d'ancrage réunies.
Nous avons peu de choses à craindre:
Toutes les pertes sont des erreurs quadratiques moyennes , à l'exception de la perte de classification, qui utilise la fonction d' entropie croisée .
Maintenant, cassons le code dans l'image.
Nous devons calculer les pertes pour chaque boîte d'ancrage (5 au total)
Nous devons le faire pour chacune des cellules 13x13 où S = 12 (puisque nous commençons l'index à partir de 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
Pas si effrayant, non!
Lisez ICI pour plus de détails.
la source
Votre fonction de perte concerne YOLO v1 et non YOLO v2. J'ai également été confondu avec la différence entre les deux fonctions de perte et il semble que beaucoup de gens le soient: https://groups.google.com/forum/#!topic/darknet/TJ4dN9R4iJk
Le papier YOLOv2 explique la différence d'architecture de YOLOv1 comme suit:
J'essaie de deviner la fonction de perte de YOLOv2 et d'en discuter ici: https://fairyonice.github.io/Part_4_Object_Detection_with_Yolo_using_VOC_2012_data_loss.html
la source
Voici ma note d'étude
Fonction de perte: erreur somme au carré
Un seul cadre de délimitation doit être responsable de chaque objet. Nous assignons un prédicteur pour être responsable de la prédiction d'un objet sur la base de laquelle la prédiction a le IOU courant le plus élevé avec la vérité au sol.
une. Perte à partir des coordonnées de la boîte liée (x, y) Notez que la perte provient d'une boîte englobante d'une cellule de la grille. Même si obj pas dans la cellule de la grille comme vérité fondamentale.
b. Perte de largeur w et hauteur h. Notez que la perte provient d'une boîte englobante d'une cellule de grille, même si l'objet n'est pas dans la cellule de grille en tant que vérité fondamentale.
c. Perte de confiance dans chaque case reliée. Non pas que la perte provienne d'une boîte englobante d'une cellule de grille, même si l'objet n'est pas dans la cellule de grille comme vérité de fond.
La fonction de perte ne pénalise la classification que si obj est présent dans la cellule de la grille. Cela pénalise également les coordonnées de la boîte englobante si cette boîte est responsable de la boîte au sol (IOU le plus élevé)
la source
La formule de perte que vous avez écrite correspond à la perte de papier YOLO d'origine , pas à la perte v2 ou v3.
Il existe des différences majeures entre les versions. Je suggère de lire les articles ou de vérifier les implémentations du code. Papiers: v2 , v3 .
Quelques différences majeures que j'ai remarquées:
La probabilité de classe est calculée par boîte englobante (d'où la sortie est désormais S ∗ S ∗ B * (5 + C) au lieu de S S (B * 5 + C))
Les coordonnées de la boîte englobante ont désormais une représentation différente
En v3, ils utilisent 3 cases à travers 3 "échelles" différentes
Vous pouvez essayer d'entrer dans les moindres détails de la perte, soit en regardant l'implémentation python / keras v2 , v3 (recherchez la fonction yolo_loss), soit directement dans l'implémentation c v3 (recherchez delta_yolo_box et delta_yolo_class).
la source