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

【计算机视觉】递归神经网络在图像超分的应用Deep Recursive Residual Network for Image Super Resolution

DRCN: Deeply-Recursive Convolutional Network for Image Super-Resolution

总结

这篇文章是第一次将之前已有的递归神经网络(Recursive Neural Network)结构应用在图像超分辨率上。为了增加网络的感受野,提高网络性能,引入了深度递归神经网络,递归模块权重共享减少了模型所需参数量,但出现了梯度爆炸/消失问题,又研究出了递归监督和跳跃连接两个扩展办法。
特点:

  1. 递归监督:把每次递归后的特征映射都用于重建目标高分辨率图像HR。由于每次递归都会导致不同的HR预测,因此作者将不同级别的递归产生的所有预测结合起来,以提供更准确的最终预测。每次递归的预测都受到GT监督
  2. 跳跃连接:在SR中,低分辨率图像(输入)和高分辨率图像(输出)在很大程度上共享相同的信息。输入的精确信息在许多向前传递过程中可能会衰减。于是作者将输入和各层的输出连接到重建层,用于图像的恢复。缓解网络记忆负担,网络只需要学习残差
  3. 原始LR图像经过插值上采样后提升分辨率后再进入网络

方法细节

基础模型:

在这里插入图片描述
基底模型由三个子网络组成:嵌入网络embedding netword、推理网络 inference network 和 重建网络reconstruction network。

  • 嵌入网络用于将给定图像表示为特征映射,
  • 推理网络加深网络深度,将嵌入网络的输出特征映射到更高维度。注意推理网络是递归调用的。
  • 重建网络根据推理网络中的最终特征映射生成输出图像。
  • 上图中的input图像是原始LR图像经过插值上采样后的图像。

存在问题:

  • 梯度的消失和爆炸。梯度爆炸是由链式梯度的乘法性质造成的。对于深度递归,可以呈指数增长。梯度消失问题正好与梯度爆炸相反。梯度呈指数级的速度到零向量。因此,梯度爆炸和消失的存在使深度递归网络掌握远距离像素信息间的关系非常困难。
  • 经过多次递归想要保留原始LR信息并不容易。在SR任务中,输出与输入非常相似,所以LR图像的信息非常重要,需要为后续更深的递归层保留输入图像的精确信息。
  • 存在一个寻找最优递归次数的问题。如果递归对于给定的任务来说太深,就需要减少递归的次数。寻找最优数需要训练许多具有不同递归深度的网络。

进阶模型

在这里插入图片描述
图a是文章最终的模型:

  • Recursive-Supervision:监督每层递归,以减轻梯度消失/爆炸的影响。假设在推理层中卷积过程反复使用相同的卷积核,使用相同的重建层来预测每一次递归重建的SR图像。重建层输出D个预测图像,所有预测都在训练期间同时受到监督,这一步在公式中的体现为增加了一部分loss,后面公式中具体再介绍。
      a、将所有D个预测图像通过加权求和来计算最终输出(权重由网络学习得到)。通过递归轻了训练递归网络的困难,通过反向传播将不同预测损失产生的反传梯度求和提供平滑效果,能够有效缓解梯度爆炸或消失。
      b、此外,由于监督能够利用所有中间层的预测信息,因此选择最佳递归次数的重要性降低了。

  • Skip-Connection:对于图像重建任务,输入和输出图像高度相关,所以可以直接通过跳层连接将LR信息直接传输到SR重建层。该做法有两个优点:节约了远距离传输的复杂算力、极大程度的保留了完整的低频信息。

参考文章

超分算法DRCN:Deeply-Recursive Convolutional Network for Image Super-Resolution超分辨率重建

DRRN: Image Super-Resolution via Deep Recursive Residual

总结

作者点明了在图像进入网络之前做插值处理的弊端(增加计算量),提到了在ESPCN超分辨网络中使用的Sub-Pixel策略,这种方法是通过在网络末端做分辨率提升,进而减小了计算量和缓解了网络的记忆负担。

