您的位置:首页 > 其它

物体检测与识别-Faster RCNN

2016-01-01 19:31 323 查看
一 导语

最近移植了faster rcnn[1]的测试部分,有一些肤浅的理解,做一个简要的分享和总结,希望后面能对训练过程做一个详细的剖析,由于本人水平有限,难免有错误与疏漏,请批评与指正。
一幅图中的物体识别和文字识别一样也分为两个步骤,物体检测和物体识别。物体检测就是从一幅图片中找出物体,物体识别的就是知道这些物体是什么类别。物体检测这块有很多方法,如Slective
Search[2],Edge Box[3], BING[4],何老师的深度残差网络 ResNet[5]等,物体识别这块除了今年何老师的深度残差网络[5],其他的感觉倒没有什么很大本质上的变化,主要是在深度网络的架构和配置上有些区别,如AlexNet,ZFNet,GoogleNet,VGG.其中很多论文采用了VGG,其中的一个原因是利用它进行转移学习的效果比较好(参见Li
Feifei课程[6]的一段话:the
VGG ConvNet features outperform those ofGoogLeNet in multiple transfer learning tasks),另外一个作者开放了它的网络架构和训练结果,比较方便。顺便推荐下Li
Feifei这个课程,个人觉得是挺好。一个算法既考虑了物体检测和识别的有Overfeat[10],FastRcnn[9],FasterRCNN等,下面图是Faster
RCNN的结果,文字部分是类别和置信度。Faster RCNN最主要的贡献是物体识别和物体检测部分共享了卷积层,本文还是先将其检测和识别算法分别分析。





二 物体检测

在Faster RCNN中物体检测用的是深度卷积网络和box regreesion做的,称之为RPN(region
proposalnetwork)。这里面部分的思想跟SPP[7]类似,在机器学习中一般我们都要求特征的维度要一致,一般的做法是将图像缩放到特定的大小,像Image
Net是244*244,minist是32*32或者利用bag-of-words的思想,但其中有些明显的问题是物体的比例不能保持了,如下图,很显然不利于物体识别,其中文字识别中也有类似情况。



但是其实卷积层和pooling层是不要求图像大小有要求的,卷积的操作如下图(摘自ufdl),如果不支持gif请搓链接),可以看到它对图像大小是没有要求的,pooling很明显也没有要求。



经过多层全卷积层后,网络的输出是一些feature map[8],feature map包含了特征和特征的位置.从feature
map推导原图坐标公式可以参考Li Feifei的课程[6]或者我转载的上篇博客。



有了Feature map后,怎么去找物体的位置呢?物体的大小不确定,物体的位置也不确定。

首先解释scale问题。我们在每个featuremap的点上选一些(论文中是9个)固定大小的框(论文里称为anchor),每个框对应不同的scale和长宽比例来处理物体大小变化和变形问题,这些框就是我们最初始的proposals,然后利用这个框里面的特征为每一个框训练一个分数来指示这个框里有物体的概率,概率高我们就留下来认为是真的有物体,概率小就应该没有物体,会被过滤掉。论文里这个9个框的信息如下,但程序里有些不太一样。



但是上面的一个问题是学习这个分数我们需要的是固定维度的特征,但是框的大小是变化的,它们覆盖的feature
map的范围是不一样的,所以最后我们还是需要把这些特征降维到一个固定的维度去找到物体的位置,这里采用的方法很通俗易懂,就是讲框里画格子,每个格子里做max
pooling,有点像hog里面的bloce和cell的思想,最后就降维到一个256维的特征,用这个特征就可以用普通的全连接网络去训练分数。就是下图中的256-d到2k
scores(k=9)的classfy
layer.不同的网络,这个维度不太一样,VGG中是512维,ZF中是256维。



最后一个问题,物体的大小不一定就是anchor的大小,因此我们还需要去矫正这些框的位置,这里就用了一个reg
layer,利用刚刚提取的256维的信息。开始我看论文的时候对box regreesion这块还是比较吃惊的,怎么这都能学习到。

3 物体识别
Faster rcnn物体识别部分参考的是fast
rcnn,但是它的特色就是前面卷积层跟rpn的卷积层共享,然后根据RPN提供的rois利用全连接层做物体类别分类和box
regression,注意这里的box regression会对每一个物体类别分别做矫正,这是很合理的,如果分类器判断是一个人,那么box
regression会根据feature map的信息去矫正这个人的位置,同理如果判断出来的是一辆车,那这两个类别的预测出来的box应该是不太一样的。

4 训练过程

本人这部分的代码还没看,因此只能根据论文先在这里简单写一下,后面应该会再扩展这部分。
1作者首先利用ImageNet的训练结果作为初始化权重去训练RPN

2 也是用ImageNet的训练结果初始化fast
rcnn(物体识别)网络的卷积层(注意还没有分享),用第一步的RPN的proposal独立的训练fast
rcnn net.

3 然后将fast rcnn的卷积网络共享个RPN,固定住这部分权重,然后只训练RPN的全连接层。
4同理,固定住fast
rcnn的卷积网络,利用第三步rpn的proposal微调fast
rcnn的全连接层。
结束,这样Rpn和fast
rcnn的卷积层就共享了。

[1]Ren S, He K, Girshick R, etal. Faster R-CNN: Towards real-time object detection with region proposalnetworks[C]//Advances in Neural Information Processing Systems. 2015: 91-99.

[2]Uijlings J R R, van de SandeK E A, Gevers T, et al. Selective search for object recognition[J].International journal of computer vision, 2013, 104(2): 154-171.

[3]Zitnick C L,Dollár P. Edge boxes: Locating object proposals from edges[M]//Computer Vision–ECCV 2014. Springer InternationalPublishing, 2014: 391-405.

[4]Cheng M M, Zhang Z, Lin W Y,et al. BING: Binarized normed gradients for objectness estimation at300fps[C]//Computer Vision and Pattern Recognition (CVPR), 2014 IEEE Conferenceon. IEEE, 2014: 3286-3293.

[5]He K, Zhang X, Ren S, et al.Deep Residual Learning for Image Recognition[J]. arXiv preprintarXiv:1512.03385, 2015.

[6] Stanford CS class CS231n:Convolutional Neural Networks for Visual Recognition.

[7]He K, Zhang X, Ren S, et al.Spatial pyramid pooling in deep convolutional networks for visualrecognition[M]//Computer Vision–ECCV 2014. Springer International Publishing,2014: 346-361.

[8] He K, Convolutional FeatureMaps. http://mp7.watson.ibm.com/ICCV2015/slides/iccv2015_tutorial_convolutional_feature_maps_kaiminghe.pdf

[9]Girshick R. Fast R-CNN[J].arXiv preprint arXiv:1504.08083, 2015.

[10]Sermanet P, Eigen D, ZhangX, et al. Overfeat: Integrated recognition, localization and detection usingconvolutional networks[J]. arXiv preprint arXiv:1312.6229, 2013.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: