Diffusion Model 中的 U-Net 理解
前文我们学习了一些传统 Diffusion Model 的模型,比如 DDPM,LDM,也学习了 U-Net 的细节,但是它们是如何应用 U-Net 的呢。之前学习 Diffusion 一直处在理论或者宏观的角度,接下来需要结合代码理解细节。
为了适配扩散任务,现代的 Diffusion Model 在原始 U-Net 上引入了时间步嵌入。
Diffusion U-Net 的伪代码骨架
值得注意的是,现代的 Diffusion 往往会使用正余弦编码映射作为时间步,这里用标量进行了简化。
上采样与下采样:
1 | |
ResNetBlock:
1 | |
完整的 U-Net 伪代码:
1 | |
注意区别:
原始 U-Net
- Encoder: ConvBlock → MaxPool
- Decoder: UpConv → Concat → ConvBlock
Diffusion U-Net
- Encoder: ResNetBlock(t) → Downsample
- Decoder: Concat → ResNetBlock(t) → Upsample
原始的 U-Net 主要矛盾是为了恢复像素级别的位置准确性,计算重心在 Upsample 后的高分辨率处理。而 Diffusion U-Net 的主要矛盾是在各个尺度上预测噪声,计算重心是在 Upsample 前的低分辨率处理。(emmm,理解其实有点困难,后面再说吧。)
Diffusion Model 中的 U-Net 理解
https://d4wnnn.github.io/2026/03/14/Notion/Diffusion Model 中的 U-Net 理解/