¿Cómo calcular el mAP (precisión media promedio) para la tarea de detección de las tablas de clasificación de Pascal VOC? http://host.robots.ox.ac.uk:8080/leaderboard/displaylb.php?challengeid=11&compid=4
Dicho esto, en la página 11 : http://homepages.inf.ed.ac.uk/ckiw/postscript/ijcv_voc09.pdf
Precisión media (AP). Para el desafío VOC2007, se usó la precisión promedio interpolada (Salton y Mcgill 1986) para evaluar tanto la clasificación como la detección. Para una tarea y clase dada, la curva de precisión / recuperación se calcula a partir de la salida clasificada de un método. La recuperación se define como la proporción de todos los ejemplos positivos clasificados por encima de un rango dado. La precisión es la proporción de todos los ejemplos por encima de ese rango que son de la clase positiva. El AP resume la forma de la curva de precisión / recuperación, y se define como la precisión media en un conjunto de once niveles de recuperación igualmente espaciados [0,0.1, ..., 1]:
AP = 1/11 ∑ r∈{0,0.1,...,1} pinterp(r)
La precisión en cada nivel de recuperación r se interpola tomando la precisión máxima medida para un método para el cual la recuperación correspondiente excede r:,
pinterp(r) = max p(r˜)
donde p (r˜) es la precisión medida en la recuperación ˜r
Acerca de mAP: http://0agr.ru/wiki/index.php/Precision_and_Recall#Average_Precision
Entonces, ¿significa que:
Nosotros calculamos la precisión y recordar :
- A) Para muchos diferentes
IoU
> {0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1}
calculamos valores positivos / negativos verdaderos / falsos
Donde
True positive = Number_of_detection with IoU > {0, 0.1,..., 1}
, como se dice aquí: /datascience//a/16813/37736 y luego calculamos:Precision = True positive / (True positive + False positive)
Recall = True positive / (True positive + False negative)
- A) Para muchos diferentes
B) O para muchos umbrales diferentes de algoritmos de detección calculamos:
Precision = True positive / (True positive + False positive)
Recall = True positive / (True positive + False negative)
Donde
True positive = Number_of_detection with IoU > 0.5
como se dice aquí: /programming//a/43168882/1558037
C) O para muchos umbrales diferentes de algoritmos de detección calculamos:
Precision = Intersect / Detected_box
Recall = Intersect / Object
Como se muestra aquí? https://en.wikipedia.org/wiki/Precision_and_recall
- Luego calculamos AP (precisión promedio) como promedio de 11 valores de
Precision
en los puntos dondeRecall = {0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1}
, es decirAP = 1/11 ∑ recall∈{0,0.1,...,1} Precision(Recall)
(En general, para cada punto, por ejemplo 0.3, obtenemos MAX de Precisión para Recall <= 0.3, en lugar del valor de Precision en este punto Recall = 0.3)
- Y cuando calculamos AP solo para 1 clase de objeto algo en todas las imágenes, entonces obtenemos AP (precisión promedio) para esta clase, por ejemplo, solo para
air
.
Entonces AP es una integral (área bajo la curva): /stats//a/157019/111998
Pero cuando calculamos AP para todas las clases de objetos en todas las imágenes, entonces obtenemos mAP (precisión promedio promedio) para todas las imágenes del conjunto de datos, por ejemplo, 88.6
para R4D_faster_rcnn: http://host.robots.ox.ac.uk:8080/leaderboard /displaylb.php?challengeid=11&compid=4
Preguntas:
- ¿Es correcto, y si no lo es, entonces cómo calcular mAP para el desafío de VOC de Pascal?
- ¿Y cuál de las 3 fórmulas (A, B o C) es correcta para calcular la precisión y la recuperación, en el párrafo 1?
Respuesta corta:
- mAP = AVG (AP para cada clase de objeto)
- AP = AVG (Precisión para cada uno de los 11 Retiros {precisión = 0, 0.1, ..., 1})
- PR-curve = Precision and Recall (para cada Umbral que se encuentra en los cuadros de límite de Predicciones)
- Precisión = TP / (TP + FP)
- Recuperación = TP / (TP + FN)
- TP = número de detecciones con IoU> 0.5
- FP = número de detecciones con IoU <= 0.5 o detectado más de una vez
- FN = número de objetos que no se detectaron o detectaron con IoU <= 0.5