《Asymmetric Non-local Neural Networks for Semantic Segmentation 》文章解读

网络简介

文中提出了两个模块Asymmetric Pyramid Non-local Block (APNB) 和Asymmetric Fusion Non-local Block (AFNB)。APNB将金字塔采样利用到non-local块中,在不牺牲性能的情况下大大降低了计算量和内存消耗,AFNB由APNB改造而来,在充分考虑到远程依赖关系的情况下融合了不同级别的特征。
一些研究表明如果充分利用远程依赖关系,可以提高网络性能,单个卷积核的感受野不足以覆盖相关区域,选择大尺寸的卷积核或者级联组成较深的网络可以提高网络的感受野但是计算量和参数量太大,所以一些研究使用全局方法比如non-local means或者spp。
在王小龙的《 Non-local neural networks》里将CNN与传统non-local means结合,组合成了non-local block以便利用图像中所有位置的特征,该方法提高了性能但是计算量的增加限制了其使用场景。普通的non-local block如图a所示

这个块首先计算了所有位置之间的相似性,在输入特征图尺寸为CxHxW时所需要矩阵乘法的复杂度为O(CH2W2),然后同样需要一个复杂度为O(CH2W2)的乘法来手机所有位置对自己的影响。
我们注意到只要key和value分支的输出保持同样的尺寸,non-local block的输出将保持相同大小,所以作者上从key分支采样出几个代表性的点,把N采样到S,S<<N,这样输出的尺寸保持不变,计算量却大大减小,这是本文的出发点。
所以本文提出了APNB块,将SPP金字塔采样嵌入到non-local block中,大大减小了矩阵乘法的计算开销同时提供丰富的语义信息,这样总体的计算时间比之前减少了6倍,同时作者还提出了AFNB,用以融合深度网络不同stage的特征,AFNB计算低级特征图和高级特征图的每个像素之间的相关性,从而产生长距离交互作用的融合特征。

Asymmetric Non-local Neural Network 结构详解

1.回顾Non-local Block

一个经典的non-local block结构如图所示

考虑输入特征为 X ∈ RC×H×W,首先有3个1x1卷积将特征图转化为三个特征,尺寸都为^C×H×W,通道数有所改变,然后将这三个特征展开为C×N的特征,其中N=H×W,然后相似矩阵V ∈RN×N 由前两个特征矩阵乘法计算而来:
V = φT ×θ
之后对V进行归一化得到相似矩阵V,尺寸为N×N。(归一化函数可以为softmax,缩放或者none),在这里我们使用softmax,相当于一个self attention机制)。 attention层输出结果为O=V × γT,O ∈ RN׈ C
最终non-local block的输出结果为:
Y = Wo(OT) + X 或者Y = cat(Wo(OT),X),
Wo是一个1x1的卷积操作,相当于一个通道上的权重参数,同时还原通道数C,然后通过summation或者concat与原输入特征结合在一起。

2.Asymmetric Pyramid Non-local Block(APNB)

non-local block有效地捕获了远程依赖关系,但是non-local操作相比于传统卷积核激活操作而言非常耗时耗内存,仔细观察可以发现non-block中

这两个矩阵乘法占据了主要的计算量,这两步的时间复杂度都为O( ˆCN2) = O( ˆCH2W2)。在语义分割中,为了保留细节的语义特征,网络的输出通常有很高的分辨率,这意味着N=H×W会很大,所以大矩阵的乘法运算是导致non-local效率低下的主要原因。non-local运算更为直接的流程如下:

从公式的角度出发,发现如果将N改为另一个值S(S<<N),输出大小将会保持不变:

回到non-local的流程图来看,相当于从 θ and γ中采样出几个代表点,而不是将所有点都带入运算,即展开后形状为C×N的特征,从N中采样出S个代表点进行下一步运算,计算复杂度就能大大减小,流程图更改后如下:

方案:

基于以上观察,作者提出加入两个采样模型 Pθ 和 Pγ ,对 θ 和 γ 采样出几个稀疏的锚点 θP ∈ R^ˆ C×S^ 和 γP ∈ R^ˆ C×S^
所以通过 Vp= φT × θp 计算出来的是θp和φ之间的相似度矩阵,Vp的尺寸是N × S。Vp经过与标准non-local块同样的归一化操作之后,继续计算attention:

