作者里面有个大牛李洪生 李鸿升 - 知乎 (zhihu.com)

单位的话有港中文大学,商汤科技,深圳计算机视觉和模式识别研究院等等

摘要:

长距离的上下文信息对于实现高质量的语义分割是必不可少的。之前特征加权的方式证明了使用全局的上下文信息可以提高语义分割的精度,但是全局共享的特征加权可能对于输入图片中的不同类别的区域不是最优的。因此,本文提出了上下文自适应卷积网络。这个网络的特点是对于不同的位置预测不同的加权特征。看到这里,感觉是用了动态卷积核,就是根据输入的不同,生成不同的卷积核,再作用到输入特征中,产生最终输出。不知道最后是不是这样。

然后论文说,这样的卷积核可以用来捕获局部和全局信息,没有解释,也可能后面有解释。然后再一些常用数据集上取得了很好的效果。

关键词:

语义分割,动态滤波器(也可能是动态卷积核),特征加权

介绍:

语义分割是计算机视觉的基础任务。大家也都知道的,语义分割就是得到图像中每个像素的类别。他的应用呢有(自动驾驶(好像什么都可以和这个扯上关系),图像编辑ps,计算机辅助诊断)。然后是2914年long的FCN率先使用卷积网络进行语义分割。两个困难点:1,相同的物体在图像中大小变化太大了,2,不同类别的物体有的时候纹理又很类似。这个真的挺难的,比如路面上的井盖和椭圆的水渍,白色、黄色的障碍物和路面标识等等。这样的物体如果只是抠出来几十上百个像素,真的很难判断是什么,还是需要看的更多,从他所属的位置,产生的阴影,自己整体的特征,才能做出更可能正确的判断。看tesla ai day的时候,上面就提到了一个,看几十个像素,根本判断不了它是不是车,但是知道它出现在消失点上,就更能确信他是车了。

无论是谁做语义分割,估计都绕不开这样的问题。所以之前肯定有人已经尝试过一些解决方案了。其中作者提到了一些文献,但是大部分我没看过,如果我都看过,那么阅读起来就肯定会更容易。而且现有文章引用只从引用方式根本看不出是引用了哪些文章,如果鼠标放上去,就能显示引用的哪个文章就好了,感觉也是能实现的,不过我没见过,如果有谁刚好知道,可以告知在评论区。

文章中说之前的文献大多是从不同的位置或者区域聚合特征,一般使用固定的或者是自适应的加权聚合来收集这些特征。还有的方法,会估计通道维度的重要性,就是每个通道最预测结果的重要性不一样呗。预测出重要性,再和原来的特征对应相乘,这样不就是大的被放大,小的更小呗(当然也可能是大的还是那么大,小的被消灭了)。这样解释好像有一些道理。估计一开始也是觉得可能有用,但是不确定,然后做实验试试呗。然后如果效果好,就可以写论文说我这个想法可解释且效果好。实验效果不好的话,也不能觉得是出发点错了,可能是其他地方的设置没有配合好。当有其他人做了实验,发了文章,又会觉得这是我之前想过的想法。特征的重要性,不如位置的重要性好使人信服。当然这是我自己想法,以下也会有很多。

船通常出现在水里或者岸边,当然岸边也有水。人判断一个东西是不是船也会参考这个信息。所以当周围有水的时候,代表水的特征通道们应该比其他的类别权重要高才对。论文提到了SE-Net和EncNet。给自己的方法起个好听且不重复的名字,挺重要的。不然别人不太好引用。SE-Net提出压缩和激发操作学习全局特征加权向量(global feature weighting vector),只能这样翻译了,然后可以用来分类分割检测等。EncNet设计了一个全局上下文编码层,来给特征加权。接下来肯定会有however,although之类的表达来描述之前的方法存在的问题,可以改善的地方。之前的问题在于,没有使用空间加权,只是使用了通道加权。而不同区域的特征重要性应该是不一样的。其他重要性在特征中也隐含了,网络都是能学到的,只是学习的难易程度不一样罢了。刚接触深度学习的时候,觉得它什么都可以解决。比如让他看一些1+1,这样带算术题的图片,再给他看答案,他就能学到计算数学题的能力。让他看物体的边缘,也能学到这样的信息。甚至现在的想法,让他直接看一些数学题的证明(题目作为输入,证明过程作为输出),然后网络就可以证明几个世纪悬而未决的数学题。然而现实是,网络还没有那么强大,还需要识别其中的字符,才能降低网络学习的难度。还是要充分利用人们的先验知识,比如图片中可能操作符的种类,数字的范围等等,都是已知的。这样网络的能力也有限。论文中又举了个例子,水场景中的水和天空的特征应该至少是不同的。

