前言

上一篇文章讲的是框的生成,仅仅是RPN的一小部分,本章的讲解是RPN的具体细节,

训练过程

作者训练的过程分为四步
第一步:用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并实现检测的功能。

pytorch 实现Faster R-cnn从头开始 (二)
了解上面的大概训练过程就可以,所以我们第一步就是先复现出来RPN的代码,

RPN的讲解

RPN主要做二件事,生成框的区域内需要判断是背景,还是前景,还有大致坐标的回归,

RPN Classification

进行分类训练之前是需要label数据,数据的产生通过比较这些anchor和ground truth间的重叠情况来决定哪些anchor是前景,哪些是背景,也就是给每一个anchor都打上前景或背景的label。有了labels才可以进行训练。在一张图片上大概产生20000个框,训练不需要这多,所以需要删除绝大部分,删除的规则:
1、覆盖到feature map边界线上的anchor不参与训练;
2、前景和背景交界地带的anchor不参与训练。这些交界地带即不作为前景也不作为背景,以防出现错误的分类。在作者原文里把IOU>0.7作为标注成前景的门限,把IOU<0.3作为标注成背景的门限,之间的值就不参与训练,IOU是anchor与ground truth的重叠区域占两者总覆盖区域的比例,见示意图4;
3、训练时一个batch的样本数是256,对应同一张图片的256个anchor,前景的个数不能超过一半,如果超出,就随机取128个做为前景,背景也有类似的筛选规则;

RPN bounding box regression

RPN产生的框基本都会有误差,所以这个时候就需要训练一个anchors的回归,这样产生的anchors与ground truth更加接近,如下图所示
pytorch 实现Faster R-cnn从头开始 (二)
目标框一般使用四维向量来表示(x,y,w,h),anchors产生框的坐标计算为A=(Ax,Ay,Aw,Ah),ground truth框的坐标为G=(Gx,Gy,Gw,Gh),目标函数的形式
G′x=Ax+Aw⋅dx(A)
G′y=Ay+Ah⋅dy(A)
G′w=Aw⋅exp(dw(A))
G′h=Ah⋅exp(dh(A))
中心点坐标更加的趋近与线性变化,高和宽的变化更加趋近于exp函数的变化,这些是大量的实验结果得知,RPN将整合的loss合在一起,
pytorch 实现Faster R-cnn从头开始 (二)
Ncls是一个batch的大小256,Lcls(pi, pi*)是前景和背景的对数损失,pi是anchor预测为目标的概率,pi是前景的label值,就是1,将一个batch所有loss求平均就是RPN classification的损失;Nreg是anchor的总数,λ是两种 loss的平衡比例,ti是训练时每一个anchor与ground truth间的偏移量,t*i与ti用smooth L1方法来计算loss就是RPN bounding box regression的损失。

相关文章:

  • 2019-03-25
  • 2021-06-29
猜你喜欢
  • 2021-11-06
  • 2022-01-01
  • 2022-12-23
  • 2022-12-23
  • 2021-11-25
  • 2021-07-28
  • 2021-07-10
相关资源
相似解决方案