1. 目标检测
1.1 什么是目标检测
目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观,形状,姿态,加上成像时光照,遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。
1.2 目标检测算法
基于深度学习的目标检测算法主要分为两类:
1. Two stage目标检测算法
先进行区域生成(region proposal,RP)(一个有可能包含待检物体的预选框),再通过卷积神经网络进行样本分类。
任务:特征提取—>生成RP—>分类/定位回归。
常见的two stage目标检测算法有:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN和R-FCN等。
2. One stage目标检测算法
不用RP,直接在网络中提取特征来预测物体分类和位置。
任务:特征提取—>分类/定位回归。
常见的one stage目标检测算法有:OverFeat、YOLOv1、YOLOv2、YOLOv3、SSD和RetinaNet等。
1.3 算法评估
1. Precision
查准率(Precision)是针对预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。
TP:预测为正,实际为正
FP:预测为正,实际为负
2. Recall
召回率(Recall, 又称为 TPR)是针对原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。
FN:预测为负,实际为正
3. IOU(intersection-over-union)
目标检测中如何判断候选框的正负(TP,FP)?
IOU ,简单来讲就是模型产生的目标窗口和原来标记窗口的交叠率。
检测结果DetectionResult与真实值Ground Truth的交集比上它们的并集,即为检测的准确率 IoU
4. mAP(mean average precision)
在目标检测任务中,,不仅要衡量检测出正确目标的数量,还应该评价模型是否能以较高的precision检测出目标。也就是在某个类别下的检测,在检测出正确目标之前,是不是出现了很多判断失误。AP越高,说明检测失误越少。对于所有类别的AP求平均就得到mAP了。
2. R-CNN
模块设计
-
利用选择性搜索Selective Search算法在图像中从下到上提取2000个左右的可能包含物体的候选区域Region Proposal
-
因为取出的区域大小各自不同,所以需要将每个Region Proposal缩放(warp)成统一的227x227的大小,将所有建议框像素减去该建议框像素平均值【预处理操作】
-
使用卷积神经网络(AlexNet),从每个区域提取特定大小的特征向量(4096-D),2000个建议框的CNN特征组合成2000×4096维矩阵
-
训练一个SVM分类器(二分类)来判断这个候选框里物体的类别,每个类别对应一个SVM,20种分类则有20个SVM分类器。
将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘,获得2000×20维矩阵表示每个建议框是某个物体类别的得分;分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制(NMS)剔除重叠建议框,得到该列即该类中得分最高的一些建议框;
-
使用回归器精细修正候选框位置:对于每一个类,训练一个线性回归模型去判定这个框是否框得完美。
细节
1. fine-tuning(微调)
在大型数据集(ImageNet,即ILSVRC竞赛)上预训练用于图像分类的CNN。在小型目标数据集(PASAC VOC)上微调(fine-tuning) CNN。把ImageNet专用的1000-way分类层,换成了一个随机初始化的21-way分类层,(其中20是VOC的类别数,1代表背景)而卷积部分都没有改变。
2. Hard negative mining
因为候选框中正样本很少,负样本远远大于正样本,这样训练出来的分类器效果并不好,预测结果会偏向于负例,会出现很多FP,把其中得分较高的当作Hard negative,再送入网络中训练,直到训练成绩不再提升。论文中说这个算法收敛很快,只要在所有图像上经过一轮训练,mAP就基本停止增加了。
3. Visualizing learned features
论文提出了一个简单(和补充)非参数方法,直接显示网络学到的内容。这个想法是在网络中列出一个特定的单元(特征),并将其用作它自己的目标检测器。也就是说,我们在大量的区域提案(约1000万)中计算这个单元的**,将提案按**从大到小排序,然后执行非极大值抑制,然后显示**最大的提案。
我们可以看到来自pool5的单元,这是网络第五,也是最终卷积层的最大池化输出。pool5的特征图维度是6×6×256=9216。忽略边界效应,每个pool5单元在原始227×227像素输入中具有195×195像素的感受野.
如上图,六个pool5单元的**最大的区域。感受野和**值以白色绘制。
4. Ablation studies(消融研究)
Ablation study 就是为了研究模型中所提出的一些结构是否有效而设计的实验。如你提出了某某结构,但是要想确定这个结构是否有利于最终的效果,那就要将去掉该结构的网络与加上该结构的网络所得到的结果进行对比,这就是ablation study,也就是(控制变量法)。
为了了解哪些层对于检测性能至关重要,论文分析了CNN最后三层在VOC 2007数据集上的结果。在没有在PASCAL上进行微调时,去掉fc6和fc7也产生相当好的效果。这说明CNN的大部分表达能力来自其卷积层,而不是来自于更密集的全连接层。微调对fc6和fc7产生了很明显的效果。这说明从ImageNet中学习的pool 5特性是一般性的,并且大多数改进是从卷积层后的学习特定领域的非线性分类器获得的。
5. BoundingBox-Regression(边框回归)
论文作者指出:主要的错误是源于mislocalization。为了解决这个问题,作者使用了bounding box regression这个方法使得mAP提高了3到4个点。
对于窗口一般使用四维向量(x,y,w,h)来表示, 分别表示窗口的中心点坐标和宽高。 如图, 红色的框 P 代表原始的Proposal, 绿色的框 G 代表目标的 Ground Truth, 我们的目标是寻找一种关系使得输入原始的窗口 P 经过映射得到一个跟真实窗口 G 更接近的回归窗口G^。
Fast R-CNN
结构
-
任意size图片输入CNN网络,经过若干卷积层与池化层,得到特征图;
-
在任意size图片上采用selective search算法提取约2k个建议框;
-
根据原图中建议框到特征图映射关系,在特征图中找到每个建议框对应的特征框【深度和特征图一致】,并在RoI池化层中将每个特征框池化到H×W【VGG-16网络是7×7】的size;
-
固定H×W【VGG-16网络是7×7】大小的特征框经过全连接层得到固定大小的特征向量;
-
第4步所得特征向量经由各自的全连接层【由SVD分解实现】,分别得到两个输出向量:一个是softmax的分类得分,一个是Bounding-box窗口回归;
-
利用窗口得分分别对每一类物体进行非极大值抑制剔除重叠建议框,最终得到每个类别中回归修正后的得分最高的窗口。
改进
1. 共享卷积层
先看R-CNN网络,它首先采用selective search算法提取约2k个建议框,并对所有建议框都进行了CNN特征提取操作,会出现重叠区域多次重复提取特征,这些操作非常耗时、耗空间。事实上我们并不需要对每个建议框都进行CNN特征提取操作,只需要对原始的整张图片进行1次CNN特征提取操作即可,因为selective search算法提取的建议框属于整张图片,因此对整张图片提取出特征图后,再找出相应建议框在特征图中对应的区域,这样就可以避免冗余的特征提取操作,节省大量时间。
2. ROI Pooling
ROI是Region of Interest的简写,一般是指图像上的区域框,但这里指的是由Selective Search提取的候选框。CNN一般都含有卷积部分和全连接部分,其中,卷积层不需要固定尺寸的图像,而全连接层是需要固定大小的输入。
所以当全连接层面对各种尺寸的ROI输入时,就需要对数据进行crop或warp。但是这种预处理会导致图片被拉伸变形或者物体不全,限制了识别的精度。而池化层就可以将不同大小的ROI转换为固定大小的ROI。
计算方法:
- 首先将ROI与特征图重叠
- 然后将ROI拆分成目标维度的ROI,比如要求生成2*2的ROI,所以将上图拆分为4个大小相等或近似的部分。
- 然后使用max-pooling的方式找到每个区域的最大值,生成2*2的特征模块,分布馈送到分类器和边框回归器中。
3. 使用截断的SVD分解
这种方法可以在牺牲很少的精度情况下大大加速全连接层的计算速度。
4. 多任务损失
Fast R-CNN网络具有两个同级输出层。 第一个输出在K+1个类别上的离散概率分布(每个RoI),p=(p0,…,pK)。 通常,通过全连接层的K+1个输出上的Softmax来计算p。第二个输出层输出检测框回归偏移,tk=(tkx,tky,tkw,tkh),对于由k索引的K个类别中的每一个。
之前R-CNN的处理流程是先提proposal,然后CNN提取特征,之后用SVM分类器,最后再做bbox regression,而在Fast R-CNN中,作者巧妙的把bbox regression放进了神经网络内部,与region分类和并成为了一个multi-task模型,实际实验也证明,这两个任务能够共享卷积特征,并相互促进。
Fast R-CNN在微调期间使用softmax分类器学习,而不是如在R-CNN和SPPnet中训练线性SVM。论文作者通过实验发现,softmax略优于SVM,Softmax不像SVM那样,在分类RoI时引入类之间的竞争。
5. 候选框的数量
使用选择性搜索模式,我们扫描每个图像1k到10k个候选框,每次重新训练和重新测试模型M.如果候选框纯粹扮演计算的角色,增加每个图像的候选框数量不应该损害mAP。我们发现mAP上升,然后随着候选区域计数增加而略微下降(下图,实线蓝线)。这个实验表明,用更多的候选区域没有帮助,甚至稍微有点伤害准确性。
Faster R-CNN
结构
在卷积网络后面加入Region Proposal Network(RPN)替代Selective Search,直接训练得到候选框。
改进
RPN
卷积网络最后卷积层的输出维度为, sliding window 大小为,使用 这样的一个4维的卷积核,就可以将每一个3*3的sliding window 卷积成一个256维的向量。
每个滑动窗口提取k=9个不同大小的候选框,所以分类器有18个输出节点,回归器有36个输出节点,使用1*1卷积(即全连接)。
总结
参考资料
一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD
边框回归:BoundingBox-Regression(BBR)
RCNN学习笔记(7):Faster R-CNN 英文论文翻译笔记