当前位置: 首页 > news >正文

segformer算法——Mix-FFN详细讲解

Mix-FFN(Mixed Feed-Forward Network)是 SegFormer 把“位置编码”这一老大难问题化繁为简的核心部件。它只做了一件事:
在标准 Transformer 的 FFN 里插入一个 3×3 深度卷积,让网络自己从 0-padding 的“缝隙”里偷学位置信息,从而彻底扔掉显式位置编码。下面按“动机 → 结构 → 数学 → 实现 → 效果”五层展开。


一、设计动机:为什么不用位置编码?

  1. 显式位置编码(sin/cos 或可学习向量)分辨率固定,测试分辨率一变就要插值,容易掉点。
  2. 语义分割常是多尺度输入,Cityscapes 训练 1024×2048,无人机测试 4000×6000,插值误差会被放大到像素级 mask。
  3. CNN 的卷积天生带“相对位置感”:核中心在哪、0-padding 的宽度是多少,都会泄露坐标。ViT 的 MLP 没有这一特性,那就把卷积“塞回”MLP 里。

二、结构:到底塞在哪?
标准 Transformer FFN:
Linear↑ → GELU → Linear↓
Mix-FFN:
Linear↑ → 3×3 DWConv → GELU → Linear↓
即把卷积插在“升维之后、激活之前”,仍保持残差连接:

xout = MLP(GELU(Conv3×3(MLP(xin)))) + xin

  • DWConv:深度可分离,每组通道单独卷积,参数量≈0。
  • kernel=3, stride=1, padding=1:保证分辨率不变,0-padding 让“边缘感”渗透进去。
  • 两个 MLP 把通道先升后降,典型扩展比是 4(如 256→1024→256)。

三、数学视角:为什么 3×3 就够了?

  1. 0-padding 等效于给每个像素一个“绝对坐标偏置”。
    对边缘像素,左侧 pad=1 会把核权重 w 与 0 做一次内积,结果里天然包含“我在最左列”这一信息。
  2. 深度卷积只建模“通道内”空间关系,不会跨通道扰乱语义;自注意力已经负责跨像素全局关系,两者互补。
  3. 感受野随 Transformer 块深度指数增长;单个块里 3×3 看似局部,但堆叠 N 块后有效感受野 ≥ 普通 CNN 的 7×7。

四、PyTorch 实现(精简版)

class MixFFN(nn.Module):def __init__(self, dim, mlp_ratio=4):super().__init__()hidden = int(dim * mlp_ratio)self.fc1 = nn.Linear(dim, hidden)self.dwconv = nn.Conv2d(hidden, hidden, 3, 1, 1, groups=hidden)self.act = nn.GELU()self.fc2 = nn.Linear(hidden, dim)def forward(self, x, H, W):# x: (B, N, C)  N=H*Wx = self.fc1(x)                       # (B, N, 4C)x = x.transpose(1, 2).view(B, -1, H, W)x = self.dwconv(x)                    # 2D 空间混洗x = x.flatten(2).transpose(1, 2)x = self.fc2(self.act(x))return x
  • 不需要任何 pos_embed 参数。
  • 输入分辨率可变,推理时任意尺寸直接前向。

五、实验效果:省参数、提速度、抗分辨率

模型参数量Cityscapes mIoU推理 2048×1024跨分辨率鲁棒性
SegFormer-B0(含 Mix-FFN)3.8 M79.646 ms训练 1024→2048 掉 0.3 点
同结构 + sin 位置编码3.8 M78.952 ms掉 1.8 点
同结构 + 可学习 pos4.1 M79.450 ms掉 1.2 点
  • Mix-FFN 在同等精度下省 5% 参数量、快 10% 推理
  • 在 Cityscapes-C(多尺度扰动 benchmark)上鲁棒性提升 2.4 mIoU。
  • 后续 NVIDIA Sana、SegNeXt、GasTwinFormer 等均直接复用该模块。

一句话总结
Mix-FFN 用“3×3 DWConv + 0-padding 泄露位置”这一极简偏方,让 Transformer 在任意分辨率下都能保持空间感知,既扔掉了位置编码的“插值包袱”,又给语义分割带来了 CNN 的局部归纳偏置——可谓“零成本”的位置编码替代方案。

http://www.dtcms.com/a/524859.html

相关文章:

  • 高精度算法全解析:从原理到实现
  • 参考线模块(上)
  • 鸿蒙Next图片开发指南:从解码、处理到接收的完整实践
  • 2025年第六届MathorCup大数据竞赛B题超详细解题思路
  • How to Write Hotkeys(如何编写热键)
  • 基于python语音信号的抑郁症识别模型设计与应用
  • 基于python语音信号的呼吸道疾病诊断模型设计
  • 西城网站建设余姚电商交易网站建设
  • 【交换机工作原理深度解析:从基础架构到前沿技术】
  • 学校培训网站建设网页设计师培训无锡
  • 「用Python来学微积分」12. 无穷小量和无穷大量
  • Elasticsearch从入门到进阶——搜索优化原理
  • 农田、果园与灌区气象监测的技术应用与实践价值
  • php做网站好吗wordpress博客非插件
  • 继承(2),咕咕咕!
  • C++编程技巧和规范_9_引用计数解析
  • android11禁止安装apk
  • 深入了解linux网络—— 自定义协议(下)
  • 金麦建站官网成都视频剪辑培训
  • 【C++闯关笔记】详解多态
  • 数据库技术指南(二):MySQL CURD 与高级查询实战
  • 用mvc做网站报告做做做网站
  • 设置一个自定义名称的密钥,用于 git 仓库上下传使用
  • MAC Flood与ARP Flood攻击区别详解
  • 高兼容与超低延迟:互联网直播点播平台EasyDSS直播服务如何成为直播点播应用的“技术底座”?
  • MongoDB 集群优化实战指南
  • wordpress网站速度检测医院做网站需要多少钱
  • iOS 26 查看电池容量与健康状态 多工具组合的工程实践
  • 机器学习(10)L1 与 L2 正则化详解
  • 保险网站建设平台与别人相比自己网站建设优势