Explicación de la función de pérdida de Yolo

16

Estoy tratando de entender la función de pérdida Yolo v2:

λCoorreyo=0 0S2j=0 0si1yojosij[(Xyo-X^yo)2+(yyo-y^yo)2]+λCoorreyo=0 0S2j=0 0si1yojosij[(wyo-w^yo)2+(hyo-h^yo)2]+yo=0 0S2j=0 0si1yojosij(Cyo-C^yo)2+λnorteoosijyo=0 0S2j=0 0si1yojnorteoosij(Cyo-C^yo)2+yo=0 0S21yoosijCClunssmis(pagyo(C)-pag^yo(C))2

Si alguna persona puede detallar la función.

Kamel BOUYACOUB
fuente
55
nadie puede ayudarte sin contexto ... al menos dinos de qué papel es esto.
bdeonovic
1
"No entiendo" y "detallar la función" son demasiado amplios. Intenta identificar preguntas particulares. Tenga en cuenta que hay numerosas cuestiones relativas a Yolo ya , algunos de los cuales le puede proporcionar al menos parte de lo que busca
Glen_b -Reinstate Monica
1
Añadiría mi respuesta si señalara lo que no está claro en esta excelente explicación: medium.com/@jonathan_hui/…
Aksakal
1
En este blog aquí hay una explicación gráfica detallada de yolo y yolov2. Responde la pregunta sobre la función de pérdida. Es muy útil para principiantes y usuarios más avanzados.
MBoaretto

Respuestas:

18

Explicación de los diferentes términos:

  • Las constantes 3 son solo constantes para tener en cuenta más un aspecto de la función de pérdida. En el artículo λ c O O R d es la más alta con el fin de tener la mayor importancia en el primer mandatoλλCoorre
  • La predicción de YOLO es un vector : predicciones B bbox para cada celda de cuadrícula y predicción de clase C para cada celda de cuadrícula (donde C es el número de clases). Las 5 salidas de bbox de la caja j de la celda i son coordenadas del centro tte de la bbox x i j y i j , altura h i j , ancho w i j y un índice de confianza C i jSS(si5 5+C)siCCXyoj yyojhyojwyojCyoj
  • Me imagino que los valores con sombrero son los reales leídos de la etiqueta y los que no tienen sombrero son los predichos. Entonces, ¿cuál es el valor real de la etiqueta para la puntuación de confianza para cada Bbox C i j ? Es la intersección sobre la unión del cuadro delimitador predicho con el de la etiqueta.C^yoj
  • es1cuando hay un objeto en la celdaiy0en otra parte1yoosij1yo0 0
  • "denota que eljésimo predictor del cuadro delimitador en la celdaies responsable de esa predicción". En otras palabras, es igual a1si hay un objeto en la celdaiy la confianza de lospredictoresjde esta celda es la más alta entre todos los predictores de esta celda. 1 n o o b j i j es casi lo mismo, excepto que valora 1 cuando NO hay objetos en la celdai1yojosijjyo1yoj1yojnorteoosijyo

Tenga en cuenta que utilicé dos índices y j para cada predicción de bbox, este no es el caso en el artículo porque siempre hay un factor 1 o b j i j o 1 n o o b j i j, por lo que no hay una interpretación ambigua: la j elegida es la que corresponde al puntaje de confianza más alto en esa celda.yoj1yojosij1yojnorteoosijj

Explicación más general de cada término de la suma:

  1. este término penaliza la mala localización del centro de las células
  2. este término penaliza el cuadro delimitador con una altura y ancho imprecisos. La raíz cuadrada está presente de modo que los errores en los cuadros delimitadores pequeños son más penalizadores que los errores en los cuadros delimitadores grandes.
  3. este término intenta hacer que el puntaje de confianza sea igual al IOU entre el objeto y la predicción cuando hay un objeto
  4. Intenta hacer un puntaje de confianza cercano a cuando no hay ningún objeto en la celda0 0
  5. Esta es una pérdida de clasificación simple (no explicada en el artículo)
usuario7573566
fuente
1
¿Se supone que es el segundo punto B*(5+C)? Al menos ese es el caso de YOLO v3.
sachinruk
@sachinruk esto refleja cambios en el modelo entre el YOLO original y sus versiones v2 y v3.
David Refaeli
12

