SRCNN神经网络
SRCNN:一种用于单图像超分辨率的深度学习方法
·
0 前言
超分辨率技术(Super Resolution,SR)是指从观测到的低分辨率图像重建出相应的高分辨率图像,在监控设备、卫星图像和医学影像等领域都拥有着重要的应用价值。
1 SRCNN
SRCNN是深度学习用在超分辨率重建上的开山之作。
其结构十分简单,仅仅只用了三个卷积层,结构如下:
在原文中,作者首先使用双三次插值方法对低分辨率图像进行缩小和放大,得到处理后的低分辨率图像(预处理)。
- 输入:处理后的低分辨率图像 Y Y Y
- 卷积层1:kernelSize为 9 × 9 9\times9 9×9
- 卷积层2:kernelSize为 1 × 1 1\times1 1×1
- 卷积层3:kernelSize为 5 × 5 5\times5 5×5
- 输出:高分辨率图像
作者对于这三层卷积层的解释:
- 特征块提取和表示:此操作从低分辨率图像 Y Y Y 中提取(重叠)特征块,并将每个特征块表示为一个高维向量。这些向量包括一组特征图,其数量等于向量的维数。
- 非线性映射:该操作将每个高维向量非线性映射到另一个高维向量。每个映射向量在概念上都是高分辨率特征块的表示。这些向量同样包括另一组特征图。
- 重建:该操作聚合上述高分辨率patch-wise(介于像素级别和图像级别的区域)表示,生成最终的高分辨率图像。
激活函数:ReLU。
损失函数:MSE(均方误差)。原因可获得高PSNR。
PSNR:一种广泛使用的用于定量评估图像恢复质量的指标。
2 code
双三次插值:
可直接使用PIL中的 .resize函数,resample=PIL.Image.BICUBIC
SRCNN网络模型:
from torch import nn
class SRCNN(nn.Module):
def __init__(self, inputChannel, outputChannel):
super(SRCNN, self).__init__()
self.conv = nn.Sequential(
nn.Conv2d(inputChannel, 64, kernel_size=9, padding=9 // 2),
nn.ReLU(inplace=True),
nn.Conv2d(64, 32, kernel_size=1),
nn.ReLU(inplace=True),
nn.Conv2d(32, outputChannel, kernel_size=5, padding=5 // 2),
)
def forward(self, x):
out = self.conv(x)
return out
3 训练与测试
在 91-image_x2数据集上进行了5次训练,得到模型,在Set_x2验证集上的psnr:35.35.
测试结果
-
Original:
-
Bicubic_x2:
psnr:27.50 -
SRCNN_x2:
psnr:29.33
不知道为什么测试的效果有点差
https://zhuanlan.zhihu.com/p/31664818
http://personal.ie.cuhk.edu.hk/~ccloy/files/eccv_2014_deepresolution.pdf
https://blog.csdn.net/BingY_998/article/details/122179101
更多推荐
所有评论(0)