Deeply-recursive convolutional network for image super-resolution

引言

作者认为卷积神经网络感受野越大其可以利用的上下文信息就越多,那么就可以推理出更多的高频信息。提高感受野的方法:增加网络的深度(即增加卷积层的个数或者是增加池化层的个数。但是这两种方法都有缺点,卷积层引入了更多的参数,池化层丢失了一些关键信息)

感受野越大可以利用的上下文信息就越多

一般在图像复原这样的任务中,不会使用池化层。

引入卷积层会导致参数大,容易过拟合

基于此,作者提出了DRCN。重复的利用卷积层,参数不会增加,感受野变大。

但是用随机梯度下降方法会导致梯度爆炸/消失、Learning long-range
dependencies between pixels with a single weight layer is
very difficult.

减轻过拟合

  • 递归监督。(每次递归后的特征图都用于图像重建。因为每次递归后产生的特征图都是不一样的,因此可以将不同级别的输出结合起来)
  • 输入到重构的跳跃连接。(输入和输出是相似的)

相关工作

单图像超分辨率

However, this significantly increases the number of parameters and requires more data to
prevent overfitting. In this work, we seek to design a convolutional network that models long-range pixel dependencieswith limited capacity. Our network recursively widens the
receptive field without increasing model capacity

方法

基础模型

 网络有三部分组成:

1 嵌入层。 将输入图像表示成一组特征图

2 推理层。

3 重建层。

这种模型容易导致梯度消失/爆炸。

递归的数量难以确定。

梯度爆炸:训练过程中梯度范数大幅增加。这是因为的链式法则的连乘效应。

改进的模型

递归监督:

  1. 递归监督自然减轻了训练递归网络的难度。如果监督信号直接从损失层到早期递归,反向传播只经过少量层。将不同预测损失反向传播的所有梯度相加,可以得到平滑效果。消除了沿一条反向传播路径的消失/爆炸梯度的对抗效应
  2. 选择最优递归次数的重要性也降低了,因为我们的监督能够利用所有中间层的预测。如果递归对于给定的任务来说太深,我们预计后期预测的权重会较低,而早期预测的权重会较高

跳跃连接:

  1. 输入信号的可以精确的传递网络的尾端
  2. 输入和输出是高度相似的。因此很多图像都是对图像的细节进行预测
import torch
import torch.nn as nnclass Net(torch.nn.Module):def __init__(self, num_channels, base_channel, num_recursions, device):super(Net, self).__init__()self.num_recursions = num_recursionsself.embedding_layer = nn.Sequential(nn.Conv2d(num_channels, base_channel, kernel_size=3, stride=1, padding=1),nn.ReLU(inplace=True),nn.Conv2d(base_channel, base_channel, kernel_size=3, stride=1, padding=1),nn.ReLU(inplace=True))self.conv_block = nn.Sequential(nn.Conv2d(base_channel, base_channel, kernel_size=3, stride=1, padding=1),nn.ReLU(inplace=True))self.reconstruction_layer = nn.Sequential(nn.Conv2d(base_channel, base_channel, kernel_size=3, stride=1, padding=1),nn.Conv2d(base_channel, num_channels, kernel_size=3, stride=1, padding=1))self.w_init = torch.ones(self.num_recursions) / self.num_recursionsself.w = self.w_init.to(device)def forward(self, x):h0 = self.embedding_layer(x)h = [h0]for d in range(self.num_recursions):h.append(self.conv_block(h[d]))y_d_ = list()out_sum = 0for d in range(self.num_recursions):y_d_.append(self.reconstruction_layer(h[d+1]))out_sum += torch.mul(y_d_[d], self.w[d])out_sum = torch.mul(out_sum, 1.0 / (torch.sum(self.w)))final_out = torch.add(out_sum, x)return y_d_, final_outdef weight_init(self):for m in self._modules:weights_init_kaiming(m)def weights_init_kaiming(m):class_name = m.__class__.__name__if class_name.find('Linear') != -1:torch.nn.init.kaiming_normal_(m.weight)if m.bias is not None:m.bias.data.zero_()elif class_name.find('Conv2d') != -1:torch.nn.init.kaiming_normal_(m.weight)if m.bias is not None:m.bias.data.zero_()elif class_name.find('ConvTranspose2d') != -1:torch.nn.init.kaiming_normal_(m.weight)if m.bias is not None:m.bias.data.zero_()elif class_name.find('Norm') != -1:m.weight.data.normal_(1.0, 0.02)if m.bias is not None:m.bias.data.zero_()

损失函数

该网络有D个递归输出,所以存在D+1个目标函数需要去优化

实验

数据集

训练集采用91张图片

测试集采用Set5 [19]   Set14  B100 Urban100

训练设置

递归使用了16次

我们设置动量参数为0.9,权重衰减为0.0001。

卷积层设置为256个3*3大小的。

训练集 以步长为21划分为41*41的图像块。

batchsize设置为64.

权值初始化

对于递归层: 所有权值偏置都为0,除了自连接

对于非递归层,使用 He 提出的初始化方法。

