文章转自:同作者个人微信公众号【机器学习炼丹术】。欢迎交流沟通,共同进步,作者微信:cyx645016617

0 综述

这篇文章的最大特色自然是提出了DRN,Dilated Residual Networks,在残差网络的基础上加入了膨胀卷积。

膨胀卷积,又叫做空洞卷积,是在卷积核参数不变的基础上,增加视野域的一种手段。通过使用膨胀卷积,可以放大最深层特征图的尺寸并且保持视野域大小不变,说白了就是少了几个池化层,然后用膨胀卷积维持同样大小的视野域。比方说,resnet众所周知,包括stem中的下采样和4个layer的下采样,5次下采样,整体的步长为32;但是DRN中,整体步长仅为8。

当然文章如果仅仅是把碰撞卷积代替一般卷积,那么这篇文章就毫无特色了。碰撞卷积会引出一个degridding效应,如何解决这个问题才是文章的核心。

再加上一句,虽然模型的参数没有改变,但是因为增加了特征图的尺寸,计算量和内存消耗必然有增加,请大家仁者见仁。

1 空洞卷积

这个长话短说,直接看图:

dilation是一个参数,如果是1的话,就是上图左图的常规卷积核,如果dilation是2的画,就变成右边的膨胀卷积的样子。dilation表示卷积核中参数相邻的距离。

2 结构变化

先来看Resnet的结构图:

输入的图片是224x224大小的,第一次下采样在stem中(图中的conv1),随后的下采样在每一层layer的第一个卷积层前面。

DRN结构没有了resnet最后的两次下采样,也就是说,特征图在28x28的大小之后就不再变小了。不再减小特征图尺寸,那么就要增加卷积核的膨胀系数

上图中展示的是后两次下采样的resnet和DRN的区别,可以看到,DRN没有后两次下采样,因此特征图的尺寸都相同。

  • 但是DRN在本该第四次采样的卷积过程中,将膨胀系数改成2,这样保持相同的视野域;
  • 在本该第五次采样的卷积过程中,将膨胀系数改成4,这样保持相同的视野域。

3 degridding

使用膨胀卷积来代替下采样,会产生degriding栅格化问题

这种情况产生的原因在原文中有这样的一句解释:

Gridding artifacts occur when a feature map has higher-frequency content than the sampling rate of the dilated convolution.

就是说,当一某一个特征的重要性超过采样率。作者给出了这样的一个例子:

上面图(a)是一个单个像素异常重要的特征图,然后经过一个膨胀卷积,变成(c),变成网格状的输出。可以说gridding artifiacts是膨胀卷积性质产生的现象。

为了解决这样的问题,作者对DRN作出了改进:

  1. DRN-B,DRN-C取消了pooling层,改用stride=2的卷积作为下采样,因为作者发现pooling会让degridding更加严重
  2. 此外,作者在DRN-B和DRN-C的最后加上了膨胀系数为2和1的几层卷积层,来消除degridding现象。其中DRN-C取消了最后几层卷积的跳层结构。这个非常好理解,毕竟膨胀卷积会产生degridding,那么我就让最后的输出是用一般的卷积输出就避免了这种结构,然后跳层结构会让degridding直接连入最后的输出结果,所以取消了

因此在上面的展示图汇中,DRN-C的输出的语义分割效果图,非常丝滑。

4 总结

效果有非常大的提高。这个不降低特征图的尺寸,从而提高了小物体的目标检测的效果。值得尝试。

5 如何实现

这个也挺好实现的,我们记住:

  1. 用stride=2的卷积层代替pooling层;
  2. 后面两个下采样取消,使用膨胀系数2和4的卷积代替;
  3. 最后在加上膨胀系数为2和1的卷积层消除degridding现象。

