Precisión promedio en detección de objetos


8

Estoy bastante confundido en cuanto a cómo puedo calcular los valores AP o mAP, ya que parece haber bastantes métodos diferentes. Específicamente quiero obtener los valores AP / mAP para la detección de objetos.

Todo lo que sé con certeza es:

Recuperación = TP / (TP + FN), Precisión = TP / (TP + FP)

Por ejemplo, si solo tengo 1 clase para evaluar, y digo 500 imágenes de prueba. Cada imagen de prueba puede tener un número diferente de predicciones (propuestas de cuadro delimitador) pero cada imagen solo tiene un cuadro delimitador de verdad real.

Imagen 1: [clase, probabilidad, x1, y1, x2, y2], [clase, probabilidad, x3, y3, x4, y4], [clase, probabilidad, x5, y5, x6, y6], [clase, probabilidad, x7, y7, x8, y8], ...

Imagen 2: [clase, probabilidad, x1, y1, x2, y2], [clase, probabilidad, x3, y3, x4, y4], ...

. . . (y así)

* solo un ejemplo, hice esto

Sé que para obtener TP, tendríamos que encontrar los IOU de cada predicción y contar los que están por encima de un umbral seleccionado, como 0.5 (si tenemos múltiples predicciones con IOU por encima del umbral, ¿solo contamos una vez y tratamos los demás como FP?).

Aquí es donde me desconcierta:

  1. ¿El TP + FP = # de predicciones hechas para cada imagen?

  2. Como todas las imágenes de prueba no tienen negativos, TP + FN = 500?

  3. ¿Se calcula por imagen o por clase?

  4. ¿Podría alguien informarme una guía paso a paso para obtener el AP / mAP basado en mi ejemplo? Creo que la parte más ambigua es si lo hacemos por imagen o por clase (es decir, 500 imágenes a la vez).

La mayoría de las guías / documentos que encontré están muy dirigidos a la recuperación de información. Agradecería un poco de ayuda en esto.

* Nota: lo estoy probando en algunos conjuntos de datos personalizados. Sé que PASCAL VOC tiene algún código para hacerlo, pero quiero escribir el código yo mismo, personalizado según mis propios datos.


Mi repositorio de github tiene una explicación de IOU, Precisión, Recuperación, Precisión promedio y mAP. También tiene un código que evalúa cualquier detector de objetos.
Rafael Padilla

Respuestas:


7

Creo que la respuesta aceptada dirige la forma incorrecta de calcular mAP. Porque incluso para cada clase, el AP es el producto promedio. En mi respuesta aún incluiré la interpretación de IOU para que los principiantes no tengan dificultad para entenderlo.

Para una tarea determinada de detección de objetos, los participantes enviarán una lista de cuadros delimitadores con confianza (la probabilidad pronosticada) de cada clase. Para ser considerado como una detección válida, la proporción del área de superposiciónao entre el cuadro delimitador previsto bp y fundamento verdadero límite sital área total tiene que exceder 0.5. La fórmula correspondiente será:

unao=UNArmiuna(sipagssit)UNArmiuna(sipagssit)

Después de tamizar una lista de validos METROlos cuadros delimitadores predichos, luego evaluaremos cada clase como un problema de dos clases de forma independiente. Entonces, para un proceso de evaluación típico de la clase 'humana'. Primero podemos enumerar estosMETRO cuadro delimitador de la siguiente manera:

Índice de objeto, confianza, verdad fundamental

Cuadro delimitador 1, 0.8, 1

Cuadro delimitador 1, 0.7, 1

Cuadro delimitador 2, 0.1, 0

Cuadro delimitador 3, 0.9, 1

Y luego, debe clasificarlos según la confianza de mayor a menor. Después, solo necesita calcular la curva PR como de costumbre y calcular 11 resultados de precisión interpolados en estos 11 puntos de recuperación equivalentes a [0, 0.1, ..., 1]. (Los métodos calculados detallados están aquí ) Vale la pena mencionar para las detecciones múltiples de un solo cuadro delimitador, por ejemplo, el cuadro delimitador 1 en mi ejemplo, a lo sumo lo consideraremos correcto una vez y todos los demás como Falso. Luego iteras a través de 20 clases y calculas el promedio de ellas. Entonces obtienes tu mAP.

