SRFlow 超分SOTA? PULSE的升级版....

首发于jwxie.cn

SRFlow: Learning the Super-Resolution Space with Normalizing Flow

???? PDF Link ???? Github Project

Section 0 前置介绍(俺写的,不是论文作者写的)

一些前置的有关于Flow的知识点:
讲到Flow、Glow实际上还得从VAE和GAN说起。针对VAE和GAN我们也比较熟悉了,属于生成模型本质上就是给定一批数据,我们用这批数据来拟合出尽可能真实的数据分布。
这里我们直接从连续变量的角度来讨论。
针对连续变量的分布,实际上是可以用一堆高斯分布来进行拟合的,那么好这里我们定义每一个独立的高斯分布为 q θ ( x ∣ z ) q_{\theta}(\boldsymbol{x}\mid z) qθ(xz),那针对这个连续变量 q ( x ) q(\boldsymbol{x}) q(x)的定义实际上就可以用积分来表示:
q ( x ) = ∫ q ( z ) q θ ( x ∣ z ) d z q(\boldsymbol{x}) =\int q(z) q_{\theta}(\boldsymbol{x} \mid z) dz q(x)=q(z)qθ(xz)dz
现在要去估计这个连续变量,那么借助最大似然可得:
E x ∼ p ~ ( x ) [ log ⁡ q ( x ) ] \mathbb{E}_{\boldsymbol{x} \sim \tilde{p}(\boldsymbol{x})}[\log q(\boldsymbol{x})] Exp~(x)[logq(x)]

但是对于这个多个独立高斯分布的积分,有个难题就出来,这咋算?能不能算的出?
这时候蹦出来的两个方案就是VAE和GAN:

  1. VAE。首先来看VAE,本质上VAE并没有解决这个问题,而是绕过了这个问题,去求解一个一个近似的问题。既然这里要求 q ( x ) q(\boldsymbol{x}) q(x)涉及到的积分我们并不知道怎么求(举个栗子:这里我们要生成一个小孩的人脸,那就按顺序有五官,头发,脸型等很多问题,那我怎么确定这些问题来让生成的脸是小孩的脸?又或者说这些问题是否能全部被我们考虑到?),或者说这个积分范围具有该有多大也是不清楚的。那么VAE实际上就提出一个绕过这个问题的办法,既然 q ( x ) q(\boldsymbol{x}) q(x)有点难搞,能不能搞一下 p ( x ) p(\boldsymbol{x}) p(x)呢,这里我们让 p ( x ) p(\boldsymbol{x}) p(x)是一个相对简单的分布(还是那个小孩脸的问题,我们简化刚才问题为只需要知道五官,头发和脸型,我们怎么生成小孩的脸),这就是VAE中的V的来源。再从实际的角度上简单地来看这个独立的条件分布的问题,原本的求 q ( x ) q(\boldsymbol{x}) q(x)的问题实际上就是我们想输入一个latent code直接生成一个东西,那靠小脑袋瓜想想也知道光靠梯度下降要实现这个功能肯定8行嘛。那好,我前面来个编码器,我先输入一个东西让编码器生成latent code然后再用一个解码器实现从latent code到这个东西的过程。这样一看,嗷嗷,小脑袋瓜就会说,这很????。总结来看,实际上VAE并没有解决问题,就是绕了一圈去对这个问题的结果近似了一下(这就是为什么VAE通常产生的结果不是太理想的原因)。
  2. GAN。接着来看GAN,GAN的话其实大家看的也都多了,不详细讲了。GAN本质上就是通过交替训练的方式来绕过这个问题的,相当于多弄了一个额外的监督信息来保证我生成的过程是可靠的,结果也是我们想要的(这里你想想StyleGAN要是没有判别器,那小脑瓜肯定要说8????)。

VAE和GAN都是绕了一下去解决这个问题的,那就没有直面问题的困难的方案么。有,就是Flow,我们可以把积分直接算出来。