图像分割论文 | DRN膨胀残差网络 | CVPR2017的更多相关文章

  1. 深度残差网络(DRN)ResNet网络原理

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

  2. Deep Residual Learning for Image Recognition(残差网络)

    深度在神经网络中有及其重要的作用,但越深的网络越难训练. 随着深度的增加,从训练一开始,梯度消失或梯度爆炸就会阻止收敛,normalized initialization和intermediate n ...

  3. 残差网络(Residual Networks, ResNets)

    1. 什么是残差(residual)? “残差在数理统计中是指实际观察值与估计值(拟合值)之间的差.”“如果回归模型正确的话, 我们可以将残差看作误差的观测值.” 更准确地,假设我们想要找一个 $x$ ...

  4. 论文笔记:分形网络(FractalNet: Ultra-Deep Neural Networks without Residuals)

    FractalNet: Ultra-Deep Neural Networks without Residuals ICLR 2017 Gustav Larsson, Michael Maire, Gr ...

  5. Dual Path Networks(DPN)——一种结合了ResNet和DenseNet优势的新型卷积网络结构。深度残差网络通过残差旁支通路再利用特征,但残差通道不善于探索新特征。密集连接网络通过密集连接通路探索新特征,但有高冗余度。

    如何评价Dual Path Networks(DPN)? 论文链接:https://arxiv.org/pdf/1707.01629v1.pdf在ImagNet-1k数据集上,浅DPN超过了最好的Re ...

  6. CNN卷积神经网络_深度残差网络 ResNet——解决神经网络过深反而引起误差增加的根本问题,Highway NetWork 则允许保留一定比例的原始输入 x。(这种思想在inception模型也有,例如卷积是concat并行,而不是串行)这样前面一层的信息,有一定比例可以不经过矩阵乘法和非线性变换,直接传输到下一层,仿佛一条信息高速公路,因此得名Highway Network

    from:https://blog.csdn.net/diamonjoy_zone/article/details/70904212 环境:Win8.1 TensorFlow1.0.1 软件:Anac ...

  7. 关于深度残差网络(Deep residual network, ResNet)

    题外话: From <白话深度学习与TensorFlow> 深度残差网络: 深度残差网络的设计就是为了克服这种由于网络深度加深而产生的学习效率变低,准确率无法有效提升的问题(也称为网络退化 ...

  8. 深度残差网络——ResNet学习笔记

    深度残差网络—ResNet总结 写于:2019.03.15—大连理工大学 论文名称:Deep Residual Learning for Image Recognition 作者:微软亚洲研究院的何凯 ...

  9. 从头学pytorch(二十):残差网络resnet

    残差网络ResNet resnet是何凯明大神在2015年提出的.并且获得了当年的ImageNet比赛的冠军. 残差网络具有里程碑的意义,为以后的网络设计提出了一个新的思路. googlenet的思路 ...

随机推荐

  1. 关于_tostring[php]的另类利用

    收获 反序列化tostring的考点不一定要考察调用一个Class,也可以使用echo来进行考察 tostring()方法:在直接输出对象引用的时候,就不会产生错误,而是自动调用了__tostring ...

  2. python 字符串拼接 + 与 join 的区别

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 python在进行字符串的拼接时,一般有两种方法,一种是使用+直接相加,另一种是使用join a = ...

  3. Java基础进阶:时间类要点摘要,时间Date类实现格式化与解析源码实现详解,LocalDateTime时间类格式化与解析源码实现详解,Period,Duration获取时间间隔与源码实现,程序异常解析与处理方式

    要点摘要 课堂笔记 日期相关 JDK7 日期类-Date 概述 表示一个时间点对象,这个时间点是以1970年1月1日为参考点; 作用 可以通过该类的对象,表示一个时间,并面向对象操作时间; 构造方法 ...

  4. rocketMq broker.conf全部参数解释

    #4.7.1版本 #所属集群名字brokerClusterName=rocketmq-cluster#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Am ...

  5. day021|python之面向对象进阶1

    面向对象进阶 目录 面向对象进阶 1 继承 1.1 继承入门 1.1.1 继承基础 1.1.2 类的基本使用 1.2 多继承 1.2.1 多继承的基本使用 1.2.2 多继承以后的重复性 1.3 类的 ...

  6. RocketMQ(七):高性能探秘之线程池

    上一篇文章讲了如何设计和实现高并发高性能的应用,从根本上说明了一些道理.且以rocketmq的mappedFile的实现作为一个突破点,讲解了rocketmq是如何具体实现高性能的.从中我们也知道,m ...

  7. [LeetCode]求两个链表的焦点--Intersection of Two Linked Lists

    标题题目地址 1.解题意 求解两个链表的焦点,这个交点并不是焦点的值相等,而是需要交点之后的数据是完全相等的. 落实到java层面,就是交点处的对象是同一个对象即可. ps:我最开始没有读懂题目,然后 ...

  8. Spring Cloud 各个组件角色简介

    概述 SpringCloud 是一个全家桶式的技术栈,包含了很多组件:包含 Eureka.Ribbon.Feign.Zuul .Hystrix等.每个组件完成对应的功能 组件介绍 - 服务发现 Eur ...

  9. ORB-SLAM3 细读单目初始化过程(上)

    作者:乔不思 来源:微信公众号|3D视觉工坊(系投稿) 3D视觉精品文章汇总:https://github.com/qxiaofan/awesome-3D-Vision-Papers/ 点击上方&qu ...

  10. 不吹不黑,jupyter lab 3.0客观使用体验

    1 简介 jupyter lab于近期发布了其具有里程碑意义的3.0版本,随之带来的一些重要新特性,想必广大读者朋友已在各大公众号所翻译转载的jupyter lab团队官方介绍文章中知晓了很多. 图1 ...