1. yolov5中推理时置信度,设置的conf和iou_thres具体含义
一、模型输出解析:
设输出图片大小为1280,768,类别个数为2,则yolov5输出的三种特征图,其维度分别为:[1,3,96,160,7],[1,3,48,80,7],[1,3,24,40,7];相当于yolov5模型总共输出(96160+4880+24*40)*3=60480个目标框;
其中,[1,3,96,160,7] 中1指代输入图像个数为1,3指的是该尺度下的3种anchor,(96,160) 指的是特征图的尺寸,7具体指的是:(center_x,center_y, width, height, obj_conf, class_1_prob, class_2_prob ),即分别为box框中心点x,y,长和宽 width,height,以及该框存在目标的置信度obj_conf,类别1和类别2 的置信度,若class_1_prob > class_2_prob,则该框的类别为class1;因此,obj_conf和class_1_prob一个指得是该框存在目标的概率,一个指是该框分类为类别1的概率;
二、yolov5后处理解析;
从一可知模型输出了60480个目标框,因此,要经过NMS进行过滤,进NMS之前需要经过初筛(即将obj_conf小于我们设置的置信度的框去除),再计算每个box框的综合置信度conf:conf = obj_conf * max(class_1_prob ,class_2_prob),此时的conf是综合了obj_conf以及class_prob的综合概率;再经过进一步的过滤(即将conf小于我们设置的置信度的框去除),最后,将剩余的框通过NMS算法,得出最终的框;(NMS中用到了我们设置的iou_thres)
因此,最终我们可视化在box上方的置信度是综合了obj_conf以及class_prob的综合概率;
三、常见概念解析
作者在YOLO官方代码 中回复了。train.py,val.py和detect.py三个文件中置信度conf和IoU阈值的目的不同,train.py文件是为了更好得到训练精度的权衡,val.py是为了得到更好的mAP值,detect.py是为了能够在真实世界中得到更加理想的效果。
四、不同方法的PR曲线绘制
- 参考资料,yolov5和Fasterrcnn统一画P-R曲线
- mmdetection
mmdetection 保存不同方法的检测结果
python tools/test.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth --out result/file_name.pkl