申明:本系列目标检测大部分内容转自以下链接,博主做了稍微修改,若侵犯权利,请联系删除,谢谢!
-----------------------------------------------------------------------------------------------------------------
目标检测=where + what :给定一张图像或者视频帧,找出其中所有目标的位置,并给出每个目标的具体类别。
1.传统的目标检测
1)检测流程
a)区域选择:在给定的图像上选择一些候选的区域(使用穷举策略,采用滑动窗口,且设置不同的大小,不同的长宽比对图像进行遍历)
b)特征选择:对候选区域提取特征,SIFT,HOG等;
c)分类器分类:使用SVM、Adaboost等;
2)传统方法存在的问题
a)基于滑动窗口的区域选择策略没有针对性,时间复杂度高,窗口冗余。
b)手工设计的特征对于多样性(目标的形态多样性,光照变化多样性,背景多样性等)的变化并没有很好的鲁棒性。
2. R-CNN(CVPR2014,TPAMI2015)
2.1 Region Proposal:可以解决滑动窗口的问题
1)候选区域(Region Proposal):预先找出图像中目标可能出现的位置。它利用了图像中的纹理、边缘、颜色等信息;
2)优点
a)可以保证在选取较少窗口(几千设置几百)的情况下保持较高的召回率;
b)大大降低了后续操作的时间复杂度;
c)获取的候选窗口比滑动窗口的质量更高(滑动窗口固定长宽比);
3)常用的Region Proposal方法
a)Selective Search
b)Edge Boxes
2.2 R-CNN:可以解决特征鲁棒性的问题
1)基于R-CNN的目标检测流程:
图 1 基于R-CNN的目标检测流程
a)输入测试图像
b)利用 selective search算法在图像中自下而上提取2000个左右的Region Proposal;
c) 将每个Region Proposal缩放(warp)成227x227的大小并输入到CNN,将CNN的fc7层的输出作为特征;
【对每个Region Proposal缩放到同一尺度是因为CNN全连接层输入需要保证维度固定】
d)将每个Region Proposal提取到的CNN特征输入到SVM进行分类;
e)对SVM分好类的region proposal做边框回归(bounding-box regression);
【边框回归是对region proposal进行纠正的线性回归算法,为了让region proposal提取到的窗口跟目标真实窗口更吻合。因为region proposal提取到的窗口不可能跟人手工标记那么准,如果region proposal跟目标位置偏移较大,即便是分类正确了,但是由于IoU(region proposal与Ground Truth的窗口的交集比并集的比值)低于0.5,那么相当于目标还是没有检测到。】
2)R-CNN的缺点
a) 训练分为多个阶段,步骤繁琐: 微调网络+训练SVM+训练边框回归器;
b)训练耗时,占用磁盘空间大:5000张图像产生几百G的特征文件;
c)速度慢:使用GPU, VGG16模型处理一张图像需要47s;
d)测试速度慢:每个候选区域需要运行整个前向CNN计算;
e)SVM和回归是事后操作:在SVM和回归过程中CNN特征没有被学习更新;