1.是什么?
目标检测是计算机视觉领域的核心问题之一,其任务就是找出图像中所有感兴趣的目标,确定他们的类别和位置。由于各类不同物体有不同的外观,姿态,以及不同程度的遮挡,加上成像是光照等因素的干扰,目标检测一直以来是一个很有挑战性的问题。
目标检测任务主要可以分为四个小任务:
(1)分类classification:给定一张图像,要知道里面包含什么类别的目标。
(2)定位location:给定这个目标在图像中的位置。
(3)检测detection:定位出目标的位置并判断这个目标的类别。
(4)分割segmentation:确定每个像素属于哪个目标或者场景。
综上所述,目标检测是一个分类、回归问题的叠加。
2.发展历程
目标检测的发展可以划分为两个周期:
(1)传统目标检测算法(1998-2014):传统目标检测算法主要基于手工提取特征,具体步骤可概括为:选取感兴趣区域->对可能包含物体的区域进行特征分类->对提取的特征进行检测。虽然传统目标检测算法经过了十余年的发展,但是其识别效果并没有较大改善且运算量大,此处不再详细介绍。
(2)基于深度学习的目标检测算法(2014-):该方法主要分为Anchor-based的Two Stage和One Stage和Anchor-free两种思路
a)Two Stage:先预设一个区域,该区域称为Region Proposal,即一个可能包含待检测物体的预选框(简称RP),再通过卷积神经网络进行样本分类计算。该算法的流程是:特征提取 -> 生成RP -> 分类/回归定位。常见的Two Stage算法有:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN、R-FCN等,其特点是检测精度高,但是检测速度不如One Stage方法高。
b)One Stage:直接在网络中提取特征值来分类目标和定位。该算法的流程是:特征提取 -> 分类/回归定位。常见的One Stage算法有:OverFeat、YOLOv1、YOLOv2、YOLOv3、YOLOv5、SSD、RetinaNet等,其特点是检测速度快,但是精度没有Two Stage方法高。
c)Anchor-free:该方法通过确定关键点的方式来完成检测,大大减少了网络超参数的数量。
3.基础知识
3.1概述
无论使用传统方法还是深度学习的方法来完成目标检测任务,一定要遵循三个步骤:检测窗口的选择+图像特征提取+分类器设计
3.1.1 候选框提取
候选区域(Region proposal),就是预先找出图中目标可能出现的位置,通过利用图像中的纹理、边缘、颜色等信息,保证在选取较少窗口的情况下保持较高的召回率。
Region Proposal方法比传统的滑动窗口方法获取的质量要更高。比较常用的Region Proposal方法有:SelectiveSearch(SS,选择性搜索)、Edge Boxes(EB)
边框回归(Bounding Box Regression):是对Region Proposal进行纠正的线性回归算法,目的是为了让Region Proposal提取到的窗口与目标窗口(Ground Truth)更加吻合。
候选框如何产生: 其实物体候选框获取当前主要使用图像分割与区域生长技术。区域生长(合并)主要由于检测图像中存在的物体具有局部区域相似性(颜色、纹理等)。目标识别与图像分割技术的发展进一步推动有效提取图像中信息。滑窗法作为一种经典的物体检测方法,不同大小的窗口在图像上进行滑动时候,进行卷积运算后的结果与已经训练好的分类器判别存在物体的概率。选择性搜索(Selective Search)是主要运用图像分割技术来进行物体检测。
滑窗法:
首先对输入图像进行不同窗口大小的滑窗进行从左往右、从上到下的滑动。每次滑动时候对当前窗口执行分类器(分类器是事先训练好的)。如果当前窗口得到较高的分类概率,则认为检测到了物体。对每个不同窗口大小的滑窗都进行检测后,会得到不同窗口检测到的物体标记,这些窗口大小会存在重复较高的部分,最后采用非极大值抑制(Non-Maximum Suppression, NMS)的方法进行筛选。最终,经过NMS筛选后获得检测到的物体。
滑窗法简单易于理解,但是不同窗口大小进行图像全局搜索导致效率低下,而且设计窗口大小时候还需要考虑物体的长宽比。所以,对于实时性要求较高的分类器,不推荐使用滑窗法。
选择搜索:
滑窗法类似于穷举进行图像子区域搜索,但是一般情况下图像中大部分子区域是没有物体的,这样搜索的效率就很低。
选择搜索算法观点:图像中物体可能存在的区域应该是有某些相似性或者连续性的,因此选择搜索采用子区域合并的方法进行提取边界框bounding box。
首先,对输入图像进行分割并产生许多子区域,其次,根据这些子区域之间的相似性(颜色、纹理、大小等)进行区域合并,由小变大,不断迭代并合并,每次迭代过程中对这些合并的子区域做外切矩形,这些子区域的外切矩形就是通常说的候选框。
自下而上,也就是从像素级开始检测,慢慢融合到比较大的位置。scale1 就是最小尺度上分割成很多小的区域(super pixel,超像素),把特征距离近的(如颜色比较像)的都融合到一起,产生比较大的区域。scale2 就是中间尺度上的分割和融合,能得到更大的区域,scale3同理。最后就产生了目标框。
选择性搜索的优点:
计算效率高于滑窗法
由于采用子区域合并策略,故可以包含各自大小的疑似物体框
合并区域相似的指标多样性,提高了检测物体的概率
3.1..2 特征提取
在选定候选区域之后,我们需要提取图像的特征来进行表达,传统的有监督的方法和以CNN为代表的无监督特征学习方法都可以派上用场。常见的传统特征有Haar特征、LBP、HOG等。这些特征都是研究人员通过长时间的学术研究和实际项目验证得来的,虽然在比较简单的任务中可以取得很好的结果,但是设计成本很高,而且面对复杂任务时鲁棒性远远不够。
3.1.3 分类器
常常被使用的分类器包含Adaboost,SVM,Decision Tree等。在很多时候单一的分类器可能并不能满足我们的要求,如今使用深度学习来完成各项任务,尤其是参加各类比赛的时候,一定会使用不同的模型不同的输入进行Ensemble。比如我们常见的使用不同的裁剪子区域进行预测,或者使用不同的基准模型进行预测,最后取平均概率等。
3.2 目标检测性能评估参数
3.2.1 Ground Truth
对于任何算法,度量总是需要与数据的真实值(ground truth)进行比较,对于物体检测问题,GT 包括图像,图像的目标类别及 图像中每个目标的边界框。对于下图,3组数字定义的GT表示了其真实值,包括起始点(左上角)的坐标(X,Y)、宽度、高度、类别。
3.2.2 IoU(交并比)
实际中如何判定预测框的正确性呢,首先需要知道每个检测的正确性,测定一个给定的边框的正确性的度量标准是IoU(交并比),也称检测评价函数。
我们使用IoU来确定检测是否正确需要一个阈值,最常用的是0.5,即如果IoU>0.5,则认为是真实的检测(true detection),否则认为是错误的检测(false detection)。
Precision(准确率/查准率P)和Recall(召回率/查全率R)
一般来说,P和R是不可兼得的,召回率越高,准确率越低。
TP:实际为正,且被预测为正的实例
FP:实际为负,但被预测为正的实例
TN:实际为负,且被预测为负的实例
FN:实际为正,但被预测为负的实例
3.2.3 PR曲线
一般来说我们希望这两个P和R都是越高越好,然而没有这么好的事情,两者是矛盾体,要根据不同的情况来选取好的平衡点才可以。根据学习器的预测结果对样本进行排序,排在前面的就被认为是最可能为正例的样本,然后按此顺序依次吧样本喂给学习器,我们把每次的准确率和召回率描出来就会得到一个P-R曲线(称为P-R图)。
如何评价P-R曲线:
1)如果一个曲线被另一个曲线包围,那么被包围的曲线更差些
2)两者有重叠,那就是判断曲线下面积的大小,但不太容易估算
3)找平衡点,就是找到准确率=召回率的点
4)F1度量,F 1 = 2 P R / ( P + R ) F1=2PR/(P+R)F1=2PR/(P+R)
AP(Average Precision)平均精度
AP通常用于计算平均的检测精度,用于衡量检测器在每个类别上的性能好坏。
3.2.4 mAP(mean Average Precision)平均精度的均值
mAP更多用于评价多目标的检测器性能,衡量检测器在所有类别上的性能好坏,即得到每个类别的AP值后再取所有类别的平均值。假设N个样本中有M个positive的正例,那么我们就会得到M个recall值(1/M,2/M,3/M...M/M),对于每个recall值r,我们可以计算出对应r'>r的最大的precision值,然后对这M个precision 值取平均即得到最后的AP值。计算过程如下表所示:
计算过程:
1)计算所有测试样本的confidence score,每一类的confidence score保存到一个文件中,假设有20个测试样本,每个的id和score及真值GT如下:
mAP(mean Average Precision)表示平均精度均值,该参数是PASCAL VOC 比赛中所明确的衡量标准,其含义是输出的结果是一个ranked list, 其中元素包含了类别、框的信息,以及置信度(confidence),置信度用来进行排序,比方说我给出一个框,说我有99%的信心这里有一个猫,结果这里没有,相比我给出一个框,说我有10%的信心这里有一个猫,结果也没有,这两个框的惩罚(penalty)和奖励(reward)不能一样的。因为99%信心说有,结果没有,那就说明这个系统很有问题。反之,假如我给出一个框,99%的信心说有一个猫,然后真有猫,相比10%信心说有猫,结果也是有猫,这两个框也不一样。也就是越"靠谱",reward越大。所以我们根据confidence进行排序之后,就应该给排名靠前的结果,也就是confidence比较大的一些更大的权重。
3.2.5. NMS(非极大值抑制)
其目的是为了清除多余的框,找到最佳的物体检测的位置。
红色框是可能的检测结果,如何从红色的框中选择最好的最接近的框,就使用NMS来确定最准确的位置。
每个红色的框都会有一个得分,保留得分最大的框。
一般都会使用NMS对生成的大量候选框进行后处理,去除冗余的候选框,得到最佳检测,上图中,每个b-box都会有4个坐标值和1个前景/背景得分,如果是100类的目标检测模型,输出向量为5+100=105。
NMS算法过程:根据候选框的类别分类概率做排序,假设有4个b-box,其置信度A>B>C>D
先标记最大概率框A是算法要保留的b-box
从A 开始,分别计算与其他框的交并比,和阈值t做比较,如果大于阈值,则舍弃,假设D被舍弃
从BC中,选择概率最大的B标记为保留,然后判读C和B的重叠度,如果超过,则舍弃
一直重复进行,标记完所有要保留的框
NMS是保证每个目标只保留一个预测的b-box,一般的NMS,对于某个类别c,将所有预测的b-box根据得分做一个降序排列,从最大的框开始计算该框与其他框的IoU,若IoU大于阈值t,则舍弃,说明重合度太高,重复进行最终保留一个。
缺点:
NMS算法中的最大问题就是它将相邻检测框的分数均强制归零(既将重叠部分大于重叠阈值Nt的检测框移除)。在这种情况下,如果一个真实物体在重叠区域出现,则将导致对该物体的检测失败并降低了算法的平均检测率(average precision, AP)。
NMS的阈值也不太容易确定,设置过小会出现误删,设置过高又容易增大误检。
NMS一般只能使用CPU计算,无法使用GPU计算。
NMS保留-得分最高的预测框,并将与当前框重叠大于阈值的候选框看做冗余,
hard mining:在一个mini-batch里边,容易让分类器混淆的实例,就会标记成hard mining(难以区分的),用到下一轮训练中。
参考: