EDSR: Enhanced Deep Residual Networks for Single Image Super-Resolution-程序员宅基地

技术标签: 视频超分  深度学习  人工智能  

近年来,随着深度卷积神经网络(DCNN)的发展,超分辨率研究取得了进展。特别是,残余学习技术表现出改进的性能。在本文中,我们开发了一种增强型深度超分辨率网络(EDSR),其性能超过当前最先进的SR方法。我们的模型的显著性能改进是由于通过去除传统残余网络中不必要的模块进行了优化。在稳定训练过程的同时,通过扩大模型大小,进一步提高了性能。我们还提出了一种新的多尺度深度超分辨率系统(MDSR)和训练方法,该系统可以在单个模型中重建不同尺度因子的高分辨率图像。所提出的方法在基准数据集上表现出优于最先进方法的性能,并通过赢得NTIRE2017超级分辨率挑战证明了其卓越性[26]。

1. Introduction

几十年来,图像超分辨率(SR)问题,特别是单图像超分辨率问题(SISR),已经受到越来越多的研究关注。SISR旨在从单个低分辨率图像ILR重建高分辨率图像ISR。通常,ILR和原始高分辨率图像IHR之间的关系可以根据情况而变化。许多研究假设ILR是IHR的双三次下采样版本,但在实际应用中也可以考虑其他退化因素,如模糊、抽取或噪声。最近,深度神经网络[11,12,14]在SR问题中的峰值信号噪声比(PSNR)方面提供了显著改善的性能。然而,这样的网络在架构优化方面表现出局限性。此外,同一模型通过不同的初始化和训练技术实现了不同级别的性能。因此,请小心设计的模型架构和复杂的优化方法是训练神经网络的关键。

其次,大多数现有的SR算法将不同尺度因子的超分辨率视为独立问题,而没有考虑和利用SR中不同尺度之间的相互关系.VDSR[11]可以在单个网络中联合处理多个尺度的超分辨率。用多个尺度训练VDSR模型大大提高了性能,并优于特定尺度训练,这意味着特定尺度模型之间的冗余。尽管如此,VDSR风格的架构需要双三次插值图像作为输入,这导致与具有特定尺度上采样方法的架构相比,计算时间和内存更重[5,22,14]。

虽然SRResNet[14]以良好的性能成功地解决了这些时间和内存问题,但它只使用了He等人[9]的ResNet架构,没有进行太多修改。然而,最初的ResNet被提出用于解决更高级别的计算机视觉问题,例如图像分类和检测。因此,将ResNet架构直接应用于像超分辨率这样的低级别视觉问题可能是次优的。

为了解决这些问题,基于SRResNet架构,我们首先通过分析和删除不必要的模块来优化它,以简化网络架构。当模型复杂时,训练网络变得非常重要。因此,我们使用适当的损失函数来训练网络,并在训练后仔细修改模型。我们的实验表明,改进的方案产生了更好的结果。其次,我们研究了模型训练方法,该方法将知识从在其他尺度上训练的模型中转移。为了在训练期间利用尺度无关信息,我们从预训练的低尺度模型中训练高尺度模型。此外,我们提出了一种新的多尺度架构,该架构在不同尺度上共享大部分参数。与多个单尺度模型相比,所提出的多尺度模型使用的参数明显更少,但表现出可比的性能。

我们在标准基准数据集和新提供的DIV2K数据集上评估我们的模型。所提出的单尺度和多尺度超分辨率网络在PSNR和SSIM方面在所有数据集上显示出最先进的性能。我们的方法在NTIRE 2017超级分辨率挑战中分别排名第一和第二[26]。

2. Related Works

