mmdetection 结果评价函数
{‘bboxes’: array([[119., 111., 244., 252.]], dtype=float32), ‘labels’: array([8]), ‘bboxes_ignore’: array([], shape=(0, 4), dtype=float32), ‘masks’: [[[119.0, 111.0, 244.0, 252.0]]], ‘seg_map’: ‘ER0437_233.png’}
1 | python tools/test.py configs/faster_rcnn/faster_rcnn_r50_fpn_2x_coco.py work_dir/faster_rcnn/epoch_80.pth --work-dir . --out ./tmp.pkl |
1 | python tools/analysis_tools/analyze_results.py configs/faster_rcnn/faster_rcnn_r50_fpn_2x_coco.py ./tmp.pkl ./results |
1 | python tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_2x_coco.py --work-dir/ ./work_dirs/faster_rcnn1 |
COCO数据集标注文件有三种信息
annotations标注的列表
1
2
3
4
5
6
7
8
9
10
11
12{
"id": 1655,
"image_id": 1011,
"category_id": 1,
"bbox": [
38.760299625468164,
84.26966292134831,
100.1198501872659,
90.47940074906366
],
"area": 9058.784048029847
}categories标注列表
1
2
3
4{
"id": 1,
"name": "Prim"
}images列表
1
2
3
4
5
6{
"height": 363,
"width": 360,
"id": 0,
"file_name": "ER0437_233.jpg"
}coco_eval做了些什么?
首先创建哈希表,_gts与_dts键位image_id与category_id,值为标注与预测bbox与类别信息。
分析结果
对结果进行分析
mmdetection检测结果
单纯用Precision与Recall评价检测器并不公平,AP计算了不同Recall下的Precision,综合性地评价了检测器,PR曲线,对所有BBox给出的置信度从高到低进行排序,当把置信度取某一个值S时,依次对前n个大于置信度的BBox计算Precison与Recall得到一组(P, R)结果。在计算AP时,都要对P-R曲线做一次修正,将P值修正为当r>R时最大的P
$$
Precision = \frac{TP}{TP + FP} \
Recall = \frac{TP}{TP + FN} \
AP = \int_{0}^{1} \max({P(r) | r \ge R}) dR
$$
对于BBox是TP还是FP的算法判断,如某一个BBox预测的label为1,则需要计算其与该图片中所有label为1的GT Box的IOU值,当大于iou_thres时,则该预测box为TP,否则为FP。当某一个GT被置信度最大的BBox匹配后,会从GT Box集合中移除。
TP + FN为测试集中该种类的样本的个数,因此不需要计算FN的个数,一个BBox与GT BOX是一一对应的,最后未检出的GT为FN
类别平衡问题,mAP,所有类别的检测性能(AP)取平均,就是检测算法在这个IOU下的性能。
位置偏差
不同场景下对预测位置准确度的要求不同。 mmAP,设置一组iou阈值,每一个IOU
https://zhuanlan.zhihu.com/p/60707912 画出不同IOU下的PR曲线。
可以计算一个mAP,对这些性能取平均,在coco数据集中,mAP的计算针对10个IOU阈值下的AP取平均值np.linspace(0.5, 0.95, 10)
。