超分辨率FSRCNN理解(附pytorch代码)

超分辨率FSRCNN理解(附pytorch代码)
代码:
FSRCNN改进了SRCNN在速度上存在的缺陷:
1.SRCNN在将低分辨率图像送进⽹络之前,会先使⽤双三次插值法进⾏插值上采样操作,产⽣与groundtruth⼤⼩⼀致的低分辨率图像,这样会增加了计算复杂度,因为插值后的图像相⽐原始的低分辨率图像更⼤,于是在输⼊⽹络后各个卷积层的计算代价会增⼤,从⽽限制了⽹络的整体速度。
机械效率教学设计2.⾮线性映射层的计算代价太⾼。
FSRCNN在SRCNN基础上做了如下改变:
1.FSRCNN直接采⽤低分辨的图像作为输⼊,不同于SRCNN需要先对低分辨率的图像进⾏双三次插值然后作为输⼊;
2.FSRCNN在⽹络的最后采⽤反卷积层实现上采样;
3.FSRCNN中没有⾮线性映射,相应地出现了收缩、映射和扩展;
4.FSRCNN选择更⼩尺⼨的滤波器和更深的⽹络结构。
各个层的具体描述如下:
街边小摊Feature Extraction
钼棒
与SRCNN不同,该⽹络的输⼊是原始低分辨图像(未进⾏插值操作的低分辨图像),此外卷积核⼤⼩由99改为55。这是由于现在的输⼊图像尺⼨变⼩了,还有在SRCNN中,其输⼊图像是经过原始低分辨率图像插值之后所得,所以不必⽤那么⼤的卷积核,在原始LR图像中⽤⼀个55的卷积核就可以获得在插值之后的LR图像中⽤99的卷积核⼏乎相同的信息(关于这⼀点的理解,我尚不太清楚,个⼈认为主要原因是输⼊图像尺⼨变⼩导致卷积核尺⼨变⼩),还有卷积核的个数是1,因为是在单通道(Y颜⾊通道)上进⾏⽐较。
Shrinking
这⼀层的主要作⽤是降维。由于低分辨率的特征维度(这⾥⽤d表⽰)太⾼,会极⼤的增加计算代价,所以采⽤此层,并设置卷积核尺⼨为1*1。维度由d降到s(s远⼩于d)。
non-linear mapping
本⽂将在SRCNN中的mapping层分为m(表⽰mapping层的个数)个⼩mapping层,每个层的卷积核⼤⼩设置3*3,卷积核的数⽬设为
s(降维后的特征维度)。
第二次经济普查
Expanding
该层的作⽤与Shrinking层相反,是为了扩张特征维度。之所以使⽤此层是因为直接使⽤低维的⾼分辨特征进⾏图像恢复的话,图像质量太差。具体的设置是:卷积核尺⼨设为1*1,卷积核的数⽬设为d,与进⾏Feature extraction得到的特征维度⼀致。
Deconvolution
执⾏上采样操作,接受⾼分辨率特征,输出最终的超分辨结果。具体设置是,卷积核⼤⼩设为9*9,卷积核的个数为1,因为输⼊的是单通道图像。
⽹络中其他⼀些设置包括:将每⼀层的损失函数设为PReLU。不使⽤ReLU主要是为了避免在ReLU中由零梯度导致的“dead features”。损失函数使⽤均⽅误差。参数优化使⽤随机梯度下降。
图中mapping那⾥,不是说⽣成了m个,是进⾏了m次s个通道到s个通道的映射,⽐如s1到s2,s2到s3这样,到最后还是⽣成s个通道的特征图。具体可以看代码。
model构建代码:
def__init__(self, scale_factor, num_channels=1, d=56, s=12, m=4):
super(FSRCNN, self).__init__()
永芳化妆品self.first_part = nn.Sequential(
nn.Conv2d(num_channels, d, kernel_size=5, padding=5//2),
nn.PReLU(d)
)
self.mid_part =[nn.Conv2d(d, s, kernel_size=1), nn.PReLU(s)]
for _ in range(m):
self.d([nn.Conv2d(s, s, kernel_size=3, padding=3//2), nn.PReLU(s)])#进⾏m次s个通道到s个通道的映射
self.d([nn.Conv2d(s, d, kernel_size=1), nn.PReLU(d)])
self.mid_part = nn.Sequential(*self.mid_part)#把中间层的卷积都封装起来
self.last_part = nn.ConvTranspose2d(d, num_channels, kernel_size=9, stride=scale_factor, padding=9//2,
举纲张目output_padding=scale_factor-1)
self._initialize_weights()
FSRCNN除了改进了以上两个不⾜之外,FSRCNN本⾝的结构使其具有另⼀个优势,即它能够在不同的放⼤倍数下进⾏快速的训练和测试。这主要是因为共享反卷积层之前的卷积层,使其在不同的放⼤倍数之间进⾏切换时,只需微调(fine-tune)反卷积层即可。原理⽰意图如下图所⽰:
就是因为反卷积中,padding=(kernel-1)/2,output_padding=s-1,我之前写了⼀篇output_padding的⽂章,按照这个⽅式赋值代⼊卷积的尺⼨公式可以得到out_size=stride×in_size,所以说放⼤倍数的切换⽐较⽅便,只⽤变换stride就可以变换放⼤倍数。

本文发布于:2024-09-22 04:24:58,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/475098.html

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

标签:卷积   图像   特征   插值   映射   分辨   速度
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议