1 整体介绍:
r-cnn全称是region-cnn是第一个应用于目标检测的深度学习算法。以后的fast r-cnn,faster r-cnn都是建立在它的基础之上的。
传统的目标检测算法一般为:在图片上使用穷举法选出所有可能的区域框。对这些框进行提取特征,再使用图像识别方法分类。
通过非极大值抑制法进行定位输出结果。
r-cnn遵循传统的思路。只是相比于传统的改进之处在于用Selective Search (选择性搜索),选择可能包含物体的窗口。
再一个用CNN代替以前的hog,sift等来进行特征提取方式。
创新在于:上面第一次用到CNN提取特征,还有用大样本下监督预先训练+小样本微调来解决小样本下难训练,甚至过拟合
的问题,得到一个最终的特征提取网络CNN。
2 入门介绍:
3 整体流程:
r-cnn整体框架如图所示:
1.采用selectIve search 寻找可能包含物体的区域,每张图片生成2K左右的建议窗口,但是比传统的穷举法还是少一些。
2.将那些建议窗口送入CNN提取特征。CNN通常输入是统一尺寸的图像,但是我们图片里面的不同物体肯定尺寸不统一,即使
同一物体尺寸也不一定相同,所以上面准确的生成不同尺寸建议窗口也是有难度的,r-cnn对不同尺寸建议窗口缩放到统一,
再使用CNN提取特征。
3.提取出特征后,使用svm来对CNN输出的特征进行分类。
4生成定位预测窗口。首先使用非极大值抑制删除一些可能性小的窗口,再通过bounding box 回归最终得出定位预测窗口。
3.1训练细节:
r-cnn训练过程可以分为以下步骤:
CNN训练:
1.对CNN先ILSVR2012进行有监督预先训练。由于目标数据集太少,无法从0开始训练,所以我们需要预训练。
2.然后在我们目标数据集上对前面预先训练好的CNN,再进行一次小样本微调训练,得到一个最终的CNN特征提取网络。
svm训练:
1.用selective search 搜索候选区域,统一使用微调后的CNN进行特征提取并保存。
2.使用保存的特征,训练svm分类器。
3.2解释分析:
1 selective search
采取过分割手段,将图像分割成小区域,再通过颜色直方图,梯度直方图相近等规则进行合并,最后生成约2000个任意尺寸建议框的操作,具体见博客。
2 将建议框变形为统一?怎么做?
本文采用AlexNet CNN网络进行CNN特征提取,为了适应AlexNet网络的输入图像大小:227×227,故将所有建议框变形为227×227。
3 为什么要进行非极大值抑制?非极大值抑制又如何操作?
具体怎么做呢?
① 对2000×20维矩阵中每列按从大到小进行排序;
② 从每列最大的得分建议框开始,分别与该列后面的得分建议框进行IoU计算,若IoU>阈值,则剔除得分较小的建议框,否则认为图像中存在多个同一类物体;
③ 从每列次大的得分建议框开始,重复步骤②;
④ 重复步骤③直到遍历完该列所有建议框;
⑤ 遍历完2000×20维矩阵所有列,即所有物体种类都做一遍非极大值抑制;
⑥ 最后剔除各个类别中剩余建议框得分少于该类别阈值的建议框。【文中没有讲,博主觉得有必要做】
4 为什么要采用回归器?回归器是什么有什么用?如何进行操作?
首先要明确目标检测不仅是要对目标进行识别,还要完成定位任务,所以最终获得的bounding-box也决定了目标检测的精度。
这里先解释一下什么叫定位精度:定位精度可以用算法得出的物体检测框与实际标注的物体边界框的IoU值来近似表示。
如下图所示,绿色框为实际标准的卡宴车辆框,即Ground Truth;黄色框为selective search算法得出的建议框,即Region Proposal。即使黄色框中物体被分类器识别为卡宴车辆,但是由于绿色框和黄色框IoU值并不大,所以最后的目标检测精度并不高。采用回归器是为了对建议框进行校正,使得校正后的Region Proposal与selective search更接近, 以提高最终的检测精度。论文中采用bounding-box回归使mAP提高了3~4%。
小结
论文发表的2014年,DPM已经进入瓶颈期,即使使用复杂的特征和结构得到的提升也十分有限。本文将深度学习引入检测领域,一举将PASCAL VOC上的检测率从35.1%提升到53.7%。
本文的前两个步骤(候选区域提取+特征提取)与待检测类别无关,可以在不同类之间共用。这两步在GPU上约需13秒。
同时检测多类时,需要倍增的只有后两步骤(判别+精修),都是简单的线性运算,速度很快。这两步对于100K类别只需10秒。
以本论文为基础,后续的fast RCNN4(参看这篇博客)和faster RCNN5(参看这篇博客)在速度上有突飞猛进的发展,基本解决了PASCAL VOC上的目标检测问题。
还存在什么问题?
很明显,最大的缺点是对一张图片的处理速度慢,这是由于一张图片中由selective search算法得出的约2k个建议框都需要经过变形处理后由CNN前向网络计算一次特征,这其中涵盖了对一张图片中多个重复区域的重复计算,很累赘;
知乎上有人说R-CNN网络需要两次CNN前向计算,第一次得到建议框特征给SVM分类识别,第二次对非极大值抑制后的建议框再次进行CNN前向计算获得Pool5特征,以便对建议框进行回归得到更精确的bounding-box,这里文中并没有说是怎么做的,博主认为也可能在计算2k个建议框的CNN特征时,在硬盘上保留了2k个建议框的Pool5特征,虽然这样做只需要一次CNN前向网络运算,但是耗费大量磁盘空间;
训练时间长,虽然文中没有明确指出具体训练时间,但由于采用RoI-centric sampling【从所有图片的所有建议框中均匀取样】进行训练,那么每次都需要计算不同图片中不同建议框CNN特征,无法共享同一张图的CNN特征,训练速度很慢;
整个测试过程很复杂,要先提取建议框,之后提取每个建议框CNN特征,再用SVM分类,做非极大值抑制,最后做bounding-box回归才能得到图片中物体的种类以及位置信息;同样训练过程也很复杂,ILSVRC 2012上预训练CNN,PASCAL VOC 2007上微调CNN,做20类SVM分类器的训练和20类bounding-box回归器的训练;这些不连续过程必然涉及到特征存储、浪费磁盘空间等问题。
参考:
https://blog.csdn.net/wopawn/article/details/52133338
http://www.xue63.com/toutiaojy/20180125G00NS300.html
其他写的比较详细的文章,感兴趣可以点击:
https://www.cnblogs.com/gongxijun/p/7071509.html?utm_source=debugrun&utm_medium=referral
http://www.cnblogs.com/573177885qq/p/6066228.html
https://blog.csdn.net/hjimce/article/details/50187029
https://blog.csdn.net/shenxiaolu1984/article/details/51066975