深度学习在图像超分辨率重建中的应用

2023-05-16

同步更新于知乎:https://zhuanlan.zhihu.com/p/25532538

超分辨率技术(Super-Resolution)是指从观测到的低分辨率图像重建出相应的高分辨率图像,在监控设备、卫星图像和医学影像等领域都有重要的应用价值。SR可分为两类:从多张低分辨率图像重建出高分辨率图像和从单张低分辨率图像重建出高分辨率图像。基于深度学习的SR,主要是基于单张低分辨率的重建方法,即Single Image Super-Resolution (SISR)。

SISR是一个逆问题,对于一个低分辨率图像,可能存在许多不同的高分辨率图像与之对应,因此通常在求解高分辨率图像时会加一个先验信息进行规范化约束。在传统的方法中,这个先验信息可以通过若干成对出现的低-高分辨率图像的实例中学到。而基于深度学习的SR通过神经网络直接学习分辨率图像到高分辨率图像的端到端的映射函数。

本文介绍几个较新的基于深度学习的SR方法,包括SRCNN,DRCN, ESPCN,VESPCN和SRGAN等。

1, SRCNN

Super-Resolution Convolutional Neural Network (SRCNN, PAMI 2016, 代码)是较早地提出的做SR的卷积神经网络。该网络结构十分简单,仅仅用了三个卷积层。

这里写图片描述

该方法对于一个低分辨率图像,先使用双三次(bicubic)插值将其放大到目标大小,再通过三层卷积网络做非线性映射,得到的结果作为高分辨率图像输出。作者将三层卷积的结构解释成与传统SR方法对应的三个步骤:图像块的提取和特征表示,特征非线性映射和最终的重建。

三个卷积层使用的卷积核的大小分为为9x9, 1x1和5x5,前两个的输出特征个数分别为64和32. 该文章分别用Timofte数据集(包含91幅图像)和ImageNet大数据集进行训练。相比于双三次插值和传统的稀疏编码方法,SRCNN得到的高分辨率图像更加清晰,下图是一个放大倍数为3的例子。

这里写图片描述

对SR的质量进行定量评价常用的两个指标是PSNR(Peak Signal-to-Noise Ratio)和SSIM(Structure Similarity Index)。这两个值越高代表重建结果的像素值和金标准越接近,下图表明,在不同的放大倍数下,SRCNN都取得比传统方法好的效果。

这里写图片描述

2, DRCN

SRCNN的层数较少,同时感受野也较小(13x13)。DRCN (Deeply-Recursive Convolutional Network for Image Super-Resolution, CVPR 2016, 代码)提出使用更多的卷积层增加网络感受野(41x41),同时为了避免过多网络参数,该文章提出使用递归神经网络(RNN)。网络的基本结构如下:

这里写图片描述

与SRCNN类似,该网络分为三个模块,第一个是Embedding network,相当于特征提取,第二个是Inference network, 相当于特征的非线性变换,第三个是Reconstruction network,即从特征图像得到最后的重建结果。其中的Inference network是一个递归网络,即数据循环地通过该层多次。将这个循环进行展开,就等效于使用同一组参数的多个串联的卷积层,如下图所示:

这里写图片描述

其中的 H1 HD D 个共享参数的卷积层。DRCN将每一层的卷积结果都通过同一个Reconstruction Net得到一个重建结果,从而共得到D个重建结果,再把它们加权平均得到最终的输出。另外,受到ResNet的启发,DRCN通过skip connection将输入图像与Hd的输出相加后再作为Reconstruction Net的输入,相当于使Inference Net去学习高分辨率图像与低分辨率图像的差,即恢复图像的高频部分。

实验部分,DRCN也使用了包含91张图像的Timofte数据集进行训练。得到的效果比SRCNN有了较大提高。

这里写图片描述

3, ESPCN

在SRCNN和DRCN中,低分辨率图像都是先通过上采样插值得到与高分辨率图像同样的大小,再作为网络输入,意味着卷积操作在较高的分辨率上进行,相比于在低分辨率的图像上计算卷积,会降低效率。 ESPCN(Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network,CVPR 2016, 代码)提出一种在低分辨率图像上直接计算卷积得到高分辨率图像的高效率方法。

这里写图片描述

