Overview
1、Detection挑战
1)Candidate proposal数量众多,运算量大
2)Candidate proposal定位不准,需要矫正
2、文章主要贡献
1)End-to-end single-stage training,而不是CNN+SVM + BBox
- Jointly learn classification & regression(multi-task loss)
- No extra SVM for finer classification
2)mAP ↑
3)提出roi pooling,无须对每个proposal提取一次特征并写入disk,节省时间和空间
4)可以实现梯度回传,而不像SPPnet无法更新参数
3、流程
image(full)-> ConvNet produce conv feature map -> RoI pooling(fixed-length feature vector)-> FCs -> CLS (K + 1)
-> BBox(per class(r,c,h,w))
proposals(pre-computed) _________________/|\
技术细节
1、RoI pooling
1)输入RoI(r,c,h,w),对应着左上角坐标和高/宽
2)将h和w分为H x W个大小为h/H x w/W的子窗口,然后每个子窗口max pooling,得到H x W (7 x 7)大小的输出
3)channel-wise
2、训练
1)预训练网络,将最后的max pooling+fc+softmax,替换为roi pooling + fc + cls/bbox
2)网络输入采用Hierarchical sample方式:N个full images + 每个full image上提取的R/N个RoIs,同一个image上提取的RoI可以共享computation和memory
* 加速运算 · 节省存储空间 · 不影响收敛(N=2, R=128时)
* SPPnet的每个roi来自不同图片,且由于每个roi的感受野很大,往往需要对全图进行特征提取,非常inefficient,因此在参数pretrain之后,无法进行fine-tuning,从而使网络的准确性较低
3)Joint loss
对于每个RoI,其GT类别为u,GT框的回归值为v。
cls输出,分别对应着K + 1类的概率值;bbox reg输出K个
,对应着每一类的回归值。总的loss为
其中,,background的u设为0 (IoU >= 0.5为FG;0.1 <= IoU < 0.5为BG,便于进行hard example mining)。对于背景类,没有GT框,无法计算回归loss。实验中设置
为1
- 分类用log loss:
- 回归用用smooth l1 loss,因为L2 loss容易发生梯度爆炸
3、Scale invariance
1)训练:随机scale图片,作为数据增强
2)测试:使用image pyramid,每个RoI匹配的图片scale使得对应的面积≈
* 文中使用single-scale的训练和测试
4、class-specific操作
1)NMS
2)BBox(仅选取gt/pred类对应的bbox)
5、truncated SVD
使用两层FC代替单层FC,第一层不含bias,中间无非线性层,加速运算
其他结论
1、multi task > single task
2、single scale > multi scale
3、training data ↑,mAP ↑
4、softmax > 1 vs. rest SVM,不同class之间存在竞争关系
5、sparse proposals > dense proposals,随着proposal的增加,AR ↑, mAP未必增加,即便用SVM,结果仍旧不好
Q & A(待解决)
1、为什么RCNN需要额外的SVM,而fast-rcnn就避免了这一操作?
1)multi-task约束更强?加入bbox回归分支,有效改善了>0.5 IoU为正样本的定位不准问题?
2)RoI的context信息更丰富,有助于分类