深度学习论文(九)---DeepLabV2-Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution,

DeepLabV2对主要在V1的基础上做了一些改进。

1.回顾Atrous Convolution

作者先回顾了一下V1里面讲到的内容

Atrous Convolution 也就是V1那篇论文里面的hole algorithm,本篇论文依然先叙述了一下这个方法:

一维时,就如下这个公式所述,

The rate parameter r corresponds to thestride with which we sample the input signal.

r表征了要填进去的0的个数,个数为(r-1)个,所以标准的卷积是r=1,也就是不插0;

二维时如下图所示:

上面一行表示原来的一些方法比如FCN这种,图像的分辨率缩小了,就算增采样之后,最终也只能获取部分的像素点的位置信息。 下面一行,表示采用插了0的卷积核去对原图像进行卷积,尽管filter的size变大了,但是他们只考虑卷积核中非零的值,所以其实the number of filter parameters and the number of operations per position stay constant。 然后作者说的确可以使用一连串的Atrous Convolution来使网络最后输出的结果feature map的分辨率和原始图像的分辨率一样大,但是这样计算量就显得有点大,所以他们是采用了一种混合的方法: …but this ends up being too costly. We have adopted instead a hybrid approach that strikes a good efficiency/accuracy trade-off, using atrous convolution to increase by a factor of 4 the density of computed feature maps, followed by fast bilinear interpolation by an additional factor of 8 to recover feature maps at the original image resolution. 上面这段话的意思是,他们并不是把整个网络都运用成Atrous Convolution,而是既用了Atrous Conv, 也用了传统的思路—增采样。

所以他称之为混合的方法(a hybrid approach)。 具体来讲,就是只运用Atrous Conv使得feature map能够达到原来的密度的4倍就ok了,然后使用双线性插值法来进行插值处理(也就是简单的增采样),再把feature map放大8倍,这样就使得分辨率恢复到原来的大小了(4x8=32)。 (注,作者举这样说是因为他基于的VGG16Layer模型,这个模型的5个pooling层让图片总共缩小了2^5=32倍.详见DeepLabV1的论文,我上篇博文也讲了)

2、Atrous Convolution的变动

Atrous Convolution也能使得我们能扩大卷积核的感受野!

Atrous convolution with rate r introduces r-1 zerosbetween consecutive filter values, effectively enlarging the kernel size of a kxk filter to ke= k + (k - 1)(r - 1) without increasing the numberof parameters or the amount of computation.

然后作者提到有两种方法来实现Atrous Convolution:

The first is to implicitly upsample the filters by inserting holes (zeros), or equivalently sparsely sample the input feature maps

第一个是通过插入空洞(零)来隐式地对kernel进行上采样,或者等效稀疏地对输入特征图进行采样。他们在之前的工作中用的就是这种方法,比如DeepLabV1中用的就是这个方法。

to subsample the input feature map by a factor equal to the atrous convolution rate r, deinterlacing it to produce r2 reduced resolution maps, one for each of the r x r possible shifts.

对输入feature map进行降采样,降采样率设置为 atrous convolution rate r,对其进行去隔行操作以获得r^2大小的分辨率减小的maps,……

然后用这种方式进行操作,我们的卷积kernel就不用进行改变,还是用标准的kernel。

3、Multiscale ImageRepresentations using Atrous Spatial Pyramid Pooling

多尺度处理

这里他们也提及两个方法:

The first approach amounts to standardmultiscale processing.

第一个是标准的多尺度处理。我们使用共享相同参数的并行DCNN分支从多个(我们的实验中有三个)提取原始图像的重新定标版本的DCNN分数图。

We extract DCNN score maps from multiple(three in our experiments) rescaled versions of the original image usingparallel DCNN branches that share the same parameters.

他们从多个(他们的实验中是3个)经过重新缩放过的原始图像来提取DCNN得分图,利用多个并行的、共享相同参数的DCNN分支。

简单点说就是把原来的图像缩放一下得到几个尺寸不同的图,然后把这些图都各自送进相同的DCNN处理。

为了产生最终的结果,他们对各个分支的输出map都采用双线性插值的方法来恢复到原始图像的分辨率大小,然后融合他们,

融合的办法是对于每个点都取这些不同的map中的最大的那个值就ok。

The second approach is inspired by thesuccess of the R-CNN spatial pyramid pooling method.

第二中方法是收到R-CNN中的空间金字塔池化方法的启发:

这种方法显示,对于任意尺度的一块区域,都能通过重采样 在单一尺度提取的卷积特征 来准确的且有效的被分类。

因此他们提出了“atrousspatial pyramid pooling” (DeepLab-ASPP)

具体来说,就是使用多个不同采样率的atrous conv layers,被不同的采样率提取出的feature会进一步在各自独立的分支中进行处理,最后融合到一起,得到最终的结果。如图所示:

4、总结

所以DeepLabV2相较于V1来说,做了两个改动:

①atrous的方法改了一下;

②提出了ASPP方法,这个是重点,

做实验的对比如下:

图7,左侧是原来的单尺度处理,右侧是V2的多尺度处理

表3:显示了添加CRF前后准确度的提升,以及是否采用ASPP和ASPP的采样率的大小(也就是感受野的大小)对结果的影响。

然后就没了,谢谢观看。╰( ̄▽ ̄)╮

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ml

朴素贝叶斯分类器(离散型)算法实现(一)

1. 贝叶斯定理:        (1)   P(A^B) = P(A|B)P(B) = P(B|A)P(A)   由(1)得    P(A|B) = P(B|...

3597
来自专栏拭心的安卓进阶之路

Java 集合深入理解(6):AbstractList

今天心情比天蓝,来学学 AbstractList 吧! ? 什么是 AbstractList ? AbstractList 继承自 AbstractCollec...

20810
来自专栏刘君君

JDK8的HashMap源码学习笔记

3288
来自专栏Phoenix的Android之旅

Java 集合 Vector

List有三种实现,ArrayList, LinkedList, Vector, 它们的区别在于, ArrayList是非线程安全的, Vector则是线程安全...

692
来自专栏赵俊的Java专栏

从源码上分析 ArrayList

1211
来自专栏java闲聊

JDK1.8 ArrayList 源码解析

当运行 ArrayList<Integer> list = new ArrayList<>() ; ,因为它没有指定初始容量,所以它调用的是它的无参构造

1232
来自专栏xingoo, 一个梦想做发明家的程序员

AOE关键路径

这个算法来求关键路径,其实就是利用拓扑排序,首先求出,每个节点最晚开始时间,再倒退求每个最早开始的时间。 从而算出活动最早开始的时间和最晚开始的时间,如果这两个...

2637
来自专栏MelonTeam专栏

ArrayList源码完全分析

导语: 这里分析的ArrayList是使用的JDK1.8里面的类,AndroidSDK里面的ArrayList基本和这个一样。 分析的方式是逐个API进行解析 ...

4699
来自专栏xingoo, 一个梦想做发明家的程序员

Spark踩坑——java.lang.AbstractMethodError

百度了一下说是版本不一致导致的。于是重新检查各个jar包,发现spark-sql-kafka的版本是2.2,而spark的版本是2.3,修改spark-sql-...

1260
来自专栏计算机视觉与深度学习基础

Leetcode 114 Flatten Binary Tree to Linked List

Given a binary tree, flatten it to a linked list in-place. For example, Given...

2098

扫码关注云+社区