RCNN目标检测总结
two stages, anchor based object detection
- R-CNN
- fast R-CNN
- faster R-CNN
- mask R-CNN
RCNN
- selection search
- ROI
耗时的串行式CNN前向传播,对于每一个RoI,都需要经过一个AlexNet提特征 - SVM
- 使用bounding box regression进行目标包围框的修正
Fast RCNN
- selection search
- ROI pooling layer
使用一个RoI Pooling Layer在全图特征上摘取每一个RoI对应的特征 - FC
Faster RCNN
端到端的训练(end-to-end training)
- Backbone -> RPN(region proposal network)
取代耗时的selection search - ROI Pooling
- Classifier, Regression
技术要点
RPN
依靠一个在共享特征图上滑动的窗口,为每个位置生成9种预先设置好anchor。这9种初始anchor包含三种面积(128×128,256×256,512×512),每种面积又包含三种长宽比(1:1,1:2,2:1)
RPN要做的事情有两个,第一个是判断anchor到底是前景还是背景(SoftmaxLoss),意思就是判断这个anchor到底有没有覆盖目标,第二个是为属于前景的anchor进行第一次坐标修正(SmoothL1Loss)
loss
loss分两大块,第一大块是训练RPN的loss(包含一个SoftmaxLoss和SmoothL1Loss),第二大块是训练Fast R-CNN中分类器的loss(包含一个SoftmaxLoss和SmoothL1Loss)
Mask RCNN
- Backbone -> RPN(region proposal network)
- ROI Align (replace ROI pooling)
-
L
c
l
s
L_{cls}
Lcls
L
b
o
x
L_{box}
Lbox
L
m
a
s
k
L_{mask}
Lmask
添加并列的 FCN 层(mask 层)
技术要点
采用 ROIAlign 替代 RoiPooling(改进池化操作)
引入了一个插值过程,先通过双线性插值到1414,再 pooling到77,很大程度上解决了仅通过 Pooling 直接采样带来的 Misalignment 对齐问题
Loss Function
每个 ROIAlign 对应 K * m^2 维度的输出。K 对应类别个数,即输出 K 个mask,m对应 池化分辨率(7*7)。
Loss 函数定义:
L
m
a
s
k
(
C
l
s
k
)
=
S
i
g
m
o
i
d
(
C
l
s
k
)
Lmask(Cls_k) = Sigmoid (Cls_k)
Lmask(Clsk)=Sigmoid(Clsk),平均二值交叉熵 (average binary cross-entropy)Loss,通过逐像素的 Sigmoid