摘要:作者基于残差ResNet能通过改变映射范围加强深度学习、把输入分为高频细节层和基础层、通过输入的直接映射到输出加强图像特征等操作构建网络。能很好地区分边缘和雨纹。

paper、数据集、代码下载地址:https://xueyangfu.github.io/projects/cvpr2017.html

说明:本博客基于对个人对该论文及其源码的详细解读,有不当指出欢迎指正,希望能对自己和大家的学习有所帮助。

符号概念(denote):

:假定输入X和输出Y分别被归一化到[0,1]且分别有D个像素范围,就可记为此符号。

1. Introduction(导言)

需求:雨天条纹会对视觉系统、监控系统产生较大影响。

问题:当有结构和方向都和雨纹相似的地方时,传统的end-to-end等方法不能很好地去除雨层并保留背景层纹理结构

1.1 Related work(相关工作)

(1)基于视频的方法,能更好的检测并去除雨纹,因为有更多的帧间信息。但缺点是需要依赖当前的时间的视频

(2)单图片的去雨中, in [ 20 ] 核的回归和非局部平均滤波被用于检测并去除雨纹

(3)In [ 6 ],作者提出了一种广义模型,该模型假定加的雨具有较低的秩。

(4)In [ 25 ],作者用判别稀疏编码、字典学习去雨

(5)In [ 24 ] ,在高斯混合模型中,用基于块的先验(patch-based priors)去计算雨纹的多个方向和尺度

1.2 Our contributions

当一个物体的结构和方向都和雨纹相似的时候,很难去除雨纹的同时保留下物体的特征。提出了一种“深度细节网络(deep detail network)”来去除自然高频雨纹

1、使用深度残差网络(ResNet),因为发现残差网络可以减少输入到输出的映射距离,从而使得我们训练更深层的网络更加简单。

2、残差网络作为参数层,可以获得更深的图片特征。与直接应用残差网络到图片上不同,这里采用了一种先验(priori)知识并用图片的detail layer作为(残差网络的)输入。这样就消除了背景干扰,因为detail layer(细节层)大多数值都接近于0,这种稀疏性改善了去雨效果。然后基于这个发现,我们讨论得出一个合适的网络可以避免梯度消失,更深的网络反而改善了去雨的结果。这打破了更深层次的网络不适用于低层次图像任务的假定。

3、为学习这个网络,合成了14000张雨/干净图片数据集。(无法获得那么多真实世界的图像)

2、 A Deep Detail Network

初步提出的模型如上图Figure 2。雨图作为输入X,干净图作为输出Y。直观地可以理解为中间步骤为函数h(x),则通过以下公式可以算得误差。F是范数的意思。

然后发现直接在原雨图上训练的结果并不令人满意。

图片3(b)是由(a)合成的一个雨图,但是可以看到去雨后的(c)有明显的颜色变化。所以这种方法不适用。简要解释这种现象,我们假定X和Y被归一化到[0,1]且有D个像素,记为。学习的过程就是优化从输入的到输出的的过程。训练一个深度神经网络(注意,关键在“深度”这两个字,因为网络层越深,反向传播的时候可能会出现梯度消失),即使用了batch normalization(批处理正则化(归一化))等正则化操作,也无法避免地可能遇到梯度消失等问题。所以接下里提出Neg-mapping的方法来解决深的问题。

2.1.1 Negative residual mapping

引入残差网络,观察4(e)(g)发现残差Y-X有显著的像素值范围减小,这说明残差可以被引入神经网络来帮助建立输入到输出的映射过程(这里不太懂为什么像素值减少了就有助于训练了,但是意思是我们可以通过加一个从输入到输出的类似于残差的映射,使得输出的结果更好,可以看到figure 3(e)即neg-mapping的结果比单纯残差网络3(b)要好,它没有模糊掉鸟的羽毛)。因为雨的颜色是白色的(C白色为255,黑色为0),所以干净图-雨图(Y-X)的值通常是负的,所以叫做 “negative residual mapping” (简称neg-mapping)。修改后的公式如下:

(h(X)是引入Neg-mapping后神经网络计算出的结果,而(Y-X)是引入Neg-mapping后理想的结果,两个相减就得到上式)

(这个网络图是整篇博客的核心)

Neg-mapping(负映射):通过skip connection把输入直接加到输出,跳过中间的参数层。使传播更深,特征更多。无损传播。通过实验证明训练和验证的时候错误更少(参照figure 10)

2.1.2 Deep detail network

