Flow based_cvpr2021 - yubo105139/paper GitHub Wiki

Flow-based Kernel Prior with Application to Blind Super-Resolution

论文 | https://arxiv.org/abs/2103.15977

代码 | https://github.com/JingyunLiang/FKP

理解:

原始方法的核 由初始化的核生成网络得到, 未经训练的网络估计的内核不受约束,无先验知识.

此处的核为隐变量生成, 隐变量和核之间存在可逆映射关系, 隐变量通过核先验模型可以找到核空间对应的某个内核.该方法就限制了核的优化空间, 确保了内核生成质量,相当于在核空间中遍历,找到判别器无法区分的核。

创新点

  • 提出一种用于核建模的归一化基于流的核先验(FKP)。通过学习各向异性的高斯核分布和可操作的隐藏分布之间的可逆映射,即FKP 在隐空间而不是网络参数空间中优化内核,这使得它能够产生合理的内核初始化,遍历所学的内核流形,并提高优化的稳定性

  • FKP 可以很容易地用于替代 Double-DIP 和 KernelGAN 的核建模模块。

各项异性和各项同性的理解.

非均向性(anisotropy),或作各向异性,与各向同性相反,指物体的全部或部分物理、化学等性质随方向的不同而有所变化的特性,例如石墨单晶的电导率在不同方向的差异可达数千倍,又如天文学上,宇宙微波背景辐射亦拥有些微的非均向性。许多的物理量都具有非均向性,如弹性模量、电导率、在酸中的溶解速度等。各向异性扩散滤波主要是用来平滑图像的,克服了高斯模糊的缺陷,各向异性扩散在平滑图像时是保留图像边缘的,和双边滤波很像。

已有方法的问题

Double-DIP 提出通过网络结构的先验对核进行建模,而 KernelGAN 则采用了深度线性网络和若干正则化损失来约束核空间。这两种方法没有充分利用各向异性高斯核先验,该核先验已被证明对真实图像 SR 足够有效.

FKP(Flow-based Kernel Prior)

使用几个 flow blocks 学习核k 和 隐含变量$z_k $间的可逆映射 .

image-20210923170052646

对于核$k$, 其可以被编码为隐含变量$z_k$, $z_k = f_{\theta}(k)$ , 同时$k$ 能够被使用其逆映射表示: $k=f_{\theta}^{-1}(z_k)$

image-20210923171059319

det为求行列式,$p_z$ 是一个简单分布, 如多元高斯分布, $f_{\theta}$ 由可逆变换的序列组成.$f_{\theta}=f_{\theta}^{1}.f_{\theta}^{2}...f_{\theta}^{N}$.

$h^0=f_{\theta}^{n}(h^{n-1})$ 其中$f_θ$ 的输入和输出$h^0$ 和 $h^N $分别是 $k $和$ z_k$。

根据最大似然估计, 使用最小化负对数似然估计(negative log-likelihood (NLL) loss)可以优化$\theta$,

image-20210923171151749

具体来说, FKP堆叠了几个可逆的flow layer, 每个flow layer 由 bn层, 排列层,和仿射变换层组成.对于仿射变换层,使用小型全连接神经网络 (FCN) 进行缩放和移位,其中每个 FCN 交替堆叠全连接层和 tanh 激活层。

FKP 通过给定训练内核样本, 使用NLL loss 来训练.

传统的退化模型

其公式如下, 其中LR 图 y 通过下面的退化公式得到.

image-20210923173031746

BlindSR 需要解决的问题是, 同时得到HR 以及模糊核的估计, 即得到 上式中的 x 和k的估计.根据最大后验估计计算,其可以表示成:

image-20210923173459913

其中等式左边为我们的待优化目标, 等式右边的第一项为数据保真项, 后两项$\phi(x), \Omega(k)$分别为图像先验和核先验.

目前已经提出了各种图像先验来描述自然图像统计 ,但内核先验的设计很少有人关注. 本文基于normalizing flow 来学习内核先验的学习.

normalizing flow(归一化流)是可逆的生成模型,可将复杂的数据分布变形为简单易处理的分布。

原始的DIP方法

一个生成网络输入随机噪声生成sr, 一个降质核生成网络输入随机噪声生成降质核.

image-20210923172116136

其中image-20210923172258789,为未做训练的网络的核先验. 同时优化随机初始化的网络参数$\theta_{g}$, $\theta_{K^}`$ , 以最小化LR 的重构损失.

问题: 设计一个基于卷积层或全连接层的类似 DIP 的网络,然后使用网络架构作为先验核可能不是一个好的选择。另一方面,未经训练的网络所包含的知识可能不足以同时估计 HR 图像和内核。

FKP和DIP的结合

将降质核生成网络使用 FKP替代, FKP生成降质核.

image-20210923165823370

这里需要优化核隐含变量 $z_k$ 而不是 生成核的网络参数$\theta_k$,

image-20210923175805867

$z_x$ 为随机噪声输入, 通过DIP网络生成 sr 图.

z_k也为随机噪声输入, 通过FKP网络生成降质核 .

sr图经过降质核退化 得到的退化图像 与真实的LR做重构loss.

原始的kernelGAN

image-20210923181842897

问题: KernelGAN 的性能不稳定。 由于多个正则化项,存在超参数选择问题.

FKP和kernelGAN的结合

image-20210924092741569

相当于将原始kernelGAN的生成器网络使用FKP替代.得到的内核来对LR 中的patch进行退化.

KernelGAN-FKP 直接从潜在变量 $z_k$ 生成内核,并使用该内核而不是深度线性网络来降级 LR 图像。 在优化中,$z_k$ 被优化为欺骗判别器,相当于在核空间中遍历,找到判别器无法区分的核。

这限制了生成器的优化空间并确保了内核生成质量,即使没有额外的正则化项,也可以比原始 KernelGAN 收敛更稳定。

image-20210923180940449

这篇论文算是对invertible网络在kernel建模上的应用,invertible网络直接在图像层面上的建模已经有了一些论文,而在kernel上的建模提供了另一条路,可否将其对其他low level的prior进行建模,或者和目前的unfolding的方法结合在一起,是一个可以思考的问题

代码大致流程梳理:

  • KernelPrior 类 为FKP 模型.是一个可逆模型.

其训练使用prepare_dataset.gen_kernel_random随机生成的降质核 输入模型, 得到 negative log-likelihood (NLL) loss, 对模型进行优化.

  • 在KernelGAN_FKP中, 其包含一个生成器Generator_KP 一个判别器Discriminator_KP.

其生成器Generator_KP生成 降质核, 以及降质图像.

生成降质核, 首先 随机初始化一个隐含变量 , 该隐变量从参数化的正态分布中随机采样得到.

将随机出的隐变量 输入 预训练好的 KernelPrior模型. 得到降质核.使用该降质核来得到降质图像.

判别器Discriminator_KP, 判别输入真实的降质图以及生成的降质图的真实性.