Y también, por ahora giramos un poco este método para encontrar nuestro mAP. En lugar de usar 10 puntos de ruptura de recuperación, usaremos el número verdadero K de una clase específica y calcularemos la precisión interpolada. es decir, [0,1 / K, 2 / K ...]


Qué gran explicación simple
Amitai

7

Así es como PASCOL-VOC 2012 y MS-COCO calculan mAP, pseudocódigo de la siguiente manera:

For each single class of object,

iterate through entire list of predictions for all images

TP = [0] * number of predictions
NP = [0] * number of predictions

for i, prediction in enumerate(predictions): # sorted by prediction confidence, descended

    try to find the ground truth with same class and largest IoU:

        if IoU > threshold(0.5 in PASCOL VOC 2012)

            if ground truth has not been assigned yet:

                assign this ground truth to the prediction
                TP[i] = 1      

        else: # corresponding ground truth has been assigned or IoU < threshold
            FP[i] = 1

    not find:
        FP[i] = 1

then calculate FN = number of unassigned ground truth

Precision = TP/(TP+FP)
Recall = TP/(TP+FN)

Para obtener AP, primero para suavizar la curva PR, luego calcular el área debajo de la curva. Para obtener mAP, repita los pasos anteriores para todas las clases y promedie.

Referencia:

Versión de Python de PASCOL VOC 2012 Evaluación Métrica: https://github.com/Cartucho/mAP

Kit de herramientas PASCOL VOC 2012 original (en MATLAB): https://github.com/Cartucho/mAP

MSCOCO original: http://cocodataset.org/#detection-eval


¿Qué pasa si el cuadro predicho se superpone a dos objetos de verdad, para qué objeto se prueba la superposición?
Curioso

1
AP = TP/(TP+FP)Es incorrecto. En su lugar, Precision = TP/(TP+FP).
Franck Dernoncourt el

Esto es completamente falso. La precisión promedio se calcula de esta manera: medium.com/@jonathan_hui/…
Curioso el

3

La conferencia "Evaluación 12: precisión promedio promedio" de Victor Lavrenko contiene una diapositiva que explica muy claramente qué son la precisión promedio (AP) y la precisión promedio promedio (mAP) para el caso de recuperación de documentos:

ingrese la descripción de la imagen aquí

Para aplicar la diapositiva a la detección de objetos: documento relevante = cuadro delimitador predicho cuyo IoU es igual o superior a algún umbral (generalmente 0,5).

IoU = Intersección sobre Unión, vea la imagen a continuación para una definición visual:

ingrese la descripción de la imagen aquí

Ejemplo de cálculo de IoU en una imagen real:

ingrese la descripción de la imagen aquí

( fuente de imagen )

FYI: Precisión promedio promedio vs Rango recíproco promedio


0

Aunque @ User1915 ha encontrado la respuesta por sí mismo, me gustaría dejar algo para quienes estén interesados.

Aquí está mi respuesta para las preguntas anteriores:

P1: ¿El TP + FP = # de predicciones hechas para cada imagen?

Si. ( Dado que el número de TP es limitado, cuantas más predicciones hagas, menos precisión obtendrás ) .

P2: Dado que todas las imágenes de prueba no tienen negativos, ¿TP + FN = 500?

Si. ( Dado que solo hay un cuadro de verdad fundamental por imagen )

P3: ¿Se calcula por imagen o por clase?

Por clase.

P4: ¿Podría alguien informarme una guía paso a paso para obtener el AP / mAP según mi ejemplo? Creo que la parte más ambigua es si lo hacemos por imagen o por clase (es decir, 500 imágenes a la vez).

Ver la publicación de @ User1915 arriba.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.