λCoorreyo=0 0S2j=0 0si1yojosij[(Xyo-X^yo)2+(yyo-y^yo)2]+λCoorreyo=0 0S2j=0 0si1yojosij[(wyo-w^yo)2+(hyo-h^yo)2]+yo=0 0S2j=0 0si1yojosij(Cyo-C^yo)2+λnorteoosijyo=0 0S2j=0 0si1yojnorteoosij(Cyo-C^yo)2+yo=0 0S21yoosijCClunssmis(pagyo(C)-pag^yo(C))2

¿La función de pérdida YOLOv2 no da miedo? En realidad no lo es! Es una de las funciones de pérdida más audaces e inteligentes.

Primero veamos lo que la red realmente predice.

Si resumimos, YOLOv2 predice las detecciones en un mapa de características de 13x13, por lo que en total, tenemos 169 mapas / celdas.

Tenemos 5 cajas de anclaje. Para cada cuadro de anclaje que necesitamos Score objetualidad-confianza (si se ha encontrado ningún objeto?), 4 coordenadas ( tX,ty,tw, y th ) para la caja de anclaje, y 20 clases principales. Esto se puede ver como 20 coordenadas, 5 puntajes de confianza y 100 probabilidades de clase para las 5 predicciones de cuadro de anclaje juntas.

Tenemos algunas cosas de las que preocuparse:

  • Xyo,yyo , que es la ubicación del centroide de la caja de anclaje
  • wyo,hyo , que es el ancho y la altura de la caja de anclaje
  • Cyo , que es laObjetividad, es decir, la puntuación de confianza de si hay un objeto o no, y
  • pagyo(C) , que es la pérdida de clasificación.
  • No solo necesitamos entrenar a la red para detectar un objeto si hay un objeto en una celda, también necesitamos castigar la red, si predice un objeto en una celda, cuando no había ninguno. Cómo hacemos esto? Usamos una máscara ( 𝟙yoosij y 𝟙yonorteoosij ) para cada celda. Si originalmente había un objeto 𝟙yoosij es 1 y otras celdas sin objeto son 0. 𝟙yonorteoosij es simplemente inverso de 𝟙yoosij, donde es 1 si no había ningún objeto en la celda y 0 si lo había.
  • Necesitamos hacer esto para las 169 celdas, y
  • Necesitamos hacer esto 5 veces (para cada caja de anclaje).

Todas las pérdidas son errores de media cuadrática , excepto la pérdida de clasificación, que utiliza la función de entropía cruzada .

Ahora, rompamos el código en la imagen.

  • Necesitamos calcular las pérdidas para cada caja de anclaje (5 en total)

    • j=0 0si representa esta parte, donde B = 4 (5 - 1, ya que el índice comienza desde 0)
  • Necesitamos hacer esto para cada una de las celdas 13x13 donde S = 12 (ya que comenzamos el índice desde 0)

    • yo=0 0S2 representa esta parte.
  • 𝟙yojosij es 1 cuando hay un objeto en la celdayo, de lo contrario 0.

  • 𝟙yojnorteoosij es 1 cuando no hay ningún objeto en la celdayo, de lo contrario 0.
  • 𝟙yoosij es 1 cuando se predice una clase particular, de lo contrario 0.
  • Las λ son constantes. λ es más alto para las coordenadas con el fin de enfocarse más en la detección (recuerde, en YOLOv2, primero lo entrenamos para el reconocimiento y luego para la detección, penalizar mucho por el reconocimiento es una pérdida de tiempo, ¡en lugar de enfocarnos en obtener los mejores cuadros delimitadores!)
  • También podemos notar que wyo,hyo están bajo raíz cuadrada. Esto se hace para penalizar los cuadros delimitadores más pequeños, ya que necesitamos una mejor predicción en objetos más pequeños que en objetos más grandes (llamada del autor). Consulte la tabla a continuación y observe cómo se castigan más los valores más pequeños si seguimos el método de "raíz cuadrada" (observe el punto de inflexión cuando tenemos 0.3 y 0.2 como valores de entrada) (PS: he mantenido la relación de var1 y var2 igual solo para explicación):

        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

No es tan aterrador, ¿verdad?

Lea AQUÍ para más detalles.

RShravan
fuente
1
¿Deberían i y j en \ sum comenzar desde 1 en lugar de 0?
webbertiger
1
Sí, eso es correcto webertiger, he actualizado la respuesta en consecuencia. ¡Gracias!
RShravan
1yojosij
1
S2-1
3
@RShravan, usted dice: "Todas las pérdidas son errores de media cuadrática, excepto la pérdida de clasificación, que utiliza la función de entropía cruzada". ¿Podrías explicar? En esta ecuación, también se ve como MSE. Gracias de antemano
Julian
3

