[pdf][supp][arXiv][code]

Question

单看简介,这篇论文因该是侧重于简化网络,使用更快更高效的网络获得最先进的性能。

Contribution

化简网络可以从三个方面出发。第一,自行设计或者使用简化算法设计对任务针对性的最佳网络架构;第二,设计最优的损失函数,充分利用网络性能;第三,使用更大数量、更高质量的数据。

目前大部分关于SR的文献涉及第一点,第三点过于简单,而且大都做的很好,所以该论文提出的是关于第二点的解。考虑到高频信息在超分中的重要性,设计了一个在傅里叶域中重建的监督损失,此外,还提出了一个直接在傅里叶域中工作的判别器

Method

architecture

框架大致如此,由xx生成的y^=G(x)\hat y=G(x),以及ground truth yy,在空间域中计算loss,然后都变换到傅里叶域中,再计算loss

其中生成器是一个基于IMDN 网络的轻量模型

新设计的作用在傅里叶域上的判别器结构如下

考虑到傅里叶域的特点,作用在局部的卷积层不太适合这个判别器,所以全部使用了全连接层

loss

loss是这个论文的主要部分,除GAN loss和常用的L1 loss、VGG loss,增加了直接在傅里叶域中使用的傅里叶loss,新设计了一个在傅里叶域中使用的判别器,所以增加了一个傅里叶域中的GAN loss

Supervision Losses

常用的L1 loss和VGG loss如下

LL1=1HWh=0H1w=0W1y^h,wyh,w\mathcal L_{L1}=\frac{1}{HW}\sum_{h=0}^{H-1}\sum_{w=0}^{W-1}|\hat y_{h,w}-y_{h,w}|

LVGG=1IJCi=0I1j=0J1c=0C1Nvgg54(y^)i,j,cNvgg54(y)i,j,c\mathcal L_{VGG}=\frac{1}{IJC}\sum_{i=0}^{I-1}\sum_{j=0}^{J-1}\sum_{c=0}^{C-1}|N_{vgg}^{54}(\hat y)_{i,j,c}-N_{vgg}^{54}(y)_{i,j,c}|

新增加的傅里叶loss其实就是先对yyy^\hat y进行傅里叶变换,然后分别对相位和振幅作L1 loss,公式如下

首先是傅里叶变换

F{x}u,v=Xu,v=1HWh=0H1w=0W1xh,wei2π(uhH+vwW)\mathcal F\{x\}_{u,v}=X_{u,v}=\frac{1}{\sqrt{HW}}\sum_{h=0}^{H-1}\sum_{w=0}^{W-1}x_{h,w}e^{-i2\pi(u\frac{h}{H}+v\frac{w}{W})}

R\mathcal RL\mathcal L分别代表傅里叶域中的实数与虚数部分,则其振幅与相位信息分别表示为

F{x}u,v=Xu,v=R{Xu,v}2+L{Xu,v}2|\mathcal F\{x\}_{u,v}|=|X_{u,v}|=\sqrt{\mathcal R\{X_{u,v}\}^2+\mathcal L\{X_{u,v}\}^2}

F{x}u,v=Xu,v=atan2(L{Xu,v},R{Xu,v})\angle \mathcal F\{x\}_{u,v}=\angle X_{u,v}=atan2(\mathcal L\{X_{u,v}\},\mathcal R\{X_{u,v}\})

因为实数傅里叶变换结果是对称的,所以只需要保留一半的结果,然后将实数部分与虚数部分分开,最终的参数量和变换前是保持一致的

经过上述变换后计算L1 loss

LF,=2UVu=0U/21v=0V1Y^u,vYu,v\mathcal L_{\mathcal F,|\cdot|}=\frac{2}{UV}\sum_{u=0}^{U/2-1}\sum_{v=0}^{V-1}\left \vert |\hat Y|_{u,v}-|Y|_{u,v} \right \vert

LF,=2UVu=0U/21v=0V1Y^u,vYu,v\mathcal L_{\mathcal F,\angle}=\frac{2}{UV}\sum_{u=0}^{U/2-1}\sum_{v=0}^{V-1}\left \vert \angle\hat Y_{u,v}-\angle Y_{u,v} \right \vert

