当前位置: 首页 > news >正文

Deep Laplacian Pyramid Networks for Fast and Accurate Super-Resolution

时间期刊方法训练集测试集损失函数效果评价指标
2017年cvpr一种从粗到细逐步预测的方法。291数据集。使用三种方式进行数据扩充。SET5 [2], SET14 [39], BSDS100 [1], UR-
BAN100 [15] and MANGA109 [23]
鲁棒的Charbonnier损失函数在基准数据集上进行的大量定量和定性评估表明,该算法在速度和准确性方面优于最新的方法PSNR、SSIM[32]和IFC[27]

论文地址:Deep laplacian pyramid networks for fast and accurate super-resolution

代码: twtygqyy/pytorch-LapSRN: Pytorch implementation for LapSRN (CVPR2017) (github.com)

LapSRN (ucmerced.edu)

引言

近年来,基于实例的SR方法通过使用大型图像数据库学习从LR到HR图像补丁的映射,展示了最先进的性能。很多学习算法被用于学习这样的映射,包括字典学习[37,38],局部线性回归[30,36],随机森林[26]。

SRCNN

目前存在通过在低分辨率空间执行卷积操作,最后使用反卷积或者是亚像素卷积来实现放大来加速SRCNN。比如FSRCNN,ESPCN。但是这些方法网络结构相对较小,没法学习复杂的映射。而且,现在存在的方法大都使用L2损失函数,这将会导致模糊。这是因为L2损失没法捕捉高分辨率图片的多模态分布。现有的方法都是基于一个上采样因子重建图像,而且不能生成中间的预测结果。

提出了基于级联卷积神经网络(CNNs)的拉普拉斯金字塔超分辨率网络(LapSRN)。我们的网络以LR图像作为输入,并以从粗到细的方式逐步预测子带残差。在每一层,我们首先应用卷积层来提取特征。然后,我们使用转置卷积层将特征映射上采样到更精细的级别。最后,我们使用卷积层来预测子带残差(上采样图像和地面真实HR图像在各自层次上的差异)。利用每一层的预测残差,通过上采样和额外的操作高效地重建HR图像。

 我们的算法与现有的基于cnn的方法有以下三个方面的不同:

  1. 精度。直接在低分辨空间提取特征。使用优化的深度卷积预测子带残差。使用Charbonnier损失函数。
  2. 速度。
  3. 逐步重建。使用拉普拉斯金字塔渐进式重建,在前馈过程中可以生成多个中间SR预测。

相关工作 

基于内部数据库的SR

基于内部数据库的SR方法的主要缺点是在尺度空间金字塔中进行patch搜索的计算量大,速度慢。

基于外部数据库的SR

大量的SR方法使用监督学习算法从外部数据库中收集的图像对学习LR-HR映射,如最近邻[10],流形嵌入[2,5],核脊回归[19]和稀疏表示

基于卷积神经网络的SR

为了快速训练比较深的网络,VDSR训练残差而不是真实的像素。

 Wang等人[33]将稀疏编码的领域知识与深度CNN结合起来,训练一个级联网络(SCN),逐步将图像上采样到所需的尺度。

Kim等[18]提出了一种深度递归层的浅层网络(DRCN),以减少参数的数量。

为了实现实时性,ESPCN网络[28]在LR空间提取特征映射,并用高效的亚像素卷积代替双三次上采样操作。FSRCNN网络[8]采用了类似的思路,它使用的是沙漏形CNN,与ESPCN相比,CNN的层数更多,但参数更少。以上方法都是使用L2损失函数,但是这往往会导致结果过于平滑。

 拉普拉斯金字塔

拉普拉斯金字塔被广泛应用于图像混合[4]、纹理合成[14]、边缘感知滤波[24]和语义分割等领域[11,25]。Denton等人提出了一种基于拉普拉斯金字塔框架(LAPGAN)的通用模型来生成[6]中的逼真图像,这与我们的工作最为相关。然而,所提出的LapSRN与LAPGAN有三个不同之处

