Faster R-CNN
面临的问题
在当时,Fast RCNN已经获得了较大的突破,但是仍然存在一些问题,fast rcnn的提取候选框的方法 selective search 不能GPU并行计算,速度还是有很大的提升空间,作者的想法是能不能提取一次图像的特征后,即利用了GPU的并行资源,还实现了提取特征与提取候选框这两个功能。
RPN网络
网络细节
当卷积层提取到feature map后 ,在卷积层后利用一个3 3 的卷积核提取每个feature map点的特征(这个卷积核与之前的不太一样),根据 卷积核扫描图像对应区域的中点,按照1 :1 1:2 2:1 三个 hw比和三个尺寸生成9个 anchors,一共会生成 h w 9个候选框,3 3的卷积过后接一个全连接层,然后输出 9个值,代表是否为正类的概率(是否包含物体),同时 ,输出 4 * 9的值用来回归精修anchor。
假设我的 原图经过卷积层提取特征后输出 5 5 256 的feature map, 然后 输入到 3 3 特殊的卷积,这个卷积核每划动一下,他在这个feature 的作用区域 就是 3 3 256 ,对每个channel执行卷积操作后得到 1 1 *256的feature map,然后不进行相加操作,直接对这个 feature map后接全连接层 分类+回归,然后每划动一次都执行上述操作,生成候选框。
RPN Trianing Method
打标签
上面说了如何前想计算,接下来说如何打标签,利用生成的anchor 对每张图像标记好的真实标签计算IOU,如果一个anchor与这张图像的任意一个anchor最近,那么直接标注为正类,如果与标签的IOU大于0.7也标记为正类,如果小于0.3就标记为负类,其余的直接忽略不计。
损失函数
它的损失函数与 fast rcnn基本一致,只是分类阶段换成了两类(是否为正类)。
四步交替训练
- 先训练 RPN网络。
- 把训练好的RPN网络生成的anchor给fast rcnn,训练fast rcnn。
- 把fast rcnn 训练好的 cnn权重同步给 RPN,锁定这个权重,fine-tune其它层。
把训练好的RPN网络生成的anchor送到fast rcnn,其中也是锁定conv权重,fine-tune,训练好后合并两个模型形成faster rcnn。
Q&A
如果 3 *3的卷积核在图像边界,那么生成的anchor可能会超过原图边界,这种anchor直接丢弃。
通过rpn网络生成的候选框,由于重合部分较大,最后也会执行一次nms去重,或者按照分类得分进行排序筛选。