Faster R-CNN论文阅读笔记

文章目录

  • 前言
  • 概述
  • CNN
  • Region Proposal Network
    • 步骤
    • loss function
    • training时的取样
  • 训练整个网络
  • 总结

前言

论文标题:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
推荐的讲解:一文读懂Faster RCNN



概述

Faster R-CNN在Fast R-CNN上进一步做改进。之前的R-CNN还是使用selective search得到regions of interest,而Faster R-CNN提出了用神经网络来得到regions,也就是region proposal network。不仅大大加快了运行速度,还提高了准确率。

下面是Faster R-CNN的流程图:

Faster R-CNN论文阅读笔记_第1张图片

从流程图可以看出Faster R-CNN的主要部分为:

  1. convolution layer。原图像先进入CNN中得到对应的feature map。
  2. Region Proposal Network。也即是Faster R-CNN提出的新东西。用来得到regions。
  3. RoI pooling、classifier和bounding box regressor。这部分和Fast R-CNN是一样的。

下面对每一部分细讲。



CNN

这部分没什么好说的,文章里使用pre-trained好的CNN对图像进行特征提取。并且在每个卷积层都会padding让图像大小不改变,只在池化层使图像成倍减小,这让后面feature map映射回原图像更加方便。

注意这个CNN是region proposal network和后面的fast R-CNN共享的,论文也做实验表明共享参数效果更好。



Region Proposal Network


步骤

Faster R-CNN论文阅读笔记_第2张图片

这是Faster R-CNN提速的最关键的地方:用神经网络来进行regions proposal。

  1. 第一步:以feature map的每个像素点对应回原图的像素点为中心,每个中心在原图上生成9个anchors(对应3个scales和3个ratios)。设feature map大小为H × \times ×W,则总共生成9 × \times ×H × \times ×W个anchors,这些anchors作为候选框。
    当然这样粗略选出来的anchors不太准也没关系,所以后面会有RPN中的bounding box regressor和Fast R-CNN中的bounding box regressor对anchors进行修正。
Faster R-CNN论文阅读笔记_第3张图片
  1. 第二步:对feature map进行3x3的卷积,得到通道数为256(ZF Net是256)的新的feature map。

  2. 第三步:将新的feature map送入cls layer和reg layer(都是1 × \times × 1卷积)。
    cls layer是对9 × \times ×H × \times ×W个anchors进行分类(2分类,判断是object还是background),所以每个像素点会对应2 × \times ×k个分数,输出的大小为[1, 2 × \times × 9, H, W]。(1是batch_size大小,2x9是通道数)
    reg layer跟之前的R-CNN中的bounding box regressor是一样的,参考资料:边框回归(Bounding Box Regression)详解。它的输出大小为:[1, 4 × \times × 9, H, W]。

这里的cls layer和reg layer的参数是feature map的所有像素点共享的,参数数量只用:256 × \times × (4+2) × \times × 9,从而减少了参数数量。

loss function

关于anchors的类别:与ground truth有最大iou的,以及iou大于0.7的为positive;iou小于0.3的为negative;其它的不参与训练。
PRN的loss function分为2部分,一部分来自classifier,一部分来自regressor。

Faster R-CNN论文阅读笔记_第4张图片

其中 p i p_i pi是anchor i为object的概率, p i ∗ = 1 p_i^*=1 pi=1若anchor i是positive的否则 = 0 =0 =0 t i t_i ti对应于anchor i的修正后的坐标(注意并不是真正的坐标,而是做了变换后的,详见上面的参考资料), t i ∗ t_i^* ti是与anchor i对应的ground truth对应的坐标。
L r e g L_{reg} Lreg前面乘了 p i ∗ p_i^* pi是因为只有在anchor i对应object的时候才用计算它。
λ \lambda λ是为了平衡 N c l s N_{cls} Ncls N r e g N_{reg} Nreg的差距。

training时的取样

由于negative的anchor要远多于positive的,所以为了取样平衡,我们每个batch中要求两者的比例接近1:1(都是128个),positive不够的再用negative补。



训练整个网络

后面的RoI pooling layer、classifier和bounding box regressor和Fast R-CNN是一样的,所以直接讲训练。
论文提出的训练方式是RPN和Fast R-CNN交替训练,并且共享CNN的参数。具体步骤是:

  1. 使用pre-trained好的CNN网络,先训练RPN。
  2. 使用第一步的PRN得到的regions训练Fast R-CNN。
  3. 固定住共享参数的CNN网络的参数,只fine-tune PRN独有的部分。
  4. 同样固定住共享参数的CNN网络的参数,只fine-tune Fast R-CNN独有的部分。
    重复以上的步骤。

由于PRN提出的regions有很多会重叠,所以要对它们做NMS(非极大值抑制),然后再取其中的top-N个(根据regions的iou)用于detection。



总结

Faster R-CNN提出了region proposal network,进一步加快了运行速度。

到此,R-CNN经历了:从R-CNN最开始的三阶段:region proposal、CNN、SVM分类和bounding box regressor;到fast R-CNN的one-stage:CNN提取整张图片特征、region proposal、RoI pooling后softmax分类和bounding box regressor;再到Faster R-CNN:用神经网络RPN进行region proposal。

你可能感兴趣的:(深度学习论文阅读,论文阅读,cnn,目标检测)