为了解决超分辨率问题,早期方法使用基于采样理论的插值技术[1,15,34]。然而,这些方法在预测详细、真实的纹理方面存在局限性。先前的研究[25,23]采用了自然图像统计来重建更好的高分辨率图像。高级工作旨在学习ILR和IHR图像对之间的映射函数。这些学习方法依赖于从邻居嵌入[3,2,7,21]到稀疏编码[31,32,27,33]的技术。Yang等人介绍了另一种聚类面片空间并学习相应函数的方法。一些方法利用图像自相似性来避免使用外部数据库[8,6,29],并通过面片的几何变换来增加有限内部字典的大小[10]。最近,深度神经网络的强大能力导致SR的显著改进。自从Dong等人[4],5]首次提出基于深度学习的SR方法以来,已经研究了SR的各种CNN架构。Kim等人[11,12]首次引入残差网络来训练更深层的网络架构,并取得了优异的性能。特别是,他们表明,skipconnection和递归卷积减轻了超分辨率网络中携带身份信息的负担。与[20]类似,Mao等人[16]利用编码器-解码器网络和对称跳过连接解决了一般的图像恢复问题。在[16]中,他们认为这些嵌套的跳跃连接提供了快速和改进的收敛性。

在许多基于深度学习的超分辨率算法中,输入图像在输入网络之前通过双三次插值进行上采样[4,11,12]。不使用插值图像作为输入,也可以在网络的最末端训练上采样模块,如[5,22,14]所示。通过这样做,可以在不损失模型容量的情况下减少大量计算,因为特征的大小减小了。然而,这些方法有一个缺点:它们不能像VDSR[11]那样在单个框架中处理多尺度问题。在这项工作中,我们解决了多尺度训练和计算效率的困境。我们不仅利用了每个尺度的学习特征的相互关系,还提出了一种新的多尺度模型,该模型可以有效地重建不同尺度的高分辨率图像。此外,我们开发了一种适当的训练方法,该方法对单尺度和多尺度模型都使用多尺度。

一些研究还集中于损失函数,以更好地训练网络模型。均方误差(MSE)或L2损失是一般图像恢复中使用最广泛的损失函数,也是这些问题的主要性能度量(PSNR)。然而,Zhao等人[35]报告,与PSNR和SSIM方面的其他损失函数相比,L2损失的训练不能保证更好的性能。在他们的实验中,与用L2训练的网络相比,用L1训练的网络获得了改进的性能。

3. Proposed Methods

在本节中,我们将描述所提出的模型架构。我们首先分析了最近发布的超分辨率网络,并提出了残差的增强版本具有更简单结构的网络架构。我们表明,我们的网络优于原始网络,同时显示出改进的计算效率。在以下章节中,我们建议使用单尺度架构(EDSR)处理特定的超分辨率尺度,使用多尺度架构(MDSR)在单个模型中重建各种尺度的高分辨率图像。

3.1. Residual blocks

最近,残差网络[11,9,14]在从低级到高级任务的计算机视觉问题中表现出优异的性能。尽管Ledig等人[14]成功地将ResNet架构应用于SRResNet的超分辨率问题,但我们通过采用更好的ResNet结构进一步提高了性能。

在图2中,我们比较了原始ResNet[9]、SRResNet[14]和我们提出的网络中每个网络模型的构建块。正如Nah等人[19]在图像去模糊工作中提出的那样,我们从网络中移除了批处理归一化层。由于批处理规范化层规范化了特征,它们通过规范化特征来消除网络的范围灵活性,因此最好将其移除。我们通过实验表明,这种简单的修改大大提高了性能,详见第4节。

此外,由于批处理规范化层消耗与先前卷积层相同的内存量,因此GPU内存使用也充分减少。与SRResNet相比,我们的基线模型没有批处理标准化层,在训练期间节省了大约40%的内存使用。因此,我们可以在有限的计算资源下建立比传统ResNet结构具有更好性能的更大模型。

3.2. Single-scale model