假定 q θ ( x ∣ z ) q_{\theta}(\boldsymbol{x} \mid z) qθ(xz)是个Dirac分布 δ ( x − g ( z ) ) \delta(\mathrm{x}-\mathrm{g}(\mathrm{z})) δ(xg(z)),然后让 x = g ( z ) x=g(z) x=g(z)并保证这个 g g g是个可逆的也就是说:
x = g ( z ) ⇔ z = f ( x ) x=g(z) \Leftrightarrow z=f(x) x=g(z)z=f(x)
归纳一下,我们原本的算 q ( x ) = ∫ q ( z ) q θ ( x ∣ z ) d z q(\boldsymbol{x}) =\int q(z) q_{\theta}(\boldsymbol{x} \mid z) dz q(x)=q(z)qθ(xz)dz的计算问题就可以这么理解了:
q ( z ) = 1 ( 2 π ) D / 2 exp ⁡ ( − 1 2 ∥ z ∥ 2 ) q(z)=\frac{1}{(2 \pi)^{D / 2}} \exp \left(-\frac{1}{2}\|z\|^{2}\right) q(z)=(2π)D/21exp(21z2)
然后把 z z z嵌进去,:
q ( x ) = 1 ( 2 π ) D / 2 exp ⁡ ( − 1 2 ∥ f ( x ) ∥ 2 ) ∣ det ⁡ [ ∂ f ∂ x ] ∣ q(\boldsymbol{x})=\frac{1}{(2 \pi)^{D / 2}} \exp \left(-\frac{1}{2}\|\boldsymbol{f}(\boldsymbol{x})\|^{2}\right)\left|\operatorname{det}\left[\frac{\partial \boldsymbol{f}}{\partial \boldsymbol{x}}\right]\right| q(x)=(2π)D/21exp(21f(x)2)det[xf]
然后再求一下对数似然:
log ⁡ q ( x ) = − D 2 log ⁡ ( 2 π ) − 1 2 ∥ f ( x ) ∥ 2 + log ⁡ ∣ det ⁡ [ ∂ f ∂ x ] ∣ \log q(\boldsymbol{x})=-\frac{D}{2} \log (2 \pi)-\frac{1}{2}\|\boldsymbol{f}(\boldsymbol{x})\|^{2}+\log \left|\operatorname{det}\left[\frac{\partial \boldsymbol{f}}{\partial \boldsymbol{x}}\right]\right| logq(x)=2Dlog(2π)21f(x)2+logdet[xf]
这个时候,我们想既然 f f f可以实现从 x x x z z z的过程,这时候 f f f又是一个可逆的,这部就????了嘛, f ′ = > g f' =>g f=>g 就是我们想要的模型。

总结一下,VAE是显式的GAN是隐式的,VAE虽然效果差,但是可以对潜变量做一些编辑,而GAN就不行,因为我们不知道做哪些编辑之后会取得什么样的结果。

Section 1 介绍

SISR是一个比较有趣的研究课题,也有不少重要的实际运用场景。主要的目的就是为了增强给定的图片中丢失的高频信息。但是本质上SR是一个病态的问题,给定一个LR实际上符合的HR图像有不少,这就造成了使用基于深度学习的方法在进行图像的恢复过程中会遇到一堆难题。

早期的方法是使用前馈网络的结构结合 L 1 L_1 L1或是 L 2 L_2 L2的重建损失函数来进行超分。尽管能取得较好的PSNR指标,但是取得效果肉眼上看就很模糊。然后就有一些工作使用对抗训练和感知损失来解决这个问题,但仍然无法完全解决SR这个病态的问题。

SRFlow解决这个问题的方法是去学习一个在给定LR的条件下,对应的HR所符合的一个合理的条件分布。为此,我们设计了一个条件归一化流(conditional normalizing flow)结构来实现图像的超分辨率。得益于利用对数似然方式对flow进行训练,使网络能够在没有任何其他约束或损失的前提下,学习到如何生成与输入LR图像一致的逼真的SR图像的能力。给定一个LR图像,SRFlow可以从学习到的分布中采样多个不同的SR图像,与传统方法相比,该网络因此可以探索SR图像的整个可能性空间,如下图。
SRFlow 超分SOTA? PULSE的升级版....

