深度学习论文(八)---DeepLabV1-SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED C

注:本篇算是半讲解半翻译吧,我真的觉得这篇论文写的很难理解.......可能是我水平不够,也可能作者省略了一些具体信息,主要是提供了他的idea吧。

但是DeepLab这个思路的确是不错,所以这个论文还是有必要看的。

1、导引

Our system works directly on the pixel representation, similarly to FCN ,Long et al. (2014).   他们的系统和FCN十分相似,也是直接对像素进行预测。

• we believe it is advantageous that segmentation is only used at a later stage, avoiding the commitment to premature decisions.   他们坚信分割的步骤放在最后的阶段要好一些,以此避免一些前面不成熟的预测。

•  The main difference between our model and other state-of-the-art models is the combination of pixel-level CRFs and DCNN-based ‘unary terms’. 他们的模型和其他的state-of-art的模型最大的区别就是他们把基于像素水平的CRFs和基于DCNN的一元表示 相结合。

• Our approach instead treats every pixel as a CRF node, exploits long-range dependencies, and uses CRF inference to directly optimize a DCNN-driven cost function. 我们的方法不是把每一个像素点为CRF节点,而是利用远程依赖关系,并使用CRF推理直接优化DCNN驱动的损失函数。 • We note that mean field had been extensively studied for traditional image segmentation/ edge detection tasks, but recently  Koltun  showed that the inference can be very efficient for fully connected CRF and particularly effective in the context of semantic segmentation  我们注意到,平均场已被广泛研究用于传统图像分割/边缘检测任务,但是最近Koltun表明,对于全连接的CRF,推理可以是非常有效的,并且在语义分割的上下文中特别有效 • we have re-purposed and finetuned the publicly available VGG-16 NET into an efficient and effective dense feature extractor for our dense semantic image segmentation system. 他们已经重新构建并且微调了大家广泛应用的VGG16 layers的模型。把它变成了一个高效且有效的密集特征提取器,来应用到他们的密集图像语义分割系统中。

2、EFFICIENT DENSE SLIDING WINDOW FEATURE EXTRACTION WITH THE HOLE ALGORITHM

运用 孔算法 的高效密集滑动窗口特征提取

we convert the fully-connected layers of VGG-16 into convolutional ones and run the network in a convolutional fashion on the image at its original resolution.  他们把VGG16模型中的全连接层全部转换成卷积层,然后运行这个网络。 其实得到的特征map还是很稀疏,

------------------------------------------------------------------------------------------------------------------------------------------------- 这里补充一下,VGG中卷积层的参数:stride=1,kernel_size = 3, padding =1, 所以进行卷积操作后:(H – 3 + 2 x 1)/1 + 1 = H,即卷积没有缩小图像的分辨率; 而VGG16Layer中有5个Maxpooling层,参数为:stride = 2, kernel_size = 2, padding =0; 所以:池化操作后:(H – 2)/2 + 1 = H/2,即图像分辨率减小一半,5个pooling层就是一共缩小了 2^5=32 倍, ----------------------------------------------------------------------------------------------------------------------------------------------------- 而本论文作者的目标是只让它缩小8倍就好,于是想了个办法: We skip subsampling after the last two max-pooling layers in the network of VGG16 and modify the convolutional filters in the layers that follow them by introducing zeros to increase their length (2X in the last three convolutional layers and 4x in the first fully connected layer). 这句话要分成两部分看,前半部分是对池化层的操作,后半部分是对卷积核的操作。 ①他们想skip the subsampling, 但是他们不是把pooling层直接去掉,而是把stride改成了1.然后还加上了padding = 1. 这个操作我在论文上似乎是没有看见详细说明,但是它的代码上是这么写的。这样的效果就是( H – 2 + 2 x 1) / 1 + 1 = H + 1,多了一个像素应该不影响把,它也没有详细解释这个问题,但是总之它把分辨率现在改回到基本不变了,所以就相当于少了两次缩小,就总共只缩小了8倍。 ②分辨率是改大了,但是就因此出现了一个问题,就是后面卷积层卷积核的感受野变了,因此想要利用原先的VGG16的weights进行微调就有问题。 所以他们想的idea对原卷积核填充0,也就是hole,把kernel试着变大。

We can implement this more efficiently by keeping the filters intact and instead sparsely sample the feature maps on which they are applied on using an input stride of 2 or 4 pixels, respectively. pool4的stride由2变为1,则紧接着的conv5_1, conv5_2和conv5_3中hole size为2。接着pool5由2变为1, 则后面的fc6中hole size为4。 这个就是他们提出的 hole algorithm

不过在具体实现上填0会带来额外的计算量,所以实际上是通过im2col调整像素的位置实现的,这里不展开,有兴趣的可以看看caffe源码(hole算法已经集成在caffe里了,在caffe里叫dilation)     于是,通过hole算法,得到了一个8s的feature map

3、CONTROLLING THE RECEPTIVE FIELD SIZE AND ACCELERATING DENSE COMPUTATION WITH CONVOLUTIONAL NETS

     控制感受野的大小,并且加速卷积网络的 密集计算

    After converting the network to a fully convolutional one, the first fully connected layer has 4,096 filters of large 7x7 spatial size and becomes the computational bottleneck in our dense score map computation.

在把VGG的后面的全连接层转换为卷积层之后,比如说第一个全连接层(即原来的FC6)现在的卷积filter的size就是7x7大小的了,这个计算量就有些大…

