超分辨率论文EDSR:EnhancedDeepResidualNetworksforSin。。。

更新时间:2023-05-05 11:29:11 阅读: 评论:0

超分辨率论⽂EDSR:EnhancedDeepResidualNetworksforSin。。。
图像超分辨率⽹络:EDSR
⼀.前⾔
图像超分辨率(SR)问题,特别是单图像超分辨率(single image super-resolution,SISR)问题,最近⼗年来受到越来越多的研究关注。SISR的⽬的是从单个低分辨率图像I(LR)重建⾼分辨率图像I(SR)。通常,I(LR)与原始的⾼分辨率图像I(HR)之间的关系根据不同的情况是不同的。许多研究假设I(LR)是I(HR)的双三次降采样版本,但是其他降质因素,例如模糊,抽取或噪声在实际应⽤中也可以考虑。深度超分辨率⽹络EDSR是NTIRE2017超分辨率挑战赛上获得冠军的⽅案。
⼆.存在的问题
深度神经⽹络为SR问题中的峰值信噪⽐(PSNR)提供了显着的性能改进。但是,这样的⽹络在架构最优性⽅⾯有所限制。
(1)、神经⽹络模型的重建性能对架构的微⼩变化很敏感。同样的模型在不同的初始化和训练技术之下实现的性能⽔平不同。
(2)、⼤多数现有的SR算法将不同缩放因⼦的超分辨率问题作为独⽴的问题,没有考虑并利⽤SR中不同缩放之间的相互关系。 因此,这些算法需要许多scale-specific的⽹络,需要各⾃进⾏训练来处理各种scale。
(3)、SRResNet 成功地解决了计算时间和内存的问题,并且有很好的性能,但它只是采⽤了原始的ResNet架构,⽽原始的ResNet⽬的是解决更⾼层次的计算机视觉问题,例如图像分类和检测。因此,将ResNet架构直接应⽤于超分辨率这类低级视觉问题可能不是最佳的。
为了解决上述那些问题,基于SRResNet架构,作者通过分析删除不必要的模块进⾏优化,把batch norm层移除掉(bn层的计算量和⼀个卷积层⼏乎持平,移除bn层后训练时可以节约⼤概40%的空间)以及相加后不经过relu层,同时为了保证训练更加稳定,残差块在相加前,经过卷积处理的⼀路乘以⼀个⼩数(⽐如作者⽤了0.1)。这些改变构造出更简单的结构,并且在计算效率上优于原始⽹络,最终的结构图如下:
新的resBlock代码:
import sys
import math
import torch
as nn
functional as F
import numpy as np
def conv(inp, oup, kernel_size, stride=1, dilation=1, groups=1, bias=True):
padding =((kernel_size -1)* dilation +1)//2
return nn.Sequential(
nn.Conv2d(inp, oup, kernel_size, stride=stride, padding=padding, dilation=dilation, groups=groups, bias=bias),
)
class ResBlock(nn.Module):
def__init__(lf, inp, kernel_size=3, bias=True, bn=Fal, act=nn.ReLU(True), res_scale=1):
super(ResBlock, lf).__init__()
modules =[]
for i in range(2):
modules.append(conv(inp, inp, kernel_size, bias=bias))
if bn:
modules.append(nn.BatchNorm2d(inp))
if i ==0:
modules.append(act)
lf.body = nn.Sequential(*modules)
def forward(lf, x):
res = lf.body(x).s_scale)
res += x
return res
resBlock=ResBlock(64)
resBlock
Out[1]:
ResBlock(
(body): Sequential(
(0): Sequential(
(0): Conv2d(64,64, kernel_size=(3,3), stride=(1,1), padding=(1,1))
)
(1): ReLU(inplace)
(2): Sequential(
(0): Conv2d(64,64, kernel_size=(3,3), stride=(1,1), padding=(1,1))
)
)
)
四.上采样
(1)Interpolation
⽐如SRCNN就⽤简单的三次样条插值进⾏初步的上采样,然后进⾏学习⾮线性映射 。
(2)deconvolution
⽐如FSRCNN在最后的上采样层,通过学习最后的deconvolution layer。但deconvolution本质上是可以看做⼀种特殊的卷积,理论上后⾯要通过stack filters才能使得性能有更⼤的提升,⽤deconvolution作为upscale⼿段的话,通常会带⼊过多⼈⼯因素进来(有不少论⽂提到这个)。
(3)亚像素卷积层(sub-pixel convolutional layer)
⽹络的输⼊是原始低分辨率图像,通过三个卷积层以后,得到通道数为r 2个通道重新排列成
⼀个[r×r]⼤⼩的⼦块,从⽽⼤⼩为[H×W×r^2]的特征图像被重新排列成[rH×rW×1]的⾼分辨率图像。
如上图,可以看出r^2其实就是9,有9个通道,⽬的就是为了使分辨率增⼤原来的3倍,所以它从左到右、从上到下把对应的119的特征展开成3*3的特征,重组成⼀个新的特征图,上采样代码:
class  Upsampler (nn .Sequential ):
def  __init__(lf , scale , inp , bn =Fal , act =Fal , bias =True , choice =0):
modules = []
if  choice == 0: #subpixel
if  (scale & (scale - 1)) == 0:    # Is scale = 2^n?
for  _ in  range (int (math .log (scale , 2))):
modules .append (conv (inp , 4 * inp , 3, bias =bias ))
modules .append (nn .PixelShuffle (2))
if  bn :
modules .append (nn .BatchNorm2d (inp ))
if  act :
modules .append (act ())
elif  scale == 3:
modules .append (conv (inp , 9 * inp , 3, bias =bias ))
modules .append (nn .PixelShuffle (3))
if  bn :
modules .append (nn .BatchNorm2d (inp ))
if  act :
modules .append (act ())
el :
rai  NotImplementedError
elif  choice == 1: #decov 反卷积
modules .append (nn .ConvTranspo2d (inp , inp , scale , stride =scale ))
el : #bilinear  #线性插值上采样
modules .append (nn .Upsample (mode ='bilinear', scale_factor =scale , align_corners =True ))
super (Upsampler , lf ).__init__(*modules )
# tail
scale =2
inp =64
output_channel =3
if  scale > 1:
tail = nn .Sequential ( *[ Upsampler (scale , inp , act = Fal , choice = 0), conv (inp , 3, output_channel ) ] )
el :
tail = nn .Sequential ( *[ conv (inp , 3, output_channel ) ] )
tail
2的与输⼊图像⼤⼩⼀样的特征图像。再将特征图像每个像素的r
Out[2]:
Sequential(
(0): Upsampler(
(0): Sequential(
(0): Conv2d(64,256, kernel_size=(3,3), stride=(1,1), padding=(1,1))
)
(1): PixelShuffle(upscale_factor=2)
)
(1): Sequential(
(0): Conv2d(64,3, kernel_size=(3,3), stride=(1,1), padding=(1,1))
)
)
五.⽹络架构
(1)、单尺度SR⽹络(EDSR)的架构
和SRResnet⾮常相似,但移除了残差块⾥的bn和⼤多数relu。最终的训练版本有B=32个残差块,F=256个通道。并且在训练*3,4模型时,采⽤2的预训练参数。
(2)、多尺度SR⽹络(MDSR)的架构
⼀开始每个尺度都有两个独⾃的残差块,之后经过若⼲个残差块,最后再⽤独⾃的升采样模块来提⾼分辨率。最终的训练版本有B=80个残差块,F=64个通道。

本文发布于:2023-05-05 11:29:11,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/857558.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:图像   问题   训练   分辨率
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图