作者:戴璞微 微信公众号:AI那点小事 知乎专栏:AI那点小事 CSDN博客:https://daipuweiai.blog.csdn.net/ CSDN原文链接:https://daipuweiai.blog.csdn.net/article/details/100166768 知乎专栏链接:https://zhuanlan.zhihu.com/p/80535275
这10几天忙于实习公司模型训练和天池比赛,因此没有多少时间用于更新这个系列文章第六篇——Faster R-CNN论文解读。在前面一篇博客【计算机视觉——RCNN目标检测系列】五、Fast R-CNN论文解读主要介绍了Fast R-CNN网络架构,在这篇博客中我们将主要介绍Faster R-CNN,虽然还有Mask R-CNN作为最终改进版,但Mask R-CNN主要用于图像分割网络,因此我们在此先不做详细介绍,待有时间再做详细学习之后再做详细介绍。之后我们也会针对Fast R-CNN和Faster R-CNN进行实战,解读官方源代码或手动实现,框架将会使用TensorFlow和keras,大家敬请期待。
经历了R-CNN和Fast R-CNN的前期积累,Ross Girshick与何恺明、任少卿和孙剑合作对Fast R-CNN进行改进,改进版本就是Faster R-CNN。之所以称之为Faster,就是因为相比于Fast R-CNN,Faster R-CNN将推荐区域生成、分类和定位全部融入到一个网络当中,极大加快了Faster R-CNN的训练与测试,综合性能有较大提高,并且达到了实时的效果。接下来我们来介绍Faster R-CNN网络。在小型网络上能达到17fps,在VOC数据集上取得59.9%的mAP,大型网络上也能到5fps,mAP为78.8%。在介绍Faster R-CNN之前,我们对Fast R-CNN进行一个简单回顾。
同样地,我们对Fast R-CNN的架构与缺点进行简单说明。首先来看下Fast R-CNN的网络架构:
虽然Fast R-CNN得到了与R-CNN相当的性能,mAP在66%-67%,并且将R-CNN的84小时的训练时间降低至9.5小时,测试时间从47秒将降低至0.32秒。但是Fast R-CNN存在如下两个缺点:
接下来,我们将从RPN和网络架构两方面来介绍Faster R-CNN。
相比于Fast R-CNN,Faster R-CNN最重要的改进就是引入了区域生成网络(Region Proposal Network,RPN)。在Faster R-CNN 中提出的RPN取代了Fast R-CNN中的选择性搜索算法(Selective Search,SS),从而使得区域生成、分类和定位三大任务全部融合到一个网络中,并可以利用GPU实现加速。下图中是RPN的架构图。接下来来重点介绍RPN。
在这里我们首先来看下anchor。需要提醒一下,在RPN网络的输入是原始图像经Fast R-CNN中特征提取网络(VGG或者ZF)提取出来的特征图。RPN首先要做的就是获取区间区域,这里使用的是滑动窗口法。如果把输入特征看成图像,那么图像的每一个位置,考虑9个可能的候选窗口:三种面积
与三种比例
。这些候选窗口称为anchor。它的中心叫做锚点。下面是anchor的示意图。
需要注意的是,每个尺寸为
的特征图在经过滑动窗口处理之后会的通道数为256的新的特征图,尺寸仍然为
。之后分别进行两次全连接操作分别2k个分类结果4k个预测结果。这里k指的是anchor的个数,只不过在Faster R-CNN在中规定成上9而已。即在Faster R-CNN中,我们需要返回的有18个分类分数和36个预测结果。需要特别指出的是,RPN网络返回的18个分类分数值是指前景(物体)的概率和背景的概率。36个预测结果是指9组对原图偏移量,每组4个。
接下来我们来说下RPN的损失函数,具体损失函数表达式如下:
其中,
为每个小批量样本中每个anchor的下标,
则是每个anchor为一个物体(前景)的概率,对于Ground Truth为前景的,
就是1,若是为背景那
则为0。同时在损失函数中,
为平衡参数,用于平衡分类样本个数
和回归样本个数
,默认为10。
同时我们对RPN整个训练中正负样本的组成进行说明。对于正样本,我们规定为如下两个部分:所有的Ground Truth和与Ground Truth之间IoU高于0.7的候选。对于所有与Ground Truth之间IoU小于0.3的候选框。
那么RPN可以利用BP算法和SGD进行端到端训练。在论文中RPN的训练是随机选择256个anchor,并且保证正负样本数量比例为1:1。若正样本少于128,那么填充负样本。同时RPN的初始化权重服从
。训练时,前60k个小批量样本学习率为0.001,后20个小批量样本的学习率为0.0001。L2正则化系数为0.0005,动量因子为0.9。
接下来我们来对Faster R-CNN架构进行分析。Faster R-CNN整体架构如下图所示。从上图可以看出,Faster R-CNN就是RPN与Fast R-CNN的组合。同时RPN与Fast R-CNN共享特征提取网络的输出。这也就使得RPN与Fast R-CNN能够都是使用GPU加速。
从上个图可以看出,Faster R-CNN的架构如下:
接下来我们来介绍Faster R-CNN的几种训练方式。论文中提到了三种训练方式:轮流训练、近似联合训练和联合训练。Faster R-CNN利用的是第一种——4步轮回训练。接下来我们对这3种训练进行详细介绍。首先是第一种训练方式——轮回训练。4步轮回训练过程如下:
,之后训练RPN得到模型
;
模型生成推荐区域
;
训练Fast R-CNN,然后利用ImageNet初始化得到模型
;
进行初始化,固定卷积层参数,微调RPN独有的层,得到模型
;
初始化训练Fast R-CNN,微调独有的层得到模型
;
虽然整个训练过程只进行两次epcoh,但是每个部分
进行很多次迭代(80k,60k)。 接下来介绍近似联合训练。近似联合训练就是把RPN与Fast R-CNN当成一个整体进行训练。相比于轮流训练,近似联合训练的训练时间下降了20%-25%。但是反向计算到共享卷积层时RPN网络损失和Fast R-CNN网络损失叠加进行优化,但此时把候选区域当成固定值看待,忽视了Fast R-CNN一个输入即候选区域的导数,则无法更新训练。 最后一种是联合训练,它也是是把RPN与Fast R-CNN当成当成一个整体进行训练。但将候选区域当成变量,在反向传播过程中需要计算梯度。至于梯度的计算请参考另一篇论文:Instance-aware Semantic Segmentation via Multi-task Network Cascades。