最后的输出为;

这种非对称的矩阵乘法时间复杂度为O( ˆCNS), 远小于标准non-local的O( ˆCN2),理想情况下S应该远小于N才能保证计算优势,但是很难保证S多小时性能会下降太多。

全局和多尺度表示对于语义分割很有效果,可以通过SPP(Spatial Pyramid Pooling)来实现,SPP没有参数而且非常有效,作者将其嵌入non-local来增强全局表示同时减少计算开销。
这样得到了APNB的最终结构:

可以看出APNB源自标准的non-local block, key 和 value 分支共享一个1
×1卷积核采样模块,这样在没有牺牲性能的情况下降低了参数量。采样模块用的时SPP:

其中n表示采样后的边长,取四个{1,3,6,8},也就是一共有4个并行的pool,最后展开得到S=∑n2=110,所以非对称non-local的计算复杂度仅为原来的S/N,当输入H=128,W=256时,节省了大约298倍的计算时间。另外,SPP提供了全局场景语义线索的足够特征统计信息,以纠正由于减少计算量导致的性能下降。

3.Asymmetric Fusion Non-local Block

很多工作提到不同级别的特征融合有助于语义分割和目标跟踪,但常见的方法是添加像素之间的局部连接,作者提出一种non-local长依赖的多级融合方式,成为Fusion Non-local Block(FNB)。
一个标准的non-local block只有一个输入,而FNB有两个:高级别的特征图Xh和低级别的特征图Xl:

参照APNB的计算过程,得到的输出OF反映出Xl中全局特征对Xh的影响,OF经过一个1×1卷积恢复通道数后,得到最终输出:

4.网络结构

网络的整体结构如图所示:

作者选择了ResNet101作为backbone,移除了最后两个下采样层,使用空洞卷积以维持分辨率,使最后输出分辨率是输入图像的1/8,最后的三个stage都维持了相同的分辨率。将第四个和第五个stage的特征用AFNB混合后,与第五个stage的输出concat在一起,这样的特征充满了来自不同级别特征的大范围线索,将其作为APNB的输入,然后帮助发现像素之间的相关性。APNB的输出同样和输入concat在一起,最后送入一个分类器生成通道语义特征图,之后用于监督训练。

总的来说,APNB旨在减少 non-local block 的计算开销,而AFNB通过提高non-local block的学习能力来提高分割性能。

实验

作者在 Cityscapes, ADE20K 和 PASCAL Context 上做了实验,并在NYUD-V2 和 COCOStuff-10K 上做了补充实验。

APNB对比普通NB(Non-local Block)


可见采用APNB后,FLops和内存占用以及推理时间都大大优化

在各个数据集上与SOTA对比:

CityScapes:

ADE20K:

PASCAL Context:

消融实验:


在消融实验中往往更能看出网络结构中每个模块的作用,跟Baseline对比,加上普通的NB(Non-local Block)没有APNB好,这说明APNB在大大降低计算量和内存占用的同时,还提高了性能,这应该是与SPP的全局信息表示能力有关。而在高级特征低级特征融合方面,普通的融合FNB和借鉴了APNB思路的AFNB相比则更胜一筹,最后同时使用APNB和AFNB效果更好。
但是这里作者没有给出APNB和FNB组合的效果,应该是更好的,但是AFNB的计算量还是大大降低了。

采样方法的选择:


可见SPP还是明显优于普通的random、max、average方法,且在SPP的池化方法中,平均池化效果最好,而在池化尺寸的选择上,{1,4,8,12} 效果最好,但是考虑到计算量,还是选择 {1,3,6,8} 作为默认值。

分割效果对比:


其中红圈部分是由于其他网络的细节,可见在围栏、建筑物等大型物体上,以及电线杆等细长物体上 ANN更好。

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

背景知识Non-local Networks ,可以参考这两位的说明:

ICCV2019 语义分割之高效Non-local Networks - 杨先生的文章 - 知乎
https://zhuanlan.zhihu.com/p/80254858

Non-local neural networks - Gapeng的文章 - 知乎
https://zhuanlan.zhihu.com/p/33345791