提高网络模型性能的最简单方法是增加参数数量。在卷积神经网络中,可以通过堆叠许多层或增加滤波器的数量来增强模型性能。具有深度(层的数量)B和宽度(特征信道的数量)F的一般CNN架构在具有O(BF 2)参数的情况下大致占据O(BF)存储器。因此,当考虑有限的计算资源时,增加F而不是B可以最大化模型容量。然而,我们发现,将特征图的数量增加到一定水平以上会使训练过程在数值上不稳定。Szegedy等人报道了类似的现象[24]。我们通过采用系数为0.1的残差缩放[24]来解决这个问题。在每个残差块中,在最后的卷积层之后放置恒定缩放层。当使用大量过滤器时,这些模块极大地稳定了训练过程。在测试阶段,可以将该层集成到先前的卷积层中,以提高计算效率。

我们用我们提出的残差块构建了我们的基线(单尺度)模型,如图2所示。结构类似于SRResNet[14],但我们的模型在残余块之外没有ReLU激活层。此外,我们的基线模型没有残余缩放层,因为我们对每个卷积层仅使用64个特征图。在我们的最终单尺度模型(EDSR)中,我们通过设置B=32,F=256以及比例因子0.1来扩展基线模型。模型架构如图3所示。

当为上采样因子×3和×4训练我们的模型时,我们使用预训练的×2网络初始化模型参数。如图4所示,这种预训练策略可以加速训练并提高最终成绩。对于放大×4,如果我们使用预先训练的尺度×2模型(蓝线),训练收敛速度比从随机初始化开始的训练快得多(绿线)。

3.3. Multi-scale model

从图4中的观察,我们得出结论,多尺度下的超分辨率是相互关联的任务。我们通过构建一个多尺度架构来进一步探索这一想法,该架构利用了VDSR[11]所做的尺度间相关性的优势。我们设计了基线(多尺度)模型,使其具有B=16个残差块的单个主分支,以便在不同尺度上共享大多数参数,如图5所示。

在我们的多尺度架构中,我们引入了特定于尺度的处理模块来处理多尺度的超分辨率。首先,预处理模块位于网络的前端,以减少来自不同尺度的输入图像的差异。每个预处理模块由两个5×5核的残差块组成。通过采用更大的内核作为预处理模块,我们可以在网络的早期阶段覆盖更大的感受野的同时保持尺度特定部分的浅。在多尺度模型的末尾,特定于尺度的上采样模块被并行放置以处理多尺度重建。上采样模块的架构与上一节中描述的单尺度模型的架构相似。我们构建了最终的多尺度模型(MDSR),B=80,F=64。虽然我们的3个不同尺度的单尺度基线模型各有约1.5M个参数,总计4.5M个,但我们的基线多尺度模型只有320万个参数。然而,多尺度模型表现出与单尺度模型相当的性能。此外,我们的多尺度模型在深度方面是可扩展的。尽管我们的最终MDSR与基线多尺度模型相比有5倍的深度,只需要2.5倍的参数,因为残余块比特定比例的部分更轻。注意,MDSR还显示了与特定规模的EDSR相当的性能。表2和表3给出了我们提出的模型的详细性能比较。

4. Experiments
4.1. Datasets

DIV2K数据集[26]是用于图像恢复任务的新提出的高质量(2K分辨率)图像数据集。DIV2K数据集由800个训练图像、100个验证图像和100个测试图像组成。由于未发布测试数据集的基本事实,我们报告并比较验证数据集的性能。我们还比较了四个标准基准数据集的性能:Set5[2]、Set14[33]、B100[17]和Urban100[10]

4.2. Training Details

