Faster RCNN
为了解决Fast RCNN中region proposal生成与目标检测速度不匹配的问题,在深度网络中引入RPN,直接利用深度网络直接计算得到region proposal,整个region proposal生成和目标检测的过程都可以在GPU上完成。同时也实现region proposal生成网络与目标检测网络的网络权值共享。
RPN网络结构
首先利用基网络对图像用一系列的卷积和池化操作进行特征提取,得到原始的feature maps(灰色区域),然后在原始的feature maps后面再接一个con+relu层,得到将要用于生成region proposal的feature maps。将feature maps中的每个点映射回原图回原图中心,得到一个基准点。根据设置好的尺度大小和长宽比,并围绕基准点,生成k个anchors。Feature maps的每个点都有关于k个anchors的输出,包括是否有目标,以及回归k个region proposal的座标值。
具体过程分析
得到用于生成region proposal的feature maps:为了生成region proposal,我们使用一个小的网络在经过基网络卷积池化计算得到的feature maps上滑动扫描,得到新的feature maps。将新的feature maps用来生成region proposal。
平移不变anchors:在feature maps上的每个点都可以预测得到k个region proposal。具体操作:将feature maps上的每个点映射到原图,得到一个基准点,然后围绕该基准点,通过设置好的固定的尺度大小和长宽比,生成k个anchors。在论文中,使用了3种尺度和3种长宽比的anchors,所以k=3*3=9,对于一个大小为W*H的feature map,将会产生W*H*k个anchors。而通过这种不同尺度和不同长宽比的设置,同样实现了anchors的平移不变性。
RPN的损失函数:在训练RPN的时候,先需要对得到的W*H*k个anchors进行正负样本的划分。将与gt box具有最大IOU的anchor以及与任何一个gt box的IOU大于0.7的anchor作为正样本。将剩余的与gt box的IOU小于0.3的anchor作为负样本,其余anchors均被忽略。
对于每个anchor,后面会再接上一个用于二分类的softmax与用于bbox回归器。二分类softmax用于判断anchor是否为目标的概率,bbox回归器用于调整anchor的4个座标值。因此RPN的损失函数可定义为:
其中表示第i个anchor的标签,表示对第i个anchor预测的概率值,表示与正样本anchor相关的gt box与anchor box的座标偏移,表示预测的box与anchor box的座标偏移。,的计算方式如下:
其中x,y,h,w分别表示box的中心座标,高度与宽度。
训练Faster RCNN
整个训练过程可分为4步:
第一步:用在ImageNet数据集上训练好的model初始化模型,训练一个RPN网络;
第二步:用在ImageNet数据集上训练好的model初始化模型,同时用第一步中训练好的RPN网络生成的region proposal作为输入,训练一个Fast RCNN;
第三步:用第二步训练好的Fast RCNN的网络参数初始化RPN网络,但是将RPN与Fast RCNN共享的网络层的learning rate设置为0,仅微调RPN独有的网络层。
第四步:固定共享的网络层,仅微调Fast RCNN所独有的fc层。
参考链接:
https://zhuanlan.zhihu.com/p/24916624
http://blog.csdn.net/u011534057/article/details/51247371
http://blog.csdn.net/xyy19920105/article/details/50817725