学习率最初设置为0.01,然后如果5个epoch的验证错误没有减少,学习率降低10倍。

当学习率小于10−6时,训练中止。

递归层数的影响

与其他算法的对比

对于基准测试,我们使用公共代码A+ [29], SRCNN [5], RFL[23]和SelfEx[10]。我们只像处理其他方法一样处理亮度分量

超分辨率重建DRCN相关推荐

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

    DRCN:Deeply-Recursive Convolutional Network for Image Super-Resolution Abstract 1 Introduction 2 Met ...

  2. 在matlab7.0中运行DRCN 超分辨率重建

    由于下载的代码用了类包装器 dagnn ,这个是针对matlab7的后续版本的,已经没法使用,只能按照它的意思重新写了. 先外框架: % DRCN 超分辨率重建 clc;clear all;name= ...

  3. 深度学习在超分辨率重建上的应用SRCNN,FSRCNN,VDSR,DRCN,SRGAN

    超分辨率技术(Super-Resolution)是指从观测到的低分辨率图像重建出相应的高分辨率图像, 目前应用较多的应用场景是图像及视频分辨率提高,比如可以提高以往影视作品或图像的分辨率,提高视觉感官 ...

  4. 经典论文复现 | 基于深度学习的图像超分辨率重建

    过去几年发表于各大 AI 顶会论文提出的 400 多种算法中,公开算法代码的仅占 6%,其中三分之一的论文作者分享了测试数据,约 54% 的分享包含"伪代码".这是今年 AAAI ...

  5. 学习笔记之——基于深度学习的图像超分辨率重建

    最近开展图像超分辨率( Image Super Resolution)方面的研究,做了一些列的调研,并结合本人的理解总结成本博文~(本博文仅用于本人的学习笔记,不做商业用途) 本博文涉及的paper已 ...

  6. 基于注意力机制的超分辨率重建汇总

    基于注意力机制超分辨率汇总 1.Channel Attention and Multi-level Features Fusion for Single Image Super-Resolution ...

  7. 基于深度学习的图像超分辨率重建

    最近开展图像超分辨率( Image Super Resolution)方面的研究,做了一些列的调研,并结合本人的理解总结成本博文~(本博文仅用于本人的学习笔记,不做商业用途) 本博文涉及的paper已 ...

  8. 基于SRGAN实现图像超分辨率重建或复原

    基于SRGAN实现图像超分辨率重建或复原 2018年04月20日 11:50:26 山水之间2018 阅读数 14064 文章标签: SRGAN图像超分辨率重建 更多 分类专栏: 深度学习 图像处理  ...

  9. 即插即用+任意blur的超分辨率重建——DPSR

    计算机视觉中存在许多的不适定问题ill-posed problem.先来看什么是适定问题well-posed problem,适定问题必须同时满足三个条件: 1. a solution exists  ...

最新文章

  1. 边工作边刷题:70天一遍leetcode: day 27
  2. curl不通 k8s_如何利用curl命令访问Kubernetes API server
  3. .Net Compact Framework 小技巧(1)
  4. 取得Servlet文件的絕對路徑;文件讀寫操作
  5. 前端学习(2740):重读vue电商网站50之Element-UI 组件按需加载
  6. WEB编程学习之Wordpress发送邮件
  7. js类型转换的各种玩法
  8. 微信文章编辑的html在哪里,微信公众号的文章编辑界面在哪里?怎么编辑排版? | 微信公众号指南...
  9. 机器学习:混淆矩阵、准确率、错误率、灵敏度、特异度、精准率、召回率、F-Measure、ROC曲线 PR曲线
  10. 一步一步编写12306抢票软件
  11. 信息学奥赛一本通:1156:求π的值
  12. Android设置来电铃声和分享操作
  13. 〖Python WEB 自动化测试实战篇③〗- python-selenium环境配置搭建
  14. Selenium switch_to方法
  15. Vue3+TypeScript从入门到进阶(六)——TypeScript知识点——附沿途学习案例及项目实战代码
  16. 上次被 ArrayList 锤了一拳后,LinkedList 很不服气,做出最后一击
  17. 全面解读量化中性策略
  18. php生成二维码并与背景图片合成
  19. c语言入门之项目3.6——利用for循环输出一个直角三角形
  20. 第三届北方民族大学网页设计大赛

热门文章

  1. 西红柿营养价值高 保健养生常梳头
  2. Android studio自定义相机闪光灯开启
  3. android opencv画轮廓,如何在Android的OpenCV中从每个轮廓提取线条?
  4. PIL篇---python 实现PIL模块在图片画线写字
  5. word打开时显示“word无法启动转换器RECOVR32.CNV WPFT532.CNV WPFT632.CNV”的解决办法
  6. Spring Boot企业级开发教程课后参考答案
  7. CSDN给你一个薅羊毛的机会!你真的不要吗?
  8. 年薪超 50 W!揭秘 2022 年 AI 人才最想去的 3 家公司……
  9. Markdown如何定义公式编号,以及引用编号
  10. 高德地图API生成地图(含有各个省份边界线)