对于训练,我们使用LR图像中大小为48×48的RGB输入块和相应的HR块。我们用随机水平翻转和90次旋转来增加训练数据。我们通过减去DIV2K数据集的平均RGB值来预处理所有图像。通过设置β1=0.9、β2=0.999和ǫ=10−8,我们的ADAM优化器模型[13]。我们将小批量设置为16。学习率初始化为10e-4,每2×10e5次小批量更新,学习率减半。对于单尺度模型(EDSR),我们按照第3.2节所述对网络进行训练。×2模型是从头开始训练的。在模型收敛后,我们将其用作其他尺度的预训练网络。在训练多尺度模型(MDSR)的每次更新时,我们构建具有在×2、×3和×4之间随机选择的尺度的小批量。仅启用和更新与所选比例对应的模块。因此,不启用或更新与所选比例以外的不同比例对应的比例特定残差块和上采样模块。我们使用L1损耗而不是L2来训练网络。最小化L2通常是优选的,因为它最大化了PSNR。然而,基于一系列实验,我们根据经验发现L1损失比L2提供更好的收敛性。第4节提供了该比较的评估。我们使用Torch7框架实现了拟议的网络,并使用NVIDIA Titan X GPU对其进行了培训。训练EDSR和MDSR分别需要8天和4天。源代码在网上公开。

4.3. Geometric Self-ensemble

......

4.4. Evaluation on DIV2K Dataset

我们在DIV2K数据集上测试了我们提出的网络。

从SRResNet开始,我们逐步更改各种设置以执行消融测试。我们自己训练SRResNet[14]。2 3首先,我们将损失函数从L2更改为L1,然后如前一节所述并在表1中总结的那样对网络架构进行改革。在这个实验中,我们用3×105个更新来训练所有这些模型。使用PSNR和SSIM标准对DIV2K验证集的10幅图像进行评估。对于评估,我们使用全RGB通道,忽略边界的(6+比例)像素。表2给出了定量结果。对于所有比例因子,用L1训练的SRResNet比用L2训练的原始SRResNet的结果稍好。网络的修改带来了更大的改进空间。表2的最后2列显示了我们最终的更大模型EDSR+和MDSR+的显著性能提高,采用几何自集成技术。注意,我们的模型需要更少的GPU内存,因为它们没有批处理标准化层。

4.5. Benchmark Results

我们在表3中提供了对公共基准数据集的最终模型(EDSR+、MDSR+)的定量评估结果。最后两列还提供了对自集成的评估。我们使用106个批量大小为16的更新来训练我们的模型。我们保持其他设置与基线模型相同。我们将我们的模型与最先进的方法进行了比较,包括A+[27]、SRCNN[4]、VDSR[11]和SRResNet[14]。为了进行比较,我们在y通道上测量PSNR和SSIM,并忽略与边界比例相同的像素量。我们使用MA TLAB[18]函数进行评估。还提供了DVI2K数据集的比较结果。与其他方法相比,我们的模型显示出显著的改进。在执行自集成之后,间隙进一步增加。我们还在图6中展示了定性结果。所提出的模型成功地重建了HR图像中的详细纹理和边缘,并与之前的工作相比显示出更好的SR输出

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mytzs123/article/details/128958813

智能推荐

while循环&CPU占用率高问题深入分析与解决方案_main函数使用while(1)循环cpu占用99-程序员宅基地

文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。​​​​​​while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99

【无标题】jetbrains idea shift f6不生效_idea shift +f6快捷键不生效-程序员宅基地

文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效

node.js学习笔记之Node中的核心模块_node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是-程序员宅基地

文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是

数学建模【SPSS 下载-安装、方差分析与回归分析的SPSS实现(软件概述、方差分析、回归分析)】_化工数学模型数据回归软件-程序员宅基地

文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件

利用hutool实现邮件发送功能_hutool发送邮件-程序员宅基地

文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件

docker安装elasticsearch,elasticsearch-head,kibana,ik分词器_docker安装kibana连接elasticsearch并且elasticsearch有密码-程序员宅基地

文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码

随便推点

Python 攻克移动开发失败!_beeware-程序员宅基地

文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware

Swift4.0_Timer 的基本使用_swift timer 暂停-程序员宅基地

文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停

元素三大等待-程序员宅基地

文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待

Java软件工程师职位分析_java岗位分析-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析

Java:Unreachable code的解决方法_java unreachable code-程序员宅基地

文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code

标签data-*自定义属性值和根据data属性值查找对应标签_如何根据data-*属性获取对应的标签对象-程序员宅基地

文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象

推荐文章

热门文章

相关标签