1. Introduction
本文的初衷是利用多尺度来对检测结果提升,上图是不同的多尺度方式的操作方式,图a 是最传统的one-stage方式,例如,yolov1,SSD都是这样的结构。图c是特征图的金字塔结构,以SPPNet为代表。图b是图c的改进,如FPN,如果说大的特征图是底层,小特征图是顶层,那么越靠近顶层的特征图感受野越大,FPN通过上采样,将顶层大感受野的特征图和低层结合,这样,低层就会更大的感受野,相当于融合了上下文特征,图d是本文提出的方式,放在后面细说。本文是one-stage方法,而且减少了计算量,提升了检测速度。
2. STDN
2.1 主干网络
用DenseNet-169作为主干网络,这部分,内容改天再详细看一下DenseNet论文
2.2 高效的Scale-Transfer Module
整个网络的由上图可以看出来,可以说是一目了然,除去主干网络不看,可以分为四部分
- 绿色框所示,这部分都是的特征图都是9x9大小,唯一不同的就是通道数不一样。
- 黑色框代表第二部分,这部分相当于一个尺寸转换层,以此是9x9,3x3,2x2的平均池化,然后是一个等尺度变换identity layer,紧接着是两个尺寸放大的过程
- 通过2的变换会产生不同大小的特征图,针对不同大小的特征图会产生不同大小的anchors进行目标检测。
- 对3得到的anchor进行分类和坐标回归操作
本文的精妙之处:
作者认为他提出的scale-transfer layer是本文的核心,不过在我看来,上图的红色框部分才是最好的地方,第一眼看到这个结构图的时候感觉很奇怪,但还不知道哪块的问题,和下面的RefineDet对比一下就知道了,其他多尺度目标检测方法特征图都是从大到小,然后通过上采样的方式将顶层的全局信息传递给低层,而本文的是从小到大的,在低层的位置进行全局池化,如上图的1x1x800这部分可以预测大的物体,越到后面感受野越大,那么所具有的全局信息越多,而且特征图还都很大,这样的话就可以很自然的融合了全局信息,同时不需要生硬的上采样将顶层的全局信息向下传播
下面看一下,上图中的scale transfer部分,作者的意图很简单,可以说是通道数转化为特诊图的宽和高我们以网络的最后一个预测层为例,DenseNet-169的输出维度为991664,经过一个4X的scale-transfer后变为3636104。如作者所说,整个过程是像素值周期排列的过程,在此次变换中r=4,变换后的第一个通道上一个r * r像素块的像素值相当于是原来前r * r个通道上1 * 1的像素值的重新排列。在这个不得不佩服作者的奇思妙想,在不增加任何参数的情况下完成了不同尺度特征的提取!
2.3 目标检测部分
和传统的方法一样,分为两个子网,一个用来分类,一个用来回归
2.3.1 anchors boxes
这部分作者是参考了SSD,不同大小的特征图对应到anchor大小不同,在每一层中方向比率为[1.6,2.0,3.0],iou大于0.5认为有物体,训练时候正负样例之比为1:3,这都是一些传统的参数
2.3.2 分类子网
这部分的网络结构
每一层都包括batch norm,同时使用的激活函数是relu,最后一层的通道数是KA,K个类别和A个anchor,损失函数使用softmax
2.3.3 box回归子网
这部分的网络结构和分类子网相似,只不过最后的通道数变成4A,损失函数使用Smooth L1,同时只有正样例进行回归损失计算。
3. 总结
整篇论文看下来我比较喜欢的是上面说过的从小到大的特征图结构,而作者所说的核心scale-transfer layer,在我看来并非十分优秀的过程,将通道上的参数转移到w和H上,这样做的意义不大,顶多算是增加了推荐anchors的数量,同一个通道数据的感受野和语义信息都是相似的,这样看不过就是讲一个点拆分成了四个点,而每一个点的语义信息将会减少,虽然这个过程在参数不变的条件下扩大了特征图,增加了anchors数量,但我不认为很有新意。
本文方法的优点就是速度快,这也可以理解,毕竟是全卷积结构,同时在特征图的缩放上面没有引入而外的参数,那么计算量相对就较少。