然后计算平均值即为傅里叶loss

LF=12LF,+12LF,\mathcal L_{\mathcal F}=\frac{1}{2}\mathcal L_{\mathcal F,|\cdot|}+\frac{1}{2}\mathcal L_{\mathcal F,\angle}

GAN Losses

DD是判别器,BB是Tensor的第1维,判别器的输出是一个长度为BB的向量,公式如下

sρ=D(y),sϕ=D(y^)=D(G(x))s_{\rho}=D(y),s_{\phi}=D(\hat y)=D(G(x))

sˉρ=1BbBsρ(b),sˉϕ=1BbBsϕ(b)\bar s_{\rho}=\frac{1}{B}\sum_{b}^{B}s_{\rho}(b),\bar s_{\phi}=\frac{1}{B}\sum_{b}^{B}s_{\phi}(b)

ρ=D(y)sˉρ,ϕ=D(y)sˉϕ\rho=D(y)-\bar s_{\rho},\phi=D(y)-\bar s_{\phi}

LGANG=12Ex,y[log(σ(ϕ))+log(1σ(ρ))]\mathcal L_{GAN}^{G}=-\frac{1}{2} \mathbb E_{x,y}[\log(\sigma(\phi))+\log(1-\sigma(\rho))]

LGAND=12Ex,y[log(σ(ρ))+log(1σ(ϕ))]\mathcal L_{GAN}^{D}=-\frac{1}{2} \mathbb E_{x,y}[\log(\sigma(\rho))+\log(1-\sigma(\phi))]

Training Setup

GAN的loss以判别器的不同分别计算,最终的loss如下

minGα(LGANG,S+LGANG,F2)+β(LL1+LF2)+γLVGG\min_{G} \alpha \left ( \frac{\mathcal L_{GAN}^{G,\mathcal S}+\mathcal L_{GAN}^{G,\mathcal F}}{2} \right ) +\beta \left ( \frac{\mathcal L_{L1}+\mathcal L_{\mathcal F}}{2} \right) +\gamma\mathcal L_{VGG}

minDα(LGAND,S+LGAND,F2)\min_{D}\alpha\left ( \frac{\mathcal L_{GAN}^{D,\mathcal S}+\mathcal L_{GAN}^{D,\mathcal F}}{2} \right)

Results

Ablation

消融实验结果,做出以下几点总结

  • 1,2对比说明傅里叶loss的重建效果不如L1 loss,但感知效果比L1 loss更好
  • 4,5对比说明在频域中的loss比空间域中的loss效果要好,但分布相似性会略微下降
  • 5,7对比说明频域中的loss加上L1 loss后,不会使效果好太多,甚至分布相似性会进一步下降
  • 4,6对比说明傅里叶loss会使各项分数都更好,这点与1,3对比结果一致
  • 6,8对比说明频域的GAN loss也会使各项分数更好
  • 6,7,8对比说明频域GAN loss对重建效果有正向作用,而空间域的GAN loss反而会拖后腿,但两者都对感知效果和分布相似性有正向作用
  • 9,10对比说明对ESRGAN,新加的两个loss也有和IMDN同样的正向作用

Comparison with State-of-the-art

可以看出我们的最终模型更快更轻量,相比更复杂的模型效果接近,说明我们的模型效率更高

上表为在Urban100数据集上的测试,说明新的loss在其它数据集上依旧有效

Think

对于直接在频域中作L1 loss这个思路我之前也想到过,原本觉得跟空间域没有不同,但是经过仔细考量,发现两者在收敛方向上应该是不一样的,所以还是有所不同

但是当时思路专注于图像编辑,没有往超分这方面想,后来就忘记了。而可以用于超分的原因应该是在图像降低分辨率后,缺失的部分应该是图像的高频部分,而在频域中作L1 loss会使模型直接学习缺失的高频信息,所以效果更好。仔细想想之前做完那个去掉傅里叶域高频部分的实验好像想到了这一点,但是还是觉得这种思路太简单了,就没有太重视

总结一下,傅里叶变换的作用大致有两种,一是分离高频低频信息,然后分别使用,二是减少参数量,节省运行时间,提高效率,可以从这些方面入手考虑有没有其它适合使用的地方,或者思考有没有新的用处