ESPCN的核心概念是亚像素卷积层(sub-pixel convolutional layer)。如上图所示,网络的输入是原始低分辨率图像,通过两个卷积层以后,得到的特征图像大小与输入图像一样,但是特征通道为 r2 (r是图像的目标放大倍数)。将每个像素的 r2 个通道重新排列成一个r x r的区域,对应于高分辨率图像中的一个r x r大小的子块,从而大小为 r2 x H x W的特征图像被重新排列成1 x rH x rW大小的高分辨率图像。这个变换虽然被称作sub-pixel convolution, 但实际上并没有卷积操作。

通过使用sub-pixel convolution, 图像从低分辨率到高分辨率放大的过程,插值函数被隐含地包含在前面的卷积层中,可以自动学习到。只在最后一层对图像大小做变换,前面的卷积运算由于在低分辨率图像上进行,因此效率会较高。

这里写图片描述

重建效果上,用PSNR指标看来ESPCN比SRCNN要好一些。对于1080HD的视频图像,做放大四倍的高分辨率重建,SRCNN需要0.434s而ESPCN只需要0.029s。

这里写图片描述

4, VESPCN

在视频图像的SR问题中,相邻几帧具有很强的关联性,上述几种方法都只在单幅图像上进行处理,而VESPCN( Real-Time Video Super-Resolution with Spatio-Temporal Networks and Motion Compensation, arxiv 2016)提出使用视频中的时间序列图像进行高分辨率重建,并且能达到实时处理的效率要求。其方法示意图如下,主要包括三个方面:

这里写图片描述

一是纠正相邻帧的位移偏差,即先通过Motion estimation估计出位移,然后利用位移参数对相邻帧进行空间变换,将二者对齐。二是把对齐后的相邻若干帧叠放在一起,当做一个三维数据,在低分辨率的三维数据上使用三维卷积,得到的结果大小为 r2×H×W 。三是利用ESPCN的思想将该卷积结果重新排列得到大小为 1×rH×rW 的高分辨率图像。

Motion estimation这个过程可以通过传统的光流算法来计算,DeepMind 提出了一个Spatial Transformer Networks, 通过CNN来估计空间变换参数。VESPCN使用了这个方法,并且使用多尺度的Motion estimation:先在比输入图像低的分辨率上得到一个初始变换,再在与输入图像相同的分辨率上得到更精确的结果,如下图所示:
这里写图片描述

由于SR重建和相邻帧之间的位移估计都通过神经网路来实现,它们可以融合在一起进行端到端的联合训练。为此,VESPCN使用的损失函数如下:
这里写图片描述

第一项是衡量重建结果和金标准之间的差异,第二项是衡量相邻输入帧在空间对齐后的差异,第三项是平滑化空间位移场。下图展示了使用Motion Compensation 后,相邻帧之间对得很整齐,它们的差值图像几乎为0.

这里写图片描述

从下图可以看出,使用了Motion Compensation,重建出的高分辨率视频图像更加清晰。

这里写图片描述

5, SRGAN

SRGAN (Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network, arxiv, 21 Nov, 2016)将生成式对抗网络(GAN)用于SR问题。其出发点是传统的方法一般处理的是较小的放大倍数,当图像的放大倍数在4以上时,很容易使得到的结果显得过于平滑,而缺少一些细节上的真实感。因此SRGAN使用GAN来生成图像中的细节。

传统的方法使用的代价函数一般是最小均方差(MSE),即

这里写图片描述

该代价函数使重建结果有较高的信噪比,但是缺少了高频信息,出现过度平滑的纹理。SRGAN认为,应当使重建的高分辨率图像与真实的高分辨率图像无论是低层次的像素值上,还是高层次的抽象特征上,和整体概念和风格上,都应当接近。整体概念和风格如何来评估呢?可以使用一个判别器,判断一副高分辨率图像是由算法生成的还是真实的。如果一个判别器无法区分出来,那么由算法生成的图像就达到了以假乱真的效果。

因此,该文章将代价函数改进为

这里写图片描述

第一部分是基于内容的代价函数,第二部分是基于对抗学习的代价函数。基于内容的代价函数除了上述像素空间的最小均方差以外,又包含了一个基于特征空间的最小均方差,该特征是利用VGG网络提取的图像高层次特征:

这里写图片描述

对抗学习的代价函数是基于判别器输出的概率:

这里写图片描述

其中 DθD() 是一个图像属于真实的高分辨率图像的概率。 GθG(ILR) 是重建的高分辨率图像。SRGAN使用的生成式网络和判别式网络分别如下:

这里写图片描述

该方法的实验结果如下

这里写图片描述

从定量评价结果上来看,PSNR和SSIM这两个指标评价的是重建结果和金标准在像素值空间的差异。SRGAN得到的评价值不是最高。但是对于MOS(mean opinion score)的评价显示,SRGAN生成的高分辨率图像看起来更真实。

