1 目标检测算法概述
检测 = 分类(目标物是什么) + 定位(定位目标的的位置)
1.1 分类
- N个类别
- 输入:图片
- 输出:类别标签
- 评估指标:Accuracy
1.2 定位
- N个类别
- 输入:图片
- 输出:物体的位置坐标(x,y,w,h),成一个边界框bounding box(bbox)
- 主要评估指标:IoU
1.3 边界框bounding box(bbox)
Ground-truth bounding box:图片中真实标记的框,真实框
Predicted bounding box:预测框
1.4 目标检测算法分类
- 双阶段:先进行区域推荐,而后进行目标分类
代表:R-CNN、SPP-net、Fast R-CNN、Faster R-CNN - 单阶段:一个网络端到端
代表:YOLO系列、SSD
1.5 IoU及作用
IoU(Intersection over Union)表示真实框和预测框交集的面积与并集的面积比值。
蓝色表示真实框,红色表示预测框
IoU用来干嘛?
做检测任务时,会设置IoU的阈值(voc数据集通常是0.5),为度量目标定位精度,当大于这个阈值时表示成功检测,否则表示漏检。
后期计算单类别AP(Average Precision),多类别mAP(Mean Average Precision)值时很有用。
MS−COCO 的 AP 是在 0.5−0.95多个 IoU 阈值上的平均值。
1.6 置信度
作用:用来判断边界框内的物体是正样本还是负样本,大于置信度阈值的判定为正样本(框内有目标物体),小于置信度阈值的判定为负样本即背景。
总的置信度 = 种类置信度class_conf × 先验框内部是否包含物体的置信度image_pred
在进行预测可视化的时候,在预测框的左上角显示的(类别id和一个分数),这个分数是置信度,还是对象类别概率?
答:预测的分数是置信度和对象类别概率的乘积,也就是总的置信度。
置信度在训练时,是直接算出来的,根据是否为背景和IOU的乘积得到;在测试时,网络直接输出一个置信度分数(也就是置信度和类对象概率的乘积,因为没有groundtruth来算IOU与之对应)。
2 评价指标 AP/mAP
2.1 TP、TP、FN、FP
T、F:True、False------该样本 是否被正确分类
P、N:Positive、Negative------该样本 被预测成了正样本还是负样本
2.2 正、负样本
TP:被分为正样本,而且分对了。
TN:被分为负样本,而且分对了,
FP:被分为正样本,但是分错了(事实上这个样本是负样本)。
FN:被分为负样本,但是分错了(事实上这个样本是正样本)。
- 正样本、负样本针对网络训练时期;测试时,所有预测的框都是P(模型认为的正样本),正样本网络生成的预测框是与gt的iou值高于iou阈值(一般为0.5)
- 正样本、负样本都是针对程序生成的框而言,而不是ground Truth而言。
- 目标检测测试过程中,一般不区分TN和FN。因为负样本(模型认为的)根本没有显示出来。此时,TN和FN无意义。
2.3 Recall、Precision
Recall=TP/(TP+FN),召回率,可理解为:正确的,被判断正确的比例。(被正确识别出来的飞机个数与测试集中所有真实飞机的个数的比值。)
Precision=TP/(TP+FP),准确度,预测为正类中,实际为正类的比例。(所有被识别出来的飞机中,真正的飞机所占的比例。)
2.4 AP、mAP
准确率-召回率曲线(P-R曲线):以召回率为横坐标,精确率为纵坐标。
AP表示P-R曲线下的面积,一个越好的分类器,AP值越高,通常在某一特定类别下进行评估。
mAP是多个类别AP的平均值。这个mean的意思是对每个类的AP再求平均,得到的就是mAP的值,mAP的大小一定在[0,1]区间,越大越好。
3 目标检测原理
3.1 分类原理
输入一张图片,经过卷积、激活、池化层,最后一层通过(全连接层+softmax)得到分类概率。
使用的损失函数:交叉熵损失
3.2 如何理解最后一层全连接层+Softmax
全连接层:将权重矩阵与输入向量相乘再加上偏置,将n个(−∞,+∞)的实数映射为K个(−∞,+∞)的实数;
Softmax:将K个( − ∞ , + ∞ ) 的实数映射为K个(0,1)的实数(概率),同时保证它们之和为1。
3.3 非极大值抑制(Non-Maximum Suppression,NMS)
根据分类器类别分类概率做排序
(1)从最大概率矩形框开始,分别得分后面的矩形框与其的重叠度IOU是否大于某个设定的阈值;
(2)假设重叠度超过阈值,那么就扔掉;并标记第一个矩形框,是我们保留下来的。
(3)从剩下的矩形框中,选择概率最大的,然后判断得分后面的矩形框与其的重叠度,重叠度大于一定的阈值,那么就扔掉;并标记是我们保留下来的第二个矩形框。
如此循环往复知道没有剩余的矩形框,然后找到所有被保留下来的矩形框,就是我们认为最可能包含目标的矩形框。
3.4 目标检测的候选框(Proposal)
物体候选框获取,当前主要使用图像分割与区域生长技术。区域生长(合并)主要由于检测图像中存在的物体具有局部区域相似性(颜色、纹理等)。
根据目标候选区域的提取方式不同,传统目标检测算法可以分为基于滑动窗口的目标检测算法和基于选择性搜索的目标检测算法。
3.4.1 滑动窗口(Sliding Window)
基本原理:采用不同大小和比例(宽高比)的窗口在整张图片上以一定的步长进行滑动,然后对这些窗口对应的区域做图像分类
缺点:不知道要检测的目标大小是什么规模,所以要设置不同大小和比例的窗口去滑动,而且还要选取合适的步长。但是这样会产生很多的子区域,并且都要经过分类器去做预测,这需要很大的计算量。
具体步骤:首先对输入图像进行不同窗口大小的滑窗进行从左往右、从上到下的滑动。每次滑动时候对当前窗口执行分类器(分类器是事先训练好的)。如果当前窗口得到较高的分类概率,则认为检测到了物体。对每个不同窗口大小的滑窗都进行检测后,会得到不同窗口检测到的物体标记,这些窗口大小会存在重复较高的部分,最后采用非极大值抑制(Non-Maximum Suppression, NMS)的方法进行筛选。最终,经过NMS筛选后获得检测到的物体。
3.4.2 选择性搜索(Selective Search)
滑窗法类似穷举进行图像子区域搜索,但是一般情况下图像中大部分子区域是没有物体的。学者们自然而然想到只对图像中最有可能包含物体的区域进行搜索以此来提高计算效率。
主要观点:图像中物体可能存在的区域应该是有某些相似性或者连续性区域的。因此,选择搜索基于上面这一想法采用子区域合并的方法进行提取候选边界框(bounding boxes)。首先,对输入图像进行分割算法产生许多小的子区域(大约2000个子区域)。其次,根据这些子区域之间相似性(相似性标准主要有颜色、纹理、大小等等)进行区域合并,不断的进行区域迭代合并。每次迭代过程中对这些合并的子区域做外切矩形(bounding boxes),这些子区域外切矩形就是通常所说的候选框。
优点:
- (a)计算效率优于滑窗法。
- (b)由于采用子区域合并策略,所以可以包含各种大小的疑似物体框。
- (c)合并区域相似的指标多样性,提高了检测物体的概率。
3.5 边界框回归(Bounding-Box regression)
窗口一般使用四维向量(x,y,w,h)来表示, 分别表示窗口的中心点坐标和宽高。 对于下图, 红色的框 P 代表原始的Proposal, 绿色的框 G 代表目标的 Ground Truth, 目标是寻找一种关系使得输入原始的窗口 P 经过映射得到一个跟真实窗口 G 更接近的回归窗口
G^。
感谢链接
https://qiyuan-z.github.io/2020/01/14/%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B%E8%B0%83%E7%A0%94/