目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标,并确定它们的类别和位置。
目标检测的位置信息一般由两种格式(以图片左上角为原点(0,0)):
1、极坐标表示:(xmin, ymin, xmax, ymax)
2、中心点坐标:(x_center, y_center, w, h)
那么按中心坐标如下:
在目标检测算法中,IoU(intersection over union,交并比)是目标检测算法中用来评价2个矩形框之间相似度的指标:
IoU = 两个矩形框相交的面积 / 两个矩形框相并的面积
通过一个例子看下在目标检测中的应用:
其中上图蓝色框框为检测结果,红色框框为真实标注。
一般我们会设置应该阈值,一旦IoU大于阈值,我们就认为检测到目标物体。
代码实现:
import numpy as np
def Iou(box1,box2,wh=False):
# 判断是否按中心坐标
if wh == False:
# 使用极坐标
xmin1,ymin1,xmax1,ymax1 = box1
xmin2,ymin2,xmax2,ymax2 = box2
else:
# 使用中心坐标
xmin1,ymin1 = int(box1[0]-box1[2]/2),int(box1[1]-box1[3]/2)
xmax1,ymax1 = int(box1[0]+box1[2]/2),int(box1[1]+box1[3]/2)
xmin2,ymin2 = int(box2[0]-box2[2]/2),int(box2[1]-box2[3]/2)
xmax2,ymax2 = int(box2[0]+box2[2]/2),int(box2[1]+box2[3]/2)
# 获取交集的左上和右下的坐标
xx1 = np.max([xmin1,xmin2])
yy1 = np.max([ymin1,ymin2])
xx2 = np.min([xmax1,xmax2])
yy2 = np.min([ymax1,ymax2])
# 计算两个矩形的面积
area1 = (xmax1-xmin1) * (ymax1-ymin1)
area2 = (xmax2-xmin2) * (ymax2-ymin2)
# 计算交集的面积
inter_area = (np.max([0.0,xx2-xx1]))*(np.max([0.0,yy2-yy1]))
# 计算Iou
iou = inter_area/(area2+area1-inter_area+1e-6)
return iou
目标检测问题中的每个图片都可能包含一些不同类别的物体,需要评估模型的物体分类和定位性能。因此,用于图像分类问题的标准指标precision不能直接应用于此。 在目标检测中,mAP是主要的衡量指标。
mAP是多个分类任务的AP的平均值,而AP(average precision)是PR曲线下的面积,所以在介绍mAP之前我们要先得到PR曲线。
TP、FP、FN、TN
查准率、查全率
查全率(Recall)做横坐标,查准率(Precision)做纵坐标
AP 是计算某一类 P-R 曲线下的面积,mAP 则是计算所有类别 P-R 曲线下面积的平均值。
使用例子帮助理解
假设我们有 7 张图片(Images1-Image7),这些图片有 15 个目标(绿色的框,GT 的数量,上文提及的 all ground truths)以及 24 个预测边框(红色的框,A-Y 编号表示,并且有一个置信度值):
根据上图以及说明,我们可以列出以下表格,其中 Images 代表图片的编号,Detections 代表预测边框的编号,Confidences 代表预测边框的置信度,TP or FP 代表预测的边框是标记为 TP 还是 FP(认为预测边框与 GT 的 IOU 值大于等于 0.3 就标记为 TP;若一个 GT 有多个预测边框,则认为 IOU 最大且大于等于 0.3 的预测框标记为 TP,其他的标记为 FP,即一个 GT 只能有一个预测框标记为 TP),这里的 0.3 是随机取的一个值。
因为此时的到的只是一组固定P、R,不能绘制P-R 曲线,以此王某引入累加的概念。根据置信度从大到小排序所有的预测框,然后就可以计算 Precision 和 Recall 的值,见下表。
原文:https://www.cnblogs.com/hzzhu/p/14814836.html