三.每周一学----目标检测-R-CNN
前言
传统的目标检测方法由于滑窗效率低,特征不够鲁棒的原因限制了目标检测的发展,而深度学习的目标检测方法致力于解决这些问题,深度学习目标检测方法分为两个阶段(one-stage和two-stage)这个在我的前一篇博客有讲到。
这次,我们就先学习R-CNN。
R-CNN论文
《Rich feature hierarchies for accurate object detection and semantic segmentation》2014
R-CNN测试过程
- 输入一张图像,采用 selective search(选择性搜索)法提取约2000个Region Propasal。
- 先在每个建议框周围加上16个像素值为Region Propasal像素平均值的边框,在直接变形为227*227的大小。
- 先将所有Region Propasal减去该建议框像素平均值后,再依次将每个227×227的Region Propasal输入至AlexNet CNN网络,获取4096维的特征,2000个建议框的CNN特征组合成2000*4096维特征矩阵。
- 将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘,获得2000*20维矩阵表示每个Region Propasal是某个物体类别的得分。
- 分别对上述2000*20维矩阵中每一列即每一类进行非极大值抑制,剔除重叠Region Propasal,得到该列即该类中得分最高的一些Region Propasal。
- 分别用20个回归器对上述20个类别中剩余的Region Propasal进行回归操作,最终得到每个类别的修正后的得分最高的bounding box。
网络框架
R-CNN详细解释
1.selective search
因为selective search在目标检测中比较重要,这里作者将详细的理解一下
- 首先将图像进行分割得到若干区域,组成区域集合S,这是一个初始化的集合
- 然后利用颜色,纹理,尺寸和空间交叠等特征,计算区域里每个相邻区域的相似度
- 找出相识度最高的两个区域,将其合并为新集并删除原来的两个对应子集
- 重复以上的迭代过程,直到最开始的集合S为空,得到的分割结果和候选区域边界就是初始框
具体操作流程
例:如上图所示,R1和R2的的相似度最大然后合并为一个新的区域R(n+1),并删除R1和R2,然后不断的重复,最后得到最有可能涵盖物体的框,也就是Region Propasal
这篇博客中详细的介绍了selective search,同学们若想进一步解selective search,可以去看看
selective search
2.为什么要变成227*227
由于CNN的需要统一尺寸的输入,因此这里还需要将候选区域进行变形(AlexNet是227*227)
如何实现
-
各向异性缩放: 不管当前区域的长宽比,直接resize,结果可能会扭曲原图
padding处理(先添加一定尺寸的边界)
上面的padding=0,下面的padding=16。 -
各向同性缩放: 1.直接在原始图中做边界扩展,如果到了图像边缘则用区域的均值做填充
2.在区域边缘使用固定背景颜色做填充
哈哈哈!AlexNet CNN 这个内容我看了半天,也不是很清楚,在此就不向大家过多的解释了,以后再慢慢学习,大家可以自行去百度理解。
3.分类器SVM
是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)。
简单来说就是
SVM 的目的就是想要画出一条线,以“最好地”区分这两类点,以至如果以后有了新的点,这条线也能做出很好的分类
如上图就是红线效果好,黑线效果一般,绿线效果不好
这里也推荐一篇关于SVM的博客SVM写的十分详细,大家可以去学习一下
这样,因此我们对第四步的内容就有更好的理解
4.非极大值抑制
在第四步过后,我们会遇到同一个目标被多个建议框包围的情况,这是就要用到非极大值抑制
简单来说,就是只保留一个最优的框,于是我们就要用到非极大值抑制,来除去这些冗余的框
步骤
- 将所有框的得分排序,选中最高分及其对应的框
- 从每列最大的得分Region Propasal 'a’开始,分别与该列后面的得分Region Propasa 'b’进行IoU计算,如果和当前最高分框的重叠面积(IOU)大于一定阈值,我们就将框删除
- 重复以上步骤,直到遍历完所有Region Propasals
最后得到
5.边框回归(Bounding-box regression)
举个例子
如图所示
红色的框为Selective Search提取的Region Proposal,我们需要对红色的框进行调整,然后使之不断和绿色的框而契合,这样目标检测中的定位就会更加的准确,Bounding-box regression 就是用来调整这个窗口的。
简单来理解就是,我们用一般使用四维向量(x,y,w,h) 来表示窗口, 分别表示窗口的中心点坐标和宽高。 如上图,红色的框 P 代表原始的Proposal, 绿色的框 G 代表目标的 Ground Truth, 我们的目标是寻找一种关系使得输入原始的窗口 P 经过映射得到一个跟真实窗口 G 更接近的回归窗口G^。
如何让红色窗口变成绿色窗口呢
就是 平移+尺度放缩
这篇博客详细的介绍了如何实现 Bounding-box regression ,大家可以去看看
6.R-CNN优缺点
优点
- 使用了Selective search,大大提高了候选区域的筛选速度
- 通过边框回归模型进行校准,减少图像中的背景空白,得到更精确的定位
缺点
- 候选框的选择比较耗时,很难做到实时性
- 分步骤进行,过程繁琐(是采用传统目标检测的框架)
- 重叠区域特征重复计算
例
我们对蓝色区域就会产生两次的重复CNN提取,让计算重复
小结
这次我们就先学到这里,由于,是刚刚接触和学习这块内容,还有许多细节没有解释清楚,请大家见谅,如果大家有什么问题或者建议可以在评论里留言,感谢大家的观看。
这里推荐两个视频关于R-CNN的这个小姐姐讲的很好哦
这个也很详细视频
流程图借鉴