与经典的基于GAN的方法对比的话,这里提出的基于flow的方法有辣么几个优点。首先,SRFlow不存在mode collapse;其次GAN一般需要多个loss来保证训练效果,但这样做的话就有可能对调参和收敛造成一定的困难,而SRFlow的方法就一个损失函数(负对数似然),稳定得多;最有由于基于flow的方法使用了一个可逆的网络,因此可以实现精确的人脸编辑~

贡献:

  1. 据作者说是第一个设计使用条件归一化流来取得SOTA的超分质量的。
  2. SRFlow还可以用来做去噪和图像编辑。
  3. 我们是超分SOTA。

Section 2 相关工作

SISR

SR长久以来就是一个计算机视觉领域里具有一定挑战性的工作,早期的方法基本都是基于稀疏编码或者局部线性回归的方式。第一个使用深度卷积神经网络的是SRCNN,但是这种方式之前也说了不太行。然后就是URDGN和SRGAN以及一些使用cGAN的方法。但这些方法都只能产生一个SR结果。

Stochastic SR

基于生成多张多样的超分解过的方法并没有获得很多的关注。GAN是存在mode collapse的问题的因为GAN再训练过程中很容易就忽略了输入的随机信号,这就导致了很多情况下的超分/图像翻译只能生成定向的结果。[1,2,3]提出了一些基于GAN的随机超分方案,在保证与LR图像尽可能一致的同时实现了能够生成多张图像超分辨率。与其他方案不一样的是,我们设计了一种使用负对数似然进行训练基于flow的结构,这使得我们能够学习到HR图像的条件分布(条件是LR吧?)而不需要更多额外的限制、损失函数、后处理方法来保证SR与LR的相似性。另外还有一些工作[4,5,6],使用数据内部的patch recurrence来训练网络(例如zero-shot/few-shot的一些工作)。但是,我们的想法是弄出一个在一定大的数据集上弄出生成SR图像的一个分布。

其实近期就有关于使用生成流的方式来做超分的,比如PULSE,还有StyleGAN2里面的projcetion,操作起来的基本思路其实很像,后者就是把Normalizing flow换成GAN来做图像生成而已????,但是我在玩的时候,的确发现了这方面的超分实际上很依赖于backbone模型的生成多样性,也就是SRFlow里面的Glow和PULSE里面用到的StyleGAN<否则PULSE就不会被人骂Racial Discrimination了????>

Normalizing flow

基于Normalizing flow的方法很少被人关注,Normalizing flow使用一个可逆神经网络 f θ f_{\theta} fθ来参数化一个复杂的分布 p y ( y ∣ θ ) p_{y}(y \mid \theta) py(yθ)。这个可逆神经网络可以通过对一个常见的简单分布(比如高斯分布)的采样 p z ( z ) p_{\mathbf{z}}(\mathbf{z}) pz(z)映射到 y = f θ − 1 ( z ) \mathbf{y}=f_{\theta}^{-\mathbf{1}}(\mathbf{z}) y=fθ1(z),然后我们就可以使用负对数似然来进行优化。近期也有一个相似的工作[7],但是他们仅坐了2x放大而且没有对比一些基于GAN的最优方法。

Section 3 方法:SRFlow

我们将SR的任务看作是学习一个基于LR图像的,生成HR图像条件分布的任务。该方法旨在通过捕获自然图像Flow中可能存在的各种各样不同的SR图像,来解决超分任务这个病态的问题。为此,我们设计了条件归一化流架构。

3.1 Conditional Normalizing Flows for Super-Resolution

