Introduction

超分是一个在 low level CV 领域中经典的病态问题,比如增强图像视觉质量、改善其他 high level 视觉任务的表现。Zhang Kai 老师这篇文章在我看到的超分文章里面是比较惊艳我的一篇,首先他指出基于学习(learning-based)的方法表现出高效,且比传统方法更有效的特点。可是比起基于模型(model-based)的方法可以通过统一的最大后验框架来解决不同的 scale factors、blur kernels 和 noise levels 的问题,基于学习的方法看起来反而有些缺乏灵活性了。而文章提出了一种可以端到端的可训练的迭代模型,针对基于模型和基于学习的方法搭起了桥梁。

Unfolding optimization

根据最大后验(MAP)框架,HR 图像可以通过最小化以下能量函数得到:

\[E(x)=\frac{1}{2\sigma^2}\lVert y-(x \otimes k)\downarrow_s \rVert^2 + \lambda \Phi(x)
\]

式中前面一项可以看作基于模型方法来进行超分,文章中称之为数据项。后面一项也称为先验项,可以理解为图片中的一些噪声。为了使其能够不断迭代,文章中使用了半二方分裂法(HQS),原因有二:简洁性和快速收敛。HQS 常常解决上式优化问题引入辅助变量 z:

\[E_{\mu}(x)=\frac{1}{2\sigma^2}\lVert y-(z \otimes k)\downarrow_s \rVert^2 + \lambda \Phi(x) + \frac{\mu}{2}\lVert z-x \rVert^2
\]

其中 \(\mu\) 可以看作惩罚参数,上式可以不断迭代循环求解子问题来得到 x 和 z:

\[\begin{cases}
z_k &= \mathrm{argmin}_z \lVert y-(z \otimes k)\downarrow_s \rVert^2 + \mu \sigma^2 \lVert z-x_{k-1} \rVert^2 \tag{#}\\
x_k &= \mathrm{argmin}_x \frac{\mu}{2} \lVert z_k - x \rVert^2 + \lambda \Phi(x)
\end{cases}
\]

显然第一式的 \(\mu\) 应该足够大,可以理解为 \(\lVert z-x_{k-1} \rVert\) 的权重,权重越大时,z 和 x 才会越接近。显然之前提到的数据项和先验项分别由上面二式进行求得。对于第一式,文中在圆周边界条件下卷积可以被求解的情况下使用了 FFT,根据论文Fast single image super-resolution using a new analytical solution for ℓ2-ℓ2 problems 该式有封闭形式的解:

\[z_k = \mathcal{F}^{-1}\bigg(\frac{1}{\alpha_k}\Big(d-\overline{\mathcal{F}(k)} \odot_{s} \frac{(\mathcal{F}(k)d)\Downarrow_s}{(\overline{\mathcal{F}(k)}\mathcal{F}(k))\Downarrow_s+\alpha_k}\Big)\bigg)
\]

其中 \(d = \overline{\mathcal{F}(k)}\mathcal{F}(y \uparrow_s) + \alpha_k \mathcal{F}(x_{k-1}),\alpha_k \triangleq \mu_k \sigma^2\),当上式的 \(s=1\) 时,相当于完全针对的 deblurring 问题。对于 # 式中的第二式实际上是一个噪声水平为 \(\beta_k \triangleq \sqrt{\lambda / \mu_k}\) 的去噪问题。

Deep unfolding network

如上图所示,Unfolding SuperResolution Network(USRNet) 主要的输入为低分辨率图 \(y\),模糊核 \(k\),噪声水平 \(\sigma\),以及图像缩放比例 \(s\)。整个模型还有三个模块 \(\mathcal{D}\)、\(\mathcal{P}\) 以及 \(\mathcal{H}\),分别的功能是进行基于模型的超分、基于学习的去噪以及超参数的预测。整个流程为:

将预设的噪声水平 \(\sigma\) 与缩放倍数 \(s\) 作为 \(H\) module 的输入,对超参数 \(\alpha\) 和 \(beta\) 进行预测;

将 \(y\) 使用简单的上采样到最后的输出 \(x_{last}\) 一样的尺寸,作为迭代最初始的输入 \(x_0\),最后将 \(x_0,s,k,y,\alpha\) 作为 \(\mathcal{D}\) module 的输入。得到 \(z\) 一次迭代的解;

将 \(\mathcal{D}\) module 得到的解以及预测的超参数 \(beta\) 作为输入送入 \(\mathcal{P}\) module 得到一次迭代的 \(x\);

最后将得到的 \(x\) 送入下一轮迭代。

Data module \(\mathcal{H}\)

\(\mathcal{H}\) 模块其实就是将预设的噪声水平和需要超分的倍数作为输入,其实现是深度学习的方式,使用简单的几层网络实现,并预测接下来每一次迭代需要的超参数 \(\alpha_1, \alpha_2, \ldots\),\(\beta_1, \beta_2, \ldots\)。

Data module \(\mathcal{D}\)

\(\mathcal{D}\) 模块被称之为数据模块,它的作用实际上是用来实现 (#) 式的第一式的。其实它就是一张图片在一次迭代中的超分后的解析解。式中的前面一项是使用基于模型的方法对图像进行超分辨的重建,这种基于模型的方法可以对任意 scale、任意模糊核进行超分辨重建,后面一项可以看作正则化项,用于 x 与 z 进行逼近。

Prior module \(\mathcal{P}\)

\(\mathcal{P}\) 模块被称之为先验模块,也就是 (#) 式的第二式。常常这一式被看作去噪的过程,因为噪声可以用先验知识预设,因而被称之为先验项。文章采用基于学习(也就是深度学习)的方法来进行求解得到去噪后的图像 \(x\)。文章使用的结构叫做 ResUNet,顾名思义是将 residual blocks 整合进入了 U-Net,网络结构比较简单,具体可以查看代码

关于训练

USRNet 关于训练数据的制作,使用随机的高斯核与运动模糊核来作为卷积的模糊核,再经过下采样并添加不同水平的白噪声来制作每张 HR 的 LR,并且每个 batch 从 \(s={1,2,3,4}\) 中选择一个作为下采样的倍数,并且也作为模型关于这个 batch 进行超分 scale 的输入。这样一来使得 USRNet 可以对任意 scale、任意模糊核的情况具有较强的泛化性。

关于 USRNet 的泛化性

虽然 USRNet 是在模糊核为 \(25*25\) 的情况下进行训练的,然而再测试超分 \(67*67\),\(70*70\) 时,也表现出不错的效果。

一些总结

ZhangKai 这篇文章使用了 HQS 来把优化问题分裂为可迭代的两个子问题,使得基于模型核基于学习进行结合成为了可能。基于模型超分让 USRNet 更加灵活,可以针对不同的模糊核与上采样尺寸的情况进行超分,而基于学习去噪可以不用预定义去噪器,可以尽可能去拟合各种可能情况的噪声。

但是我认为其任有改进的地方:

进行实际应用的时候,需要对每张图片指定模糊核,然而这个模糊核的选定是否符合真实情况比较影响后面超分的效果。因此,是否考虑进行设计一个对 kernel 进行预测的网络

每张图需要指定噪声水平,这一点也没有做到自适应

代码位置

Deep Unfolding Network for Image Super-Resolution 论文解读的更多相关文章

  1. Fauce:Fast and Accurate Deep Ensembles with Uncertainty for Cardinality Estimation 论文解读(VLDB 2021)

    Fauce:Fast and Accurate Deep Ensembles with Uncertainty for Cardinality Estimation 论文解读(VLDB 2021) 本 ...

  2. ASRWGAN: Wasserstein Generative Adversarial Network for Audio Super Resolution

    ASEGAN:WGAN音频超分辨率 这篇文章并不具有权威性,因为没有发表,说不定是外国的某个大学的毕业设计,或者课程结束后的作业.或者实验报告. CS230: Deep Learning, Sprin ...

  3. 点云配准的端到端深度神经网络:ICCV2019论文解读

    点云配准的端到端深度神经网络:ICCV2019论文解读 DeepVCP: An End-to-End Deep Neural Network for Point Cloud Registration ...

  4. Speech Super Resolution Generative Adversarial Network

    博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never/p/10874993.html 论文作者:Sefik Emre Eskimez , Kazuhito K ...

  5. 【论文笔记】Malware Detection with Deep Neural Network Using Process Behavior

    [论文笔记]Malware Detection with Deep Neural Network Using Process Behavior 论文基本信息 会议: IEEE(2016 IEEE 40 ...

  6. 论文阅读(XiangBai——【AAAI2017】TextBoxes_A Fast Text Detector with a Single Deep Neural Network)

    XiangBai——[AAAI2017]TextBoxes:A Fast Text Detector with a Single Deep Neural Network 目录 作者和相关链接 方法概括 ...

  7. 【论文笔记】Leveraging Datasets with Varying Annotations for Face Alignment via Deep Regression Network

    參考文献: Zhang J, Kan M, Shan S, et al. Leveraging Datasets With Varying Annotations for Face Alignment ...

  8. 论文笔记——A Deep Neural Network Compression Pipeline: Pruning, Quantization, Huffman Encoding

    论文<A Deep Neural Network Compression Pipeline: Pruning, Quantization, Huffman Encoding> Prunin ...

  9. Deep Learning 28:读论文“Multi Column Deep Neural Network for Traffic Sign Classification”-------MCDNN 简单理解

    读这篇论文“ Multi Column Deep Neural Network for Traffic Sign Classification”是为了更加理解,论文“Multi-column Deep ...

随机推荐

  1. P1714 切蛋糕 dp+单调队列

    题意: 题目描述 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到 ...

  2. 基于CentOS-7的redis下载和安装

    1.下载和安装 在我安装的虚拟机中,我把所有自己安装的软件都放在了/ph/install 目录下,具体以自己实际情况为准. [root@localhost ~]$ cd /ph/install #进入 ...

  3. CF1462-D. Add to Neighbour and Remove

    codeforces1462D 题意: 给出一个由n个数组成的数组,现在你可以对这个数组进行如下操作:将数组中的一个元素加到这个元素的两边中的一边,然后将这个元素删掉.若该元素在最左边,那么该元素不能 ...

  4. Explain 索引优化分析

    Explain 语法 # 语法 explain + DQL语句 mysql> explain select * from city where countrycode ='CHN' or cou ...

  5. VRRP(Virtual Router Redundancy Protocol) 虚拟路由器冗余协议简介

    因工作中使用Keepalived配置Nginx代理和MySQL代理的高可用,而Keepalived是VRRP协议在linux上的软件实现.因此了解了下VRRP的基础. 1. VRRP技术的引入 随着I ...

  6. 并发编程之java内存模型(Java Memory Model ,JMM)

    一.图例 0.两个概念 Heap(堆):运行时的数据区,由垃圾回收负责,运行时分配内存(所以慢),对象存放在堆上 如果两个线程,同时调用同一个变量,怎两个线程都拥有,该对象的私有拷贝 (可以看一下,T ...

  7. 爬虫入门六 总结 资料 与Scrapy实例-bibibili番剧信息

    title: 爬虫入门六 总结 资料 与Scrapy实例-bibibili番剧信息 date: 2020-03-16 20:00:00 categories: python tags: crawler ...

  8. Leetcode(885)- 救生艇

    第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit. 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit. 返回载到每一个人所需的最小船数.(保证每个人都 ...

  9. 前端接收后端文件流导出excel文档遇到的问题

    先上代码: Vue.prototype.download = function(oUrl, filename) { this.axios .get(oUrl, { responseType: 'arr ...

  10. range()函数的使用、while循环、for-in循环等

    一.range()函数 用于直接生成一个整数序列 创建range对象的三种方式: (1)range(stop)    创建一个(0,stop)之间的整数序列,步长为1 (2)range(start,s ...