sd9

1、Knowledge Distillation in Iterative  Generative Models for Improved Sampling  Speed

提高采样速度2种方法:schedular优化、蒸馏

本论文基于DDIM,DDPM训练出来的epsilon theta 可以直接用于DDIM。由于DDIM的降噪过程是确定的,但是step多,由此定义了一个确定的教师分布,因此训练一个学生模型使得最终分布和教师分布一样。

 将2个分布视为高斯分布,学生分布为具有可训练参数的均值的分布,因此上式等价于:

学生模型的网络可以是任意的,这里直接设置为和教师的 epsilon theta 的架构和权重一致,以便加速。

训练过程:将教师网络输入XT,然后迭代很多step算出X0,训练学生网络输入XT后直接算出逼近X0。

缺陷:因为教师网络要跑完所有step才能开始训练,因此速度太慢

2、Progressive Distillation for Fast Sampling of Diffusion Models

 (基于DDIM)先训练一个学生,学老师2步的输出,学完之后自己做新的老师,再训练一个新的学生,步数再减半:

缺点:只考虑了DDIM下的推导,且没有考虑 classifier - free guidance

 3、On Distillation of Guided Diffusion Models

一阶段蒸馏:

教师分布的输出是考虑了 classifier - free guidance 的,学生模型接受 guidance strength 参数作为额外输入(像时间t一样)。具体的:

二阶段蒸馏:

上述阶段的蒸馏模型作为教师模型,采用 Progressive Distillation for Fast Sampling of Diffusion Models 一样的分布蒸馏方式,区别仅仅是多了 guidance strength 参数作为额外输入,还是基于DDIM。

采样阶段,用了 N-step stochastic sampling 技巧,2倍降噪再一倍加噪...目的是:在采样过程中引入了随机性,由于随机扰动的存在,生成的图像也会具有一定差异,从而增加了样本的多样性。:

 4、score distillation sampling (SDS)

NeRF 渲染阶段:
输入一个视角的(图片,相机参数),光线从相机出发穿过图片的1个像素后设置多个采样点,这些采样点的空间坐标通过训练好的 MLP 输出预测的颜色和密度信息,密度信息借助物理模型输出采样点的权重,通过预测的颜色加权求和得到预测的图片的像素,遍历多个像素就输出了该视角下的预测的图片。由于输入的视角可能是有限的,可以利用这种渲染方法渲染出没有提供到的视角图片,因此能实现完整的3D渲染

Textured mesh:

给定3D 物体的三角形网格信息以及多张纹理图像,为了渲染出某个相机视角下的2维图像,首先从相机发射出光线穿过这个2维图像的每个像素直到三角形网格上得到交点,通过该交点找到纹理图像对应的颜色,该颜色就作为这个2维图像对应像素的颜色,遍历每个像素之后,这个视角下的2维图像就渲染出来了,如此类推到其他视角。

【方法】

设 某个视角下的图片 =  g(theta,相机视角),g 是NeRF渲染过程,theta是渲染中的可训练参数(NeRF parameters)

给一个已知的相机视角c(以参数形式表示),得到 yc(视角文本),随机初始化 theta ,通过 g 得到预测的x0,再加噪声:

用梯度下降更新法只优化 theta,不动已有的  noise prediction network:

5、variational score distillation (VSD)

对  SDS 做了推广,使得 SDS 成为了特例,区别:
1、pariticles:将原来的单个参数用多组参数代替,以提高3D场景的真实性
2、多了一个可训练的 噪声预测网络 来估计噪声渲染图像的分数函数。
3、训练方式:随机抽样一个参数,和相机视角,基于此进行渲染,再加噪,基于SDS函数的梯度更新参数,再更新  噪声预测网络 ( 噪声预测网络 和 参数是迭代更新的)

 【推导】

初始的目标是让两个分布一致:带有可训练参数(θ采样自µ)的 3D 渲染后的分布(左)和  pretrained text-to-image diffusion model 算出来的预测x0的分布,注意优化的是训练参数的分布µ(优化完后θ从中采样),而不是SDS的单个θ:

这属于 variational inference problem 。

由于p0非常复杂,所以使用扩散模型将上式转为多个优化问题的组合,即对于任意的时间 t,两个分布在 t 时刻的带有噪声的分布一致:

 

使用ODE方法将分数代替为分布,同时不断迭代更新训练参数,迭代到无穷次就收敛了,τ 时刻(迭代时刻,即ODE time,不是xt的t)的训练参数的变化率满足:

 

根据Score-SDE,第一个分数可以用:ϵpretrain估计

第二个分数用可训练的ϵϕ估计,通过训练ϵϕ来跟踪当前渲染分布:ϵϕ是把g渲染后的图像(包括所有theta)作为训练集进行的 lora 训练,用ϵpretrain初始化,其中ϵϕ的损失函数:

 更新 theta 的梯度(即VSD的更新规则):