通过结合Neg-mapping和ResNet残差网络,可以使得更好地传播输入图像,并且更深的网络有助于模型的建立。可以较好地区分雨纹和图片细节,但是即使结合了这两个,发现还是有雨纹残留,见图3(f)。于是我们提出了以下模型。

Xbase 可以通过低通滤波(见参考文献,11,32,37)得到。在Xdetail中则是雨纹和纹理相似的图像细节。以X detail作为网络的输入。(这里的网络指的是残差网络)

细节层比原图更具有稀疏性,(可以看到下图细节层大部分区域都是黑色的,也就是0,所以更稀疏)而目前已经有人把稀疏性在去雨上了,但是没有用在深层网络框架中。

(可以看到直方图中X detail的像素更趋近于0。)

但是,从Y-X和X detail来看,前者是干净图减去雨图,应该得到的是雨纹;后者是细节层,应该包括雨纹和图片的细节,所以本例中的有效映射是从中的较小子集,即Y-X(这里是个人的一点理解,大家可以仔细看看论文,如果有不同见解,请指出)。这表明解的空间被缩小了,网络的性能有待提高。

这推动了我们把X detail的和Y-X结合作为ResNet的输入,建立起我们最终的Final模型(之前是把X detail直接作为Neg-mapping接到输出,但是有效映射应该是X-Y或者X detail中的较小子集,所以这样不行应该把X直接映射到输出,但是之前我们又证明了X detail作为ResNet的网络输入效果比较好,所以作者加了一个Decomposition,分解出X detail ,建立起Figure 5 中的最后一个Final网络)

当期望图像与观测图像之间的波形发生高频变化时,训练一个网络将高频输入细节映射到高频输出差异,大大简化了深度学习问题。

2.2 Objective function and network architecture(目标函数和网络架构)

根据之前所得到的结论,提出以下损失函数模型。

N代表样本的个数,f()代表残差网络。

X detail可先通过 guided filtering(参照论文【11】)低通滤波分理出X base和X detail。

一个基本网络块的操作可表示为(代码中用了12个循环生成12个这样的网络块)

X的上标代表层数。总共L层。σ()代表激活函数(RELU),BN代表BatchNormalization,可以减少协变量变化(internal covariate shift),W是权重,b是偏置。

第一层卷积大小:c * s1 *s1 *a1     c是图片通道数,如彩色图像是3;s1是卷积核尺寸,a1是卷积核的个数,也就是生成feature maps的大小

第二层卷积大小:a1*s2* s2 *a2     a1是上一层的通道数,即深度。a2是生成下一层的深度

最后一层是       :a2*s3* s3 *c       最后一层生成的是图片所以深度变为c

以一个卷积操作为例解释一下尺寸的大小是怎么来的

图中由INPUT到C1的卷积操作大小是 1*5*5*6 的卷积大小,因为INPUT是灰度图片,所以通道为1,而feature maps的深度为6,5*5是这里的卷积核大小(输出是28*28是由卷积核尺寸和步长等因素决定)

2.3 Training (训练)

优化方法:随机梯度下降(SGD)

数据集:有14000对干净/雨图。并且由14000张生成了三百万张64*64的干净/雨图小图;剩下的4900张留作评估模型

3. Experiments(实验)

和其他当下最好的方法作对比,用的Caffe框架训练,花了14个小时左右

3.1 Parameter settings(参数设定)

网络深度L = 26

衰减率weight decay  =10的-10次方

冲量 momentum = 0.9

mini-batch size = 20

learning rate = 0.1 (迭代100k和200k次的时候除以10)

卷积核s 1 = s 2 = s 3 = 3;  filter numbers a 1 = a 2 = 16 ; c =3 (参照2.2)