首先,LAPGAN是一种生成模型,旨在从随机噪声和样本输入中合成不同的自然图像。相反,我们的LapSRN是一个超分辨率模型,它基于给定的LR图像预测特定的HR图像。LAPGAN使用交叉熵损失函数。相反,我们使用Charbonnier惩罚函数。

其次,LAPGAN的子网络是独立的(即不共享权重)。因此,网络容量受到每个子网深度的限制。与LAPGAN不同,LapSRN中每一层的卷积层都是通过多通道转置卷积层连接的。因此,通过在较低层次上共享特征表示的更深层次网络来预测较高层次上的残差图像。较低层次的特征共享增加了较精细卷积层的非线性,以学习复杂映射。此外,LAPGAN中的子网络是独立训练的。另一方面,LapSRN中所有用于特征提取、上采样和剩余预测层的卷积滤波器以端到端、深度监督的方式联合训练。

对抗训练

SRGAN方法[20]利用感知损失[16]和对抗性损失优化了网络。我们注意到我们的LapSRN可以很容易地扩展到对抗性训练框架。

Deep Laplacian Pyramid Network for SR

网络结构

特征提取

 在s层,特征提取分支由d个卷积层和一个反卷积层组成,对提取的特征进行2倍上采样。每个反卷积层的输出连接到两个不同的层 (1)用于重建s级残差图像的卷积层,(2)用于提取s + 1级精细特征的卷积层。

我们在粗分辨率上执行特征提取,并在只有一个转置卷积层的较细分辨率上生成特征图。

与现有网络在精细分辨率下进行所有特征提取和重建相比,我们的网络设计大大降低了计算复杂度。请注意,较低层次的特征表示是与较高层次共享的,因此可以增加网络的非线性,以在较细的层次学习复杂的映射。

图像重建

在s级,输入图像通过一个反卷积(上采样)层以2的比例上采样。我们用双线性核初始化这一层,并允许它与所有其他层联合优化。然后,将上采样图像与来自特征提取分支的预测残差图像结合(使用元素求和),产生高分辨率输出图像。然后将输出的s级HR图像送入s + 1级图像重建分支。整个网络是一个级联的cnn,每一级的结构都是相似的

损失函数

 提出的LapSRN,每级都有对应的损失函数。这种多重损失结构类似于用于分类[21]和边缘检测[34]的深度监督网络。然而,[21,34]中用于监督中间层的标签在整个网络中是相同的。在我们的模型中,我们使用相应级别的不同比例的HR图像作为监督。深度监督引导网络训练预测不同层次的子带残差图像,产生多尺度输出图像。例如,我们的8×模型可以在一个前馈通道中产生2×、4×和8×超分辨率的结果。

训练细节

在提出的LapSRN中,每个卷积层由64个大小为3 × 3的滤波器组成。我们使用He等人[13]的方法初始化卷积滤波器。

反卷积滤波器大小为4 × 4,权值由双线性滤波器初始化。

所有的卷积层和反卷积(除了重建层)之后都有一个负斜率为0.2的LReLUs。在应用卷积之前,我们在边界上添加0,以保持所有特征映射的大小与每级的输入相同。卷积滤波器具有较小的空间支持(3 × 3)。然而,我们可以实现高非线性,并通过深度结构增加接收域的大小。

我们使用Yang et al.[38]中的91幅图像和Berkeley Segmentation Dataset[1]的训练集中的200幅图像作为我们的训练数据。[17,26]中也使用了相同的训练数据集。在每个训练批中,我们随机抽取64个patch,patchsize大小为128 × 128。一个epoch有1000次反向传播。我们通过三种方式对训练数据进行扩充:(1)scale:在[0.5,1.0]之间随机降尺度。(2)旋转:随机旋转图像90◦,180◦,或270◦。(3)翻转:水平或垂直翻转图像,概率为0.5。