Su función de pérdida es para YOLO v1 y no para YOLO v2. También estaba confundido con la diferencia en las dos funciones de pérdida y parece que muchas personas lo están: https://groups.google.com/forum/#!topic/darknet/TJ4dN9R4iJk

El documento de YOLOv2 explica la diferencia en arquitectura de YOLOv1 de la siguiente manera:

Eliminamos las capas completamente conectadas de YOLO (v1) y usamos cuadros de anclaje para predecir cuadros delimitadores ... Cuando nos movemos a cuadros de anclaje, también desacoplamos el mecanismo de predicción de clase de la ubicación espacial y, en su lugar, predecimos clase y objetividad para cada cuadro de anclaje.

pagyo(C)yoCj

Intento adivinar la función de pérdida de YOLOv2 y discutirlo aquí: https://fairyonice.github.io/Part_4_Object_Detection_with_Yolo_using_VOC_2012_data_loss.html

HadaOnIce
fuente
1

Aquí está mi nota de estudio

  1. Función de pérdida: error de suma cuadrada

    λCoorre=5 5
    λnorteoosij

  2. Solo un cuadro delimitador debe ser responsable de cada objeto. Asignamos un predictor para que sea responsable de predecir un objeto en función del cual la predicción tiene el IOU actual más alto con la verdad fundamental.

a. Pérdida de la coordenada del cuadro delimitador (x, y) Tenga en cuenta que la pérdida proviene de un cuadro delimitador de una celda de la cuadrícula. Incluso si obj no está en la celda de la cuadrícula como verdad fundamental.

{λCoorreyo=0 0S2[(Xyo-X^yo)2+(yyo-yyo^)2]cuadro delimitador responsable0 0 otro

si. Pérdida de ancho w y altura h. Tenga en cuenta que la pérdida proviene de un cuadro delimitador de una celda de la cuadrícula, incluso si el objeto no está en la celda de la cuadrícula como verdad fundamental.

{λCoorreyo=0 0S2[(wyo-w^yo)2+(hyo-h^yo)2]cuadro delimitador responsable0 0 otro

C. Pérdida de la confianza en cada cuadro encuadernado. No es que la pérdida provenga de un cuadro delimitador de una celda de la cuadrícula, incluso si el objeto no está en la celda de la cuadrícula como verdad fundamental.

{yo=0 0S2(Cyo-C^yo)2obj en celda de cuadrícula y cuadro delimitador responsableλnorteoosijyo=0 0S2(Cyo-C^yo)2obj no en celda de cuadrícula y cuadro delimitador responsable0 0otro

{yo=0 0S2CClunssmis(pagyo(C)-pag^yo(C))2obj en celda de cuadrícula0 0otro

La función de pérdida solo penaliza la clasificación si obj está presente en la celda de la cuadrícula. También penaliza la coordenada del cuadro delimitador si ese cuadro es responsable del cuadro de tierra (mayor IOU)

Roy
fuente
Pregunta sobre 'C', en el documento, la confianza es el valor de objeto o no objeto emitido multiplicado por el pagaré; ¿Es solo para el tiempo de prueba o también se usa para la función de costo de capacitación? Pensé que solo restamos el valor C de la salida y la etiqueta (al igual que lo hicimos con los valores de la cuadrícula), pero ¿eso es incorrecto?
moondra
0

La fórmula de pérdida que escribió es la pérdida de papel original de YOLO , no la pérdida v2 o v3.

Hay algunas diferencias importantes entre las versiones. Sugiero leer los documentos o verificar las implementaciones del código. Artículos: v2 , v3 .

Algunas diferencias importantes que noté:

  • La probabilidad de clase se calcula por cuadro delimitador (por lo tanto, la salida ahora es S ∗ S ∗ B * (5 + C) en lugar de S S (B * 5 + C))

  • Las coordenadas del cuadro delimitador ahora tienen una representación diferente

  • En v3 usan 3 cajas en 3 "escalas" diferentes

Puede intentar entrar en los detalles esenciales de la pérdida, ya sea mirando la implementación de python / keras v2 , v3 (busque la función yolo_loss) o directamente en la implementación de c v3 (busque delta_yolo_box y delta_yolo_class).

David Refaeli
fuente