低通滤波器guided filter的半径是 15 (关于导向滤波(guided filter):https://blog.csdn.net/kuweicai/article/details/78385871)

【论文解读】深度残差网络去雨模型cvpr_Removing rain from single images via a deep detail network相关推荐

  1. CNN经典模型:深度残差网络(DRN)ResNet

    一说起"深度学习",自然就联想到它非常显著的特点"深.深.深"(重要的事说三遍),通过很深层次的网络实现准确率非常高的图像识别.语音识别等能力.因此,我们自然很 ...

  2. 大话深度残差网络(DRN)ResNet网络原理

    -- 原文发布于本人的微信公众号"大数据与人工智能Lab"(BigdataAILab),欢迎关注. 一说起"深度学习",自然就联想到它非常显著的特点" ...

  3. 论文笔记:深度残差网络

    论文笔记:深度残差网络 为何使用深度残差网络 深层卷积网络的退化问题 残差网络结构 残差结构块 快捷层的恒等映射 三种不同的网络结构 VGG-19 与 34-layer plain 残差网络结构 更深 ...

  4. 【论文泛读】 ResNet:深度残差网络

    [论文泛读] ResNet:深度残差网络 文章目录 [论文泛读] ResNet:深度残差网络 摘要 Abstract 介绍 Introduction 残差结构的提出 残差结构的一些问题 深度残差网络 ...

  5. 深度残差网络和Highway网络

    今天讲的这两种网络结构都是最新被业界针对图像处理问题提出的最新的结构,主要解决就是超深层的网络在训练优化中遇到的问题.说实话这两种模型就本身来说数学公式都不复杂,但是确实在实战中取得了非常好的效果(深 ...

  6. 【深度学习之ResNet】——深度残差网络—ResNet总结

    目录 论文名称:Deep Residual Learning for Image Recognition 摘要: 1.引言 2.为什么会提出ResNet残差网络呢? 3.深度残差网络结构学习(Deep ...

  7. 深度残差网络ResNet解析

    ResNet在2015年被提出,在ImageNet比赛classification任务上获得第一名,因为它"简单与实用"并存,之后很多方法都建立在ResNet50或者ResNet1 ...

  8. 经典卷积神经网络(二):VGG-Nets、Network-In-Network和深度残差网络

    上一节我们介绍了LeNet-5和AlexNet网络,本节我们将介绍VGG-Nets.Network-In-Network和深度残差网络(residual network). VGG-Nets网络模型 ...

  9. 深度学习 --- 深度残差网络详解ResNet

    本来打算本节开始循环神经网络RNN,LSTM等,但是觉得还是应该把商用比较火的网络介绍一下,同时详细介绍一下深度残差网络,因为他是基于卷积的.而后面的循环神经网络更多偏向于序列问题,偏向语音识别,自然 ...

  10. 详解ResNet(深度残差网络)

    引言 深度残差网络(Deep residual network, ResNet)的提出是CNN图像史上的一件里程碑事件,让我们先看一下ResNet在ILSVRC和COCO 2015上的战绩: ResN ...

最新文章

  1. 脑机综述(一) | 脑机接口在康复医学中的应用进展
  2. AOJ0033 Ball【贪心+序列处理】
  3. 【CoppeliaSim】使用 Lua 语言控制四旋翼无人机运行
  4. 我为什么鼓励工程师写blog
  5. 除了允许变量被const函数修改之外,'mutable'关键字是否有任何其他用途?
  6. Android预定义样式?android:attr/attribute、?attr/attribute和?attribute
  7. 宽凳公司关于无人驾驶高精地图的看法(2018.8)
  8. Android10.0应用图标隐藏方案(7.0-10.0)
  9. 剖析供应链金融业务发展态势及提升路径
  10. 基于centos7和windows 搭建局域网wiki.js知识管理库的两种解决方案
  11. Apache Felix HTTP Service
  12. BLOCKCHAINS VS. DISTRIBUTED DATABASES: DICHOTOMYAND FUSION
  13. zeppelin报错jdk版本低
  14. ASCII 编码对照表 一览表
  15. 手机屏幕xy坐标软件_软件工程中的xy问题
  16. 31年前的Beyond演唱会,是如何超清修复的?
  17. 中国托盘拆卸工行业市场供需与战略研究报告
  18. 停车场停车系统软件测试报告,智慧停车场系统各大功能系统的详解
  19. 利用ADS进行低噪声放大器(LAN)的设计
  20. Python 打造基于百度翻译的命令行翻译工具

热门文章

  1. 使用Windows Powershell卸载和安装Win10 原生应用的方法
  2. Numpy 笔记(二): 多维数组的切片(slicing)和索引(indexing)
  3. 浅层与深层、局部与全局、低级与高级特征的辨析
  4. Guass-newton
  5. android studio umake,Android Studio中NDK开发傻瓜教程(CMake)
  6. 微信登录提示逻辑不正确_微信逻辑错误无法登录
  7. php7中require_once,php require_once的使用方法总结
  8. Photoshop教程:超全的PS快捷键大全分享
  9. 基于android 10的国产手机,Android 10正式推送!这款国产手机已经首发了
  10. 计算机英语作业答案,大工20春《专业英语(计算机英语)》在线作业1题目【标准答案】...