AAAI 2024 | Conv-Former:卷积赋能,实现Transformer效果的即插即用模块!

文摘   2025-02-01 11:03   安徽  

点击下方卡片,关注“AI前沿速递”公众号

各种重磅干货,第一时间送达


标题:SCTNet: Single-Branch CNN with Transformer Semantic Information for Real-Time Segmentation

论文链接:https://arxiv.org/pdf/2312.17071

代码链接:https://github.com/xzz777/SCTNet

来源:华中科技大学人工智能与自动化学院国家多媒体信息智能处理技术重点实验室,美团

论文概要

SCTNet 是一种新型的实时语义分割网络,它通过学习从 Transformer 中提取语义信息,在保持轻量级单分支 CNN 高效推理速度的同时,获得了 Transformer 的高精度。

核心思想:

  • 单分支架构: 摒弃了双边网络中额外的语义分支,仅使用单个 CNN 分支进行推理,从而显著提升了推理速度。
  • Transformer 语义信息: 利用 Transformer 作为训练阶段的语义分支,提取丰富的全局语义信息。
  • 语义信息对齐模块 (SIAM): 设计了 CFBlock 和 SIAM 模块,有效地将 Transformer 的语义信息传递给 CNN 分支。
  • CFBlock: 一种类似于 Transformer 块的 CNN 块,能够通过卷积操作捕获长距离上下文信息。
  • SIAM: 包含 backbone 特征对齐 (BFA) 和共享解码器头对齐 (SDHA) 两个部分,用于有效地对齐 Transformer 和 CNN 的特征。

贡献

SCTNet 论文提出了一个名为 SCTNet 的新型实时语义分割网络,它通过学习从 Transformer 中提取语义信息,在保持轻量级单分支 CNN 高效推理速度的同时,获得了 Transformer 的高精度。其主要贡献可以总结为以下三个方面:

提出了一种新颖的单分支实时分割网络 SCTNet:

  • 通过利用 Transformer 的语义信息,SCTNet 享受了 Transformer 的高精度。
  • 只需部署单分支 CNN,避免了双边网络中的额外计算成本,从而保持了轻量级单分支 CNN 的高效推理速度。

设计了 CFBlock 和 SIAM 模块,有效地将 Transformer 的语义信息传递给 CNN 分支:

  • CFBlock (Conv-Former Block): 一种类似于 Transformer 块的 CNN 块,能够通过卷积操作捕获长距离上下文信息,从而减轻 CNN 和 Transformer 特征之间的语义差距。
  • SIAM (Semantic Information Alignment Module): 包含 backbone 特征对齐 (BFA) 和共享解码器头对齐 (SDHA) 两个部分,用于有效地对齐 Transformer 和 CNN 的特征,从而使 CNN 分支能够学习到高质量的语义信息。

实验结果表明 SCTNet 在 Cityscapes、ADE20K 和 COCO-Stuff-10K 数据集上优于现有的最先进方法:

  • SCTNet 在精度和速度之间取得了更好的平衡,为实时语义分割提供了一个新的视角。
  • SIAM 模块可以有效地提升其他 CNN 和 Transformer 分割方法的性能,证明了其有效性和泛化能力。

方法

在这里插入图片描述

Conv-Former Block 是一种创新的网络模块,旨在融合卷积操作的高效性与 Transformer 的语义提取能力,以在视觉任务中实现高性能与低延迟的平衡。以下是其核心设计与优势:

1. 结构设计

Conv-Former Block 的架构灵感来源于经典的 Transformer 编码器,但完全采用卷积操作来实现,避免了传统 Transformer 中的复杂计算。

2. 卷积注意力机制

为了提升语义提取能力和推理效率,Conv-Former Block 的卷积注意力机制基于 GFA(GPU-Friendly Attention)改进而来,主要创新点如下:

  • 像素级卷积替代矩阵乘法:摒弃了 GFA 中的特征展平与重塑操作,直接使用像素级卷积,保留了数据的空间结构,同时显著降低了推理延迟。
  • 可学习核的引入:将可学习向量扩展为可学习核,使像素与向量之间的相似度计算转变为像素块与核之间的相似度计算。这种设计不仅更好地对齐了 Transformer 的语义信息,还通过卷积操作保留了更多的局部空间信息。

3. 实现细节

为了进一步提高计算效率,Conv-Former Block 采用条带卷积(1×k 和 k×1)来近似标准的 k×k 卷积层,从而在减少计算量的同时保持了卷积的有效性。

4. 前馈网络(FFN)

与传统的 Transformer FFN 不同,Conv-Former Block 的 FFN 由两个标准的 3×3 卷积层组成。这种设计不仅提高了计算效率,还扩大了感受野,使其在处理视觉任务时更具优势。

5. 性能与适用性

