SRCNN神经网络

0 前言

超分辨率技术(Super Resolution,SR)是指从观测到的低分辨率图像重建出相应的高分辨率图像,在监控设备、卫星图像和医学影像等领域都拥有着重要的应用价值。

1 SRCNN

SRCNN是深度学习用在超分辨率重建上的开山之作。
其结构十分简单,仅仅只用了三个卷积层,结构如下:
SRCNN神经网络_第1张图片
在原文中,作者首先使用双三次插值方法对低分辨率图像进行缩小和放大,得到处理后的低分辨率图像(预处理)。

  • 输入:处理后的低分辨率图像 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
  • 输出:高分辨率图像

作者对于这三层卷积层的解释:

  1. 特征块提取和表示:此操作从低分辨率图像 Y Y Y 中提取(重叠)特征块,并将每个特征块表示为一个高维向量。这些向量包括一组特征图,其数量等于向量的维数。
  2. 非线性映射:该操作将每个高维向量非线性映射到另一个高维向量。每个映射向量在概念上都是高分辨率特征块的表示。这些向量同样包括另一组特征图。
  3. 重建:该操作聚合上述高分辨率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:
    SRCNN神经网络_第2张图片
    在这里插入图片描述

  • Bicubic_x2:
    SRCNN神经网络_第3张图片
    在这里插入图片描述
    psnr:27.50

  • SRCNN_x2:
    SRCNN神经网络_第4张图片
    在这里插入图片描述

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

你可能感兴趣的:(图像处理,神经网络,深度学习,神经网络,深度学习,计算机视觉)