目标检测是给定一个图像,找到其中的目标及其位置,并对目标进行分类,目标检测通常是在一组固定的类上进行训练的,所有模型只能定位和分类已训练的那些类,而且目标的位置通常都是边界矩阵的形式(包含左上角位置和宽+高),所以目标检测需要设计图像中的目标的位置信息和对目标进行分类。
目标检测任务关注的是图片中特定目标物体的类别和位置,一个检测任务包含两个子任务,其一是输出该目标的类别信息,属于分类任务,其二是输出目标的具体位置信息,属于定位任务。
与计算机视觉领域里大部分的算法一样,目标检测也经历了从传统的人工设计特征和浅层分类器的思路,到大数据时代使用深度神经网络进行特征学习的思路这一过程。
无论使用传统方法还是深度学习的方法来完成目标检测任务,一定要遵循三个步骤:检测窗口的选择+图像特征提取+分类器设计
候选区域(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同理。最后就产生了目标框。
在选定候选区域之后,我们需要提取图像的特征来进行表达,传统的有监督的方法和以CNN为代表的无监督特征学习方法都可以派上用场。常见的传统特征有Haar特征、LBP、HOG等。这些特征都是研究人员通过长时间的学术研究和实际项目验证得来的,虽然在比较简单的任务中可以取得很好的结果,但是设计成本很高,而且面对复杂任务时鲁棒性远远不够。
常常被使用的分类器包含Adaboost,SVM,Decision Tree等。在很多时候单一的分类器可能并不能满足我们的要求,如今使用深度学习来完成各项任务,尤其是参加各类比赛的时候,一定会使用不同的模型不同的输入进行Ensemble。比如我们常见的使用不同的裁剪子区域进行预测,或者使用不同的基准模型进行预测,最后取平均概率等。
Ground Truth
对于任何算法,度量总是需要与数据的真实值(ground truth)进行比较,对于物体检测问题,GT 包括图像,图像的目标类别及 图像中每个目标的边界框。对于下图,3组数字定义的GT表示了其真实值,包括起始点(左上角)的坐标(X,Y)、宽度、高度、类别。
IoU(交并比)
实际中如何判定预测框的正确性呢,首先需要知道每个检测的正确性,测定一个给定的边框的正确性的度量标准是IoU(交并比),也称检测评价函数。
对于每个不同的类,预测框和真实框重叠的区域就是交集区域,预测框和真实框的总面积区域就是并集框,对于“马”这个类的交集如阴影部分,并集是重合面积和非重合面积之和。
我们使用IoU来确定检测是否正确需要一个阈值,最常用的是0.5,即如果IoU>0.5,则认为是真实的检测(true detection),否则认为是错误的检测(false detection)。
Precision(准确率/查准率P)和Recall(召回率/查全率R)
一般来说,P和R是不可兼得的,召回率越高,准确率越低。
TP:实际为正,且被预测为正的实例
FP:实际为负,但被预测为正的实例
TN:实际为负,且被预测为负的实例
FN:实际为正,但被预测为负的实例
P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP
R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTP
PR曲线
P-R曲线如下:
一般来说我们希望这两个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通常用于计算平均的检测精度,用于衡量检测器在每个类别上的性能好坏。
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如下:
对score进行由大到小的排序:
计算P和R(假设计算Top-5的结果):
P = T P T P + F P = 2 2 + 3 = 2 5 P=\frac{TP}{TP+FP}=\frac{2}{2+3}=\frac{2}{5} P=TP+FPTP=2+32=52
R = T P T P + F N = 2 2 + 4 = 1 3 R=\frac{TP}{TP+FN}=\frac{2}{2+4}=\frac{1}{3} R=TP+FNTP=2+42=31
实际多类别分类任务中,通常计算从top-1到topN(所有样本数)对于的P和R,显然随着选定的样本越来越多,recall会越来越高,而precision会越来越低,recall为横轴,precision为纵轴就可以得到总体为下降趋势的P-R曲线。
mAP(mean Average Precision)表示平均精度均值,该参数是PASCAL VOC 比赛中所明确的衡量标准,其含义是输出的结果是一个ranked list, 其中元素包含了类别、框的信息,以及置信度(confidence),置信度用来进行排序,比方说我给出一个框,说我有99%的信心这里有一个猫,结果这里没有,相比我给出一个框,说我有10%的信心这里有一个猫,结果也没有,这两个框的惩罚(penalty)和奖励(reward)不能一样的。因为99%信心说有,结果没有,那就说明这个系统很有问题。反之,假如我给出一个框,99%的信心说有一个猫,然后真有猫,相比10%信心说有猫,结果也是有猫,这两个框也不一样。也就是越“靠谱”,reward越大。所以我们根据confidence进行排序之后,就应该给排名靠前的结果,也就是confidence比较大的一些更大的权重。
首先,计算模型得到的每个检测框的IoU,用计算得到的IoU与设定的阈值比较,就可以计算出每个图像中每个类的正确检测次数A,对于每个图像,我们都有GT的数据,即都知道每个图像的真实目标信息,因此也知道了该图像中给定类别的实际目标的数量B,我们也计算了正确预测的数量A,因此可以得到该类模型的精度(A/B):
P r e c i s i o n C = N ( T r u e P o s i t i v e s ) C N ( T o t a l O b j e c t s ) C Precision_C=\frac{N(True Positives)_C}{N(Total Objects)_C} PrecisionC=N(TotalObjects)CN(TruePositives)C
即给定一张图像的类别C的Precision=正确预测的数量/这一类的总目标量
假如现在有一个给定的类,验证集中有100个图像,并且我们知道每个图像都有其中的所有类(基于ground truth)。所以我们可以得到100个精度值,计算这100个精度值的平均值,得到的就是该类的平均精度。
A v e r a g e P r e c i s i o n C = ∑ P r e c i s i o n C N ( T o t a l I m a g e s ) C Average Precision_C=\frac{∑Precision_C}{N(Total Images)_C } AveragePrecisionC=N(TotalImages)C∑PrecisionC
即一个C类的平均精度=在验证集上所有的图像对于类C的精度值的和/有类C这个目标的所有图像的数量。
假如整个集合有20个类,对于每个类别都先计算IoU,之后计算精度,最后计算平均精度,所以会获得20个不同的平均精度值,用这些值来判断模型的性能。但多个精度值难以评判,故对所有类的平均精度值取平均来衡量其性能,即mPA。
M e a n A v e r a g e P r e c i s i o n C = ∑ A v e r a g e P r e c i s i o n C N ( c l a s s e s ) Mean Average Precision_C=\frac{∑Average Precision_C}{N(classes) } MeanAveragePrecisionC=N(classes)∑AveragePrecisionC
mean AP:按照每个类进行计算,假如计算南瓜这个类,有100个红色的预测框都和真实框GT有重叠,那么计算IoU来计算是true还是false,平均来看折线图准确率的平均值,就是南瓜类的平均,最后将20个类都平均一下,就是mAP。
其目的是为了清除多余的框,找到最佳的物体检测的位置。
红色框是可能的检测结果,如何从红色的框中选择最好的最接近的框,就使用NMS来确定最准确的位置。
每个红色的框都会有一个得分,保留得分最大的框。
NMS过程:
一般都会使用NMS对生成的大量候选框进行后处理,去除冗余的候选框,得到最佳检测,上图中,每个b-box都会有4个坐标值和1个前景/背景得分,如果是100类的目标检测模型,输出向量为5+100=105。
NMS算法过程:
NMS是保证每个目标只保留一个预测的b-box,一般的NMS,对于某个类别c,将所有预测的b-box根据得分做一个降序排列,从最大的框开始计算该框与其他框的IoU,若IoU大于阈值t,则舍弃,说明重合度太高,重复进行最终保留一个。
缺点:
NMS保留-得分最高的预测框,并将与当前框重叠大于阈值的候选框看做冗余,
hard mining:在一个mini-batch里边,容易让分类器混淆的实例,就会标记成hard mining(难以区分的),用到下一轮训练中。
PASCAL VOC 和COCO
1、PASCAL VOC
图像识别和分类提供了一整套标准化的优秀的数据集,从2005年到2012年每年都会举行一场图像识别挑战赛。
给定包含20类的自然图像,从中识别出特定物体
可实现的任务:
标签:
2、COCO
数据集是微软发布的,除了图片以外还提供物体检测、分割(segmentation)和对图像的语义文本描述信息。
COCO数据集是一个大型的、丰富的物体检测,分割和字幕数据集。这个数据集以scene understanding为目标,主要从复杂的日常场景中截取,图像中的目标通过精确的segmentation进行位置的标定。图像包括91类目标,328,000影像和2,500,000个label。COCO数据集有91类,虽然比ImageNet和SUN类别少,但是每一类的图像多,这有利于获得更多的每类中位于某种特定场景的能力,对比PASCAL VOC,其有更多类和图像。
主要解决三个问题:
特点:
这么多网络是如果在feature-map层联系起来的,以GoogLeNet为例
mask RCNN 不仅仅框出来了,并且进行了分割,网络简洁且效果好。
最近两年,注意力模型(Attention Model)被广泛使用在自然语言处理、图像识别及语音识别等各种不同类型的深度学习任务中,是深度学习技术中最值得关注与深入了解的核心技术之一。
视觉注意力机制是人类视觉所特有的大脑信号处理机制。人类视觉通过快速扫描全局图像,获得需要重点关注的目标区域,也就是一般所说的注意力焦点,而后对这一区域投入更多注意力资源,以获取更多所需要关注目标的细节信息,而抑制其他无用信息。
这是人类利用有限的注意力资源从大量信息中快速筛选出高价值信息的手段,是人类在长期进化中形成的一种生存机制,人类视觉注意力机制极大地提高了视觉信息处理的效率与准确性。
图1形象化展示了人类在看到一副图像时是如何高效分配有限的注意力资源的,其中红色区域表明视觉系统更关注的目标,很明显对于图1所示的场景,人们会把注意力更多投入到人的脸部,文本的标题以及文章首句等位置。
深度学习中的注意力机制从本质上讲和人类的选择性视觉注意力机制类似,核心目标也是从众多信息中选择出对当前任务目标更关键的信息。
FCN能够接受任意尺寸的输入图像,对图像进行像素级的分类,采用反卷积层对最后一个卷积层的feature map进行上采样,使它恢复到与输入图像相同的尺寸,从而可以对每个像素都产生一个预测,同时保留了原始输入图像中的空间信息,最后在上采样的特征图上进行逐像素的分类,从而解决语义分割的问题。
语义分割所采用的FCN结构示意图:
语义分割和图像分类的对比:
反卷积:
Upsampling的操作可以看成是反卷积(deconvolutional),卷积运算的参数和CNN的参数一样是在训练FCN模型的过程中通过bp算法学习得到。反卷积层也是卷积层,不关心input大小,滑窗卷积后输出output。deconv并不是真正的deconvolution(卷积的逆变换),最近比较公认的叫法应该是transposed convolution,deconv的前向传播就是conv的反向传播。
反卷积参数: 利用卷积过程filter的转置(实际上就是水平和竖直方向上翻转filter)作为计算卷积前的特征图
反卷积运算过程:蓝色是反卷积的输入(2x2),绿色是输出(4x4)