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