论文原文
https://arxiv.org/pdf/1506.04579.pdf
需要解决的问题
这篇文章首先提出一个问题,理论感受野是真的吗?我们在前面讲过的PSPNet中已经知道,感受野对于语义分割网络有很大影响,我们也是尽量去增大网络的感受野,让网络可以看见的区域更多,从而让语义分割更加精确。然而论文首先摆出了一个质疑,理论感受野代表了算法的实际感受野吗?在实际应用中,很多网络的理论感受野是很大的。比如带VGG的FCN网络中的fc7层,其理论感受野为404*404像素。但是,事实上并没有办法看到这么大的区域,论文做了一个实验:
其中,(a)是原图,(b)是某个神经元输出的Activation map或者说特征图,文章对原图上滑动一个窗口,对这个窗口内部的图像加入随机噪声并观察加入噪声后该神经元的输出是否有较大的变化,当产生较大的变化时,代表这个神经元可以感受到这部分图像,由此得到实际的感受野,如图(d)所示。经过试验发现,实际感受野只有原图的约1/4大小。在另一篇论文《Object detectors emerge in deep scene cnns》也得到了类似的结论。既然有了这样的现象,那很自然就会想到加入全局信息去提升神经网络的分割能力。
网络结构
这里我们再通过全局平均池化(Global Average Pooling)后,就要考虑如何将得到的全局信息加入网络。
论文中一共提到了2种方式,一种叫做Early Fusion,就是对得到全局信息进行反池化(Unpool),得到和原特征图相同维度的全局特征,再把两者拼起来,一起送入分类器中。由于文章使用的是平均池化,在UnPool的时候就把得到的结果复制
H
×
W
H\times W
H×W编,得到一张
H
×
W
×
C
H\times W\times C
H×W×C的特征图。
而另外一种方式就是Late Fusion,如果使用合适的归一化,结果并不会有太大的不同。注意这里进行了L2 Norm,这是因为这是因为多层feature map的激活值大小分布差距比较大,如果没有经过 norm,会导致激活值普遍较大的 feature map 对融合后的结果影响更大。关于L2 Norm的实现以及反向传播的推导可以看这篇文章:https://blog.csdn.net/hust_lmj/article/details/79903658 。
为什么要进行L2 Norm
如上图所示,不同层之间的特征的尺度是不同的,而且这种不同可能很显著。(不同颜色代表不同层上的特征)。很显然这些特征的尺度(scale)和范数是显然不同的。如果直接把这些特征进行级联,可能会导致大特征控制小特征,使得分割的效果变差。尽管在训练过程中,网络的权重可能会对这种情况进行调整,但是这要求非常小心的调参和数据集选取。
所以论文提出了L2范数来归一化特征的融合过程。这里还需要注意的一个点是如果只是对所有输入层进行归一化,不仅会减慢网络的训练速度,同时也会改变该层的尺度。因此,还需要对其增加一个尺度参数gamma,将归一化的结果进行尺度缩放(缩放结果为y)。
训练细节
L2 Norm的Scale参数十分难以调整,初始化方式稍微变化会引起较大的结果变化,难以复现论文结果,调参需要小心细致。要结合全局信息的话可能更多还是直接使用eltwise sum或者 concatenation 不加任何norm直接融合多个特征图的效果。论文达到的精度接近于DeppLab+CRF的精度。
代码
在caffe的Model Zoom中提供了源码,WeiLiu大神实现了L2 Norm层,可以使用他的caffe-ssd框架进行训练和测试。
参考博客
https://blog.csdn.net/zym19941119/article/details/80859601
https://mp.weixin.qq.com/s?__biz=MzA3NDIyMjM1NA==&mid=2649033178&idx=1&sn=d10da9a4784bbeffaa1de1805f5d3196&chksm=8712b7a7b0653eb112535f20bfdc967bdd948bf027feea563d1adfae44d120c9a815130c855a&scene=21#wechat_redirect