SR-SRCNN及优化

2024-08-31 11:32
文章标签 优化 sr srcnn

本文主要是介绍SR-SRCNN及优化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

                                             SR-SRCNN及优化

1.前言


Super Resolution(SR),这个方向做的事情是给你一张低分辨率的小图(Low Resolution,LR),通过算法将这张LR放大成一张高分辨率的大图(High Resolution,HR)。这个事情乍一听挺简单的,普通的插值算法即可胜任,其实大有玄机,主要的难点在于细节的恢复,如下两张图,第一张图是原图,第二张图是将原图进行3倍下采样后,用Bicubic插值算法[1]进行SR恢复的图像,从图像整体来看,第二张图比第一张图要显得糊一些,如果将蝴蝶的翅膀纹路放大看可以发现,第二张图的细节已经很不清晰,纹路间的边缘已经模糊。这正是SR这个方向所面临的挑战。

SR这个领域在深度学习之前就已经大量优秀的研究工作,如Sparse Code(SC),A+等,各自效果如图所示(1)原始图像(2)SC稀疏编码进行高分辨恢复(3)A*算法进行高分辨率恢复。

2.DL用于SR恢复的鼻祖

说到基于深度学习的SR工作,肯定得提起“开山鼻祖”——SRCNN,SRCNN是第一篇将深度卷积神经网络(CNN)引入SR领域。这篇文章的思想很清晰,算法也很简单,一般大牛的大作都是如此。。。这篇文章认为LR之所以能通过一定的算法升级为HR,主要是他们两者之间存在着一些“共通的特征”,因此,这篇文章将SR过程主要分为三个阶段:
LR 特征提取(Patch extraction and representation),这个阶段主要是对LR进行特征提取,并将其特征表征为一些feature maps;
特征的非线性映射(Non-linear mapping),这个阶段主要是将第一阶段提取的特征映射至HR所需的feature maps;
HR重建(Reconstruction),这个阶段是将第二阶段映射后的特征恢复为HR图像。
又想感慨一句,开山之作往往都是如此简单、清晰的思路,轻松收获一篇ECCV、一篇PAMI。这篇文章将上述的三个阶段很自然地翻译成三个卷积计算工作,轻松搞定:

LR特征提取可表征为“卷积层(c*f1*f1卷积核)+RELU”;
非线性映射可表征为“全连接层+RELU”,而全连接层又可表征为卷积核为1x1的卷积层,因此,本层最终形式为“卷积层(n1*1*1卷积核)+RELU”;
HR重建可直接表征为“卷积层(n2*f3*f3)”。
下面所示的是SRCNN网络框图:

SRCNN的损失函数也很“简单粗暴”,直接计算原图与SR大图之间所有像素点的MSE。至此,SRCNN的所有工作就介绍到这,接下来我们看下SRCNN的效果:

SRCNN非常简洁,不过SRCNN也存在着几个可以改进的点:

从SRCNN的整个网络来看,要求这个网络的参数需要足够“稠密”,才能直接从网络中映射出一张高清的HR图像,这在一定程度对SRCNN的训练要求比较高,另外也减缓了SRCNN的训练速度;
SRCNN特征提取只用了一层卷积层,存在着perceptive field比较小的问题,即提取出来的特征是非常局部的特征,而SR图像需要对纹理细节进行恢复,局部特征难以奏效。

3.优化及创新

在SRCNN之后,又有若干进一步优化的文章出现,如RED(NIPS2016)、CSCN(ICCV 2015)、SRGAN(我们复现之后发现效果并不是特别好)、DRCN(CVPR2016)等。
接下来我想分享的是CVPR2016的一篇很有创新的文章:VDSR(CVPR2016)。这篇文章有几个创新点:

引入更深的网络(VGG16)做SR;
将residual的思想引入SR,减轻了网络的“负担”,又加速了学习速率
构造了一个适用于不同放大尺度的网络,并通过实验验证了该网络的可靠性。
这篇文章将VGG16引入作为SR的网络,如果网络架构同SRCNN,从上述SRCNN第一个可改进点可知,VGG16的权重将会变得非常稠密,从而加大了网络的学习成本,很可能会碰到vanishing/exploding gradients problem,这个问题在SRCNN文章的4.3.3也提到过,在原文中,作者认为网络越深效果越好的这个定律不适用于SR领域。为了解决该问题,这篇文章的作者将redisual的思想引入了网络架构中,VGG不再需要学习如何恢复一张高清的HR图像,而是学习高清图像与LR图像拉伸之后的残差,网络架构如下:

这一点创新做得非常漂亮,由于只需要学习残差,而残差中大部分值都为0,从而大大降低了网络学习的成本,也加快了学习的速率,在这篇文章中,作者也对比了残差目标和非残差目标的学习速率,如下。可以看到残差思想的引入,极大地加速了训练速度,也提高了效果的稳定性,在这篇文章中,作者提到训练一个16层的网络用于SR只需要4个小时,这无疑极大地提升了训练速度。 

                                    残差目标和非残差目标学习速率对比

残差思想的引入,使得深度网络能够应用于SR领域,而随着深度的加深,网络的perceptive field变得越来越宽,使得网络不仅具备局部特征,也能捕捉到更加全局的特征,全局特征的加入更有利于SR纹理细节的恢复
一般的网络结构只能做特定尺度的upscale,如一个网络结构确定为放大尺度为2的网络,那么该网络训练后也就只能用于尺度为2的upscale,而随着网络结构的加深,训练成本相应增加,若网络只能做单一尺度的放大,那么网络的可重用性比较差。在这篇文章中,作者还引入了另一种令人惊讶的网络结构,该网络结构对外暴露多一个尺度参数,该尺度参数可控制图像放大的尺度。这种设计方案极大地提升了网络的可重用性。作者还在这篇文章中对比了单一尺度网络的效果和多尺度网络的效果,如表(10)。可以发现,多尺度网络的效果不仅不降低,反而提升了PSNR值。


最后文章给出了一些与SRCNN的效果对比,如下图。可以看出,VDSR由于更深网络的引入,在纹理细节上表现得更加的清晰。

           VDSR与SRCNN对比(上面为VDSR效果图,下面为SRCNN效果图)

4.参考文献


[1] Bicubic interpolation
[2] http://www.vision.ee.ethz.ch/publications/papers/proceedings/eth_biwi_01165.pdf
[3] http://www.columbia.edu/~jw2966/papers/YWHM10-TIP.pdf
[4] Learning a Deep Convolutional Network for Image Super-Resolution
[5] http://www.ifp.illinois.edu/~jyang29/papers/ICCV15-rnnsr.pdf
[6] https://arxiv.org/pdf/1603.09056.pdf
[7] [1609.04802] Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network
[8] [1511.04491] Deeply-Recursive Convolutional Network for Image Super-Resolution
[9] https://arxiv.org/pdf/1511.04587.pdf

【转载】:https://blog.csdn.net/shenziheng1/article/details/72818588 

这篇关于SR-SRCNN及优化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123785

相关文章

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

MySQL中慢SQL优化方法的完整指南

《MySQL中慢SQL优化方法的完整指南》当数据库响应时间超过500ms时,系统将面临三大灾难链式反应,所以本文将为大家介绍一下MySQL中慢SQL优化的常用方法,有需要的小伙伴可以了解下... 目录一、慢SQL的致命影响二、精准定位问题SQL1. 启用慢查询日志2. 诊断黄金三件套三、六大核心优化方案方案