超分任务本质上就是一个通过添加高频特征来对低分辨率的 x \mathbf{x} x的分辨率进行放大预测,生成一个更高分辨率的 y \mathbf{y} y的过程。大多数的方法都是通过生成映射的方法 x ↦ y \mathbf{x} \mapsto \mathbf{y} xy,而我们则想通过捕获一个完全条件分布(full conditional distribution) p y ∣ x ( y ∣ x , θ ) p_{\mathbf{y} \mid \mathbf{x}}(\mathbf{y} \mid \mathbf{x}, \boldsymbol{\theta}) pyx(yx,θ)。相比直接生成一张SR图像,我们这个工作相对更复杂,因为在给定LR的时候我们的条件分布需要覆盖绝大多数的HR图像。我们的目标旨在通过一种纯数据驱动的方式(一堆的LR-HR训练数据对 ( x i , y i ) i = 1 M \left(\mathbf{x}_{i}, \mathbf{y}_{i}\right)_{i=1}^{M} (xi,yi)i=1M)对参数 θ \theta θ进行训练。

f θ f_{\theta} fθ实际上就是把HR-LR图像对映射为一个潜变量 z = f θ ( y ; x ) \mathbf{z}=f_{\boldsymbol{\theta}}(\mathbf{y} ; \mathbf{x}) z=fθ(y;x),当然我们要求这个函数必须是可逆的。也就是说,通过潜变量 z \mathbf{z} z总是可以通过 y = f θ − 1 ( z ; x ) \mathbf{y}=f_{\boldsymbol{\theta}}^{-1}(\mathbf{z} ; \mathbf{x}) y=fθ1(z;x)重建恢复为HR图像 y \mathbf{y} y。现在我们假设 z \mathbf{z} z中的一个简单的分布(比如高斯分布) p z ( z ) p_{\mathbf{z}}(\mathbf{z}) pz(z),且对应的条件分布根据前文已经定义为了 p y ∣ x ( y ∣ x , θ ) p_{\mathbf{y} \mid \mathbf{x}}(\mathbf{y} \mid \mathbf{x}, \boldsymbol{\theta}) pyx(yx,θ),那么这个条件分布就可以由样本 z ∼ p z \mathbf{z} \sim p_{\mathbf{z}} zpz的映射 y = f θ − 1 ( z ; x ) \mathbf{y}=f_{\boldsymbol{\theta}}^{-1}(\mathbf{z} ; \mathbf{x}) y=fθ1(z;x)隐式地被定义。

归一化流的关键在于概率密度 p y ∣ x p_{\mathbf{y} \mid \mathbf{x}} pyx是可以有下式明确地计算的:
p y ∣ x ( y ∣ x , θ ) = p z ( f θ ( y ; x ) ) ∣ det ⁡ ∂ f θ ∂ y ( y ; x ) ∣ p_{\mathbf{y} \mid \mathbf{x}}(\mathbf{y} \mid \mathbf{x}, \boldsymbol{\theta})=p_{\mathbf{z}}\left(f_{\boldsymbol{\theta}}(\mathbf{y} ; \mathbf{x})\right)\left|\operatorname{det} \frac{\partial f_{\boldsymbol{\theta}}}{\partial \mathbf{y}}(\mathbf{y} ; \mathbf{x})\right| pyx(yx,θ)=pz(fθ(y;x))detyfθ(y;x)
后面那个部分是雅可比行列式(这个地方就不细讲了,简单来说就是雅可比矩阵可以实现不同空间内的映射,雅可比行列式则是两个映射空间的体积、面积的比例;另一个关键点在于一个函数的雅可比矩阵的逆矩阵就是这个函数的反函数的雅可比矩阵<????有点绕哈哈哈哈…>)。有了这个式子我们就可以用负对数似然来进行优化了:
L ( θ ; x , y ) = − log ⁡ p y ∣ x ( y ∣ x , θ ) = − log ⁡ p z ( f θ ( y ; x ) ) − log ⁡ ∣ det ⁡ ∂ f θ ∂ y ( y ; x ) ∣ \mathcal{L}(\boldsymbol{\theta} ; \mathbf{x}, \mathbf{y})=-\log p_{\mathbf{y} \mid \mathbf{x}}(\mathbf{y} \mid \mathbf{x}, \boldsymbol{\theta})=-\log p_{\mathbf{z}}\left(f_{\boldsymbol{\theta}}(\mathbf{y} ; \mathbf{x})\right)-\log \left|\operatorname{det} \frac{\partial f_{\boldsymbol{\theta}}}{\partial \mathbf{y}}(\mathbf{y} ; \mathbf{x})\right| L(θ;x,y)=logpyx(yx,θ)=logpz(fθ(y;x))logdetyfθ(y;x)
通过把随机生成的潜变量 z ∼ p z \mathbf{z} \sim p_{\mathbf{z}} zpz输入到逆网络 y = f θ − 1 ( z i x ) \mathbf{y}=f_{\boldsymbol{\theta}}^{-1}\left(\mathbf{z}_{i} \mathbf{x}\right) y=fθ1(zix)中去就可以从学习到的分布 p y ∣ x ( y ∣ x , θ ) p_{\mathbf{y} \mid \mathbf{x}}(\mathbf{y} \mid \mathbf{x}, \boldsymbol{\theta}) pyx(yx,θ)恢复生成出HR图像 y \mathbf{y} y

