个人学习用----
介绍
既要分类,又要定位,但是这两个任务目标矛盾:
分类需要对平移/旋转等变换具有稳健性,定位却需要对平移/旋转感知敏感。
对此文章提出了一个GCN(Global Convolutional NetWork),以解决上述问题。
除此以外还搞了一个Boundary Refinement Block(BR),主要是为了约束边界,强化定位。
相关工作
主要讨论以前基于FCN(全卷积)做的改进工作:
1)嵌入上下文信息
2)提高分辨率,增加感受野
3)边界校准
方法
基础结构是FCN。
GCN
当时的语义分割网络更强调定位能力,对于分类可能是次优的,因为分类器是局部的。(只连接对应位置,往上追溯的话感受野也是局部的)
本文的GCN想兼顾分类和定位:
1)定位:使用全卷积,不用fc和全局池化。(会遗失位置信息)
2)分类:增大核尺寸(取特征图尺寸时和分类网络等价)
具体结构如下图:
设计Block拆成两部分,K×1+1×K卷积还有1×K+K×1,不加非线性,比K*K参数量少,复杂度低。
- 为什么要对称结构取SUM呢,直接取一边不也是线性操作?
这部分类似于局部的全连接,而这个局部比以往的范围要大,从而提高了分类能力。
整体结构
如上图所示。用Resnet提取不同尺度特征,在不同的图上做GCN分割,用BR约束边界,上采样后和上层高分辨率结果结合,逐层操作最后生成最终预测结果。
BR的结构图里也能看到,使用的残差结构。
- 为什么残差能做到边界约束?
这部分想了好久,实在想不懂,最后还是参考了别人的理解,感觉说的很有道理:
Large Kernel Matters论文解读
(作者是从heatmap角度分析的,就当作score map来看应该也可以吧)
对于一张图像,中心位置经过Relu激活值会偏大,而边缘位置偏低,因此在分类后,中心对于loss的贡献大,边缘的贡献小,为了减小loss,网络就会通过学习F(x)里的参数去增加边缘的激活值。
也就是说最终F(x)的输出会将边缘锐化从而降低loss,而x保持初始分类结果,累加后边缘得到增强。
实验
ablation
1)修改核的尺寸k:尺寸越大效果越好,k取15的时候就近似为全局卷积了,效果最好
2)考虑参数影响:作者想说明网络效果好不是因为参数多了,而是这样的结构确实有用。因此把原来的对称结构改成了单独的k×k核,实际上k×k卷积核参数多了几倍,但是结果却并不好。作者实验观察,原因是这样使网络很难收敛
3)和传统的卷积结构对比:GCN好
4)GCN不加BR的话实际上是增加了中心位置的分类能力,边界定位能力提升不大,BR起到了互补的作用,同时改善了定位。
5)作者把预训练Resnet里面的bottleneck换成了GCN Block,后面用Baseline也能取到更好的结果(效果等同于GCN不加BR),也说明了GCN增强了分类能力,在两个阶段都有效。(前后都加就没啥用了)