论文:FreeU: Free Lunch in Diffusion U-Net
代码:https://chenyangsi.top/FreeU/
出处:2023.09
效果:
本文中,作者发现了 U-Net 的一个未被利用的特性,能看做“免费的午餐”,也就是能够在不需要任何额外开销的情况下即时显著提升生成质量
作者是怎么发现的呢:
U-Net:
作者画出了去噪的中间过程生成的图片的高频和低频特征,如图 2 所示:
图 3 中的曲线更是证明了这一点:
作者根据这个观察到的观点,又去查看了 U-Net 的结构和高频、低频信号的关系,发现:
作者如何改进这个问题的呢:FreeU
扩散模型如 DDPM,一般都是先对图片加噪,然后逐步学习噪声然后去噪的过程:
加噪过程:
去噪过程:
去噪的过程一般是使用以时间为条件的 U-Net 来实现,每一步的 U-Net 都是学习对应该步的噪声,然后实现去噪
U-Net 的结构如图 4,包括一个 backbone 和很多 skip connections,为了度量这个两个部件在去噪过程中的作用,作者使用了控制实验,分别使用了两个尺度因子来控制 concat 之前这两者的权重:
如图 5 所示:
观察到了这个现象后,作者就进一步探究了为什么出现这个现象,结果如图 6 所示:
那么 skip connection 的作用是什么呢:为解码器提供信息,而不是为了改善网络的去噪性能
这个观察结果引发了一个问题:
在 U-Net 架构中,编码器的去噪作用和跳跃连接之间应该如何平衡,以便在整个网络中实现最佳的去噪效果。简而言之,这是关于如何最佳地利用网络的不同部分来提高图像去噪性能的问题。
在 U-Net 解码器的第 l l l 个块中,有两种特征图:
如何放大主干网络特征图( x l x_l xl?)的作用呢:
作者引入了一种与图像结构相关缩放的方法,可以为每步采样动态的调节对应的 scaling,不是固定的 scaling
首先,沿着通道维度计算平均特征图,就是每个 block l l l 会得到一个对应的平均特征图,也就是该 block 上所有通道的特征图的平均,如图 8 所示:
然后,会得到每个 block 上对应的 backbone factor map α l \alpha_l αl?,就是和特征图大小相同的一个缩放特征图,后面会乘到原始特征图上去做增强:
通过前面的实验发现,如果不加选择地放大 x l x_l xl? 的所有通道,即每个 block 的所有通道都和 α l \alpha_l αl? 相乘来进行增强,会导致合成图像中的纹理过于平滑。这是因为增强的 U-Net 在去噪的同时,会损害图像的高频细节。因此,作者只对 x l x_l xl? 的一半通道进行增强,另外一半不进行增强:
为什么要使用整个 block 所有通道的平均特征图来指导加强呢:
如图 8,average feature map
x
ˉ
l
\bar{x}_l
xˉl? 主要包括结构信息,所以 backbone factor map
α
l
α_l
αl? 能够让 backbone feature map
x
l
x_l
xl? 以结构信息对齐。这种策略的目的是为了减轻过平滑的问题。首先,它增强了主干特征图的去噪能力,使其能够更有效地过滤掉噪声。其次,它避免了在整个特征图上无差别应用缩放的负面效果,从而在降噪和保留纹理之间达到了更细致的平衡。
对跳跃连接传播的特征图( h l h_l hl?)如何削弱呢:
为了进一步减轻由于增强去噪能力而导致的纹理过度平滑问题,作者在傅里叶域对跳连特征图( h l h_l hl?)进一步采用光谱调制,以选择性地减少其低频分量,也就是将低于某个阈值的低频信息全部变为 s l s_l sl?,这样低频信息就减少了,保留下来的都是高频的信息,更有细节。
β l , i \beta_{l,i} βl,i? 是傅里叶频谱的掩码 mask,这个掩码用于调节低频信息,以解决过度平滑的问题,怎么解决的呢:
是与傅里叶系数的模值相关的一个函数,是与 frequency-dependent scaling factor s l s_l sl? 有如下关系,r 是半径, r t h r e s h r_{thresh} rthresh? 是频率阈值
这个过程可以帮助在去噪的同时保持图片的纹理细节,因为去噪往往会平滑掉图片的高频细节。通过在傅里叶域内调节频率成分,可以更精细地控制去噪过程,避免过度平滑的结果。