20. TiNO-Edit: Timestep and Noise Optimization for Robust Diffusion-Based Image Editing
该文通过对扩散模型中添加噪声的时刻 t k t_k tk和噪声 N N N进行优化,提升SD等文生图模型的图像编辑效果。作者指出现有的方法为了提升文生图模型的图像编辑质量,通常是引入更多的条件信息,如编辑指令(InstructPix2Pix)、边缘图、分割图(ControlNet)等。而较少有人关注扩散模型中的两个关键超参数,时刻 t k t_k tk和噪声 N N N,对于编辑效果的影响。因此,作者专门探索了这两个参数对于编辑效果的影响,并且提出一种自动寻找最优参数的优化方法。
如上图所示,当把一个猫的图片和一个“a photo of dog”的文本描述输入到SD模型中进行Img2Img的转换时,扩散过程的最终时刻 T T T(每一列代表一个T)和随机噪声 N N N(每一行代表一种N)的选择都会对转换结果产生显著影响。具体而言,随着扩散过程不断的增长,最终生成的结果会越来越接近文本提示的目标结果,而与原本输入的图像越来越无关,这一洞见在SDEdit这篇论文中也有提及。而选择不同的随机噪声,则会生成完全不同的结果。
基于上述的观察结果,不同于直接找到一个适用于所有情况的最优的 T T T和 N N N,TiNO-Edit的目的是实现 T T T和 N N N相关参数优化过程的自动化。具体而言,就是现有方法都是预先给定相关的参数,然后对每个样本的扩散和生成过程都采用相同的参数。而TiNO-Edit是在每个样本的扩散和生成过程中都加入了一个优化过程,能够自动地寻找最优的时间和噪声参数,使输出的结果达到最佳,可以理解为一个参数自适应的操作。
在实现过程中,作者并不是直接对扩散过程的最终时刻 T T T进行优化,而是对每次加入噪声的时刻 t k = k T K , k ∈ [ 1 , K ] t_k=k\frac{T}{K},k\in[1,K] tk=kKT,k∈[1,K]进行优化。其中 T ∈ [ 0 , 1 ] T\in[0,1] T∈[0,1]表示最终时刻, K K K相当于把时刻 [ 0 , T ] [0,T] [0,T]离散为 K K K个时间点,从中随机选取第 k k k个时间点 t k t_k tk作为添加噪声的时刻。此外还对初始化的随机噪声 N ∼ N ( 0 , I ) N\sim \mathcal{N}(0,I) N∼N(0,I)进行优化。优化过程如下图所示
输入信息包括:原始输入图像 I I I, 原始输入图像的文字描述 p p p,目标提示 p O p_O pO和其他输入 A = { I ∗ M a , ∗ ∈ { r , s , c } } \mathcal{A}=\{I_*M_a,*\in\{r,s,c\}\} A={I∗Ma,∗∈{r,s,c}}, M a M_a Ma表示添加物体的掩码, I r I_r Ir表示图像编辑的参考引导图像, I s I_s Is表示涂鸦引导图像, I c I_c Ic表示图像组成(Image Composition)。然后,对 K K K, T T T, t k t_k tk和 N N N等参数进行初始化,由于TiNO-Edit是对SD这类潜在的扩散模型进行优化,因此需要将输入图像 I I I先经过一个变分自动编码器 V A E e n c {VAE}_{enc} VAEenc映射到潜在空间中,得到潜在特征 L L L。 M S K MSK MSK表示一种掩码操作,是根据编辑任务只对图像中需要编辑的位置进行掩码,而保持其他位置不变。 W W W表示参数优化迭代的次数, F D FD FD表示前向扩散过程, R D RD RD表示反向采样过程。在每次迭代过程中,都要完成一次完整的扩散和采样过程,并根据目标函数 L t o t a l \mathcal{L}_{total} Ltotal对 t k t_k tk和 N N N进行优化,最终将最优的采样结果 L ~ 0 \tilde{L}_0 L~0进行解码得到目标图像。
目标函数 L t o t a l \mathcal{L}_{total} Ltotal计算方式如下 L total ( L , L ~ 0 , p O , p , A ) = λ sem ⋅ L sem ( L , L ~ 0 , p O , p ) + λ ref ⋅ L ref ( L , L r ) + λ perc ⋅ L perc ( L , L ~ 0 ) , \begin{array}{l} \mathcal{L}_{\text {total }}\left(L, \tilde{L}_{0}, p_{O}, p, \mathcal{A}\right) \\ =\lambda_{\text {sem }} \cdot \mathcal{L}_{\text {sem }}\left(L, \tilde{L}_{0}, p_{O}, p\right) \\ +\lambda_{\text {ref }} \cdot \mathcal{L}_{\text {ref }}\left(L, L_{r}\right) \\ +\lambda_{\text {perc }} \cdot \mathcal{L}_{\text {perc }}\left(L, \tilde{L}_{0}\right), \end{array} Ltotal (L,L~0,pO,p,A)=λsem ⋅Lsem (L,L~0,pO,p)+λref ⋅Lref (L,Lr)+λperc ⋅Lperc (L,L~0),其中, L sem \mathcal{L}_{\text {sem }} Lsem 表示语义损失,计算方法为 L sem ( L , L ~ 0 , p O , p ) = cos ( LatentCLIP vis ( L ) , LatentCLIP vis ( L ~ 0 ) ) − cos ( CLIP text ( p O ) , CLIP text ( p ) ) , \begin{aligned} & \mathcal{L}_{\text {sem }}\left(L, \tilde{L}_{0}, p_{O}, p\right) \\ = & \cos \left(\operatorname{LatentCLIP}_{\text {vis }}(L), \operatorname{LatentCLIP}_{\text {vis }}\left(\tilde{L}_{0}\right)\right) \\ & -\cos \left(\operatorname{CLIP}_{\text {text }}\left(p_{O}\right), \operatorname{CLIP}_{\text {text }}(p)\right), \end{aligned} =Lsem (L,L~0,pO,p)cos(LatentCLIPvis (L),LatentCLIPvis (L~0))−cos(CLIPtext (pO),CLIPtext (p)), LatentCLIP vis \operatorname{LatentCLIP}_{\text {vis }} LatentCLIPvis 是一种视觉编码器,根据输入的潜在特征 L L L,输出与原始图像 I I I的CLIP特征 CLIP ( I ) \text{CLIP}(I) CLIP(I)相似的特征。说白了就是原本的CLIP模型是直接对图像 I I I进行编码的,而这里作者输入的是潜在特征 L L L,为了适应这一改变,作者专门训练了一个 LatentCLIP \text{LatentCLIP} LatentCLIP模型,让其根据 L L L输出与 CLIP ( I ) \text{CLIP}(I) CLIP(I)接近的特征图,其训练过程如下
CLIP text \operatorname{CLIP}_{\text {text }} CLIPtext 就表示原始的CLIP文本编码器。 L ref \mathcal{L}_{\text {ref }} Lref 表示参考图像特征 L r L_r Lr与输入图像特征 L L L之间的余弦相似性, L ref ( L , L r ) = cos ( LatentCLIP vis ( L ) , LatentCLIP vis ( L r ) ) \mathcal{L}_{\text {ref }}\left(L, L_{r}\right) =\cos \left(\operatorname{LatentCLIP}_{\text {vis }}(L), \operatorname{LatentCLIP}_{\text {vis }}\left({L}_{r}\right)\right) Lref (L,Lr)=cos(LatentCLIPvis (L),LatentCLIPvis (Lr)) L perc \mathcal{L}_{\text {perc }} Lperc 表示输入的特征 L L L和生成结果的特征 L ~ 0 \tilde{L}_{0} L~0之间的视觉相似性, L perc ( L , L ~ 0 ) = ∥ LatentVGG ( L ) , LatentVGG ( L ~ 0 ) ∥ 1 \mathcal{L}_{\text {perc }}\left(L, \tilde{L}_{0}\right)=\|\operatorname{LatentVGG}(L), \operatorname{LatentVGG}\left(\tilde{L}_{0}\right)\|_1 Lperc (L,L~0)=∥LatentVGG(L),LatentVGG(L~0)∥1 LatentVGG \operatorname{LatentVGG} LatentVGG与 LatentCLIP vis \operatorname{LatentCLIP}_{\text {vis }} LatentCLIPvis 的训练过程类似,只是把CLIP的图像编码器换成了VGG。
经过上述的优化训练过程,TiNO-Edit在多个图像编辑任务中的确取得了优于其他方法的效果,可视化结果对比如下
纯文本引导
参考图像引导
涂鸦引导