2024AAAI SCTNet论文阅读笔记
文章目录
- SCTNet: Single-Branch CNN with Transformer Semantic Information for Real-Time Segmentation
- 摘要
- 背景
- 创新点
- 方法
- Conv-Former Block
- 卷积注意力机制
- 前馈网络FFN
- 语义信息对齐模块
- 主干特征对齐
- 共享解码头对齐
- 总体架构
- backbone
- 解码器头
- 对齐损失
- 实验
- SOTA效果对比
- Cityscapes可视化对比
- 结论
- 补充
SCTNet: Single-Branch CNN with Transformer Semantic Information for Real-Time Segmentation
论文地址: https://ojs.aaai.org/index.php/AAAI/article/view/28457
代码地址: https://github.com/xzz777/SCTNet
摘要
- 最近的实时语义分割方法通常采用一个额外的语义分支来追求丰富的远程上下文。
- 然而,额外的分支会带来额外的计算开销,并减慢推理速度
- 为了解决这种困境,我们提出了SCTNet——一个用于实时语义分割的具有Transformer语义信息的单分支CNN
- SCTNet具有推理解放语义分支的丰富语义表示,同时保持轻量级单分支CNN的高效率
- 考虑到它的强大的语义能力,SCTNet利用一个transformer作为只用来训练的语义分支
- 借助所提出的transformer类CNN模块CFBlock和语义信息对齐模块,SCTNet可以在训练中从transformer分支中捕获丰富的语义信息。
- 推理阶段,只有单个CNN分支需要部署。
- 对Cityscapes、ADE20K和COCO-Stuff-10K上进行实验,结果表示我们的方法达到了新的SOTA性能。
背景
- 最近的语义分割方法追求丰富的长程上下文信息。Transformer的自注意力机制被证明具有对长程上下文建模的显著能力。尽管这些工作得到了显著改进,但也会导致高昂的计算成本。基于自注意力的工作在图像分辨率方面甚至具有平方计算复杂度,这会显著增加处理高分辨率图像的延迟。
- 最近许多实时工作采用双边架构来快速提取高质量的语义信息。BiSeNet提出了一种双边网络,用于在早期阶段分离详细的空间特征和丰富的上下文信息,并并行处理它们,如下图a所示。BiSeNetV2和STDC做了进一步努力,以增强提取丰富的长程上下文的能力或降低空间分支的计算成本。为了平衡推理速度和精度,DDRNet、RTFormer和SeaFormer采用一种特征共享架构,该架构在深层阶段划分空间和上下文特征,如下图b所示。但是这些方法在两个分支之间引入了密集融合模块,以增强提取特征的语义信息。总之,所以的双边方法都由于额外的分支和多个融合模块而导致推理速度有限和计算成本高。

创新点
- 为了解决上述困境,提出了一个用于实时分割的单分支CNN,其中包含Transformer语义信息。它可以有效地提取语义信息,而不会因为双边网络而繁重的计算。
- SCTNet从仅用于训练的Transformer语义分支学习长程上下文信息到CNN分支。
- 为了减轻Transformer和CNN之间的语义差距,设计了一个类似Transformer的CNN模块,称为CFBklock。在对齐之前使用共享解码头。
- 通过在训练中对齐的语义信息,单分支CNN可以联合编码语义信息和空间细节。
- SCTNet可以保持轻量级单分支CNN架构在推理中的高效的同时,对齐来自Transformer架构的大感受野的语义表示。整体架构如上图c表示。主图如下图所示

方法
Conv-Former Block
CNN和Transformer提取的特征表示存在显著差异。直接对齐CNN和Transformer之间的特征会使学习过程变得困难,导致性能提升有限。为了让CNN分支能够轻松学习到从Transformer分支中提取到的 高质量的语义信息,设计了Conv-Former模块。
Cov-Former模块尽可能的模拟Transformer模块的结构,以便更好地学习Transformer分支的语义信息。同时,Conv-Former仅使用高效地卷积运算来实现注意力函数。
Conv-Former模块的结构类似于典型的Transformer编码器结构,如下图左侧所示。其过程为:
f = N o r m ( x + C o n v A t t e n t i o n ( x ) ) y = N o r m ( f + F F N ( f ) ) \begin{aligned} f&=Norm(x+ConvAttention(x))\\ y&=Norm(f+FFN(f)) \end{aligned} fy=Norm(x+ConvAttention(x))=Norm(f+FFN(f))
其中 N o r m Norm Norm表示batch Normalization。