这里写图片描述

参考资料

1, Dong, Chao, et al. “Image super-resolution using deep convolutional networks.” IEEE transactions on pattern analysis and machine intelligence 38.2 (2016): 295-307.

2, Kim, Jiwon, Jung Kwon Lee, and Kyoung Mu Lee. “Deeply-recursive convolutional network for image super-resolution.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016.

3, Shi, Wenzhe, et al. “Real-time single image and video super-resolution using an efficient sub-pixel convolutional neural network.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016.

4, Caballero, Jose, et al. “Real-Time Video Super-Resolution with Spatio-Temporal Networks and Motion Compensation.” arXiv preprint arXiv:1611.05250 (2016).

5, Jaderberg, Max, Karen Simonyan, and Andrew Zisserman. “Spatial transformer networks.” Advances in Neural Information Processing Systems. 2015.

6, Ledig, Christian, et al. “Photo-realistic single image super-resolution using a generative adversarial network.” arXiv preprint arXiv:1609.04802 (2016).

7, 深度对抗学习在图像分割和超分辨率中的应用 - 知乎专栏

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习在图像超分辨率重建中的应用 的相关文章

  • java通用方法equals、hashcode的重写注意事项

    最近在读effictive java这本书 xff0c 看到关于java通用方法重写时的某些规则 xff0c 又想起项目中重写bean的equals方法 xff0c 仔细一想确实有很多不正确的地方 xff0c 所幸项目中的那个对象使用频率低
  • 正则表达式基础

    正则表达式其实算是单独的技术 xff0c 在各个语言中细微的区别 xff0c 但本质上是一致的 xff0c 都是用来描述和匹配符合某个规则的语法的字符串呗 当要验证符合某些规则 xff0c 例如邮件地址什么的 xff0c 使用起来就很方便
  • java并发、多线程知识点

    1 线程实现方法 即实现runnable接口或者继承thread类 xff0c 由于java是单继承机制 xff0c 所以一般采用实现runnable接口的方法 public class LiftOff implements Runnabl
  • 光的基础知识

    光子的产生 光子是电磁辐射的基本粒子 xff0c 它是由电场和磁场相互作用而产生的 当电场和磁场发生变化时 xff0c 它们会相互影响并产生能量 xff0c 这个能量以光子的形式释放出来 例如 xff0c 当电流通过导体时 xff0c 电子
  • Ubuntu 11.10 下ARM 用 TFTP Server 下载程序

    Update 2012 12 16 补充1 xff1a 不安转xinetd来搭建 sudo apt get install tftpd hpa tftp hpa 配置文件内容如下 xff1a cat etc default tftpd hp
  • WSL2+VSCODE+OPENCV

    在网上能找到WSL和VSCODE的配置方法 xff0c 能找到VSCODE和opencv的使用方法 xff0c 能找到WSL和opencv的配置方法 xff0c 但很少有wsl 43 vscode 43 opencv xff0c 但描述不清
  • Gradle开发环境配置

    最近公司有个外包项目需要接回来维护 xff0c 需要gradle才能跑起来 xff0c 之前一直用的是maven构建项目 xff0c 便摸索着将项目环境构建完成 xff1a 1 首先确定本地 Java 环境装好 xff0c 然后下载去官网下
  • 绕过nftables/PacketFilter防火墙过滤规则传输ICMP/ICMPv6数据包的漏洞详解(上)

    背景知识介绍 目前的防火墙总共分四类 xff1a 包过滤防火墙 xff1a 包过滤防火墙不检查数据区 xff0c 包过滤防火墙不建立连接状态表 xff0c 前后报文无关 xff0c 应用层控制很弱 应用网关防火墙 xff1a 不检查IP T
  • 使用集群中唯一一个MON恢复集群ceph-mon服务(记一次故障恢复)

    使用集群中唯一一个MON恢复集群ceph mon服务 记一次故障恢复 xff09 概述 当集群因为某些故障导致mon集群损坏 xff0c 或者多个mondb混乱 xff0c 此时ceph mon服务不可用 xff0c 既所有ceph命令会卡
  • virtualbox虚拟机的配置如何优化

    以下是一些可能有用的提示 xff0c 可帮助您优化VirtualBox虚拟机的性能和配置 xff1a 分配足够的内存和处理器资源 xff1a 在配置虚拟机时 xff0c 确保为虚拟机分配足够的内存和处理器资源 xff0c 这将有助于提高虚拟
  • 【单片机】【笔记】定时器初值的计算

    晶振频率 11 0592M 机器频率 11 0592 12 61 921600个 每秒 每个机器周期 xff0c 定时器计数值加1 当数值为0 xff0c 256 xff0c 65536时 xff08 TH TL同时为0时 xff09 xf
  • vue项目打包成apk安装包详细步骤

    第一步 下载HbuilderX DCloud官网 HBuilderX下载地址 第二部 创建5 43 App项目 完事点创建 得到这么个玩意 把没用的都干掉 xff0c 留下manifest json就行了 然后把打包好的vue项目的内容拿来
  • Hyper-v安装及使用详细教程

    安装 前面先用了VMware xff0c 以为比较方便安装时不用自己配置 xff0c 结果还是要自己配置 那今天来试下win10自带的Hyper v 首先打开设置 应用 程序和功能 启用或关闭 Windows 功能 找到 Hyper v 勾
  • windows11 安装安卓子系统,玩转安卓APP

    开启Hyper v 将Hyper v勾上 xff0c 确定 xff0c 重启电脑 安装windows subsystem for Android 百度盘链接 提取码 xff1a gby8 下载完成之后直接打开安装会提示安装失败 因此需要使用
  • Ubuntu使用

    买了个Redmibook 15 Pro 锐龙版 xff0c 比较方便携带 xff0c 打开尝试了一下就把系统重装了 xff0c 据说linux系统更适合开发 xff0c 因此装了ubuntu20 10 安装 之前有写过在虚拟机安装 xff0
  • go语言使用jwt认证

    这几天在学习nodejs xff0c 进一步了解npm xff0c 学习过程中解开了以前的一个疑惑 xff0c 以前不知道token可以携带信息 xff0c 只以为是用来做对比的 xff0c 学到了jwt身份认证 xff0c 知道了如何使用
  • 注册Office教育版账号流程实现oneDrive1TB储存

    正常的个人微软账号使用oneDrive只有5GB的储存空间 xff0c 可以通过注册office教育版账号获取oneDrive有1TB储存空间的账号 临时教育邮箱 如果使用普通邮箱注册只能注册个人免费账号 xff0c 如下图 xff0c 也
  • windows 安装 gcc 编译 fyne 项目

    fyne官网 一 说明 可以看到官网写的 xff0c 如果是第一次使用 xff0c 需要安装 go 语言 xff0c 安装 gcc xff0c 获取 fyne 依赖 xff0c 其中麻烦点的就是 gcc xff0c 如果不安装 gcc xf
  • 解决 Go 语言使用 cmd 命令,在控制台输出的中文内容为乱码

    场景 xff1a 在使用 fyne 做一个小桌面程序的时候 xff0c 用到了 cmd 命令 xff0c 如果遇到了错误就进行判断或使用 label 输出错误 xff0c 结果输出的中文是乱码的 因为终端使用的是 gbk 编码 xff0c

