科研小白打怪升级(1)

写在前面

本人大四保研程序媛,希望通过写博客,分享记录自己在科研学习过程中打怪升级的历程。

独立阅读第一篇论文

《Deep Multi-scale Convolutional Neural Network for Dynamic Scene Deblurring》
用于动态场景去模糊的深度多尺度卷积神经网络

  1. 简介
    这篇文章是发表在2017年CVPR上的,主要是讲了能够实现非均匀盲去模糊作用的多尺度卷积神经网络。以往的工作是根据如下公式来近似估计模糊核,但本文提出的方法省去了估计模糊核这一步的工作。
    模糊核公式
    (B,S,n分别表示向量化的模糊图像,潜在的清晰图像和噪声;K表示一个大稀疏矩阵,里面包含模糊核)

  2. 本文的贡献
    1)提出了一个多尺度的卷积神经网络
    2)提出了一个新的损失函数公式
    3)提出了一个新的数据集,可以提供多对模糊数据集以及对应的真实图像

  3. 网络框架
    科研小白打怪升级(1)_第1张图片

这个框架包含三层,由粗到细,输入图片是金字塔结构。
最下面一层B3层,是最粗糙的一层。图像输入后,经过两个conv层和19个ResBlock,得到输出图像L3,然后再把L3反卷积作为输入,与B2串联输入conv结构中。在该图中,B,L和S分别表示模糊图像,去模糊得到的图像和真实的清晰图像。
这里面的ResBlock是作者对残差网络的变形以后的结构。
科研小白打怪升级(1)_第2张图片
图片中a是原来的,未做任何改变的残差网络,b是作者变形以后的残差网络,作者给它命名为ResBlock。
作者去掉了残差网络里的BN结构,主要是因为作者发现,去掉这个结构能够大大节省计算时间,但是是否会对效果有所影响,作者并没有在文章中提出来。(这个地方还需要深入探究,为什么在这个里面不需要BN操作?)
补充:BN结构详解(深度学习(二十九)Batch Normalization 学习笔记)

  1. 训练过程
    文章在训练过程中的损失函数也有相应的改进,可以观察下面的三个公式:
    1)Multi-scale content loss
    卷积神经网络的损失函数
    (Lk和Sk分别表示K层网络输出的去模糊图像和清晰图像,K表示层数,ck/wk/hk分别表示通道数/宽度/高度。其实这个公式是把MSE标准应用到各层。)

    2)Adversarial loss
    对抗函数损失函数
    (这个就是标准的GAN网络训练时的损失函数,在后面我会对我学习过程中理解的东西进行详细解释)

    3)Final loss
    最后的损失函数
    (最后的损失函数 就是两个损失函数的和,这里的 λ = 1 × 1 0 − 4 \lambda=1\times10^{-4} λ=1×104,是经验值。)

  2. 数据集
    文章提出的数据集中的模糊图像不是将模糊核与一个清晰图像做卷积,而是选择记录,随着时间推移而集成的清晰的信息,以产生模糊图像。由于相机传感器在曝光期间收到光,所以每次都会积累清晰图像刺激,以生成模糊图像,然后集成的信号被非线性CRF(相机响应函数)转换成像素值,因此可以用高速视频帧累积信号过程来近似。
    模糊累积过程可以用如下公式表示:
    B = g ( 1 T ∫ t = 0 T S ( t ) d t ) ≃ g ( 1 M ∑ i = 0 M − 1 S ( i ) ) B=g(\frac{ 1 }{ T } \int_{t=0}^{T}S(t)dt)\simeq g(\frac{ 1 }{ M } \sum_{i=0}^{M-1}S(i) ) B=g(T1t=0TS(t)dt)g(M1i=0M1S(i)) (2)
    T T T——曝光时间; S ( t ) S(t) S(t)——在t时刻,一幅清晰图像的传感器信号;
    M M M——样本桢数量; S ( i ) S(i) S(i)——第i个清新帧信号。
    g ( x ) g(x) g(x)函数是CRF函数,是将清晰信号 S ( t ) S(t) S(t)转换成可观察图像 S ( t ) ^ \hat{S(t)} S(t)^,使得 S ( t ) ^ = g ( S ( t ) ) \hat{S(t)}=g(S(t)) S(t)^=g(S(t))或者 S ( i ) ^ = g ( S ( i ) ) \hat{S(i)}=g(S(i)) S(i)^=g(S(i)).
    在实际情况下,我们只有可观察到的视频帧,然而初始信号和CRF是未知的。众所周知,当涉及到非线性CRF时,非均匀去模糊变化变得更加困难,并且要考虑非线性。然而目前并没有能够应用于具有空间变化的模糊图像的CRF估计技术。当真实的CRF没有给出时,一个公用的实际方法是将CRF近似成 γ = 2.2 \gamma=2.2 γ=2.2的伽马曲线,因为它被称为已知的CRFs的近似平均。
    g ( x ) = x 1 γ \qquad g(x)=x^{\frac{1}{\gamma}} g(x)=xγ1
    因此通过校正伽马函数,我们通过观察到的图像 S ( t ) ^ \hat{S(t)} S(t)^,计算 S ( i ) = g − 1 ( S ( t ) ^ ) S(i)=g^{-1}(\hat{S(t)}) S(i)=g1(S(t)^),获得了潜在的帧信号 S ( i ) S(i) S(i)。然后通过用(2)式合成相应的模糊图像。

补充知识

  • GAN核心原理
    m i n G m a x D V ( D , G ) = E x ∼ p d a t a ( x ) [ l o g D ( x ) ] + E z ∼ p z ( z ) [ l o g ( 1 − D ( G ( z ) ) ) ] \qquad min_{G}max_{D} V(D,G)=E_{x\sim p_{data}(x)}[logD(x)]+E_{z\sim p_{z}(z)}[log(1-D(G(z)))] minGmaxDV(D,G)=Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))].
    (1)整个式子由两项组成, x x x表示真实图片, z z z表示输入 G G G网络的噪声,而 G ( z ) G(z) G(z)表示G网络生成的图片。
    (2) D ( x ) D(x) D(x)表示D网络判断真实图片是否真实的概率(因为 x x x就是真实的,所以对于D来说,这个值越接近1越好)。而 D ( G ( x ) ) D(G(x)) D(G(x))是D网络判断G生成的图片是否真实的概率。
    (3)G的目的:上面提到过, D ( G ( x ) ) D(G(x)) D(G(x))是D网络判断G生成的图片是否真实的概率。G应该希望自己生成的图片“越接近真实越好”。也就是说,G希望 D ( G ( x ) ) D(G(x)) D(G(x))尽可能大,这时 V ( G , D ) V(G,D) V(G,D)会变小,因此我们看到式子的最前面的记号时(min)
    (4)D的目的:D的能力越强, D ( x ) D(x) D(x)应该越大, D ( G ( x ) ) D(G(x)) D(G(x))应该越小,这时 V ( G , D ) V(G,D) V(G,D)会变大,因此式子对于D来说是求最大(max)

  • BN——Batch Normalization(计算成本很高)
    对每个隐层神经元,把逐渐向非线性函数映射后取值区间极限饱和区靠拢的输入分布强制拉回到均值为0,方差为1的比较标准的正态分布,使得非线性变换函数的输入值落入对输入比较敏感的区域,以此避免梯度消失问题。

  • ReLU
    R ( x ) = { x , x > 0 0 , o t h e r w i s e \qquad R(x)=\begin{cases}x, &x > 0 \cr 0, &otherwise\end{cases} R(x)={x,0,x>0otherwise

  • 吴恩达的deep learning课程

你可能感兴趣的:(科研总结)