训练时, theta 和 ϵϕ 交替更新即可。

其中θ采样自µ,而µ看成是 n 个θ(pariticles),即将原来的单个参数用多组参数代替,这是为了提高3D场景的真实性和多样性,也可以理解为 n 种 nerf。

 【与SDS的区别】

(1)SDS 仅优化一个参数,如果看成分布的话,可以看成是狄拉克分布:Dirac distribution µ(θ|y) ≈ δ(θ−θ (1))。VSD推广到了n个参数,梯度更新更加准确,ϵϕ还能用到 text prompt y,SDS只有单纯的ϵ,VSD更能对起文本。

(2)由于VSD是从分布角度解题的,而训练出来的分布逼近于ϵpretrain,ϵpretrain对2D下的CFG友好,那么促使VSD对3D下的CFG友好(7.5);而SDS的CFG通常特别大(100)

6、DMD

2D下的 diffusion 蒸馏任务

推导:

对于 VSD 的 G 换了个新定义:一步图片生成器,其输出是假分布,G 用预训练好的 diffusion 降噪模型 ubase(z, T-1) 初始化,ubase是将zt输出到zt-1,是图片降噪的预测,不是噪声预测,由于是一步生成,所以 G 没有时间 t 的条件了。

训练目标是使得g的分布pfake和真实分布preal一致(Distribution Matching Loss),计算出2个分布对应的分数,sfake是假分布的分数,sreal是真分布的分数:

 

按照VSD类似的推导方法进行推导:根据Score-SDE引入扩散模型估计分数,此时可训练的 ϵϕ 变成了可训练的 ufake(diffusion model),ufake 也用 ubase做初始化,但它有t做条件,可训练是为了代表假分布,由于自然界的真实分布是无法获取的,所以论文是用预训练模型所产生的分布去模拟真实分布,通过让一步生成器的分布趋向于预训练模型的分布,从而趋向于真实分布,此处就把真实分布看成是预训练模型所产生的分布:

算出梯度后更新theta,这是训练的整体目标(期望2个分布相等)。也是同样的,以(渲染出来的)g的输出做为训练集,更新可训练的ufake,  ufake被期望输出预测的x0,这也是为了跟踪当前(渲染)g输出的分布,即代表假分布( denoising score-matching loss on samples from the one-step  generator):

 作者对推导过程做了理论和可视化证明:

假定真实分布有2个模式,如果只有sreal,则梯度只指向真实分布的某个高概率密度方向(真实分布的某类图片集),则g生成的样本就会趋向单一模式下的某个区域,对应图(a);

加上 - sfake,-sfake指向真实分布的高概率密度的方向 或者 低概率方向(由于 sfake 和 sreal 是期望一致的),所以样本会更散一点,g生成的样本就会趋向单一模式下的大部分区域,得到图b。

新增 Regression loss:
设计目的是为了使得生成器在学习过程中保留预训练模型所对应的真实分布的多种模式,保证生成图像的多样性 
{z, y}  : z~N(0,1),y是预训练模型对z降噪后的图片,他俩是配对的。那么期望g(z)能逼近y:

 这两个loss一个是从分布的角度训练,一个是从结果的角度点对点训练,但是 DMD2 认为:This regularization objective is also at odds with DMD’s goal of matching  the student and teacher in distribution, since it encourages adherence to the teacher’s sampling paths.

 7、DMD2
DMD的改进
(1)去掉 The regression loss :for costly dataset construction
(2)认为 DMD 的denoising score-matching loss 是在非平稳的g的输出作为训练集的,因此对假分布(假分数)估计不准确。解决方法是改变训练频率,训练一次G之后,训5次 ufake。
(3)蒸馏过程中始终没有在自然界的真实图片上做训练,会导致误差:引入GAN损失,从ufake中间的模块中引出一个预测头,预测头由一系列卷积层、归一化层和激活函数组成,这个分类头+ufake的编码器+ufake中间模块共同构成discriminator,这个discriminator负责鉴别加噪声后的xt是源于真实图片加噪声的还是源自于G的输出,同时也要训练G,这是为了让G的输出尽可能接近真实世界的图片:

(4)太大的模型比如SDXL没法用一步蒸馏出来,因此把一步生成器G改为多步生成(那速度不就慢了啊)

8、SwiftBrush
2D下的蒸馏
对VSD的简单变换,把 G 换了个新定义:一步图片生成器;  噪声预测网络 变成了 lora diffusion model,lora 初始化用的教师模型,G 因为是要预测图片而不是噪声,所以用的是预测x0的公式,里面用的diffusion 也是初始化用的教师模型,其他都一样:

9. InstanceDiffusion
文本 + 实例子的位置(mask 、bounding box、 scribble 、point) =》 能够在指定位置生成图片
造数据集:根据图片 利用 Grounded-SAM 生成 Bounding-box and  mask,使用 BLIP-V2 生成文本,使用 RAM 生成 image-level tag

给 diffusion 新增 UniFusion 用于接受位置条件,ScaleU 一个trick。

UniFusion:

实例子的位置形式:mask 、bounding box、 scribble 、point。每个形式用点集表示。

 

每个位置条件分别通过 Tokenizer。

对于第 i 个实例的每个位置做 Tokenizer :点集坐标通过 Fourier mapping 得到位置向量,该实例的文本通过  CLIP text encoder ,将2个向量拼接结果,再通过 MLP。

假如实例只有1个位置形式,则用 learnable null token 表示其他位置形式,该位置向量 和  learnable null token 加权求和,再和 文本 向量拼接,再通过MLP

 trick1: mask 形式的位置条件token 拼接所有实例的mask 特征图(先放缩,再通过ConvNeXT tiny),以便更好的分开各个实例

Masked Attention:仿照 gligen的设计,所有位置 Tokenizer 后的结果和 visual token 拼接,通过 mask attention, 注入diffusion。

mask attention:在 普通的 self-attention 上加入mask,mask:

 

 

trick2:

原始 Unet 跳跃链接主要贡献高频率特征,拼接后导致忽视主特征的语义。
ScaleU: two learnable, channel-wise scaling vectors: sb, ss for the main and skip-connected features
F′b = Fb ⊗ (tanh(sb) + 1)
F′s =IFFT(FFT(Fs)⊙α)
Here FFT(·) and IFFT(·) denote the Fast-Fourier and Inverse-Fast-Fourier transforms, ⊙ is element-wise multiplication, and α(r)= tanh(ss)+1 if r <rthresh otherwise= 1

trick2:

Multi-instance Sampler 避免实例之间的信息泄漏

 推理的时候,每个实例 和 整体 分别通过 diffsion 降噪 m 步,然后通过取平均来融合

10、multiduffusion

对长的 latent 交错的 crop 出来,分别去噪

 11、stitchDiffusion

在造的 h * 2h 的数据集上做训练。对于两个边缘是否能够连续,技巧:降噪的时候,两边分别增补一块区域,增补的再翻转拼接,单独降噪,再原路拼回去。

 12、stableSR

截屏2025-07-26 19.38.18

 处理任意尺寸的图片:把低分辨率图片分块,块大小为训练的64*64设置,块与块之间有随机的动态重叠,每个块分别降噪,每个块还有自己的权重,降噪完一步就做加权。

 13、Any-Size-Diffusion

训练:把图片缩放到候选的比例们中的最相近的

推理:第一步用训练的模型生成任意尺寸图片(其实也就候选那些比例),然后用 stableSR,只是有些块在某些步不降噪,其他步降,这样是加快了速度。

14、cad

梯度法解释扩散模型每个参数的作用

J(c,w) :评价参数w对模型生成概念 c 的作用;alpha i 是第 i 个参数对概念 c 的贡献度

假设1: J(c,w) =  alpha i 的线性组合

J 形式的假设2(概念擦除):

截屏2025-08-04 23.45.46

 J 形式的假设3(知识放大):

截屏2025-08-04 23.46.31

 利用泰勒展开可以近似求出alpha i :

截屏2025-08-04 23.47.16

 理论验证1:

截屏2025-08-04 23.47.36

 理论验证2: 

截屏2025-08-04 23.47.44

 15、SAE 和 Transcoder 都是子层而言的,SAE 是自编码器,重建输入和输出,另外让中间向量稀疏;Transcoder 重建的是 MLP 的输出,可以替换掉 MLP,另外让中间向量稀疏。

 训练Transcoder的时候,原始方法是逐层用Transcoder loss做训练;师弟方法:把 Transcoder 替换了 MLP,然后冻结注意力层进行训练。

16、微调分析

为了分析2个模型微调对于提示词的敏感度分析。

(1)PAC shift 分析:同一层的2个要对比的向量,分别映射到PCA 的2维向量,然后第一个分量做差,第二个分量取平均值,得到差异向量,基向量是要微调前模型的向量,第一个分量是0,第二个分量是pca的第二个分量。差异向量和基向量可以做图可视化,差异向量离的越远,说明微调模型对此输入反应很大,对此更敏感。
(2)Feature Distribution Analysis:对于领域内微调的模型,检测微调前后的每一层出现领域内特征的比例是多了还是少了,能可视化。

可以适用到diffusion的微调分析,看看微调后,对于哪个prompt更敏感了,从而检验有效性。

 

posted @ 2025-03-25 21:40  Jary霸  阅读(81)  评论(0)    收藏  举报