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:
¿El TP + FP = # de predicciones hechas para cada imagen?
Como todas las imágenes de prueba no tienen negativos, TP + FN = 500?
¿Se calcula por imagen o por clase?
¿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.
Respuestas:
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 sit al área total tiene que exceder 0.5. La fórmula correspondiente será:
Después de tamizar una lista de validosMETRO los 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 ...]
fuente
Así es como PASCOL-VOC 2012 y MS-COCO calculan mAP, pseudocódigo de la siguiente manera:
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
fuente
AP = TP/(TP+FP)
Es incorrecto. En su lugar,Precision = TP/(TP+FP)
.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:
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:
Ejemplo de cálculo de IoU en una imagen real:
( fuente de imagen )
FYI: Precisión promedio promedio vs Rango recíproco promedio
fuente
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:
Si. ( Dado que el número de TP es limitado, cuantas más predicciones hagas, menos precisión obtendrás ) .
Si. ( Dado que solo hay un cuadro de verdad fundamental por imagen )
Por clase.
Ver la publicación de @ User1915 arriba.
fuente