Explication de la fonction de perte Yolo


16

J'essaie de comprendre la fonction de perte de Yolo v2:

λcoorje=0S2j=0B1jejobj[(Xje-X^je)2+(yje-y^je)2]+λcoorje=0S2j=0B1jejobj[(wje-w^je)2+(hje-h^je)2]+je=0S2j=0B1jejobj(Cje-C^je)2+λnoobjje=0S2j=0B1jejnoobj(Cje-C^je)2+je=0S21jeobjcclunesses(pje(c)-p^je(c))2

Si quelqu'un peut détailler la fonction.


5
personne ne peut vous aider sans contexte ... au moins dites-nous de quel papier il s'agit.
bdeonovic

1
«Je ne comprends pas» et «détailler la fonction» sont trop larges. Veuillez essayer d'identifier des questions particulières. Notez qu'il existe déjà de nombreuses questions relatives à Yolo , dont certaines peuvent vous fournir au moins une partie de ce que vous cherchez
Glen_b -Reinstate Monica

1
J'ajouterais ma réponse si vous montriez
Aksakal

1
Dans ce blog , il y a une explication graphique détaillée de yolo et yolov2. Cela répond à la question concernant la fonction de perte. Si c'est très utile pour les débutants et les utilisateurs plus avancés.
MBoaretto

Réponses:


18

Explication des différents termes:

  • Les constantes 3 sont que des constantes pour prendre en compte plus d'un aspect de la fonction de perte. Dans l'article est le plus élevé afin d'avoir le plus d'importance au premier termeλ c o o r dλλcoor
  • La prédiction de YOLO est un vecteur : prédictions bbox pour chaque cellule de grille et prédiction de classe pour chaque cellule de grille (où est le nombre de classes). Les 5 sorties bbox de la case j de la cellule i sont les coordonnées du centre tte de la bbox , la hauteur , la largeur et un indice de confianceB C C x i j y i j h i j w i j C i jSS(B5+C)BCCXjej yjejhjejwjejCjej
  • J'imagine que les valeurs avec un chapeau sont les vraies lues sur l'étiquette et celles sans chapeau sont celles prédites. Quelle est donc la valeur réelle de l'étiquette pour le score de confiance pour chaque bbox ? Il s'agit de l'intersection sur l'union de la boîte englobante prédite avec celle de l'étiquette.C^jej
  • 1i01jeobj vaut lorsqu'il y a un objet dans la cellule et ailleurs1je0
  • ji1ij 1 n o o b j i j1jejobj "indique que le ème prédicteur de la boîte englobante dans la cellule est responsable de cette prédiction". En d'autres termes, il est égal à s'il y a un objet dans la cellule et la confiance des èmes prédicteurs de cette cellule est la plus élevée parmi tous les prédicteurs de cette cellule. est presque le même sauf qu'il vaut 1 lorsqu'il n'y a AUCUN objet dans la cellule ijje1jej1jejnoobjje

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.jej1jejobj1jejnoobjj