引入全局和局部残差学习。类似于ResNet,引入了残差单元(这也意味着引入了局部残差学习),使得网络运行几层就会进行一次残差学习(这样更有利于网络运行过程中的高频信息重建和保持),同时在最后的输出层也会进行一次大的残差学习。

方法

在这里插入图片描述
在这里插入图片描述

残差递归块

在这里插入图片描述

性能

在这里插入图片描述
在这里插入图片描述

LapSRN: Deep Laplacian Pyramid Networks for Fast and Accurate Super-Resolution

总结

使用拉普拉斯金字塔结构的思想,逐步进行2的幂次的超分,并且结合残差来进行模型预测。
论文的创新点有:

  1. 准确性高。LapSRN使用Charbonnier loss来改善重建质量,可以减少artifacts.
  2. 速度快。与FSRCNN一样,可以在大多数的测试集上可以实时超分。
  3. 逐步重建。模型使用拉普拉斯金字塔的结构,在一次预测的过程中生成多张中间结果,可以作为不同倍数的超分结果。

之前方法的问题:

  1. 一些方法使用预定义好的上采样操作,来将低分辨率输入插值到高分辨率输出再来进行超分。这样会造成增加计算量和产生伪影(increases unnecessary computational cost and often results in visible reconstruction artifacts)。虽然有着FSRCNN使用反卷积和ESPCN使用亚像素卷积来对SRCNN类的方法进行加速,但是由于输入分辨率太高,约束着模型结构的容量,无法学习更为复杂的映射关系。
  2. L2 Loss对噪声敏感,文中说L2 loss产生的图像过于平滑,与人眼感知不符
  3. 多数方法仅用一个上采样获得最终的图片,对于8x很困难
  4. 现有的方法无法产生中间过程,需要针对具有不同期望上采样比例和计算负荷的各种应用来训练各种各样的模型

方法

方法异同对比

在这里插入图片描述

现有方法

在这里插入图片描述

本文方法

  • 绿色表示元素级的加操作,橙色表示递归卷积层,蓝色表示转置卷积
  • 两个模块
    • 特征提取:d层的卷积(提取[level s]分辨率l特征)+1层的反卷积(上采样到[level s+1]更精细分辨率的特征),然后再分两条支路:一条再通过卷积层重建残差图像,一条递归调用d层卷积继续提取[level s+1]分辨率l特征。由于前面d层卷积是在低分辨率上操作的,相比在输入网络前就将图像上采样到高分辨率的方法,运算量大幅减小
    • 上采样:scale为2的转置卷积(反卷积)上采样图像+残差图像,对应位置元素相加
      在这里插入图片描述

递归网络模型框架

在这里插入图片描述

loss: Charbonnier

l2 loss的问题:

  • y ^ s \hat{y}_s y^s是网络预测的level s的HR图像
  • y s y_s ys是GT 的level s的HR图像,从原始高分辨图像通过双三次下采样得到
  • x s x_s xs是低分辨率图像上采样的图像
  • r s r_s rs是leve s的残差图像

文章中说理想的输出高分辨图像由这个公式建模, y s = x s + r s y_s=x_s+r_s ys=xs+rs.
其实我的理解, x s x_s xs r s r_s rs都是网络预测的,应该是网络预测得到level s的HR图像 y ^ s = x s + r s \hat{y}_s=x_s+r_s y^s=xs+rs
所以loss应该写成:
ζ ( y ^ , y ; θ ) = 1 N ∑ i = 1 N ∑ s = 1 L ρ ( y s ( i ) − y ^ s ( i ) ) = 1 N ∑ i = 1 N ∑ s = 1 L ρ ( y s ( i ) − ( x s ( i ) + r s ( i ) ) ) \zeta(\hat{y},y;\theta)=\frac{1}{N}\sum_{i=1}^{N}\sum_{s=1}^{L}\rho(y_s^{(i)}-\hat{y}_s^{(i)})=\frac{1}{N}\sum_{i=1}^{N}\sum_{s=1}^{L}\rho(y_s^{(i)}-(x_s^{(i)}+r_s^{(i)})) ζ(y^,y;θ)=N1i=1Ns=1Lρ(ys(i)y^s(i))=N1i=1Ns=1Lρ(ys(i)(xs(i)+rs(i)))
ρ(x)=sqrt(x22)是Charbonnier penalty function(L1范数的变体),N是每个批次的数量,L是金字塔的级数。在这种损失函数下,金字塔每级的输出都会靠近某个尺度下的HR,因此才可以同时实现2x,4x,8x的超分辨。