我们使用双三次降采样生成LR训练块。

我们设置动量参数为0.9,权重衰减为1e−4

所有层的学习率初始化为1e−5,每50个epoch学习率降低2倍

实验结果

模型分析

残差学习

为了证明残差学习的效果,我们去除图像重建分支,直接对每一层的HR图像进行预测。

图2给出了4× sr时SET14的PSNR收敛曲线。“非残差”网络(蓝色曲线)的性能收敛缓慢,波动明显

另一方面,提出的LapSRN(红色曲线)在10个epoch内表现优于SRCNN

 损失函数

 为了验证Charbonnier损失函数的效果,我们使用L2损失函数训练所提出的网络。

我们使用更大的学习率(1e−4),因为L2梯度幅度更小。

 金字塔结构

 网络深度

 视觉对比实验

SET5、SET14和BSDS100由自然场景组成;URBAN100包含具有挑战性的城市场景图像,细节在不同频段;MANGA109是日本漫画的数据集。我们训练LapSRN,直到学习率下降到1e−6,在Titan X GPU上训练时间约为三天。

 执行时间

 总结

提出了一个深度卷积网络内的拉普拉斯金字塔框架,以快速和准确的单图像超分辨率。

我们的模型以从粗到细的方式逐步预测高频残差。通过用学习得到的转置卷积层替换预定义的双三次插值,并使用鲁棒损失函数优化网络,所提出的LapSRN缓解了不必要的伪信号问题,降低了计算复杂度。对基准数据集的大量评估表明,该模型在视觉质量和运行时间方面优于最先进的SR算法。

相关文章:

  • 基于SSM框架实现学生管理系统
  • JavaScript聊天框插入表情: 点击表情时输入框失焦, 无法插入到输入框.
  • 使用esxcli命令升级VMware ESXi补丁
  • java调用python文件的几种方式【超细讲解!】
  • c++ 关于bfs和dfs的相对统一写法
  • 2023年湖北三类人员安全员A证报考条件需要什么资料?
  • Maven进阶-多环境开发与跳过测试
  • Activiti7工作流引擎
  • 物联网边缘-物联网准入或接入安全防护产品及解决方案
  • Java-序列化和反序列化
  • 怎么批量转换图片格式?这些方法帮助你一键转换
  • ADB基本用法
  • 自定义 Hook(State Hook)_web前端培训
  • python医患档案管理系统vue+elementui+django
  • DPDK的几种buffer分配方式
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • ECS应用管理最佳实践
  • iOS | NSProxy
  • js中的正则表达式入门
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Travix是如何部署应用程序到Kubernetes上的
  • Vue2.0 实现互斥
  • web标准化(下)
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前端性能优化--懒加载和预加载
  • 试着探索高并发下的系统架构面貌
  • 网页视频流m3u8/ts视频下载
  • 新书推荐|Windows黑客编程技术详解
  • 学习JavaScript数据结构与算法 — 树
  • $(function(){})与(function($){....})(jQuery)的区别
  • (70min)字节暑假实习二面(已挂)
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (分布式缓存)Redis持久化
  • (六)vue-router+UI组件库
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)u-boot-nand.bin的下载
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET 8.0 中有哪些新的变化?
  • .NET 使用 XPath 来读写 XML 文件
  • .Net中ListT 泛型转成DataTable、DataSet
  • [1127]图形打印 sdutOJ
  • [17]JAVAEE-HTTP协议
  • [CC-FNCS]Chef and Churu
  • [codeforces]Checkpoints
  • [C语言]——C语言常见概念(1)
  • [c语言]小课堂 day2
  • [Invalid postback or callback argument]昨晚调试程序时出现的问题,MARK一下
  • [LeeCode]—Wildcard Matching 通配符匹配问题
  • [MySQL FAQ]系列 -- 账号密码包含反斜线时怎么办
  • [python]python os模块 常用命令
  • [React源码解析] Fiber (二)