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

周末在自己那块3060上从零写了一遍扩散模型,最朴素的SimpleUNet加时间嵌入,一千六百多万参数,权重存下来六十多兆。单轮四十三秒,二十轮十五分钟不到,显存峰值才0.43G,batch开到128还有富余。

结果挺打脸:本以为多少能看出飞机汽车的轮廓,实际吐出来的是一堆颜色对味但没有形状的抽象块。想想也正常,二十轮只够它学会色彩分布和去噪这件事本身,物体结构得再堆几十轮才可能浮出来。

两个点是真踩过才有体感。小batch下GroupNorm比BatchNorm稳太多,换回去loss直接抖;时间嵌入接得马虎,模型压根分不清当前是哪个噪声档位,看着loss在降其实什么都没学到。跳连也别省,细节全靠它兜。

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

1 个赞

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

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

GroupNorm那条我也遇到过,batch小的时候BatchNorm统计量根本不可信