Conv-Former Block 结合了卷积和 Transformer 的优点,能够高效地建模局部和全局依赖关系。它适用于多种视觉任务,尤其是在需要平衡性能与效率的场景中表现出色,例如实时目标检测和图像分割。此外,模块的卷积核尺度、注意力头数量以及中间通道数均可灵活调整,以满足不同任务的需求。

实验分析

在这里插入图片描述

SCTNet 论文通过在 Cityscapes、ADE20K 和 COCO-Stuff-10K 数据集上进行实验,验证了其方法的有效性和优越性。以下是对实验结果的分析:

与现有方法的比较:

  • Cityscapes 数据集: SCTNet 在 Cityscapes 数据集上取得了最先进的性能,在保证高精度的同时,实现了更高的推理速度。例如,SCTNet-B-Seg100 在 mIoU 达到 80.5% 的同时,实现了 62.8 FPS 的推理速度,优于其他实时分割方法。
  • ADE20K 数据集: SCTNet 在 ADE20K 数据集上也取得了最佳精度和速度的平衡。SCTNet-B 在 mIoU 达到 43.0% 的同时,实现了 145.1 FPS 的推理速度,比 RTFormer-B 快 1.6 倍,并且 mIoU 高出 0.9%。
  • COCO-Stuff-10K 数据集: SCTNet 在 COCO-Stuff-10K 数据集上同样表现出色,在 mIoU 达到 35.9% 的同时,实现了 141.5 FPS 的推理速度,优于其他实时分割方法。

消融实验:

  • 不同类型的块: 与 ResBlock 和 SegFormer Block 相比,CFBlock 能够显著提升分割精度,并且在速度和参数量方面也取得了更好的平衡。
  • 语义信息对齐模块 (SIAM) 的有效性: SIAM 能够有效地将 Transformer 的语义信息传递给 CNN 分支,从而提升分割精度。实验结果表明,使用 SIAM 可以显著提升 SegFormer、SegNext、SeaFormer 和 DDRNet 的性能。
  • 组件消融: 实验结果表明,CFBlock、BFA 和 SDHA 都是 SCTNet 的关键组件,能够有效地提升分割精度。

代码实现

import torchimport torch.nn as nnimport torch.nn.functional as F
class ConvFormerAttention(nn.Module): def __init__(self, dim, num_heads, kernel_size=3): super(ConvFormerAttention, self).__init__() self.dim = dim self.num_heads = num_heads head_dim = dim // num_heads self.query = nn.Conv2d(dim, dim, kernel_size=1) self.key = nn.Conv2d(dim, dim, kernel_size=1) self.value = nn.Conv2d(dim, dim, kernel_size=1) self.conv = nn.Conv2d(dim, dim, kernel_size=kernel_size, padding=kernel_size//2) self.proj = nn.Conv2d(dim, dim, kernel_size=1)
def forward(self, x): B, C, H, W = x.shape q = self.query(x).view(B, self.num_heads, C // self.num_heads, -1) k = self.key(x).view(B, self.num_heads, C // self.num_heads, -1) v = self.value(x).view(B, self.num_heads, C // self.num_heads, -1) q = q.permute(0, 1, 3, 2) attn = torch.matmul(q, k) * (C // self.num_heads) ** -0.5 attn = F.softmax(attn, dim=-1) out = torch.matmul(attn, v.permute(0, 1, 3, 2)) out = out.permute(0, 1, 3, 2).contiguous().view(B, C, H, W) out = self.conv(out) out = self.proj(out) return out


欢迎投稿

想要让高质量的内容更快地触达读者,降低他们寻找优质信息的成本吗?关键在于那些你尚未结识的人。他们可能掌握着你渴望了解的知识。【AI前沿速递】愿意成为这样的一座桥梁,连接不同领域、不同背景的学者,让他们的学术灵感相互碰撞,激发出无限可能。

【AI前沿速递】欢迎各高校实验室和个人在我们的平台上分享各类精彩内容,无论是最新的论文解读,还是对学术热点的深入分析,或是科研心得和竞赛经验的分享,我们的目标只有一个:让知识自由流动。

📝 投稿指南

  • 确保文章为个人原创,未在任何公开渠道发布。若文章已在其他平台发表或即将发表,请明确说明。

  • 建议使用Markdown格式撰写稿件,并以附件形式发送清晰、无版权争议的配图。

  • 【AI前沿速递】尊重作者的署名权,并为每篇被采纳的原创首发稿件提供具有市场竞争力的稿酬。稿酬将根据文章的阅读量和质量进行阶梯式结算。

📬 投稿方式

  • 您可以通过添加我们的小助理微信(aiqysd)进行快速投稿。请在添加时备注“投稿-姓名-学校-研究方向”


    长按添加AI前沿速递小助理


AI前沿速递
持续分享最新AI前沿论文成果
 最新文章