ANN:Asymmetric Non-local Neural Networks for Semantic Segmentation 文章解读相关推荐

  1. [ICCV2019论文阅读]Asymmetric Non-local Neural Networks for Semantic Segmentation

    作者:Zhen Zhu, Mengde Xu, Song Bai, Tengteng Huang, Xiang Bai 机构:Huazhong University of Science and Te ...

  2. ANN:Asymmetric Non-local Neural Networks for Semantic Segmentation

    code pytorch 原始的Non-local Block 结构图 1.Abstract 标准non-local存在的问题: 计算量过大 GPU内存占用过高 作者提出了用于语义分割的非对称非局部神 ...

  3. EMANet:Expectation-Maximization Attention Networks for Semantic Segmentation论文解读和代码解读

    官方项目地址:含论文和代码 来自北大才子 立夏之光的 ICCV Oral ,理论很漂亮.属于Non local方式 Updated on 2020.1.6 最近一直有人私信我,这个attention ...

  4. 【FCN2015】Fully Convolutional Networks for Semantic Segmentation

    Fully Convolutional Networks for Semantic Segmentation 用于语义分割的全卷积网络 arXiv:1411.4038v2 [cs.CV] 8 Mar ...

  5. Paper:Xavier参数初始化之《Understanding the difficulty of training deep feedforward neural networks》的翻译与解读

    Paper:Xavier参数初始化之<Understanding the difficulty of training deep feedforward neural networks>的 ...

  6. Fully Convolutional Networks for Semantic Segmentation (FCN)论文翻译和理解

    论文题目:Fully Convolutional Networks for Semantic Segmentation 论文来源:Fully Convolutional Networks for Se ...

  7. 【FCN】Fully Convolutional Networks for Semantic Segmentation学习

    论文翻译 又是一个看不懂原文,又看不懂翻译的论文. semantic segmentation 图像语义分割 就是预测每个像素所属的对象类别 语义分割是指像素级地识别图像,即标注出图像中每个像素所属的 ...

  8. FCN的学习及理解(Fully Convolutional Networks for Semantic Segmentation)

    大多数人接触"语义"都是在和文字相关的领域,或语音识别,期望机器能够识别你发出去的消息或简短的语音,然后给予你适当的反馈和回复.嗯,看到这里你应该已经猜到了,图像领域也是存在&qu ...

  9. 【论文翻译】Fully Convolutional Networks for Semantic Segmentation

    论文题目:Fully Convolutional Networks for Semantic Segmentation 论文来源:Fully Convolutional Networks for Se ...

最新文章

  1. Tableau必知必会之通过 tabadmin 备份 Tableau Server
  2. iOS数据存储——沙盒。
  3. xmm1是什么器件_第三章基于Multisim10在模拟电路实验中的应用
  4. 百度股市通如何实现智能选股?
  5. LATEX保护视力背景色设置
  6. python统计列分布_pd.DataFrame统计各列数值多少的实例
  7. 小米手机 加载桌面 失败 黑屏
  8. 修复黯淡的夜拍照片!
  9. javaserver_JavaServer页面简介
  10. 下载、预览PDF报错问题排查
  11. Android开发系统应用程序
  12. 完美解决eclipse中文注释错位、缩进、被放大BUG
  13. codeforces 579D(35/600)
  14. python变量名必须以字母或下划线开头不区分字母大小写_Python 变量名必须以字符或下划线开头,并且区分字母大小写。_学小易找答案...
  15. SkyForm CMP(云管理平台)v4.0
  16. 百度直接搜IP可以查看本机外网IP
  17. animate.css源码
  18. 没有外网只有内网,nuget离线安装nupkg的方法
  19. babylonjs 分部加载模型_babylonjs使用笔记
  20. MobaXterm简单使用说明

热门文章

  1. 创业投资——风险投资周期及股市趋势技术分析
  2. SpringMvc数据绑定
  3. c语言向字符串追加一个字符串,C语言字符串拼接和追加.doc
  4. 运维之道 | Nginx rewrite 规则详解
  5. 2017年工作的总结
  6. python月薪3万_我月薪5000,靠Python搞副业月入3万
  7. OpenCart 最新使用教学视频合集
  8. 2023计算机毕业设计SSM最新选题之javaJava长途汽车订票系统xr24z
  9. 北大计算机博士蔡华谦,信科师生在北京大学国球联赛再次折桂
  10. 基于单片机的室内智能照明系统设计(#0419)