为了处理上述的挑战,作者提出了自己的框架。朴素的想法是,和通道attention一样,直接预测一个和特征同样大小,单通道的矩阵,不就可以了吗?我的想法就是这样,朴素也就是真的朴素。作者说这样的做法会带来很大的计算量,当作者提出之前的方法存在的问题的时候,如果全盘接受,或者还不懂就先记下来,慢慢的就只是看了个论文而收获却很少。计算量大吗,我看也不大,毕竟特征图都那么大了,还是那句话,如果谁知道为什么计算量大可选择在评论区回复。如果不大,那就是作者牵强的一种说法了。但是我想了想,如果要生成有效的空间注意力图,就得又足够大的感受野才可以,否则这样的注意力也就是坐井观天。管中窥豹,可见一斑。只看到几十个像素,就说这里应该重点关注,是难以令人信服的。作者提出了以全局上下文为输入,输出上下文自适应卷积核。但是作者说之前的方法Dynamic filter networks这个论文,由于全连接的存在所以计算量有些大。他要怎么做呢,让我们拭目以待。使用矩阵乘法来实现上下文自适应卷积核,在具体就是使用不同空洞系数的深度可分离空洞卷积。看文章的时候,如果不知道深度可分离卷积,也不知道空洞卷积是什么,就会造成阅读困难。两个人智商一样。这个时候,有个人基础好一些,看了论文提到的所有论文,有个人刚接触这个,阅读同一个论文,就会造成基础好的人,几个小时看完了,而且也理解的差不多了;基础不好的人,每一句话都不太清楚。旁人不知道他们基础如何,只知道他们都看了这一篇论文几个小时,就会觉得基础好的这个人好聪明啊。其实他们是一样聪明的。只是日常的积累造成了他们表现出的东西的差距。我给他弟讲这个道理之前,问他,如果两个人同样在上课,一个人学得很快,一个人学得慢,是为什么。他说是因为学得快的那个人比较聪明吧。我很诧异又完全可以理解。诧异是一个小孩也是认定了智力这唯一因素,以后自己学不会就自然而然认为是自己不够聪明,而不去考虑人的主观能动性带来的改变。可以理解是因为我之前就是一直这样认为的。我给他说有可能,但是也有可能是基础不一样导致的。他说都在一个学校,为什么基础不一样呢。我有时间一定要给他讲讲。

作者说他的主要贡献。不用看肯定有在数据集上取得了又好又快的结果,因为绝大多数实验科学论文都这样写,这是我的预期,让我们继续看下去:1,预测了空间多样性特征加权来提高语义分割的表现。2,马儿不吃草还跑得快,具体就是预测动态卷积核的过程占用内存少,计算的还快,简直绝绝子,好用到翘jiojio。3,就是预测的在很多数据集上取得了sota的效果。当然如果对这些数据集能更加熟悉的话,会对论文更加熟悉。

相关工作

上下文聚合。之前方法的一些关键词,全卷积网络,下采样,感受野。但是一般感受野不够大,又有全局或者大范围(long range)的上下文信息聚合被证明有效。       ParseNet连接全局池化的特征。PSPNet。看到全称能更理解和记忆网络吧,spatial pyramid pooling。ASPP。我说不上他们的区别。现在我懂了一些,ParseNet作为特征池化的先驱,只用了一种尺度的特征,PSPNet使用了池化金字塔,不同大小的池化结果的拼接。ASPP使用了不同空洞卷积来获取不同尺度的特征。APCNet提出自适应上下文模块。CFNet使用成对的相似性聚合同时发生的上下文信息(不知道如何翻译)。DANet提出了位置注意力和通道注意力模块、自注意力。这些方法有一定的鲁棒性和形状大小不变性。

通道注意力。仍然是之前的方法,问题前面也说了,不能做到不同位置注意力不一样。

动态卷积核。: Dynamic filter networks2016年这个论文第一次提出来动态卷积核。输入图片图不同,生成的卷积核也不同。但是这个文章刚提出是为了解决什么问题呢,总不能只是单纯提出一个网路吧。文章中和我稍微查了一下,只是写了一下动态卷积核的应用,包括(视频插帧,图像合成,图像去噪等)。pixel adaptive convolution 预测随着空间变化的卷积核,可以用来图像上采用,语义分割,高效的CRF推理。SAC使用尺度回归层来预测位置自适应的尺度系数,然后用来自动调整感受野大小。DMNet提出生成一系列不同大小的动态卷积核,生成的方式是,从多尺度的邻居生成,为了处理语义分割中不同不同尺度的图像变化问题。之前的方法是直接预测所有的卷积核参数,耗时太多。占用空间也多。本文的方法高效。但是我不知道是怎么高效的。