为了将雅可比行列式换一种更易于表达的表现形式,我们可以将 f θ f_{\theta} fθ分解为一串的N个可逆的层 h n + 1 = f θ n ( h n ; g θ ( x ) ) \mathbf{h}^{n+1} = f_{\theta}^{n}\left(\mathbf{h}^{n} ; g_{\boldsymbol{\theta}}(\mathbf{x})\right) hn+1=fθn(hn;gθ(x)),这个串儿的头是 h 0 = y \mathbf{h}^0=\mathbf{y} h0=y尾巴是 h N = z \mathbf{h}^N=\mathbf{z} hN=z。我们首先搞一个深度卷积网络 g θ ( x ) g_{\boldsymbol{\theta}}(\mathbf{x}) gθ(x),然后把输入的LR图像送进去进行编码,提取丰富的特征表达。应用链式法则以及行列式的一些性质,最终NLL的优化函数就变成了如下式:
L ( θ ; x , y ) = − log ⁡ p z ( z ) − ∑ n = 0 N − 1 log ⁡ ∣ det ⁡ ∂ f θ n ∂ h n ( h n ; g θ ( x ) ) ∣ \mathcal{L}(\boldsymbol{\theta} ; \mathbf{x}, \mathbf{y})=-\log p_{\mathbf{z}}(\mathbf{z})-\sum_{n=0}^{N-1} \log \left|\operatorname{det} \frac{\partial f_{\boldsymbol{\theta}}^{n}}{\partial \mathbf{h}^{n}}\left(\mathbf{h}^{n} ; g_{\boldsymbol{\theta}}(\mathbf{x})\right)\right| L(θ;x,y)=logpz(z)n=0N1logdethnfθn(hn;gθ(x))
接下来我们的任务就变成了去对每一个单独的flow层 f θ n f_{\mathbf{\theta}}^{n} fθn计算雅可比矩阵 ∂ f θ n ∂ h n \frac{\partial f_{\theta}^{n}}{\partial \mathbf{h}^{n}} hnfθn。总体来看,整个结构就如下图所示:
SRFlow 超分SOTA? PULSE的升级版....

3.2 Conditional Flow Layer

flow层的设计实际上还是很关键的,需要保证能够明确地可逆,并且能够明确地算出雅可比矩阵。本文的工作主要基于无条件的Glow[8]结构(OpenAI那个图像生成的东西),而Glow呢其实也是基于RealNVP。本文这里简单地做一些回顾以便更好地引入Affine Injector层。

Conditional Affine Coupling

仿射耦合(affine coupling)提供了一种简单而有效的构建flow层的策略,并且该策略是可逆的。它可以被简单的拓展为附带条件的形式:
h A n + 1 = h A n , h B n + 1 = e f θ , s n ( h A n ; u ) ⋅ h B n + f θ , b n ( h A n ; u ) \mathbf{h}_{A}^{n+1} = \mathbf{h}_{A}^{n}, \quad \mathbf{h}_{B}^{n+1}=e^{f_{\boldsymbol{\theta}, \mathbf{s}}^{n}\left(\mathbf{h}_{A}^{n} ; \mathbf{u}\right)} \cdot \mathbf{h}_{B}^{n}+f_{\boldsymbol{\theta}, \mathbf{b}}^{n}\left(\mathbf{h}_{A}^{n} ; \mathbf{u}\right) hAn+1=hAn,hBn+1=efθ,sn(hAn;u)hBn+fθ,bn(hAn;u)

