精读Fully Attentional Network for Semantic Segmentation

news/2024/11/29 2:31:01/

摘要

以往的注意力机制,要么只关注同一空间不同通道的信息,要么只关注不同空间同一通道的信息,这会导致模型容易忽略小的对象,并错误分割较大的对象。本文提出了一种新的注意力机制,综合考虑两方面的信息。

NL=non-local,全局的

方法

架构

        用ResNet-101或HRNetV2-W48提取特征图X,其中ResNet-101的最后两层为空洞卷积。X经过一个卷积处理减少通道数得到Fin,Fin经过全注意力模块(Fully Attentional block,FLA)处理得到Fo,最终Fo放入预测器进行分割。

FLA

从架构可知,本文的创新点在于FLA模块。该模块如下图。

        Q的尺度和V的尺度均为(H+W)XCXS,K的尺度为(H+W)XSXC,因为本文H=W,因此作者直接令S=H=W

        QKV都是通过同一套流程得到的,只不过参数值不共用,K的过程与Q和V稍有区别。

        以Q为例,F会经过一个池化和一个线性层,得到一个CX1XW的矩阵,然后将这个矩阵复制H份,切割,便得到了H个CXW大小的矩阵。另一方面,通过池化和线性层得到的是CXHX1的矩阵,将这个矩阵复制切割后得到了W个CXH大小的矩阵。将这两堆矩阵放在一起,就是Q。

        因为H=W,因此用S来表示融合后的那堆矩阵的一条边的长度,减少代码歧义,不然描述矩阵大小为CXH时,代码中不确定是融合后的还是融合之前的。

        然后通过Affifinity操作,将QK融合。具体计算公式如下

        因为这一步是计算不同通道之间的关系,所以ij下标的范围均为1到C,C是通道数。Qi,Kj尺寸为(H+W)XS。结合图像可以看到,Qi实质上是一堆横向量,Kj是一堆竖向量,两者相乘会得到一个数。每次相乘会有(H+W)对向量,因此Ai,j实质上是一个向量,长度为(H+W)。

        又因为要计算每一对通道之间的关系,包括自身,总共有C个通道,所以要得到CXC个向量,因此A最终尺寸为(H+W)XCXC。

        然后,用A与V做矩阵相乘,得到(H+W)个CXS的矩阵。将这对矩阵从中间分开分成两份,每一份都有S个CXS大小的矩阵。将这两堆矩阵各自重新拼合,调整下标顺序,得到两个CXHXW的特征图。两者相加即为最终输出Fo

实验

在Cityscape数据集上的结果

 从这几个例子可以看出,本文方法分割地更加精准,不容易忽略或扭曲较小的对象。

 在ADE20K数据集上的结果

在PASCAL VOC数据集上的结果。那个像个竖起来的哑铃的图标表示模型未使用在COCO上预训练的backbone 

消融实验

 消融实验探讨了FLA模块的有效性,可以看出,使用了FLA模块后,特征图变得更加利于分割。


http://www.ppmy.cn/news/676598.html

相关文章

论文笔记:Multi-scale Matching Networks for Semantic Correspondence

文章目录 一、先验知识1.FPN2.4D-correlation map 二、论文框架1.动机2.网络结构 三、实验结果参考文献 一、先验知识 1.FPN 【目标检测】FPN(Feature Pyramid Network)这篇文章讲的挺好的。 2.4D-correlation map 4D指的是4个维度,因为输入两幅图片&#xff0c…

在ubuntu16.04下安装opencv3.4.10(超详细测试成功)

在ubuntu16.04下安装opencv3.4.10(超详细测试成功) 在ubuntu16.04下安装opencv3.4.10(超详细测试成功) ) 1.去官网下载opencv,本教程选用的是opencv3.4.10。 下载链接http://opencv.org/releases.html,选择…

【论文阅读】Context-aware Cross-level Fusion Network for Camouflaged Object Detection(IJCAI2021)

论文题目:Context-aware Cross-level Fusion Network for Camouflflaged Object Detection 论文地址:https://arxiv.org/pdf/2105.12555.pdf 代码地址:https://github.com/thograce/C2FNet 文章贡献: 1. 提出了一个新的伪装目…

Java------多线程学习

Java线程学习总结 今天把Java多线程学习了一下,作如下总结 进程与线程 进程是程序关于某个数据集合的一次执行过程 线程是操作系统能够运算调度的最小单位,是进程中单一顺序的控制流 一个进程可以并发执行多个线程,进程是线程的容器 例如…

第二章 Caché 服务器页面简介 - 你应该知道

文章目录 第二章 Cach 服务器页面简介 - 你应该知道你应该知道什么CSP SamplesCSP 文档 第二章 Cach 服务器页面简介 - 你应该知道 你应该知道什么 要高效使用 CSP,应该熟悉以下内容: Cach objects and ObjectScript HTML JavaScript SQL CSP Sam…

百度网盘免费高速下载(详细过程)

百度网盘加速器(下载速度在8-9M/S)(BUG只针对首次使用用户能体验高速下载,需要使用新的账号才能一直体验) 方法一: 百度网盘加速器小工具(无需安装即可使用) 下载地址&#xff1a…

android应用RxPermissions申请权限依赖添加方法和使用代码

android应用RxPermissions申请权限依赖添加方法和使用代码 环境:Android Studio2021.2,java添加依赖: 打开build.gradle(app),添加以下代码: implementation com.github.tbruyelle:rxpermissions:0.12 //rxJava 注意:…

解决m1的mac下 执行flutter pub run ffigen 出现“(have ‘arm64’, need ‘x86_64’)“错误

解决m1的mac下 执行flutter pub run ffigen 出现"(have ‘arm64’, need ‘x86_64’)"错误 ffigen主要是用来将底层的c/c的导出函数转成dart能方便调用的方法,用起来挺方便的,之前在windows弄成功过,现在在要在m1的mac下再弄一次&…