RefineDet 阅读笔记
RefineDet是CVPR2018的一篇论文,是一种one-stage的目标检测方法。RefineDet借鉴了two-stage中RPN的想法,在精度大幅提升的基础上也有着非常优秀的速度,毕竟速度才是one-stage的优势所在。本篇记录下看过RefineDet论文和相关资料后的一些重要信息,供日后翻阅。
论文链接:https://arxiv.org/abs/1711.06897
代码链接:https://github.com/sfzhang15/RefineDet
RefineDet的基本结构
two-stage的目标检测方法之所以有一定的优势在于:
1. RPN网络能够帮助解决目标检测前景背景样本不均衡问题
2. RPN通过提取的proposal region,并针对于这些区域进行专门的检测,且对目标位置做了二次预测,达到由粗到细的精修目的。
网络结构如下图。
ARM
RefineDet借鉴了这一思想,提出了ARM和ODM级联的网络结构,其中ARM为Anchor Refinement Model(图中红框),这一部分得到的结果是Anchor box的offsets以及是否包含目标(包含目标的Anchor 为非negative的)。及通过ARM可以得到Anchor box的信息而不像SSD和YOLO等方法提前设定固定的Anchor,这样做的好处一个是提升了Anchor的准确性,二是可以通过Anchor的score过滤大部分负样本。
论文中设定阈值θ=0.99达到过滤大部分负样本anchor的目的,这部分anchor通常为不包含背景的negative anchors,也是easy example。
ODM
ARM负责预测anchor,得到的结果将作为输入传输到ODM中,ODM为Object Detection Module(图中橙色框)。ODM将根据ARM中的anchor得到最终的目标结果,包含classification和box regression。这一部分就和传统的SSD目标检测部分基本一致,总结一下不同点在于:
1. ODM中借鉴了FPN,融合底层特征而非SSD直接提取高层特征。
2. Anchor通过ARM得到而非固定值。
TCB
TCB为Transfer Connection Block(图中绿色框),TCB模块主要起到了ARM和ODM的桥接作用,负责将ARM中的feature map转化到ODM中,被ODM所使用,其模块结构如下:
其他细节
Backbone
RefineDet采用了两种基础网络做训练,分别是VGG16和ResNet101,并且:
- 为了获得更高层的语义信息(对应着更小的feature map),在VGG16的基础上增加了stride=2的卷积来获得更小的卷积层;为了达到同样的目的在ResNet101的尾部增加了额外的残差块。
- 为了防止反向传播时候梯度爆炸,在浅层特征的两层(下图红色框)增加了L2 正则化。
Hard Example Mining
ARM已经对anchor做了部分过滤,但是为了进一步解决easy example的问题,还做了了难例样本挖掘。即选取loss 比较top部分的anchor box计算loss,保持正负样本比例在1:3(和SSD一样)。
Loss Function
损失函数定义如下:
注意其中有三种类型的损失,分别为,
和
,它们本别对应着binary cross entropy,smooth L1和softmax,具体损失如图中红字标注所示。
注意
是二分类交叉熵的一种写法,
代表正样本的时候label为1
则代表在anchor和bbox回归的时候,只有正样本的才参与损失的计算
可以看到ARM和ODM的损失是在同一个loss function中计算的,即整个网络的loss是end-to-end的。
网络效果
VGG16做backbone在VOC上达到了80+的mAP:
ResNet101在COCO上的mAP达到了41.5,甚至超过了two-stage:
实测训练效果
TODO