1680万参数的扩散模型跑二十轮,出来的是彩色抽象画

周末拿自己那块3060从零搓了个扩散模型,结构是最朴素的SimpleUNet加时间嵌入,一千六百多万参数,权重存下来六十多兆。

跑下来的数:

  • 单轮43秒,二十轮不到十五分钟
  • 显存峰值只有0.43G,batch开到128还有富余

结果有点打脸。本来以为多少能看出飞机、汽车的轮廓,出来的全是颜色挺对味、但没有任何形状的抽象色块。回头想也合理,二十轮只够它学会色彩分布和“去噪”这件事本身,物体结构起码还得再堆几十轮才可能浮出来。

真踩过才有体感的几条:

  1. 小batch用GroupNorm。换回BatchNorm,loss直接抖。
  2. 时间嵌入别接马虎。接得不对,模型分不清现在是哪个噪声档位,loss看着在降,其实啥也没学到。
  3. 跳连别省,细节全靠它兜着。

核心逻辑就一句:让网络去预测噪声。简单到有点不真实,但它确实work。

1 个赞

0.43G显存这个数字挺有说服力的,我那张老卡说不定也能跑一遍试试

顶

抽象色块阶段其实是好事,说明去噪链路通了没崩,接着堆epoch就行。我当时五十轮左右开始看到模糊的车轮廓

5 个赞

换过LayerNorm也能跑,收敛比GroupNorm慢一截

4 个赞

从零撸一遍比调参有用,起码知道那堆超参各自在管什么

从零手写一遍很值,比调别人仓库明白得多,二十轮出色块正常,接着堆就是了