CVPR2020原论文:Closed-loop Matters: Dual Regression Networks forSingle Image Super-Resolution
开源代码(pytorch框架):https://github.com/guoyongcs/DRN
1.问题
1)低分辨率图像(Low Resulotion)经过非线性映射成高分辨率图像(High Resulotion)本身是个病态问题。因为高分辨率的图像可以任意采样成低分辨率图像,所以其反向变换的非线性映射函数的解空间是非常大的。在这样大的解空间中找到合适的非线性映射函数是十分困难的。
2)真实世界无法得到成对的低分辨图像(LR)和高分辨率图像(HR)时,模型的训练变得十分困难。因此处理真实世界图像没有很好的泛化能力。
2.主要工作
1)提出了双重回归的方案。引入一个额外的限制性条件(即,如果LR到HR的映射是最优的,则HR经过降采样能够得到LR),以重建低分辨率图像去增强超分辨率模型,形成闭环映射,减小了映射函数解空间。并为这种方案在处理超分辨率图像问题上提供了必要性和可行性的理论支持。
2)由于双重回归的方案,重建LR与HR无关(即Dual Regression Task回归过程不涉及到高分辨y图像)。得到的模型处理真实世界的图像具有泛化能力。
双重回归方案图:
先是LR到HR的映射,计算HR的loss,然后再是HR到LR的映射,计算LR的loss。如此形成闭环双重回归。
3.模型训练
该方法同时采用真实世界的单LR图像和成对(LR,HR)人工合成图像两种数据集。
定义:低分辨图像为x,高分辨率图像HR为y(相当于ground truth)。
定义:Primal Regression Task映射回归过程为P(…)。
定义:Dual Regresion Task映射回归过程为D(…)。
则训练的损失函数为:
Primal Regression loss:计算回归映射输出P(x)与高分辨率图像y的L1损失。
Dual Regresion loss:计算重建的LR与初始低分辨率图像x的L1损失。
总损失为两者之和,其中λ为权重,i表示第i对(LR,HR)图像。
算法主要流程:
注意:这里运用的是真实世界单LR图像 和成对(LR,HR)合成图像两种数据集。训练过程中,若图像取自单LR图像,则Indicator function:Lsp(…)为0,此时只计算Dual Regresion loss。若图像取自成对(LR,HR)合成图像,则Indicator function:Lsp(…)为1,此时同时计算Primal Regression loss和Dual Regresion loss。
4.模型主体结构:
该网络基于U-NET结构。主要分为两部分:a.低分辨率到高分辨率的pimal net。b.高分辨率到低分辨率的dual net(红线部分)。
primal net :和U-NET主体结构相似,左边为下采样模块,右边为上采样模块。下采样模块数和上采样模块数相同。但不同的是,上采样利用了B residual channel attention block(RCAB)来增大模型的容量。
采用了多输出的方式来训练模型,即每进行一次上采样就输出图像去计算loss来训练模型。例如,第一次上采样输出1×image,第二次上采样输出2×image,第三次上采样输出4×image。
还利用了跳跃残差连接,将低层特征和深层特征进行融合(图中虚线)。
dual net(上图红线部分): 该部分主要是模拟降采样操作,用高分辨率图像产生低分辨率图像。结构比primal net简单多了。由两层Conv和 LeakyReLU激活层组成。计算量远远小于primal net部分。