只用 3×3 卷积打败 Diffusion Transformer——北大-北邮-华为开源的 DiC 真正“小而强”
摘要: DiC提出了一种纯卷积架构的扩散模型,在保持生成质量的同时显著降低计算成本。核心创新包括:**频率感知空洞卷积(FADC)**动态捕捉多尺度特征,**双路径残差(DPR)缓解深度梯度消失,以及混合频率采样(MFS)**优化训练效率。实验表明,DiC-B(72M参数)在512×512图像生成上FID达7.95,优于DiT-L(344M参数),且骁龙8 Gen3 NPU部署仅需0.9秒/图。开

写在前面:为什么 DiC 值得读三遍?
- 学术角度:首次在同一篇论文里系统回答了“当扩散模型遇到端侧算力天花板,纯卷积能否取代 ViT”。
- 工程角度:提供了完整训练-量化-部署脚本,骁龙 8 Gen 3 上 512×512 图 0.9 s 出图,比 DiT-L 快 5×。
- 商业角度:开源协议 Apache-2.0,可商用,已在华为昇腾社区上线 NPU 一键转码示例。
背景:Transformer 的“甜蜜陷阱”
模型参数量MACs@512²A100 延迟显存端侧可行性DiT-XL/2675 M525 G420 ms80 GB❌DiT-L/2344 M277 G230 ms40 GB❌DiC-B72 M94 G110 ms8 GB✅
DiC 架构:一条“卷积高速公路”
- 宏观 Block:Frequency-Aware Dilated Conv(FADC)
-
动机:扩散过程对高频(纹理、边缘)敏感,低频(构图、语义)可粗略。
-
设计:每个 Block 由三条并行分支组成,分别使用 dilation=1、3、5 的 3×3 卷积。输出在通道维度拼接后,利用 1×1 Group Conv 融合。通过 可学习频率门控 γ∈[0,1] 动态调节各分支权重(类似 SE,但只针对频率通道)。
class FADC(nn.Module):
def __init__(self, c, dilations=[1,3,5]):
super().__init__()
self.convs = nn.ModuleList([
nn.Conv2d(c, c//3, 3, padding=d, dilation=d, groups=c//3)
for d in dilations
])
self.gate = nn.Sequential(
nn.AdaptiveAvgPool2d(1),
nn.Conv2d(c, c//16, 1), nn.SiLU(),v
nn.Conv2d(c//16, len(dilations), 1), nn.Softmax(dim=1)
)
def forward(self, x):
outs = [conv(x) for conv in self.convs]
g = self.gate(x).unsqueeze(-1).unsqueeze(-1)
out = torch.cat(outs, dim=1)
return x + out * g
- 复杂度:参数量与 MACs 随 dilation 增大仅线性增加,无二次项。
- 微观单元:Dual-Path Residual(DPR)
- 问题:纯卷积 100+ 层后梯度范数崩塌。
- 解决:Path A 为常规残差:Conv-BN-SiLU。Path B 在卷积前插入 Gated Linear Unit (GLU):
h = Conv(x) ⊙ Sigmoid(Conv(x))
两条路径输出相加,抑制梯度消失(实验 1000 层仍 0.98 梯度范数)。
- 位置嵌入:Sinusoidal → Convolutional
- 不采用 2D RoPE 或可学习绝对位置编码,而是把 timestep t 通过 FiLM 注入:
scale, shift = MLP(t).chunk(2, dim=1)
h = h * scale.view(-1,1,1,1) + shift.view(-1,1,1,1)
- 好处:纯卷积,无额外内存碎片,NPU 友好。

训练秘籍:让 72 M 参数也能驯服 512×512
1. Mixed-Frequency Sampling(MFS)
Patch 大小比例作用64×6460 %低频语义快速收敛128×12830 %中频结构512 x 51210 %高频细节精修
-
实现在 dataloader 中根据梯度范数动态调整采样概率,官方代码里通过 EMA of gradient variance 控制。
-
结果800 k → 260 k step,FID 无退化,显存峰值从 36 GB → 11 GB。
- 损失函数:Hybrid L2 + VGG Perceptual
-
L2 保像素保真;VGG-16 relu3_3 保感知。
-
权重 1:1,训练更稳,不易过拟合纹理。
- 数据 & 超参
-
训练集:LAION-2B 中 2 M 512×512 子集。
-
优化器:AdamW,lr=1e-4,weight_decay=0.01。
-
EMA decay=0.9999,防止小模型震荡。
端侧部署:从 FP32 到 INT8 的“无痛”量化
量化方案:
- 误差FP32 FID 8.97 → INT8 FID 9.14,视觉无感差异。
- 速度骁龙 8 Gen 3 Hexagon NPU INT8 推理 0.9 s(批大小 1),功耗 3.2 W。
阶段权重量化激活量化校准方式PTQINT8 per-channelINT8 per-tensor512 图 MSE 最小化QAT同上同上LSQ+ 学习 scale
内存布局优化
- 把 GroupNorm 替换为 InstanceNorm + 1×1 Conv(等价,但 NPU 支持更好)。
- 将 timestep MLP 权重折叠进卷积权重(weight pre-fusion),减少一次访存。
实验:DiC 与 DiT 的“针尖对麦芒”
定量指标
模型FID↓sFID↓IS↑Precision↑Recall↑DiT-L/210.848.91247.60.830.59DiC-B8.977.95254.30.850.62
定性分析
- 高频纹理DiC 在人脸发丝、动物皮毛上细节更丰富,得益于多尺度 dilation。
- 全局一致性由于 still 纯卷积,large object 的相对位置略弱于 DiT,但 MFS 缓解了此问题。
Ablation:每个组件的贡献
去掉的模块ΔFID说明FADC → 普通 3×3+1.74失去频率感知去掉 dilation=5 分支+0.63低频建模不足去掉 DPR Path B+0.96梯度崩塌,训练不稳去掉 MFS+1.12训练收敛慢
快速开始:30 分钟跑通 demo
conda create -n dic python=3.10
conda activate dic
pip install torch==2.3.0 torchvision --index-url https://download.pytorch.org/whl/cu118pip install dic-diffusion # 官方包
git clone https://huggingface.co/PKU-Huawei/DiCcd DiC && wget https://huggingface.co/PKU-Huawei/DiC/resolve/main/dic-b-512.pth
python demo.py --ckpt dic-b-512.pth \
--prompt "A futuristic cyberpunk city, neon lights, 4k" \ --steps 20 --seed 42 --device cuda

官方代码仓库:https://github.com/PKU-DiC/DiC
DiC 论文(arXiv 2507.08123)
昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链
更多推荐

所有评论(0)