目标检测:Faster R-CNN

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tinyzhao/article/details/53742626

《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》论文解读


本文来自Shaoqing Ren,看论文作者列表也是天团级配置,Kaiming He, Ross Girshick, and Jian Sun。

概述

前面的Fast R-CNN已经把特征提取、目标分类和边框回归统一到了一个框架下面,现在系统的瓶颈终于到了Region proposal了,能不能把这部分也统一进去呢?本文提出的Region Proposal Network来解决这个问题。

整个Faster R-CNN由两个部分组成,一个是Region Proposal Network,另一部分是Fast R-CNN,可以看做使用RPN寻找RoI,然后继续使用Fast R-CNN检测和定位。

这里写图片描述

RPN

RPN是一个全卷积网络,也就是没有全连接层。这个网络的输入是任意大小的图片,输出是矩形目标候选区域和区域得分(Objectness score)。

网络结构

如上图所示,这个网络前面的卷积层仍然套用VGGnet的结构,在最后一层卷积层后面再加些结构。

这里写图片描述

在conv5后面先加上3*3的卷积层,输出256层特征图,也就是如果输入图片为1000*600,那么这一层的输出就是256*H*W,H=60,W=40。经过3*3卷积层后,再接上两个1*1卷积层。一个1*1卷积的输出是(2*k)*H*W,表示区域是否是目标的概率。另一个输出是(4*k)*H*W,表示边框回归的值。这里的k代表的是anchor数量。全连接网络可以等效为滑动窗口+全连接,对特征图使用3*3的窗口进行滑动,然后每个窗口连接到FC层,然后FC层连接到回归和分类层,由于这些都是共享参数的,使用全卷积网络能够同时得到所有的结果,免去滑动窗口的步骤。

什么是anchor?这是本文最为抽象的一部分。当3*3的卷积核滑动到特征图的某一个位置的时候,以当前滑动窗口中心为中心映射到原图的一个区域,以原图上这个区域中心对应一个尺度和长宽比,文章使用3种尺度和3种长宽比(1:1;1:2;2:1),则在每一个滑动位置就有k=9个anchor。也就是说,conv5特征图上的每一个点都会对应着k个输出,所以RPN最后一层的输出是2k和4k。从原图角度来说,anchor的位置是图片无关的,可以先将特征图上的点映射回原图片,根据这个点提前计算好每个anchor在原图对应的位置。anchor机制还可以理解为在原图中proposal许多个(9*H*W)候选区域(也就是anchor),每一个候选区域在特征图上对应的都是3*3的区域,然后使用全连接层对这些候选区域每一个都进行分类和调整,每个候选区域都训练一个对应分类器和回归器,由于这些模型都是共享参数的,所以可以等效地使用全连接网络。网络最后的输出里面,每个相应的输出位置的值都对应一个anchor,region proposal其实使用anchor就做掉了,后面经过网络是为了精修每一个anchor。

训练

回过头来看,训练数据应该怎么准备呢?先把图片缩放到1000*600的大小,然后根据提前计算好的anchor对应位置,标记好目标得分和边框回归值。输入为1000*600的图片,输出为(2*9)*60*40和(4*9)*60*40的两个目标值。

每张图片的损失函数为

L({pi},{ti})=1NclsiLcls(pi,pi)+λ1NregipiLreg(ti,ti)

这个损失函数是每个anchor的目标分类损失和边框回归损失的和。这样RPN也是一个多任务学习过程。本文作者选择的参数是 Ncls=256,λ=10,Nreg=2400 。在每个mini-batch中,一张图片随机取256个anchor,正负样本1:1进行训练。

共享参数

从RPN结构来看,RPN和Fast R-CNN的卷积层是共享参数的,这样就可以一起训练两个网络参数。作者的做法是先训练RPN,然后用Fast R-CNN微调网络参数,再使用这个参数初始化RPN,以此反复迭代。

总结

至此,目标检测问题终于统一到一个框架下面了,不再需要多级的流水线。R-CNN系列方法是深度学习在目标检测领域的重要工作,但是它是一个通用的目标检测框架,对于人脸识别这一的应用显得模型太大。但是其中RPN这些组件的思想都是具有通用型的。R-CNN系列的一个发展脉络就是希望能够共同训练所有的组件,R-CNN每个模块都是单独训练的,SPP-net不能训练conv层,Fast R-CNN能够同时训练conv和fc层,Faster R-CNN整个系统都能训练。我想,这其中一方面得益于CNN强大的特征表示能力,另一方面也是大量的数据能够充分训练CNN。

猜你喜欢

转载自blog.csdn.net/tinyzhao/article/details/53742626