Charbonnier loss(也称为L1-Charbonnier loss或Huber loss)是一种用于计算图像重建或图像生成任务中的损失函数。它是由Charbonnier在1989年提出的,用于解决图像处理中的平滑和噪声问题。
Charbonnier loss主要用于替代传统的L2损失(平方差损失),因为L2损失对于离群值(异常值)比较敏感,因为平方会放大误差,容易导致模型对于噪声或细节部分过度平滑化。相比之下,Charbonnier loss对于离群值的响应相对较小,能够更好地保留细节信息。
Charbonnier loss的计算公式如下:
L Charbonnier ( x , y ) = ( x − y ) 2 + ϵ 2 L_{\text{Charbonnier}}(x, y) = \sqrt{(x - y)^2 + \epsilon^2} LCharbonnier(x,y)=(xy)2+ϵ2
其中, x x x是模型生成的输出, y y y是真实的目标值, ϵ \epsilon ϵ是一个小的正数(通常取较小的值,如 1 0 − 3 10^{-3} 103 1 0 − 6 10^{-6} 106),用于避免除以零的情况。
Charbonnier loss计算了预测值和目标值之间的差异,并加上了一个平方项和一个平滑项,从而在保持平滑性的同时对异常值有一定的容忍度。通过最小化Charbonnier loss,模型可以更好地适应噪声、保留细节,并生成更加清晰和真实的图像。
需要注意的是,Charbonnier loss只是损失函数的一种选择,根据具体任务和需求,也可以选择其他类型的损失函数来优化模型。

性能

在这里插入图片描述

消融实验

在这里插入图片描述

可以发现Pyramid 和 Robust loss对性能的影响更显著,残差虽然对性能的影响没有那么显著,但是可以使网络收敛更快,loss更不会抖动。

一个设计是否有用,不光可以比较性能,还可以看:复杂度,收敛速度,训练难度,loss抖动,额外收益等等。

参考文章

经典回顾:LapSRN
[超分][CVPR2017]LapSRN

相关文章:

【计算机视觉】递归神经网络在图像超分的应用Deep Recursive Residual Network for Image Super Resolution

DRCN: Deeply-Recursive Convolutional Network for Image Super-Resolution 总结 这篇文章是第一次将之前已有的递归神经网络(Recursive Neural Network)结构应用在图像超分辨率上。为了增加网络的感受野,提高网络性能,引入了深度递归神经网络&#x…...

Centos 7 安装系列(8):openGauss 3.0.0

安装依赖包: yum -y install libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core readline-devel openssl-devel sqlite-devel libnsl 安装插件: yum install -y bzip2 net-tools为什么要安装这两个? 安装bzip2 是…...

NOIP真题讲解 传球游戏 接水问题

传球游戏 说明 上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,…...

《论文阅读18》 SSD: Single Shot MultiBox Detector

一、论文 研究领域: 2D目标检测论文:SSD: Single Shot MultiBox Detector ECCV 2016 数据集 论文链接论文github 二、论文概要 SSD网络是作者Wei Liu在ECCV 2016上发表的论文。对于输入尺寸300x300的网络 使用Nvidia Titan X在VOC 2007测试集上达到74…...

NOIP2016普及组第四题 魔法阵

魔法阵 题目描述 六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法能量。 大魔法师有m个魔法物品,编号分别为1,2,…,m。每个物品具有一个魔法值,我们用Xi表示编号为i的物品的魔法值。每个魔法值Xi是不超过n的正整数&…...