所以他们的思路是: We have addressed this practical problem by spatially subsampling (by simple decimation) the first FC layer to 4x4 (or 3x3) spatial size. 直接从7x7的范围中抽取一个4x4 (or 3x3)的范围以此来减小计算量、计算时间比原来减少了2-3倍。

4、DETAILED BOUNDARY RECOVERY: FULLY-CONNECTED CONDITIONAL RANDOM FIELDS AND MULTI-SCALE PREDICTION

细节边界恢复:完全连接的条件随机场和多尺寸预测

4.1 DEEP CONVOLUTIONAL NETWORKS AND THE LOCALIZATION CHALLENGE

DCNN score maps can reliably predict the presence and rough position of objects in an image but are less well suited for pin-pointing their exact outline. 得分图可以可靠地预测图像中对象的存在和粗略位置,但不太适合用于刻画精准的轮廓。 Deeper models with multiple max-pooling layers have proven most successful in classification tasks, however their increased invariance and large receptive fields make the problem of inferring position from the scores at their top output levels more challenging. 就是说DCNN用于分类确实很成功,但是它们的不变性和很大的感受野对于从得分图中精确定位还是有些难度。所以作者提出来他们的想法:

4.2 FULLY-CONNECTED CONDITIONAL RANDOM FIELDS FOR ACCURATE LOCALIZATION

基于完全连接的条件随机域的准确定位

CRF简单来说,能做到的就是在决定一个位置的像素值时(在这个paper里是label),会考虑周围邻居的像素值(label),这样能抹除一些噪音。但是通过CNN得到的feature map在一定程度上已经足够平滑了,所以short range的CRF没什么意义。于是作者采用了fully connected CRF,这样考虑的就是全局的信息了。

在全连接的CRF模型中,标签x 的能量可以表示为:

其中, θi(xi) 是一元能量项,代表着将像素 i分成label xi 的能量,二元能量项φp(xi,xj)是对像素点 i、j同时分割成xi、xj的能量。 二元能量项描述像素点与像素点之间的关系,鼓励相似像素分配相同的标签,而相差较大的像素分配不同标签,而这个“距离”的定义与颜色值和实际相对距离有关。所以这样CRF能够使图片尽量在边界处分割。最小化上面的能量就可以找到最有可能的分割。而全连接条件随机场的不同就在于,二元势函数描述的是每一个像素与其他所有像素的关系,所以叫“全连接”。

4.3 MULTI-SCALE PREDICTION

多尺度预测

we attach to the input image and the output of each of the first four max pooling layers a two-layer MLP (first layer: 128 3x3 convolutional filters, second layer: 128 1x1 convolutional filters)whose feature map is concatenated to the main network’s last layer feature map.

这句话是说,我们在input image后面和 前面的4个maxpooling层的输出后面 都 紧接一个2层的MLP(Multi-layer Perceptron,多层感知器)。这个两层的MLP的构造为:第一层:128个3x3大小的卷积核,第二层:128个1xx大小的卷积核。然后把这写MLP得出的feature map 和主网络最后一层得出的feature map 排在一起。

The aggregate feature map fed into the softmax layer is thus enhanced by 5 * 128 = 640 channels.

所以最后送入到softmax layer的feature map 就得到了增强,也就是多了这5 *128个channels的值。(我个人感觉这个操作有点FCN中skip layer的意思) 

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器之心

教程 | 详解如何使用Keras实现Wassertein GAN

选自Deeply Random 机器之心编译 参与:晏奇、李泽南 在阅读论文 Wassertein GAN 时,作者发现理解它最好的办法就是用代码来实现其内容。...

38110
来自专栏https://www.cnblogs.com/L

【Caffe篇】--Caffe从入门到初始及各层介绍

Caffe,全称Convolutional Architecture for Fast Feature Embedding。是一种常用的深度学习框架,主要应用在...

602
来自专栏人工智能头条

揭秘Kaggle神器xgboost

752
来自专栏CreateAMind

论文:生成模型采样-类比学习应用 代码

之前发的这篇文章(之前内容在文章底部)介绍了生成模型的高效采样及隐变量空间特征特点,最近的How to Train a GAN? Tips and tricks...

762
来自专栏人工智能头条

Hype:组合机器学习和超参数优化

1758
来自专栏机器之心

教程 | 初学者入门:如何用Python和SciKit Learn 0.18实现神经网络?

选自Springboard 作者:Jose Portilla 机器之心编译 参与:Jane W、吴攀 本教程的代码和数据来自于 Springboard 的博客...

29211
来自专栏机器之心

教程 | 用TensorFlow Estimator实现文本分类

3184
来自专栏语言、知识与人工智能

基于段落检索的无监督阅读理解介绍

2572
来自专栏ATYUN订阅号

深度学习:如何理解tensorflow文本蕴含的原理

文本的entailment(蕴涵)是一个简单的逻辑练习,用来判断一个句子是否可以从另一个句子推断出来。承担了文本的entailment任务的计算机程序,试图将一...

5594
来自专栏IT派

教程 | 用TensorFlow Estimator实现文本分类

本文选自介绍 TensorFlow 的 Datasets 和 Estimators 模块系列博文的第四部分。读者无需阅读所有之前的内容,如果想重温某些概念,可以...

1273

扫码关注云+社区