卷积注意力机制
用于实时分割的注意力机制应具有低延迟和强大的语义提取能力。GFA是一个潜在的候选方案,提出的卷积注意力机制源于GFA。
GFA和提出的卷积注意力机制主要有两个区别:
- 将GFA的矩阵乘法替换为像素级卷积运算。点卷积等于像素到像素的乘法,但不涉及特征扁平化和重塑操作。这些操作不利于保持固有的空间结构,并会增加额外的推理延迟。此外,卷积提高了一种更灵活的方式来扩展外部参数。
- 由于Transformer和CNN之间的语义差距,仅仅计算几个可学习向量与每个像素之间的相似性,然后根据相似图和可学习向量增强像素,不足以捕捉丰富的上下文信息。为了更好地对齐Transformer的语义信息,将可学习向量扩展为可学习核。一方面,这将像素与可学习向量之间的相似度计算转换为像素块与可学习核之间的相似性计算;另一方面,使用可学习核的卷积操作在某种程度上保留了更多局部空间信息。
卷积注意力的操作可以总结如下:
X = θ ( X ⊗ K ) ⊗ K T , X=\theta(X\otimes K)\otimes K^T, X=θ(X⊗K)⊗KT,
其中 X ∈ R C × H × W X\in\mathbb{R}^{C\times H\times W} X∈RC×H×W, K ∈ R C × N × k × k K\in\mathbb{R}^{C\times N\times k\times k} K∈RC×N×k×k, K T ∈ R N × C × k × k K^T\in\mathbb{R}^{N\times C\times k\times k} KT∈RN×C×k×k分别表示输入图像和可学习的query和key。 N N N表示可学习参数的数量, k k k表示可学习参数的核大小。 θ \theta θ表示分组双重归一化,它在 H × W H\times W H×W维度上应用softmax, 并在 N N N维度上应用分组 L 2 L_2 L2归一化, ⊗ \otimes ⊗表示卷积操作。
考虑到效率, 使用条带卷积而不是标准卷积来实现卷积注意力。具体来说,利用一个 1 × k 1\times k 1×k卷积核一个 k × 1 k\times1 k×1卷积来近似一个 k × k k\times k k×k卷积层。上图右侧为卷积注意力的实现细节。
前馈网络FFN
经典的FFN在提供位置编码和嵌入通道方面起着至关重要的作用。最近的Transformer模型中的FFN由扩展点卷积、深度方向 3 × 3 3\times 3 3×3卷积核压缩点卷积组成。与经典的FFN不同,本文的FFN由两个标准 3 × 3 3\times 3 3×3卷积层组成。这样可以更高效,并提供更大的感受野。
语义信息对齐模块
提出了一个简单而有效地对齐模块来进行训练过程中的特征学习。它可以分为主干特征对齐和共享解码器头对齐。
主干特征对齐
由于Conv-Former模块类似Transformer的架构,对齐损失可以轻松地将Conv-Former模块的特征与Transformer的特征对齐。简而言之,主干特征对齐首先对来自Transformer和CNN分支的特征进行下采样或上采样以进行对齐。然后将CNN的特征投影到Transformer的维度。需要统一通道数量以及避免直接对齐。直接对齐会在训练过程中破坏CNN的真实标签监督。最后,将语义对齐损失应用于投影后的特征以对齐语义表示。
共享解码头对齐
Transformer解码器通常使用多个阶段的特征进行复杂解码,而SCTNet解码器仅选择stage2和stage4的特征。考虑到两者之间解码空间的显著差异,直接对齐解码头特征和输出logits只能获得有限的改进。因此,提出共享解码头对齐。具体来说,将单分支CNN的concatenation stage2和stage4特征输入到点卷积中以扩展维度。然后将高维特征通过Transformer解码器。Transformer解码器的新输出特征和logits用于计算与Transformer解码器原始输出的对齐损失。
总体架构
为了获得丰富的语义信息的同时降低计算成本,将流行的两分支架构简化为一个用于推理的快速CNN分支和一个只用于训练的语义对齐的Transformer分支。
backbone
为了提高推理速度,SCTNet采用典型的CNN主干网络。SCTNet起始于一个由两个连续的 3 × 3 3\times3 3×3卷积层组成的stem块。前两个阶段由堆叠的残差块组成,后两个阶段包含提出的类似Transformer的块,称为Conv-Former块(CFBlock)。CFBlock采用多个精心设计的卷积操作来执行与Transformer块类似的远程上下文捕获功能。在2-4阶段的开始应用一个由bacth normal和ReLU激活的步幅卷积组成的convdown层进行下采样。
解码器头
解码头由一个DAPPM和一个分割头组成。为了进一步丰富上下文信息,在第4阶段的输出之后添加了一个DAPPM。然后将输出与阶段2的特征图连接起来。最后,这个输出特征被传递到一个分割头。精确地说,分割头由一个 3 × 3 3\times3 3×3的Conv-BN-ReLU算子后跟一个 1 × 1 1\times1 1×1卷积分类器组成。
对齐损失
为了更好地对齐语义信息, 需要一种关注语义而不是空间信息的对齐损失。在实现中,使用CWD损失作为对齐损失, 它显示出比其他损失函数更好地结果。CWD损失如下:
ϕ ( x c ) = e x p ( x c , i τ ) ∑ i = 1 W ⋅ H e x p ( x c , i τ ) , L c w d = τ 2 C ∑ c = 1 C ∑ i = 1 H ⋅ W ϕ ( x T c , i ) ⋅ log [ ϕ ( x T c , i ) ϕ ( x T c , i ) ] , \begin{aligned} \phi(x_c)&=\frac{exp(\frac{x_{c,i}}{\tau})}{\sum^{W\cdot H}_{i=1}exp(\frac{x_{c,i}}{\tau})},\\ L_{cwd}&=\frac{\tau^2}{C}\sum^C_{c=1}\sum^{H\cdot W}_{i=1}\phi(x^{c,i}_T)\cdot \log\left [\frac{\phi(x^{c,i}_T)}{\phi(x^{c,i}_T)}\right ], \end{aligned} ϕ(xc)Lcwd=∑i=1W⋅Hexp(τxc,i)exp(τxc,i),=Cτ2c=1∑Ci=1∑H⋅Wϕ(xTc,i)⋅log[ϕ(xTc,i)ϕ(xTc,i)],
其中 c = 1 , 2 , … , C c=1,2,\dots,C c=1,2,…,C表示通道索引, i = 1 , 2 , … , H ⋅ W i=1,2,\dots,H\cdot W i=1,2,…,H⋅W表示空间位置, x T x^T xT和 x S x^S xS分别表示Transformer分支和CNN分支的特征图。 ϕ \phi ϕ将特征激活转换为逐通道概率分布,消除了Transformer和CNN紧凑CNN之间的尺度影响。为了最小化 L c w d L_{cwd} Lcwd, 当 ϕ ( x T c , i ) \phi(x^{c,i}_T) ϕ(xTc,i)很大时, ϕ ( x S c , i ) \phi(x^{c,i}_S) ϕ(xSc,i)应该很大。但当 ϕ ( x T c , i ) \phi(x^{c,i}_T) ϕ(xTc,i)很小时, ϕ ( x S c , i ) \phi(x^{c,i}_S) ϕ(xSc,i)的值无关紧要。这迫使CNN学习前景显著性的分布,其中包含语义信息。 τ \tau τ是一个超参数,值越大,概率分布就越平滑。
实验
SOTA效果对比
Cityscapes:

ADE20K:

COCO-Stuff-10k:

Cityscapes可视化对比

结论
在本文中,我们提出了SCTNet,这是一种新颖的单分支架构,它可以在不增加额外推理计算成本的情况下提取高质量的远程上下文。 广泛的实验表明,SCTNet取得了新的最先进的结果。 此外,通过证明SCTNet的效率,我们为双边分支网络中的语义分支提供了一种新的见解,并提供了一种新的方法来提升实时分割社区,这不仅采用了Transformer的结构,而且还利用了它的知识。
补充
- 在ImageNet-1K上进行预训练。遵循swin-transformer在ImageNet-1K上的预训练设置。

相关文章:
2024AAAI SCTNet论文阅读笔记
文章目录 SCTNet: Single-Branch CNN with Transformer Semantic Information for Real-Time Segmentation摘要背景创新点方法Conv-Former Block卷积注意力机制前馈网络FFN 语义信息对齐模块主干特征对齐共享解码头对齐 总体架构backbone解码器头 对齐损失 实验SOTA效果对比Cit…...
Laravel操作ElasticSearch
在Laravel项目中操作ElasticSearch可以通过以下步骤来实现,通常会借助相应的ElasticSearch客户端扩展包。 ### 安装ElasticSearch客户端包 在Laravel项目中,常用的是 elasticsearch/elasticsearch 这个PHP客户端库来与ElasticSearch进行交互,…...
江科大STM32入门——SPI通信笔记总结
wx:嵌入式工程师成长日记 (一)简介 四根通信线:SCK、MOSI、MISO、SS(片选信号) 同步(同步通信是一种通信模式,在这种模式下,发送方和接收方在同一时刻进行数据传输。),全…...
微信小程序map组件所有markers展示在视野范围内
注意:使用include-points属性不生效,要通过createMapContext实现 <template><view class"map-box"><map id"map" class"map" :markers"markers" :enable-traffic"true" :enable-poi&…...
深度解析 tanh tanh 激活函数
1. 引言 在现代深度学习中,激活函数(Activation Function)是神经网络的核心组件之一。它的主要作用是引入非线性,从而使神经网络能够学习和表示复杂的非线性关系。如果没有激活函数,神经网络的输出将只是输入的线性组…...
嵌入式入门Day38
C Day1 第一个C程序C中的输入输出输出操作coutcin练习 命名空间使用方法自定义命名空间冲突问题 C对字符串的扩充C风格字符串的使用定义以及初始化C风格字符串与C风格字符串的转换C风格的字符串的关系运算常用的成员变量输入方法 布尔类型C对堆区空间使用的扩充作业 第一个C程序…...
探索Rancher服务发现机制:容器世界的“导航仪”
《探索Rancher服务发现机制:容器世界的“导航仪”》 在当今容器化技术蓬勃发展的时代,容器的大规模部署和微服务架构的广泛应用使得服务之间的相互发现与通信变得至关重要。Rancher作为一款功能强大的容器管理平台,其服务发现机制宛如一座无…...
【ROS2】Qt事件循环和ROS2订阅机制一起使用有什么注意事项?
1、简述 Qt的事件循环和ROS订阅回调函数都可能在阻塞函数中运行, 例如:Qt的QApplication::exec() 和 ROS的rclcpp::spin() 两个阻塞函数不能在同一个线程中使用,如果使用不当,会造成Qt不处理事件或者ROS2不处理订阅的回调函数。 2、多线程 一般 QApplication::exec() 运…...
donet (MVC)webAPI 的接受json 的操作
直接用对象来进行接收,这个方法还不错的。 public class BangdingWeiguiJiluController : ApiController{/// <summary>/// Json数据录入错误信息/// </summary>/// <param name"WeiguiInfos"></param>/// <returns></r…...
Qt 界面外观
一、前言 1、 一个完善的应用程序,不仅应该有实用的功能,还要有一个漂亮的外观,这样才能使应用程序更加友好,更加吸引用户。 2、 作为一个跨平台的UI开发框架,Qt提供了强大而灵活的界面外观设计机制。 3、 本篇会讲解&…...
aws(学习笔记第二十二课) 复杂的lambda应用程序(python zip打包)
aws(学习笔记第二十二课) 开发复杂的lambda应用程序(python的zip包) 学习内容: 练习使用CloudShell开发复杂lambda应用程序(python) 1. 练习使用CloudShell CloudShell使用背景 复杂的python的lambda程序会有许多依赖的包,如果不提前准备好这些python的…...
HTML课堂之搜索工具箱/讲师duluo
目录: 源码在最后 小提示: 1.养成打卡习惯没日多加练习即可提什能力 2.源码在最后,请先看完代码讲解,在尝试自己写,这样容易掌握 3.请勿复制粘贴,因为你没掌握,即使复制粘贴也学不会 课堂重点笔…...
当歌 - RSS 订阅分发平台开发
以下将详细介绍当歌平台的技术架构、功能实现以及相关代码逻辑。 一、项目概述 当歌是一个极简的 RSS 订阅分发平台,旨在为用户提供便捷的 RSS 管理和订阅服务,帮助用户轻松获取和分享最新资讯。 二、技术架构 后端语言:PHP 数据库&#…...
学习threejs,导入wrl格式的模型
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.VRMLLoader wrl模型加…...
使用GitLab+Jenkins搭建CICD执行环境
使用GitLabJenkins搭建CI\CD执行环境 前言什么是DevOps?什么是CI/CD?使用GitLabJenkins搭建CI\CD执行环境GitLab安装1. 安装和配置所需的依赖2. 下载并安装极狐GitLab3. 登录极狐GitLab 实例4.常用gitlab指令5.修改密码 Jenkins安装1.Jenkins 的主要特点…...
使用vue-pdf预览pdf和解决pdf电子签章显示问题
使用vue-pdf预览pdf和解决pdf电子签章显示问题 第一步:npm install vue-pdf 第二步页面使用vue-pdf <template><div class"pdf1"><Pdf v-for"i in numPages" :key"i" :src"src" :page"i" />…...
【Rust自学】11.3. 自定义错误信息
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 11.3.1. 添加错误信息 在 11.2. 断言(Assert) 中我们学习了assert!、assert_eq!和assert_ne!这三个宏,而这篇文章讲的就是它…...
05、Docker学习,常用安装:Mysql、Redis、Nginx、Nacos
Docker学习,常用安装:Mysql、Redis、Nginx、Nacos 一、Docker安装Mysql 1、docker search mysql ##查找mysql版本都有哪些 2、docker pull mysql:5.6 ##下载5.6版本的mysql镜像 3、docker run -p 13306:3306 --name mysql ##运行…...
RabbitMQ高级篇之MQ可靠性 数据持久化
文章目录 消息丢失的原因分析内存存储的缺陷如何确保 RabbitMQ 的消息可靠性?数据持久化的三个方面持久化对性能的影响持久化实验验证性能对比Spring AMQP 默认持久化总结 消息丢失的原因分析 RabbitMQ 默认使用内存存储消息,但这种方式带来了两个主要问…...
leetcode 2274. 不含特殊楼层的最大连续楼层数 中等
Alice 管理着一家公司,并租用大楼的部分楼层作为办公空间。Alice 决定将一些楼层作为 特殊楼层 ,仅用于放松。 给你两个整数 bottom 和 top ,表示 Alice 租用了从 bottom 到 top(含 bottom 和 top 在内)的所有楼层。另…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
VSCode 使用CMake 构建 Qt 5 窗口程序
首先,目录结构如下图: 运行效果: cmake -B build cmake --build build 运行: windeployqt.exe F:\testQt5\build\Debug\app.exe main.cpp #include "mainwindow.h"#include <QAppli...
Python异步编程:深入理解协程的原理与实践指南
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 持续学习,不断…...
