Estoy tratando de entender la función de pérdida Yolo v2:
Si alguna persona puede detallar la función.
neural-networks
loss-functions
object-detection
yolo
Kamel BOUYACOUB
fuente
fuente
Respuestas:
Explicación de los diferentes términos:
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.yo j 1o b jyo j 1n o o b jyo j j
Explicación más general de cada término de la suma:
fuente
B*(5+C)
? Al menos ese es el caso de YOLO v3.¿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:
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)
Necesitamos hacer esto para cada una de las celdas 13x13 donde S = 12 (ya que comenzamos el índice desde 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
No es tan aterrador, ¿verdad?
Lea AQUÍ para más detalles.
fuente
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:
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
fuente
Aquí está mi nota de estudio
Función de pérdida: error de suma cuadrada
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.
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.
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.
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)
fuente
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).
fuente