Faster R-CNN是在Fast R-CNN的基础上提出了RPN(Region Proposal Networks),通过融合RPN和Fast R-CNN,得到了一个end-to-end的CNN对象检测模型。

Fast R-CNN需要使用其他算法来得到region proposal,显得很麻烦。而Faster R-CNN则使用卷积层的特征来生成region proposal,这样,我们最终就能得到一个比较完整的模型了。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

Faster R-CNN 人工智能 第1张

这是论文中的图,第一次看论文的时候一直看不懂。后来才明白。

区域生成网络

论文借鉴SPP和ROI中的思想 在feature map中提取proposal。 先通过对应关系把feature map的点映射回原图,在每一个对应的原图设计不同的固定尺度窗口(bbox),根据该窗口与ground truth的IOU给它正负标签,让它学习里面是否有object,这样就训练一个网络RPN(Region Proposal Network)。

具体过程

输入图像先经过一系列卷积操作,得到feature maps。论文中的网络的输入是1*224*224*3(NHWC),这里batch_size=1,经过一系列卷积后,输出1*51*39*256维的feature map,然后以feature maps的每个特征点映射回原图的感受野的中心点为中心,选取k个不同scale、aspect ratio的anchor,这时将不考虑channel,即我们只针对51*39个特征点生成anchor。论文中3个scale(三种面积Faster R-CNN 人工智能 第2张),3个aspect ratio( {1:1,1:2,2:1} ),所以,每个特征点将生成9个anchor,示意图如下

Faster R-CNN 人工智能 第3张

1*51*39*256维的feature map将生成51*39*9个anchor。然后我们会对所有的anchor进行正负样本的划分。

关于正负样本的划分,每张训练图像都有ground truth box,

  • 一、对每个标定的ground truth box区域,与其重叠比例最大的anchor记为正样本 (保证每个ground truth box至少对应一个正样本anchor)。
  • 二、对一中剩余的anchor,如果其与某个标定区域重叠比例大于0.7,记为正样本(每个ground truth box可能会对应多个正样本anchor。但每个正样本anchor 只可能对应一个ground truth box);如果其与任意一个标定的重叠比例都小于0.3,记为负样本。
  • 三、不满足一、二条件的anchor弃之不用。
  • 四、跨越图像边界的anchor弃去不用

每个anchor后面都会接一个二分类softmax和一个bounding box的regressor。二分类softmax输出anchor里面是物体的概率和不是物体的概率,bounding box的regressor则输出anchor对应的4个坐标位置,因此,最终的loss为

Faster R-CNN 人工智能 第4张

  • i表示第i个anchor,当anchor是正样本时 Faster R-CNN 人工智能 第5张=1 ,是负样本则Faster R-CNN 人工智能 第6张=0,Faster R-CNN 人工智能 第7张表示 一个与正样本anchor 相关的ground truth box 坐标 (每个正样本anchor 只可能对应一个ground truth box: 一个正样本anchor 与某个ground truth box对应,那么该anchor与ground truth box 的IoU要么是所有anchor中最大,要么大于0.7)。
  • x,y,w,h分别表示box的中心坐标和宽高,Faster R-CNN 人工智能 第8张 分别表示 predicted box, anchor box, and ground truth box (y,w,h同理)Faster R-CNN 人工智能 第9张 表示predict box相对于anchor box的偏移,Faster R-CNN 人工智能 第10张 表示ground true box相对于anchor box的偏移,学习目标自然就是让前者接近后者的值。

Faster R-CNN 人工智能 第11张

 Faster R-CNN 人工智能 第12张

Faster R-CNN 人工智能 第13张

  • Faster R-CNN 人工智能 第14张表示这些regressor的loss指针对正样本而言,因为负样本时Faster R-CNN 人工智能 第15张=0该项被消去。
  • Faster R-CNN 人工智能 第16张是关于两种类别 (object vs. not object) 的log loss

训练:正负样本的选择,文中提到如果对每幅图的所有anchor都去优化loss function,那么最终会因为负样本过多导致最终得到的模型对正样本预测准确率很低。因此 在每幅图像中随机采样256个anchors去参与计算一次mini-batch的损失。正负比例1:1(如果正样本少于128则补充采样负样本)

训练过程

如何共同训练提取proposal的RPN和分类的Fast R-CNN,论文作者采用的方法是

  • 第一步:用ImageNet模型初始化,独立训练一个RPN网络;
  • 第二步:仍然用ImageNet模型初始化,但是使用上一步RPN网络产生的proposal作为输入,训练一个Fast-RCNN网络,至此,两个网络每一层的参数完全不共享;
  • 第三步:使用第二步的Fast-RCNN网络参数初始化一个新的RPN网络,但是把RPN、Fast-RCNN共享的那些卷积层的learning rate设置为0,也就是不更新,仅仅更新RPN特有的那些网络层,重新训练,此时,两个网络已经共享了所有公共的卷积层;
  • 第四步:仍然固定共享的那些网络层,把Fast-RCNN特有的网络层也加入进来,形成一个unified network,继续训练,fine tune Fast-RCNN特有的网络层,此时,该网络已经实现我们设想的目标,即网络内部预测proposal并实现检测的功能。

Faster R-CNN 人工智能 第17张

参考资料:

https://zhuanlan.zhihu.com/p/24916624?refer=xiaoleimlnote

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