Explication plus générale de chaque terme de la somme:

  1. ce terme pénalise la mauvaise localisation du centre des cellules
  2. ce terme pénalise la boîte englobante avec une hauteur et une largeur imprécises. La racine carrée est présente de sorte que les erreurs dans les petites boîtes englobantes sont plus pénalisantes que les erreurs dans les grandes boîtes englobantes.
  3. ce terme essaie de rendre le score de confiance égal à l'IOU entre l'objet et la prédiction quand il y a un objet
  4. Tente de rendre le score de confiance proche de lorsqu'il n'y a aucun objet dans la cellule0
  5. Il s'agit d'une simple perte de classification (non expliquée dans l'article)

1
Le deuxième point est-il censé être B*(5+C)? C'est du moins le cas pour YOLO v3.
sachinruk

@sachinruk, cela reflète les changements de modèle entre le YOLO d'origine et ses versions 2 et 3.
David Refaeli

12

λcoordi=0S2j=0B1jejobj[(Xje-X^je)2+(yje-y^je)2]+λcoorje=0S2j=0B1jejobj[(wje-w^je)2+(hje-h^je)2]+je=0S2j=0B1jejobj(Cje-C^je)2+λnoobjje=0S2j=0B1jejnoobj(Cje-C^je)2+je=0S21jeobjcclunesses(pje(c)-p^je(c))2

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:

  • Xje,yje , qui est l'emplacement du centre de gravité de la boîte d'ancrage
  • wje,hje , qui est la largeur et la hauteur de la boîte d'ancrage
  • Cje , qui est l'Objectivité, c'est-à-dire le score de confiance de l'existence ou non d'un objet, et
  • pje(c) , qui est la perte de classification.
  • Nous devons non seulement former le réseau pour détecter un objet s'il y a un objet dans une cellule, nous devons également punir le réseau, il prédit un objet dans une cellule, quand il n'y en avait pas. Comment faisons-nous cela? Nous utilisons un masque ( 𝟙jeobj et 𝟙jenoobj ) pour chaque cellule. Si à l'origine il y avait un objet 𝟙jeobj est 1 et les autres cellules sans objet sont 0. 𝟙jenoobj est juste inverse de 𝟙jeobj, où il est 1 s'il n'y avait pas d' objet dans la cellule et 0 s'il y en avait.
  • Nous devons le faire pour les 169 cellules, et
  • Nous devons le faire 5 fois (pour chaque boîte d'ancrage).

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)

    • j=0B représente cette partie, où B = 4 (5 - 1, puisque l'indice commence à 0)
  • Nous devons le faire pour chacune des cellules 13x13 où S = 12 (puisque nous commençons l'index à partir de 0)

    • je=0S2 représente cette partie.
  • 𝟙jejobjje

  • 𝟙jejnoobjje
  • 𝟙jeobj
  • λs sont des constantes. λ est le plus élevé pour les coordonnées afin de se concentrer davantage sur la détection (rappelez-vous, dans YOLOv2, nous le formons d'abord pour la reconnaissance, puis pour la détection, pénaliser fortement pour la reconnaissance est une perte de temps, nous nous concentrons plutôt sur l'obtention des meilleures boîtes englobantes!)
  • wje,hje

        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.


1
Faut-il que i et j dans \ sum commencent à 1 au lieu de 0?
webbertiger

1
Oui, c'est correct webertiger, ont mis à jour la réponse en conséquence. Merci!
RShravan

1jejobj

1
S2-1

3
@RShravan, vous dites: "Toutes les pertes sont des erreurs quadratiques moyennes, sauf la perte de classification, qui utilise la fonction d'entropie croisée". Pourriez-vous expliquer? Dans cette équation, il ressemble également à MSE. Merci d'avance
Julian

3

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:

Nous supprimons les couches entièrement connectées de YOLO (v1) et utilisons des boîtes d'ancrage pour prédire les boîtes englobantes ... Lorsque nous passons aux boîtes d'ancrage, nous découplons également le mécanisme de prédiction de classe de l'emplacement spatial et prédisons plutôt la classe et l'objectivité pour chaque boîte d'ancrage.

pje(c)jecj

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


1

Voici ma note d'étude

  1. Fonction de perte: erreur somme au carré

    λcoor=5
    λnoobj

  2. 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.

{λcoorje=0S2[(Xje-X^je)2+(yje-yje^)2]boîte de délimitation responsable0 autre

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.

{λcoorje=0S2[(wje-w^je)2+(hje-h^je)2]boîte de délimitation responsable0 autre

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.

{je=0S2(Cje-C^je)2obj dans la cellule de la grille et la zone de délimitation responsableλnoobjje=0S2(Cje-C^je)2obj pas dans la cellule de la grille et la zone de délimitation responsable0autre

{je=0S2cclunesses(pje(c)-p^je(c))2obj dans la cellule de la grille0autre

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é)


Question sur «C», dans l'article, la confiance est la valeur d'objet ou pas d'objet produite multipliée par l'IOU; est-ce juste pour le temps de test ou est-ce aussi utilisé pour la fonction de coût de formation? Je pensais que nous soustrayions simplement la valeur C de la sortie et de l'étiquette (comme nous l'avons fait avec les valeurs de la grille), mais c'est incorrect?
moondra

0

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).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.