Faster R-CNN与代码实现有关部分总结(按照论文顺序排列)

  1. RPN(Region Proposal Network)
    图→CNN→候选框+检测分数
    在特征图上滑动
    Faster R-CNN与代码实现有关部分总结(按照论文顺序排列)
  2. anchor box只依赖单一尺寸的图片和特征图,用单一尺寸的filters(用单一尺寸的特征图,训练针对不同比例、大小的分类器,后面会有讲解)
  3. RPN的正例:a.和真值框IoU最高的anchor b.和任意真值框IoU大于0.7的anchor
    负例:与所有真值框的IoU均小于0.3
  4. 损失函数:
    Faster R-CNN与代码实现有关部分总结(按照论文顺序排列)
    i:mini-batch中anchor索引
    pi:第i个anchor是目标的概率
    pi*:真值标签(如果anchor是正例则为1,负例则为0)
    ti:预测的目标框4点坐标向量
    ti*:真值框4点
    Lcls:log loss(2类,是否是目标)
    Lreg(ti, ti*)=R(ti-ti*),R是robust loss func(smooth L1)
    Ncls:用于normalization,mini-batch大小(文中设置256)
    Nreg:用于normalization,anchor位置个数(文中设置2400)
    λ=10\lambda=10:用于平衡两个加和项(实验证明这个参数设多少影响不大)
  5. 候选框回归:
    Faster R-CNN与代码实现有关部分总结(按照论文顺序排列)
    x,y,w,h:中心坐标、候选框宽、高
    x,xa,x*:预测框、锚框、真值框
  6. RPN中,采用(3*3)大小的窗口大小在特征图上滑动。
    Faster R-CNN与代码实现有关部分总结(按照论文顺序排列)
    但由于学了k个regressor,而这些回归器不共享参数,所以相当于得到了多尺度多比例的候选框。
  7. 用"image-centric" sampling训练RPN
  8. mini-batch:一张照片中的正负anchors(随机在这张图片的所有anchors中抽样256个,正负样例比例1:1,如果正例样本数小于128,则用负例补满256个anchor)
  9. 用预训练过的ImageNet分类模型参数初始化已有层参数,用Gaussian初始化新定义的参数。
    微调:ZFnet的所有层,conv 3_1和VGG的up部分
    lr=0.001(60k iter),lr=0.0001(之后的20k iter)
    momentum=0.9,weight decay=0.0005
    (PASCAL VOC数据集上,COCO数据集上设置的参数不同,后面会讲)
  10. 训练步骤:a.用ImageNet模型参数初始化之后,先训练RPN网络
    b. 用ImageNet模型参数初始化之后,利用刚刚RPN网路的输出proposal训练fast RCNN
    c.用Fast RCNN网络初始化RPN的模型参数,但冻住共享部分,只训练RPN的独特部分
    d.保持共享部分,训Fast RCNN的独有部分
  11. resize图片使短边长度600pixel。VGG网络和ZF网络(本论文的实验部分以VGG和ZF两种网络作为backbone进行了实验)最后一层卷积层的stride=16。
    训练时忽视了超出图像边界的框,不过测试时将所有框都加上了,不过将超出边界的位置裁剪掉了
  12. RPN网络输出proposal时,因为候选框也就是proposal互相重叠,所以根据cls层的分数,进行了极大值抑制(NMS)。需要NMS的框互相之间IoU大于等于0.7。在NMS后,用分数top-N的候选框进行检测(训练时是N=2000)
  13. 部分实验参数设置:a. Pascal VOC 2007和Pascal VOC 2012上进行了实验
    backbone: fast version of ZF网络:5 conv,3全连接
    VGG-16:13 conv,3全连接
    b. COCO数据集上进行了实验:8GPU
    mini-batch大小:RPN时是8,fast RCNN时是16
    lr=0.003(240k iter)→lr=0.0003(之后的80k iter)
    负样例:与真值框的IoU\in[0, 0.5)
    RPN网络提出300个proposal
    将图像resize到单一尺寸,也就是短边长度为600pixel