在上式中 h n = ( h A n , h B n ) \mathbf{h}^{n}=\left(\mathbf{h}_{A}^{n}, \mathbf{h}_{B}^{n}\right) hn=(hAn,hBn)是一部分在通道维度上的特征图。此外, u \mathbf{u} u是一个条件变量,我们可以将它设置为编码后的输入LR,也就是KaTeX parse error: Got function '\)' with no arguments as argument to '\right' at position 44: …mathbf{x}\right\̲)̲。此外要注意的是 f θ , s n f_{\mathbf{\theta},s}^{n} fθ,sn f θ , b n f_{\mathbf{\theta},b}^{n} fθ,bn代表产生 h B n \mathbf{h}_{B}^{n} hBn的scaling和bias的任意一个神经网络。

这里加一段自言自语帮助理解下(可能不太正确,欢迎指正)
其实上面那个段间公式很模糊,其实本质上和[0.1]中的分层耦合章节给定的公式7是一致的
KaTeX parse error: Got function '\(' with no arguments as argument to '\left' at position 75: …\mathbf{m}\left\̲(̲\mathbf{x}_1\ri…
只不过这里的第二行的式子从加性耦合改成了加性耦合与乘性耦合的结合=>仿射耦合
h 1 = x 1 , h 2 = s ( x 1 ) ⊗ x 2 + t ( x 1 ) \begin{array}{l} \boldsymbol{h}_{1}=\boldsymbol{x}_{1}, \boldsymbol{h}_{2}=\boldsymbol{s}\left(\boldsymbol{x}_{1}\right) \otimes \boldsymbol{x}_{2}+\boldsymbol{t}\left(\boldsymbol{x}_{1}\right) \end{array} h1=x1h2=s(x1)x2+t(x1)
这俩货分别在NICE和RealNVP中有一定的介绍。
那么这么来看,我们可以很明确的得出雅可比矩阵:
[ ∂ h ∂ x ] = ( I d O [ ∂ s ∂ x 1 ⊗ x 2 + ∂ t ∂ x 1 ] s ) \left[\frac{\partial \boldsymbol{h}}{\partial \boldsymbol{x}}\right]=\left(\begin{array}{cc} \mathbb{I}_{d} & \mathbb{O} \\\\ {\left[\frac{\partial \boldsymbol{s}}{\partial \boldsymbol{x}_{1}} \otimes \boldsymbol{x}_{2}+\frac{\partial t}{\partial \boldsymbol{x}_{1}}\right]} & \boldsymbol{s} \end{array}\right) [xh]=Id[x1sx2+x1t]Os
可以看出这个雅可比矩阵的行列式是一个明确的三角阵,行列式的值巨好求,结果就等于 s \mathbf{s} s的个元素乘积(既然行列式的值在空间上又代表了体积,所以代表着体积是由变化的–对应加性变换中体积恒为1)。
但是前面我们提到雅可比矩阵要求是可逆的,那么就可以做一些宽泛的约束比如令 s \mathbf{s} s的各个元素的值都大于0。

回到文中式子,为了简化计算,使用自然对数将乘积转换为求和。

Invertible 1 × 1 Convolution

一般的卷积通常无法反转,但是有文献展示了使用1 × 1的卷积 h i j n + 1 = W h i j n \mathbf{h}_{i j}^{n+1}=W \mathbf{h}_{i j}^{n} hijn+1=Whijn,既然我们要进行置换矩阵的通道(那就自然引入了一个置换矩阵),也就自然而言的想到,那这里为什么不使用一个带参数的卷积来替代呢(这里由一个计算上的trick,利用三角分解来简化计算具体可看[0.3])。

Actnorm

通过一个学到的的scaling和bias,提供了一个channel-wise的标准化方法。

Squeeze

在跨越网络的各个深度层次,通过对不同尺度的**层的处理来捕获相关信息和结构信息是很重要。Squeeze通过将2x2的一个四元素的小邻域拆分成四个**层来实现可逆下采样(这就很像是超分的sub-pixel)。

Affine Injector

为了实现从低分辨率的图像编码 u = g θ ( x ) \mathbf{u}=g_\mathbf{\theta}\left(\mathbf{x}\right) u=gθ(x)到flow分支上能有更直接的特征信息传递,本文引入了一个额外的Affine Injector(仿射变换注入层)。与传统的比,加入了Affine Injector能仅通过调整编码 u \mathbf{u} u,就可以直接影响到通道和空间位置的变换。(这里讲到文章的整体结构,可以看一下上面整个的流程图,一共有 l ∈ { 1 , … , L } l \in\{1, \ldots, L\} l{1,,L}层,每一层有 K K K个flow-steps, f θ f_\theta fθ g θ g_\theta gθ分别代表了可逆的flow网络和LR编码网络)

Flow-step

我们的网络结构中每一个flow-step都包含四个不同的层。如果第一层是Actnorm那么后面会紧跟一个1 x 1的卷积,然后再放两个条件层。如果第一层是Affine Injector,那么后面紧跟的就是条件Affine Coupling。

Level transitions

每一层都首先弄一个squeeze操作减半分辨率,但是我们注意到这个操作会导致重建的图像会存在棋盘伪影,因为squeeze本质上就是基于一个pixel重排。为了能更好的让特征信息再层间传递,我们尝试再钱买你几个flow-steps中挪掉了squeeze后的条件层,这使得网络可以从周围的像素中学到一些可逆线性的插值信息。与[8]相似,我们在下一个squeeze层前,将通道数55开了一下。因此,我们的潜变量 ( z l ) l = 1 L \left(z_{l}\right)_{l=1}^{L} (zl)l=1L能够更好的对不同分辨率的图像信息进行建模。

【未完待续,2020国庆结束前写完…】

Reference

[0.1] https://www.sohu.com/a/246846378_500659
[0.2] https://zhuanlan.zhihu.com/p/55557709
[0.3] https://kexue.fm/archives/5807
[1] Bahat, Y., Michaeli, T.: Explorable super resolution. In: CVPR (2020)
[2] B¨uhler, M.C., Romero, A., Timofte, R.: Deepsee: Deep disentangled semantic explorative extreme super-resolution. arXiv preprint arXiv:2004.04433 (2020)
[3] Menon, S., Damian, A., Hu, S., Ravi, N., Rudin, C.: Pulse: Self-supervised photo
upsampling via latent space exploration of generative models. In: CVPR (2020)
[4] Bell-Kligler, S., Shocher, A., Irani, M.: Blind superresolution kernel estimation using an internal-gan. In: NeurIPS. pp. 284–293 (2019), http://papers.nips.cc/paper/8321-blind-super-resolution-kernel-estimation-using-an-internal-gan
[5] . Shaham, T.R., Dekel, T., Michaeli, T.: Singan: Learning a generative model from a single natural image. In: ICCV. pp. 4570–4580 (2019)
[6] Shocher, A., Cohen, N., Irani, M.: Zero-shot super-resolution using deep internal learning. In: CVPR (2018)
[7] Winkler, C., Worrall, D.E., Hoogeboom, E., Welling, M.: Learning likelihoods with conditional normalizing flows. arxiv abs/1912.00042 (2019), http://arxiv.org/abs/1912.00042
[8] Kingma, D.P., Dhariwal, P.: Glow: Generative flow with invertible 1x1 convolutions. In: Advances in Neural Information Processing Systems 31: Annual Conference on Neural Information Processing Systems 2018, NeurIPS 2018, 3-8 December 2018, Montr´eal, Canada. pp. 10236–10245 (2018)
[9]