matters
Introduction
这篇文章来自于17年的ICCV会议,作者来自清华与旷视,这篇文章提出大的卷积核对分割网络非常重要,并使用论文中提出的GCN(Global Convolution Network)显著提高了分割的精度。这篇文章还有一个后续,叫做ExFuse,但ExFuse这篇文章更多的是各种小trick的叠加,质量一般。
ExFuse的论文全称为ExFuse: Enhancing Feature Fusion for Semantic segmentation,有兴趣的同学可以去看一下。
回到文章内容,对于如今的CNN,使用1x1, 3x3等小卷积核的堆叠来模拟大卷积核的操作已经是非常常见了,但是文章提出,在语义分割领域,大的卷积核却要比小的卷积核堆叠更为好使,一方面是因为实际感受野的大小区别,另一方面则是因为分割要同时完成分类与定位。
而分类与定位任务是天生矛盾的:
1、对于分类任务,模型需要具有平移不变性,无论关键物体是旋转还是位移缩放,模型都要能保持对目标的激活,从而进行分类
2、对于定位任务,模型需要对物体的位置非常敏感,需要对物体的每个像素都判断其语义信息,并根据所有像素的语义信息来找到物体的位置,如果模型具有非常好的平移不变性,那就很难以确定物体的具体空间位置,定位的精度也会非常低。
为了解决定位与分类的矛盾,文章提出了两个原则:
1、从定位的角度考虑,模型一定要全卷积网络,因为全局池化和fc层会破坏原图的相关位置信息,而卷积可以保留这些信息。
2、从分类的角度考虑,网络应该使用较大的卷积核使特征图和逐像素的分类器之间能够保持密集的连接,而不是通过小卷积核只保留较稀疏的连接。
如上所示,在分类网络中,所有特征都贡献给一个分类器,由分类器判断物体的种类。在传统的分割网络中,逐像素的分类结果由位置与之对应的特征图的特征来确定,特征图与分类结果之间是稀疏连接的,而文章所提出的网络,则是要实现特征图与每个分类结果之间的密集连接,使每一个像素的分类结果都能利用全局信息。
为了保证密集连接,文章提出了GCN。
Global Convolutional Network
目前最state-of-the-art的分割网络通常都是用较大的特征图尺寸,减少网络中stride的个数,这些都是为定位而设计的,但这样的网络对于分割中的分类问题并不一定是最优的。虽然如今的CNN感受野都非常大,但实际的感受野远比理论感受野要小很多,因此一旦特征图很大,那么有效感受野(valid Receptive field)会难以覆盖全部的特征,分类的结果也就会更加不准确。
如上所示,普通的CNN感受野为A,不能够覆盖整个画面,而当物体尺度改变的时候,感受野为B,连物体都无法覆盖,但是使用GCN则可以使感受野扩大为C,几乎覆盖了全图。
因此GCN一定要有非常大的卷积核,最好能够覆盖整个特征图。
但是这样一来又会有一个限制,那就是参数量,使用3x3卷积核堆叠的原因就是在同样理论感受野的前提下减少了参数,增加了非线性,但显然把3x3再换回5x5,7x7甚至更大,计算量也会同样指数级扩大,而且过多的参数也会使网络难以收敛,因此文章把一个大的kxk的卷积核分解为两个1xk与kx1,并且中间不使用ReLU等激活函数。
在整体的框架中,文章又设计了一个模块,叫做Boundary Refinement,为了对输出的heatmap的边缘进行锐化。模块的结构也非常简单,就是一个基础的残差模块:
那么为什么这样的模块就可以做到边缘的锐化呢?
其实道理也很简单,这就是残差网络的原理,BR中的两个卷积层作为残差支路,学习到的是输出heatmap和输入heatmap之间的残差,对于某类物体的中间部位,heatmap的激活值已经很高了,过softmax之后的概率值也会非常大,而边缘位置相对于中心位置的激活值就要低很多,概率值也会低一些,这样在与ground-truth计算loss的时候,边缘部分的loss也会远大于中间部分,于是网络就会促使这两层卷积层去学习寻找边缘,得到的heatmap也会是边缘激活值高中间低,最终与原来的heatmap相加,就可以起到提高边缘激活值,锐化边缘的作用。
最终的网络结构如下:
Conclusion
在后续的实验中,文章发现了以下几个结论:
1、普通的大卷积核会使网络难以收敛,但GCN则不会
2、随着GCN中k值的增加,网络的性能越来越好,而普通卷积与堆叠3x3卷积在k>5之后性能均会下降
3、GCN的确提升了物体内部的分割精度但对边缘精度没有什么影响,而BR的确提升了物体边缘的分割精度
文章最后发布于: 2018-07-20 11:28:37
相关阅读
通过这张图我们一目了然,内核(kernel)实则就是一个小的矩阵,通过扫描图片来进行重新计算,计算方法为矩阵相乘后并将各个元素相加,得到
故障排除记录-----APPCRASE 故障模块名称:kernelba
故障排除记录: 更新服务器程序出现报错。Windows日志报.net runtime错误,报错信息如图: 之后来说说我的解决过程: 首先查询了网络上
核密度估计 Kernel Density Estimation(KDE)
写在前面 给定一个样本集,怎么得到该样本集的分布密度函数,解决这一问题有两个方法: 1.参数估计方法 简单来讲,即假定样本集符合
无法定位程序输入点InitializeCriticalSectionEx 于动
VS2012编译的release版本,在XP下运行报错误“无法定位程序输入点InitializeCriticalSectionEx 于动态链接库kernel32.dll”。解决
解决上传文件时 nginx 413 Request Entity Too Large
一个使用Tomcat 发布的站点,使用Nginx做了代理,在上传文件时发生以下错误:<html> <head><title>413 Request Entity Too Large</titl