随机推荐

  • Windows 安装 Docker Desktop 到其他盘、迁移虚拟硬盘映像文件、压缩虚拟硬盘映像占用空间

    一 建立软连接 首先先建立软连接 xff0c 将 Docker 默认安装的目录链接到其他盘 xff0c 这个最好使用 windows 自带的终端 xff0c 使用 powershell 有可能会识别不到 mklink 命令 mklink j
  • python中pip安装的包都在哪里?

    1 windows的话 xff0c 在cmd中使用 pip list 查看已安装的包名2 windows的话 xff0c 在cmd中然后用 pip show 包名 xff0c 就可以看到安装到哪了 3 练习 xff1a 将pymysql通过
  • Rust 基础(一)

    Rust 1 65 发布于2022 11 03 一 安装 配置环境变量 RUSTUP HOME Rustup元数据和工具链将被安装到Rustup主目录中 默认 xff1a USERPROFILE rustup CARGO HOME Carg
  • 定制适用于ARM平台的Ubuntu rootfs(根文件系统)

    0 背景 有一个很厉害的师兄针对我们实验室的需求设计了一块控制板 xff0c 以beaglebone为基础 xff0c 由于更改了一些底层的硬件 xff0c 所以重新定制编译的内核 xff0c 并预先烧写到了板子的flash中 现在需要安装
  • Win10使用附件中的远程桌面连接Ubuntu 16.04图形界面(xrdp方法)

    Ubuntu16 04下 以下命令行皆是在终端中运行 xff1a 安装xrdp sudo apt get install xrdp 安装vnc4server sudo apt get install vnc4server 安装xubuntu
  • CMake构建OpenCV项目

    文章目录 前言一 基本概念二 操作步骤1 创建OpenCV程序2 创建CMake文件3 编译项目4 运行项目 总结 前言 CMake是个一个开源的跨平台自动化建构系统 xff0c 用来管理软件建置的程序 xff0c 并不依赖于某特定编译器
  • 5GC基础:架构和网元

    1 主要内容 5GC xff08 SA xff09 架构介绍 5GC主要网元及功能对比 5GC网络架构的主要变化 SBA架构网元的注册 发现与选择CUPS边缘计算MM和SM的分离计算与存储的解耦与非3GPP的互操作能力开放PCC架构的变化
  • visual studio进入时许可证已过期解决方案

    新手小白 xff0c 记录一下 问题 xff1a 解决步骤 xff1a 1 打开visual studio installer gt 点击更多 gt 点击修复 2 等待更新安装 xff08 耗时略微有些长 xff09 3 点击启动 xff0
  • Qt 在windows 和linux 下的编译教程

    Qt 源码下载地址 xff1a https download qt io archive qt 打开上面的网址 xff0c 进入 submodules 目录下载 qtbase everywhere src 6 4 2 zip xff0c 这
  • 【位运算总结】 之 左移运算

    左移运算的概念 xff1a 左移运算符 应用 xff1a 1 优化代码 因为左移运算比乘法快 xff0c 因此x 61 x 2可优化为x 61 x lt lt 1 2 计算一个数的二进制的某位 如题 xff1a 给定一个含不同整数的集合 x
  • 关于Qt的QMainWindow、QTableWidget、QComboBox、QScrollArea的widget导致的qss无效问题

    问题 前阵子比较忙 xff0c 忘记记录这个问题了 事情是我在写QTableWidget的qss时候 xff0c 要把下图红色箭头指向的这个边角样式改变时发现的 我发现我对QTabelCornerButton写样式无效 但是我印象里 xff
  • Ubuntu 系统 dpkg 命令使用详解

    dpkg 即 package manager for Debian xff0c 是 Debian 和基于 Debian 的系统中一个主要的包管理工具 xff0c 可以用来安装 构建 卸载 管理 deb 格式的软件包 安装软件 使用 span
  • [python]输出“hello 姓名”

    print 34 hello tianxinyao 34
  • Java实现敏感词过滤 - IKAnalyzer中文分词工具

    IKAnalyzer 是一个开源的 xff0c 基于java语言开发的轻量级的中文分词工具包 官网 xff1a https code google com archive p ik analyzer 本用例借助 IKAnalyzer 进行分
  • 虚拟机可以连接,但是不能上网

    解决方法链接 虚拟可以连接但不能上网 xff0c 一般是DNS的问题 解决方法 xff1a xff08 1 xff09 进入网络共享中 xff0c xff08 2 xff09 进入本地连接 属性 xff08 3 xff09 进入TCP IP
  • QThread必须要了解的几个函数

    概述 如果想对Qt中的QThread有个更加深刻的了解 xff0c 必须要知道这几个重要的函数 xff0c 现在就一一介绍下 函数介绍 属性返回值函数体功能staticQThread QThread currentThread 返回当前线程
  • codeforces 766C Mahmoud and a Message

    题意 xff1a 给你一个长度为n的仅包括小写字母的字符串 xff0c 每个小写字母能在一个长度不超过a i xff08 i是小写字母序号如a为0 xff09 的子串中 问 xff1a 1 有多少种分隔方法 2 所有分割方法中最长的子串有多
  • 结构体对齐详解

    1 结构体基础知识 a 认识结构体 结构体是一些值的集合 这些值称为成员变量 结构体的每个成员可以是不同类型的变量 声明一个结构体类型 声明一个学生类型 Stu就是你对这个结构体的称呼 struct Stu char name 20 cha
  • gitlab搬迁到其它服务器

    由于一些因素 xff0c 需要把gitlab从A服务器搬迁到B服务器 xff0c 现记录步骤如下 xff1a 1 查看A服务器的gitlab版本号 xff1a cat opt gitlab embedded service gitlab r
  • 深度学习在图像超分辨率重建中的应用

    同步更新于知乎 xff1a https zhuanlan zhihu com p 25532538 超分辨率技术 xff08 Super Resolution xff09 是指从观测到的低分辨率图像重建出相应的高分辨率图像 xff0c 在监