ResShift 论文阅读
ResShift
Motivation
主要想法:缩短马氏链,加速反向传播过程
传统的方法是:从高斯分布中采样 Pure Noise 然后逐步 reverse 得到 一个图像。
主要问题都是 沿用了 原本 DDPM 中的马氏链 (太长,从 pure noise 开始还原)导致要经过很多次迭代才能 生成出一张图片。而且 reverse 过程过长 还会导致 生成的图像过于平滑。
(?可能是因为 纹理细节被当做噪声给 过滤掉 ? 如何 balance 高频 和 噪声?)
(?多次经过 diffusion 的reverse 相当于 过了很多次低通滤波? )
One common approach involves inserting the LR image into the input of current diffusion model. and retraining the model from scratch on the training data for SR. 一种方法是 把 LR 插入到输入中 (在Google的Image Super-Resolution via Iterative Refinement )论文中 将 Pure Noise 和 LR concat 然后在 Unet 中 做 reverse
Another popular way is to use an unconditional pre-trained diffusion model as a prior and modify its reverse path to generate the expected HR image. 通过 LR 引导 反向过程 ,类似于 LDM 中的 Attn 的作用,但是也是从 Pure Noise 开始的
在 超分 任务中 目标是生成 HR , 有先验数据 LR 。通过利用 LR 来得到 生成的HR图像,来缩短马氏链:类似于 直接截断 Pure Noise -> LR(这个LR 不直接是 LR 而是马氏链中接近的一个 节点) ,从 LR 开始进行 reverse 得到 HR。
前向过程
记:
HR 为
论文 的 核心想法 是:transit from
参数序列
逐步加噪:
其中
一步加噪:
反向过程
在这个 式子中
反向过程 的目的就是为了 估计 给出
其中的
参数的优化
根据 扩散模型文献中 的假设
$$
p_({x}_{t-1}|{x}t,{y}0)={N}({x}{t-1};{\mu}({x}_t,{y}0,t),{\Sigma}({x}_t,{y}_0,t))
$$
优化目标就是,最小化证据下界:
$$
\min_\sum_tD_\left[q({x}_{t-1}|{x}_t,{x}0,{y}0)|p({x}{t-1}|{x}_t,{y}_0)\right]
$$
其实就是让模型 预测的 前一时刻 图像 靠近 真实的前一时刻图像的 分布。
反向过程和参数的优化和传统的 Diffusion 几乎没什么区别
噪声策略 Noise Schedule
根据前项过程的式子可以看出,噪声的方差由
当T=1 时:
当
代码中的细节
ResShift Repo 原文仓库在此处
用了 VQ-VAE 作为 autoencoder
LPIPS 通常是一个训练好的 感知相似度模型 一个计算相似度的方法
UNetModelSwin 用这个作为 diffusion model
数据
训练数据
训练时候用的 256x256的 HR 图像 根据 LDM 从 ImageNet 的训练集中随机裁剪出,然后使用 RealESRGAN 的 退化流程 合成的 LR 图像。
测试数据
基于常用退化模型合成了一个测试数据集,用了 ImageNet中取3000张,还有RealSR,和自己收集的
模型
使用 Unet 作为 Diffusion 的网络结构,用 Swin Transformer 块儿 替换 UNet中的 自关注层