Faster-rcnn

原理

faster-rcnn

faster-rcnn

conver layer

原图resize到800x600, Conv layer出来(50x38x256)的输出

RPN

  • 从conv layer出来后每一个像素点配9个anchor;上面的分之经过1x1卷积形成50x38x18的张量,channel维度上每两个点代表一个anchor,分表表示前景与背景;

  • 下一个分支经过1x1卷积形成50x38x36的张量,channel维度上每四个点代表一个anchor,用来回归位置的准确性,输出的anchor是(x,y,w,h), GT是($x_a,y_a,w_a,h_a$),通过线性映射使得两者比较接近,需要训练如下参数

    $$t_x=(x-x_a)/w_a, ty=(y-y_a)/h_a, t_w=log(w/w_a), th=log(h/h_a)$$, 每一个anchor的位置都有这样的一个线性回归的参数需要学习

Proposal

选择softmax出来分数比较高的,处理位置回归,得到比较靠谱的框

Roi Pooling

faster-rcnn

从rpn选出来一些框,该框对应到共享卷积输出,将对应的位置分成若干等分(文中是7x7),每一个等分中取max,得到一个channel切片的输出,将所有切片堆叠起来输入到下一个卷积输入

faster-rcnn

  • bound-box回归

    结合前面rpn推荐出来的框,再次预测推荐框和GT的偏移量

  • classification

    将共享卷积中对应rpn输出的7x7的特征输入fc得到softmax后的特征进行分类,分真实目标类别(voc20类)

anchor

从conv layer出来后每一个像素点配9个anchor,三个尺度(0.5, 1, 2),三个大小(128, 256, 512),rpn阶段和faste-rcnn阶段预测的值作用于这些anchor得到真正的完整的预测值,具体的是在rpn阶段通过缩放尺度和平移将anchor移动到和GT差不多的位置,faste-rcnn阶段再做一次

训练rpn网络

faster-rcnn

$p_i$是rpn阶段为每个anchor预测的概率值,$p_i^$是该anchor是GT的概率,计算的方法是如果该anchor和GT交并比大于0.7则是1,小于0.3则是0,介于两者之间的anchor不参与计算loss;$t_i$是rpn阶段从anchor到GT的尺度变换的预测值,$t_$是从anchor到GT的标准值。分类loss使用交叉熵损失函数,bbox回归使用smooth_l1 loss。

训练fast-rcnn

faster-rcnn

roi_pooling后接fc,一路通过softmax做类别分类,另一路对anchor回归,将anchor平移缩放到GT的位置