1. 物体检测技术概念
物体检测技术,通常是指在一张图像中检测出物体出现的位置及对 应的类别,主要包括物体类别、 x m i n x_{min} xmin、 y m i n y_{min} ymin、 x m a x x_{max} xmax与 y m a x y_{max} ymax。它是一项非常基础的任 务,图像分割、物体追踪、关键点检测等通常都要依赖于物体检测。
2. 图像分类、物体检测与图像分割的区别
3. 传统的物体检测
传统的物体检测,不涉及深度学习之前,通常分 为区域选取、特征提取与特征分类这3个阶段
4. 深度学习时代的物体检测
深度神经网络大 量的参数可以提取出鲁棒性和语义性更好的特征,并且分类器性能也更 优越。
2014年的RCNN(Regions with CNN features)算是使用深度学习 实现物体检测的经典之作,从此拉开了深度学习做物体检测的序幕。
锚框(Anchor)这一划时代的思想,,最早出现在Faster RCNN中,其本质 上是一系列大小宽高不等的先验框,均匀地分布在特征图上,利用特征 去预测这些Anchors的类别,以及与真实物体边框存在的偏移。Anchor 相当于给物体检测提供了一个梯子,使得检测器不至于直接从无到有地 预测物体,精度往往较高,常见算法有Faster RCNN和SSD等。
当然,还有一部分无锚框的算法,思路更为多样,有直接通过特征 预测边框位置的方法,如YOLO v1等。最近也出现了众多依靠关键点来 检测物体的算法,如CornerNet和CenterNet等。
5. 技术应用领域
6. 评价指标
(1)评价指标需要针对不同的运用给出不同的指标
(2) 物体检测指标:IoU
① IoU的计算方式如图:
它通过使用两个边框的交集与并集的比 值,就可以得到IoU,公式如下:
I o U A , B = S A ∩ S B S A ∪ S B IoU_{A,B}=\frac{S_A \cap S_B}{S_A \cup S_B} IoUA,B=SA∪SBSA∩SB显而易见,IoU的取值区间是[0,1],IoU值越大,表明两个框重合越好
② Python实现IoU的计算
备注:个人觉得,这参考代码是以左上角为原点。
源码:
# -*- coding: utf-8 -*-
def iou(boxA, boxB):
# 计算重合部分的上、下、左、右4个边的值,注意最大最小函数的使用
left_max = max(boxA[0], boxB[0])
top_max = max(boxA[1], boxB[1])
right_min = min(boxA[2], boxB[2])
bottom_min = min(boxA[3], boxB[3])
# 计算重合部分的面积
inter = max(0, (right_min-left_max)) * max(0, (bottom_min-top_max))
Sa = (boxA[2]-boxA[0]) * (boxA[3]-boxA[1]) # A的面积
Sb = (boxB[2]-boxB[0]) * (boxB[3]-boxB[1]) # B的面积
# 计算所有区域的面积并计算iou,如果是Python 2,则要增加浮点化操作
union = Sa + Sb - inter # 不重叠部分的面积
iou = inter / union
return iou
对于IoU而言,通常会选取一个阈值,如0.5,来确定预测框是 正确的还是错误的。当两个框的IoU大于0.5时,我们认为是一个有效的 检测,否则属于无效的匹配。
关于检测评测,可以先读这篇文字:分类效果评价
结合分类效果评级,我们可以得到如下图左侧的部分知识
评测需要每张图片的预测值与标签值,对于某一个实 例,二者包含的内容分别如下: ·
R = T P l e n ( G T s ) R=\frac{TP}{len(GTs)} R=len(GTs)TP也可以计算准确率(Precision,P),即当 前遍历过的预测框中,属于正确预测边框的比值 P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP
遍历到每一个预测框时,都可以生成一个对应的P与R,这两个值 可以组成一个点(R,P),将所有的点绘制成曲线,即形成了P-R曲线,如图:
从图中可以看出,如果直接取曲线 上的点,在哪里选取都不合适,因为召回率高的时候准确率会很低,准 确率高的时候往往召回率很低。这似乎与我们想要的P越高的同时R也越大互相矛盾,但是我们可以使用AP,AP顾名思义就是平均精准度,简单来说就是对PR曲线上的Precision值求均值
A P = ∫ 0 1 P d R AP=\int^1_0 PdR AP=∫01PdR从公式中可以看出,AP代表了曲线的面积,每个类别的AP是相互独立 的,将每个类别的AP进行平均,即可得到mAP。严格意义上讲,还需 要对曲线进行一定的修正,再进行AP计算。除了求面积的方式,还可 以使用11个不同召回率对应的准确率求平均的方式求AP。