方法

Feature re-weighting。这个词挺好。作者说空间不同,特征加权也不同。并且权重的产生过程要综合整张图。题外话,但是目前大部分网络都只能综合一张图片的信息,不同的图片之间相互交流要靠神经网络中的权重。有些从网络中随机抽一些图片拼在一起可能会有不同图片直接交流的机会。传统的卷积只有有限的感受野,并且输入大小不会改变某层卷积的感受野。比如第一层3*3卷积,在非退化的情况下,无论输入大小是多少,感受野都是3*3。

本文提出的CaC模块实现全局感受野产生位置不同的特征加权。CaC的组成部分1,一个CNN网络,用来把图片变成特征图。一个上下文自适应模块,学习逐通道的特征加权。这样的模块有很多个,那么就输出很多的逐通道的特征加权。之前的动态卷积需要学习大量的参数,本文不需要大量的参数,并且通过矩阵乘法来实现。但是怎么实现呢?

基础网络是预训练的resnet,还有空洞卷积。假设输出的特征图大小是h,w,c(分别是高度,长度,通道数)。为了实现位置不同的特征加权,有两种朴素的方法。1,生成s*s*c的卷积核,s和s是卷积核大小。然后把这写卷积核和特征图进行卷积,就能生成c个空间注意力图。但是这样需要一个全连接,参数量是s*s*c*c*c。为什么是那么大呢。把ssc拉平,就得到s*s*c个神经元,输入是c*c?这个不理解啊。2,先进行全局池化,再进行FC。但是这样会导致丢了大部分的空间信息。

hwc的特征,变成一个特征图:查询hwss,特征图:键hwc,转变方式是通过1*1卷积实现的。键hwc,捕获了c个通道的特征,查询hwss,获取了全局空间信息,s*s个全局空间信息可以通过查询Q得到。以下用QK代替,Q形状改变为ns*s,K形状改变为nc,n=h*w。Q的第i列和k的第j列相乘,意思是K的单个通道和Q的全局空间相乘,得到的结果是一个标量值,代表Q的i列和K的j列的相似性。重复K的每个通道查询c次,对Q的第i列的重要性就得到了。一共有s的平方个查询向量,可以得到s平方个这样的重要性向量。那么对于K的每一列和Q的每一列都这样计算一遍,等价于Q的转置和K做矩阵乘。sswh*whc这样得到的D的形状是ssc。和前面的全连接一样。在经过reshape就一样了。然后和输入特征做卷积,就能得到随着空间位置变化的注意力图。

好处有两个。1,能够使用全局的信息去生成卷积核,因为在矩阵乘法中使用了所有的空间位置。2,可学习参数量是c*c+s*s*c。比动态卷积核的计算量和复杂度都少很多。

下一个模块,随着空间变化的权重生成。生成的卷积核的尺寸是ssc,后面又采用深度可分离卷积,所以每一个ss大小的卷积核,一共c个,和输入通道是一对一进行卷积的。为了获得多尺度的上下文信息,使用了不同dilation rate的空洞卷积。假设dilation rate有三种,分别生成了D1,D2,D3三种卷积核,这几种卷积核参数共享,仅有dilation rate不同。然后卷积之后再用sigmoid。这样D1D2D3,分别和输入特征卷积,就能得到不同的注意力图:W1W2W3,再把这些注意力图加起来,W=W1+W2+W3(对位相加)。原始特征是X,那么X*=X对位乘W。直观的理解是如果W上某个位置的权重越大,那么这个位置是特征相关的;小的权重代表非类别相关的特征。

下一个模块。除了上面提到的,本文网络同时也有一个全局池化的分支,有聚合全局特征的作用。好像还把这个特征进行了重复,复制到所有位置。就像是pointnet里面的全局特征向量拼接到每个点云的向量后面,这样每个位置不仅有自己的特征,也会有全局的特征。并且。论文使用了多个CaC模块由于初始化不同,捕获的特征类型也会不同,同样会提高网络整体的能力。好像时使用了两个并行的模块。

实现细节

最后的特征图是输入大小的1/8,文中说通过上采样恢复到原尺寸,上采样产生的话,产生的mask能足够精细吗。使用的学习率调整策略是poly,就是多项式的下降曲线呗。SGD随机梯度下降。评价方式有aPre,和mIoU,pre是预测的结果正确性,IoU是交集除以并集。

实验结果:

