学习目标检测有一段时间了,然而对目标检测怎么才算正确一直没有透彻的理解,也许有人会说,那不是很简单嘛,预测框与目标框IOU大于设定的阈值就认为是正确的呀,但是当真正写代码计算PR时,会有些细节性的问题。
- 哪些框是应该与目标框计算的
- 同一张图片同类物体有两个,如何与预测框对应
- 为什么要选iou最大的预测框作为最终框
先举个例子,假如在一张图片上给出狗子的位置,现在模型输出三个狗子位置,其中一个是预测正确的(IOU大于阈值),另外两个位置是没有狗子的,即错误的,问预测的准确率是多少?三分之一吗,我之前也是这样想的。实际上YOLOv5是这样计算的,计算这三个预测结果与目标位置的IOU,取其中最大的IOU对应的预测结果为最终预测结果,如果这个最大的IOU大于阈值则认为是正确的,反之错误。也就是说,对于同一个目标的预测,只看最佳预测!对应代码为:
ious, i = box_iou(predn[pi, :4], tbox[ti]).max(1) # best ious, indices
现在回到开头的三个问题,哪些框是应该与目标框计算的?
YOLOv5预测的每个结果中是有类别这一值的,目标框也有类别,与目标框类别相同的预测框即是参与IOU计算的框,最后选出IOU值最高的预测框作为该目标预测结果。
同一张图片同类物体有两个,如何与预测框对应?
一样道理,物体同类但位置不同,与目标框类别相同的预测框即是参与IOU计算的框,最后选出IOU值最高的预测框作为该目标预测结果。
为什么要选IOU最大的预测框作为最终框?
个人觉得,每个预测框的置信度不同,所以不能一视同仁而是取最优?暂时还没完全想明白。
计算TP和FP是用到哪些预测类别正确,置信度低,但IOU小的结果的。在YOLOv5的测试过程中,发现个问题,改变NMS的参数值(conf-thres和iou-thres)会影响最后的P、R、AP,那官方的设置应该是多少呢
版权声明:本文为CSDN博主「Coding-Prince」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42362891/article/details/122481278
暂无评论