uniapp-滑块验证组件wo-slider

wo-slider是一款支持高度自定义的滑块验证组件,采用uniapp-vue2编写 采用touchstart、touchmove、touchend事件实现的滑块组件,支持H5、微信小程序(其他小程序未试过,可自行尝试) 可到插件市场下载尝试: https://ext.…...

NPM 管理组织成员

目录 1、向组织添加成员 1.1 邀请成员加入您的组织 1.2 撤销组织邀请 2、接收或拒接组织邀请 2.1 接收组织邀请 2.2 拒绝组织邀请 3、组织角色和权限 4、管理组织权限 5、从组织中删除成员 1、向组织添加成员 作为组织所有者,您可以将其他npm用户添加到…...

设计模式(3)抽象工厂模式

一、概述: 1、提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。 2、结构图: 3、举例代码: (1) 实体: public interface IUser {public void insert(User user);public…...

【C++】早绑定、析构与多态 | 一道关于多态的选择题记录

今天在和群友聊天的时候看到了一道很坑的题目&#xff0c;分享给大家 1.看题&#xff01; 先来看看题目 struct Dad { public:Dad(){ echo();}~Dad(){ echo();}virtual void echo() {cout << "DAD ";} };struct Son:Dad { public:void echo() const override…...

mac下安装tomcat

1. 官网下载Apache Tomcat - Apache Tomcat 9 Software Downloads 2. 授权bin目录下所有.sh文件权限sudo chmod 755 *.sh 3. 启动程序(后台运行) sudo sh ./startup.sh 4. 在当前窗口启动程序&#xff0c;随时看到日志sudo sh ./catalina.sh run 5. 关闭程序 sudo sh ./shu…...

【小梦C嘎嘎——启航篇】string常用接口的模拟实现

【小梦C嘎嘎——启航篇】string常用接口的模拟实现&#x1f60e; 前言&#x1f64c;string 模拟实现1、iterator 迭代器相关使用函数实现2、构造函数接口实现3、 传统写法——拷贝构造函数接口实现4、 现代写法——拷贝构造函数接口实现5、析构函数接口实现6、传统写法—— 赋…...

【Jenkins】持续集成部署学习

【Jenkins】持续集成部署学习 【一】安装部署【1】Jenkins所处位置【2】Docker安装Gitlab&#xff08;1&#xff09;首先准备一台空的虚拟机服务器&#xff08;2&#xff09;安装服务器所需的依赖&#xff08;3&#xff09;Docker的安装&#xff08;4&#xff09;阿里云镜像加速…...

Redis数据结构之List

Redis 中列表&#xff08;List&#xff09;类型是用来存储多个有序的字符串&#xff0c;列表中的每个字符串成为元素 Eelement&#xff09;&#xff0c;一个列表最多可以存储 2^32-1 个元素。 在 Redis 中&#xff0c;可以对列表两端插入&#xff08;push&#xff09;和弹出&am…...

SpringCloud Alibaba实战和源码(7)Skywalking

什么是SkyWalking Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的产品&#xff0c;它同时吸收了Zipkin /Pinpoint /CAT 的设计思路。特点是&#xff1a;支持多种插件&#xff0c;UI功能较强&#xff0c;支持非侵入式埋点。目前使用厂商最多&#xff0c;版本更新较…...

MySQL索引可能失效之or、is null、is not null、不等于(!=,<>)、联合索引

1、如果 A,B 两列都有索引&#xff0c;那么 select * from Table where Aa or Bb; 会走索引吗&#xff1f; 答案&#xff1a;会&#xff0c;因为 A,B都有索引&#xff1b; 2、如果 A,B有索引&#xff0c;但是C没有索引&#xff1b; select * from Table where Aa or Bb …...

无人机电力巡检:探索电力设施维护的新模式

电力巡检一直是电力行业中关键的环节&#xff0c;它的目的是确保电力设施的正常运行和安全稳定&#xff0c;对提高电力设施的可靠性、确保电力供应的稳定性和提高电力企业的管理水平具有重要的意义。传统的电力巡检方式通常采用人工的方式进行&#xff0c;这种方式存在很多的问…...

ethers.js1:ethers的安装和使用

ethers官方文档&#xff1a;Documentation 1、ethers简介&#xff1a; ethers.js是一个完整而紧凑的开源库&#xff0c;用于与以太坊区块链及其生态系统进行交互。如果你要写Dapp的前端&#xff0c;你就需要用到ethers.js。 与更早出现的web3.js相比&#xff0c;它有以下优点…...

小程序中的页面配置和网络数据请求

页面配置文件和常用的配置项 1.在msg.json中配置window中的颜色和背景色 "navigationBarBackgroundColor": "#efefef","navigationBarTextStyle": "black" 2.可以看到home中的没有发生变化但是msg的发生变化了&#xff0c;这个和前面的…...

使用ImageMagick实现多张图片拼接为gif(多线程版)

官网: https://imagemagick.org/ 直接上代码 ExecutorService es Executors.newFixedThreadPool(10); List<File> images getImageFiles(sceneDir); CountDownLatch cdl new CountDownLatch(images.size()); // 拷贝图片 for (File file : images) {System.out.prin…...

解释 RESTful API,以及如何使用它构建 web 应用程序。

RESTful API是一种利用HTTP协议进行通信的Web API设计风格&#xff0c;它采用了一组统一且可缓存的操作&#xff0c;包括GET、POST、PUT、DELETE等&#xff0c;通过URL来定位资源&#xff0c;以及使用JSON、XML等格式来传输数据&#xff0c;以实现系统之间的数据交互和资源共享…...

远程端口转发 实践 如何将物理机某一端口的服务转发到vps上,使得外网能访问到

以本机1470端口&#xff08;我的sqli-labs&#xff09;与vps的9023端口为例。 SSH基本的连接命令是&#xff1a; ssh usernamehostname这里牵扯到了两台主机&#xff0c;一是执行命令、运行SSH客户端的主机&#xff0c;我们称为本地主机A【Host A】&#xff1b;二是接收连接请…...

【uniapp 监听键盘弹起与收回】

在uniapp中&#xff0c;可以通过使用小程序提供的API来监听键盘弹起与收回。 首先&#xff0c;在页面的onLoad函数中注册监听事件&#xff1a; onLoad() {uni.onKeyboardHeightChange(this.onKeyboardHeightChange); },然后&#xff0c;在页面的onUnload函数中取消注册监听事…...

【Unity】如何制作小地图

我们为什么要制作小地图呢&#xff1f; 原因很简单&#xff1a; 导航和定位&#xff1a;小地图可以显示玩家当前位置以及周围环境的概览。这使得玩家能够更好地导航和定位自己在游戏中的位置&#xff0c;找到目标或避开障碍物。场景了解&#xff1a;通过小地图&#xff0c;玩…...

基于IMX6ULLmini的linux裸机开发系列八:按键处理实验

目录 GIC相关寄存器 GPIO中断相关寄存器 中断服务函数表 中断向量表偏移位置 make有报错 解决方法&#xff1a;error: for loop initial declarations are only allowed in C99 mode_‘for’ loop initial declarations are only allowed i_Young_2717的博客-CSDN博客 GIC…...

数据结构好题总结

Cut Inequality Down 题解 https://blog.csdn.net/lzh_naive/article/details/103340568 概括&#xff1a;st表倍增类st表 考虑如果没有UL限制的话&#xff0c;相当于是前缀和 我们发现&#xff0c;如果某次到了U/L&#xff08;相当于是一次碰壁&#xff09;那么这个值已知…...

Java串口开发

网上搜索了关于java串口开发的资料,发现都不是特别的全,故写下一些心得以帮助其他人能快速上手java串口开发,如有错漏之处&#xff0c;敬请指正 串口开发会用到一个javax.comm和RXTXcomm库,&#xff0c;javax.comm库不支持64位操作系统。该库仅适用于32位操作系统,所以接下来主…...

Python nohup 启动python脚本,后台没有日志

一、情况 1.linux上运行python脚本&#xff0c;前台运行打印日志&#xff0c;后台使用nohup不打印日志。 前台运行 ./xxx.py 后台运行 nohup python ./xxx.py > xxx.log 2>&1 &二、排查思路 2.1 脚本是否有问题 首先看自己写的python脚本是否存在问题。因为…...

完美解决微信小程序使用复选框van-checkbox无法选中

由于小程序使用了vant-ui框架&#xff0c;导致checkbox点击无法选中问题 <van-checkbox value"{{ checked }}" shape"square"><view class"check-content"><view class"checktext">我已阅读并同意>《用户协议》…...

IDEA报错:类文件具有错误的版本 61.0,应为52.0

springboot项目启动报错&#xff1a; 类文件具有错误的版本 61.0,应为52.0 请删除该文件或确保该文件位于正确的类路径子目录中 查阅了网上的很多资料&#xff0c;普遍原因说是springboot版本过高&#xff0c;高于3.0 需要在pom文件中降低版本 也有说是idea的maven配置java版…...

Linux 挂载局域网内共享目录

Linux 挂载局域网内共享目录 1、安装samba服务端2、samba服务端配置3、添加samba服务访问账户4、防火墙5、重启服务6、windows访问7、linux访问 1、安装samba服务端 sudo apt-get install -y samba yum install -y samba2、samba服务端配置 vim /etc/samba/smb.conf在文档尾部…...

网站设计制作过程/全国防疫大数据平台

编辑&#xff1a;ll KBPC1010-ASEMI自带散热方桥KBPC1010 型号&#xff1a;KBPC1010 品牌&#xff1a;ASEMI 封装&#xff1a;KBPC-4 正向电流&#xff1a;10A 反向耐压&#xff1a;1000V 引脚数量&#xff1a;4 芯片个数&#xff1a;4 芯片尺寸&#xff1a;95MIL 浪…...

制作网站公司图片/网络推广竞价外包

class Apple implements Runnable{private int num50;public void run() {for(int i0;i<50;i) {if(num>0) {System.out.println(Thread.currentThread().getName()"吃了编号为"num--"的苹果");}}} } //使用Runnable方式实现&#xff0c;三个同学吃50…...

企业建站系统是什么/外贸推广如何做

出处&#xff1a;cnblogs.com/vipyoumay/p/7455431.html我们知道&#xff0c;不同肤色的人外貌差别很大&#xff0c;而双胞胎的辨识很难。有意思的是 Web 服务器/Web 容器/Web 应用程序服务器/反向代理有点像四胞胎&#xff0c;在网络上经常一起出现。本文将对这四个概念进行区…...

杭州网站开发响应式/免费网站制作平台

转自&#xff1a;http://www.mamicode.com/info-detail-506798.html 一、摄像头结构和工作原理. 拍摄景物通过镜头&#xff0c;将生成的光学图像投射到传感器上&#xff0c;然后光学图像被转换成电信号&#xff0c;电信号再经过模数转换变为数字信号&#xff0c;数字信号经过DS…...

上海市住房和城乡建设部网站官网/网站如何提交百度收录

欢迎关注我的公众号&#xff1a; 目前刚开始写一个月&#xff0c;一共写了18篇原创文章&#xff0c;文章目录如下&#xff1a; istio多集群探秘&#xff0c;部署了50次多集群后我得出的结论 istio多集群链路追踪&#xff0c;附实操视频 istio防故障利器&#xff0c;你知道几…...

wordpress的安装目录结构/网络广告策划书范文

大神们可以写出“深入浅出”系列&#xff0c;小白就写点"真浅尝辄止"系列的吧&#xff0c;主要便于自己理解和巩固&#xff0c;毕竟一开始就上源码还是会头大滴&#xff0c;于是就准备浅尝辄止的了解下"React是如何工作的&#xff1f;" React是怎么工作的&…...