只看图表和下面的说明文字就大概能知道了,PASCAL VOC 2012 test set上85.1的精度,现在最新已经90.5%了。

ADE20K上精度46.12%mIoU。最新的论文已经57%的精度了。ADE20K Benchmark (Semantic Segmentation) | Papers With Code

PASCAL Context上的精度52.5%mIoU。最新的论文已经60.5的精度了。

结论:

感觉主要使用了自注意力机制吧。使用矩阵乘法生成动态卷积核。

Learning to Predict Context-adaptiveConvolution for Semantic Segmentation阅读笔记相关推荐

  1. Object Region Mining with Adversarial Erasing: A Simple Classification to Semantic Segmentation阅读笔记

    Object Region Mining with Adversarial Erasing: A Simple Classification to Semantic Segmentation Appr ...

  2. PseudoSeg: Designing Pseudo Labels for Semantic Segmentation阅读笔记

    原文链接:https://arxiv.org/abs/2010.09713  PseudoSeg比较少见地采用了将pixel-level label和image-level label结合在一起的设定 ...

  3. 语义分割--(DFN)Learning a Discriminative Feature Network for Semantic Segmentation

    Learning a Discriminative Feature Network for Semantic Segmentation Learning a Discriminative Featur ...

  4. [分割]Learning a Discriminative Feature Network for Semantic Segmentation(DFN)

    本文转自3篇文章当作自己的笔记. 文章1:链接 Learning a Discriminative Feature Network for Semantic Segmentation Learning ...

  5. 论文Learning to Solve Large-Scale Security-Constrained Unit Commitment Problems阅读笔记

    论文Learning to Solve Large-Scale Security-Constrained Unit Commitment Problems阅读笔记 论文arxiv链接:Learning ...

  6. FCN全连接卷积网络(3)--Fully Convolutional Networks for Semantic Segmentation阅读(摘要部分)

    1.摘要 1.1逐句理解一下: Convolutional networks are powerful visual models that yield hierarchies of features ...

  7. Gated-SCNN: Gated Shape CNNs for Semantic Segmentation论文笔记

    论文介绍 作者认为之前的semantic segmentation的工作将所有信息都放入到了CNN的网络之中(这其中包含了颜色.边界.纹理等信息),这不太理想,所以作者在regular stream的 ...

  8. Affinity Derivation and Graph Merge for Instance Segmentation阅读笔记

    论文链接:https://arxiv.org/abs/1811.10870 用于实例分割的亲和派生和图合并方法 一.简介 文章提出了一种基于像素亲和信息的实例分割机制,使用了两个相似的网络结构,一个网 ...

  9. S4Net: Single Stage Salient-Instance Segmentation阅读笔记

    论文链接:http://arxiv.org/abs/1711.07618 简介 文章关注显著实例分割.考虑到每个实例类的独立性,文章设计了一个单阶段显著实例分割网络,该网络不仅考虑了box框内的loc ...

最新文章

  1. 金融新手投标模块布局小Demo
  2. matlab未定义函数lp,matlab未定义函数或变量(附上源代码)
  3. 校园二手交易平台的开发和利用
  4. 深入浅出InfoPath——设计讨论版之文本域篇
  5. uvm_comps.svh
  6. ASP.NET 中 Cookie 的基本知识
  7. synchronized和ReentrantLock区别,用新的lock有什么好处?举例说说
  8. 电信级的RSA加密后的密码的破解方法
  9. idea一键加密部署springboot到docker容器
  10. LeetCode:Generate Parentheses
  11. Cocos2d-x 设置竖屏的方法 2.0以上版本
  12. 中国制鞋机械行业调研与投资战略报告(2022版)
  13. C - A very hard mathematic problem (暴力枚举加二分)
  14. php 事件流转,php46公文流转
  15. Air202学习 四 (模块mqtt通信控制继电器)
  16. 12306验证码分割
  17. 矩特征、几何矩的定义
  18. 【C++】Lambda 表达式详解
  19. 汇编语言(王爽版)实验一
  20. 【Delphi】Android 桌面图标添加快捷菜单功能

热门文章

  1. 远程文件包含 php,php本地及远程文件包含漏洞
  2. python调用百度AI接口识别营业执照
  3. Windows经典小游戏--扫雷精装版
  4. 吊打安卓?鸿蒙OS 2,android热更新流程
  5. Windows7 开机自启脚本
  6. 休闲娱乐 - 夏日自制饮料
  7. 小米路由器3G建站折腾笔记6 - 总结
  8. 根键hkey_classes_root的作用
  9. linux 解决wps文档显示异常问题
  10. 少儿python教学_如何教少儿学习Python编程