• DnCNN-Beyond a Gaussian Denoiser: Residual Learning of Deep CNN for Image Denoising


    论文原文:https://arxiv.org/pdf/1608.03981.pdf

    笔记参考:【图像去噪】DnCNN论文详解

    文章贡献:

    1. 针对高斯去噪提出了以一个端对端的可训练的深度神经网络。与现有的基于深度神经网络的直接估计潜在的干净图像的方法不同,该网络采用残差学习策略从噪声观测中去除潜在的干净图像。
    2. 文章发现,残差学习和批处理归一化对CNN的学习有很大的好处,它们不仅可以加快训练速度,而且可以提高去噪性能。对于具有一定噪声水平的高斯去噪,DnCNN在定量度量和视觉质量方面都优于最先进的方法。
    3. DnCNN可以很容易地扩展到处理一般的图像去噪任务。可以通过训练单一的DnCNN模型来进行高斯盲去噪,并在特定的噪声水平下取得比其他方法更好的性能。此外,它有希望解决三个常见的图像去噪任务,即盲高斯去噪,SISR(超分辨率)和JPEG去块。

    网络:

    在网络架构设计上,对VGG进行修改,使其适合图像去噪,并根据目前去噪方法中使用的有效patch大小来设置网络深度。

    在模型学习中,采用了残差学习公式,并将其与批处理归一化相结合,实现了快速训练,提高了去噪性能。

    模型:

    class DnCNN(nn.Module):
        def __init__(self, channels, num_of_layers=17):
            super(DnCNN, self).__init__()
            kernel_size = 3
            padding = 1
            features = 64
            layers = []
            layers.append(nn.Conv2d(in_channels=channels, out_channels=features, kernel_size=kernel_size, padding=padding, bias=False))
            layers.append(nn.ReLU(inplace=True))
            for _ in range(num_of_layers-2):
                layers.append(nn.Conv2d(in_channels=features, out_channels=features, kernel_size=kernel_size, padding=padding, bias=False))
                layers.append(nn.BatchNorm2d(features))
                layers.append(nn.ReLU(inplace=True))
            layers.append(nn.Conv2d(in_channels=features, out_channels=channels, kernel_size=kernel_size, padding=padding, bias=False))
            self.dncnn = nn.Sequential(*layers)
        def forward(self, x):
            out = self.dncnn(x)
            return out

    第一部分:Conv(3 * 3 * c * 64)+ReLu (c代表图片通道数)

    第二部分:Conv(3 * 3 * 64 * 64)+BN(batch normalization)+ReLu

    第三部分:Conv(3 * 3 * 64)

    每一层都zero padding,使得每一层的输入、输出尺寸保持一致。以此防止产生人工边界(boundary artifacts)。第二部分每一层在卷积与reLU之间都加了批量标准化(batch normalization、BN)。

    批量标准化batch normalization:

    SGD(随机梯度下降法)广泛应用于CNN的训练方法中,但是训练的性能却很大程度受内部协变量移位这一问题所影响。BN就是在每一层的非线性处理之前加入标准化、缩放、移位操作来减轻内部协变量的移位。可以给训练带来更快的速度,更好的表现,使网络对初始化变量的影响没有那么大。

    内部协变量移位(internal covariate shift):深层神经网络在做非线性变换前的激活输入值,随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于Sigmoid函数来说,意味着激活输入值WU+B是大的负值或正值),所以这导致反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因。

    批量标准化(batch normalization):就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布,即把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,所以输入的小变化才就会导致损失函数有较大的变化,意思就是让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。

    结果:

  • 相关阅读:
    Django的常用方法以及配置
    orm 练习题
    Codeforces 898 贪心关闭最少闹钟 优先队列最少操作构造N/2squares 讨论情况哈希数字串分割a+b=c
    Codeforces 985 最短水桶分配 沙堆构造 贪心单调对列
    At grand 024
    Codeforces 982 树边两端点计数偶数连通块 鲨鱼活动最小K最大location 扩展欧几里得方块内光线反射
    Codeforces 984 扫雷check 欧几里得b进制分数有限小数判定 f函数最大连续子段
    Codeforces 979 字符串强制N变换最多出现字母 DFS子树 暴力01字典树
    Codeforces 899 1-N两非空集合最小差 末尾最多9对数计算 pair/链表加优先队列最少次数清空
    Atcoder Regular 097 相邻球交换目的递增DP
  • 原文地址:https://www.cnblogs.com/mujin-chuyang/p/13838485.html
Copyright © 2020-2023  润新知