Fully Convolutional Networks for Semantic Segmentation

主要思想

传统的做图像分割的方式大概是这样的:

以某个像素点中心取一个区域,取图像块的特征做样本训练分类器,分类结果作为此像素点的结果

这样做缺点很明显,比如:

如何确定图像块的大小

从小的图像块(patch)中获得的上下文信息(contex)较少,且极端耗时

FCN的做法是训练一个end-to-end的网络,做pixel-wise的prediction,使用ground-truth作为监督信息,预测label map,实现semantic segmentation的任务,荣获CVPR2015的Best Paper

主要的改进是对传统的分类网络,比如googlenet,VGG16等,将其改造成fully convolutional network,原文如是说:

We adapt contemporary classification networks (AlexNet, the VGG net, and GoogLeNet) into fully convolutional networks and transfer their learned representations by fine-tuning to the segmentation task.

网络的修改

FCN的关键就是如何将传统的分类网络改造为全卷积的网络,FCN有个最大的好处就是输入图像的尺寸是任意的,输出和原图像相同尺寸的predict map

An FCN naturally operates on an input of any size, and produces an output of corresponding (possibly resampled) spatial dimensions

其它我总结的几个特点如下:

Extend deep classification architecture(AlexNet, VGG, GoogLeNet)

fine-tune, pixel-to-pixel

input of any size, output classification maps(heatmap)

deconvolution(upsample), can be learned

For pixelwise prediction, connect coarse output back to pixels

对于一个原始图像,将其放入FCN中,得到多个coarse output map,之后对得到的output map“映射”到原图,即得到最终的segmentation结果

convert classification nets into fully convolutional nets that produce coarse output maps. For pixelwise prediction, we need to connect these coarse outputs back to the pixels

那么具体是如何操作的呢?

将传统分类网络的最后的全连接层变为卷积层

这里比较难以理解,我举个具体的例子来说明,比如对于经典的分类网络AlexNet来说,其结构如下所示:

我们可以看到最后接着三个全连接层(FC6,FC7,FC8),假如要将此网络转换为FCN,可以如下这么做:

对于FC6(4096),使用4096个filter,filter的大小是6*6,做完以后大小为1*1*4096

对于FC7(4096),使用4096个filter,filter的大小是1*1,做完以后大小为1*1*4096

对于FC8(1000),使用1000个filter,filter的大小是1*1,做完以后大小为1*1*1000

我们其实可以看到,其实就是将全连接看成是卷积,和自身大小一样的filter去卷积则卷积之后的大小是1*1

示意图如下:

之后对得到的1*1*1000的输出,做upsampling(deconvolution)得到和原图一样大小的输出,所有输出合并之后得到如上图所示的heat map

当然这里作者的deconvolution做的很简单,就只是简单的双线性插值而已,这是个改进点

合并dense prediction

这里通过upsampling得到dense prediction,作者研究过3种方案:

shift-and-stitch

设原图与FCN所得输出图之间的降采样因子是f,那么对于原图的每个f*f 的区域(不重叠),”shift the input x pixels to the right and y pixels down for every (x,y) ,0 < x,y < f.” 把这个f*f区域对应的output作为此时区域中心点像素对应的output,这样就对每个f*f的区域得到了f^2个output,也就是每个像素都能对应一个output,所以成为了dense prediction

filter rarefaction

就是放大CNN网络中的subsampling层的filter的尺寸,得到新的filter:

其中s是subsampling的滑动步长,这个新filter的滑动步长要是为1的话,这样subsampling就没有缩小图像尺寸,最后可以得到dense prediction

以上两种方法作者都没有采用,主要是因为这两种方法都是trad-off的,原因是:

对于第二种方法, 下采样的功能被减弱,使得更细节的信息能被filter看到,但是receptive fileds会相对变小,可能会损失全局信息,且会对卷积层引入更多运算

对于第一种方法,虽然receptive fileds没有变小,但是由于原图被划分成f*f的区域输入网络,使得filters无法感受更精细的信息

deconvolution

upsampling的操作可以看成是反卷积(deconvolutional),卷积运算的参数和CNN的参数一样是在训练FCN模型的过程中通过bp算法学习得到

以上是对CNN的结果做处理,得到了dense prediction,而作者在试验中发现,得到的分割结果比较粗糙,所以考虑加入更多前层的细节信息,也就是把倒数第几层的输出和最后的输出做一个fusion,实际上也就是加和:

这样就得到第二行和第三行的结果,实验表明,这样的分割结果更细致更准确。在逐层fusion的过程中,做到第三行再往下,结果又会变差,所以作者做到这里就停了。可以看到如上对应的结果:

实验结果

资源

  1. FCN阅读笔记
  2. 如何将分类网络转换为FCN的caffe实现

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏磐创AI技术团队的专栏

TensorFlow 手写数字识别与一步一步实现卷积神经网络(附代码实战)

手写数字识别 接下来将会以 MNIST 数据集为例,使用卷积层和池化层,实现一个卷积神经网络来进行手写数字识别,并输出卷积和池化效果。 数据准备 MNIST 数...

3636
来自专栏小小挖掘机

查收一份附带答案的面经!

1.1.1 全量梯度下降(Batch gradient descent) 每次使用全量的训练集样本来更新模型参数,即θ=θ−η⋅∇θJ(θ)。 优点:每次更新都...

753
来自专栏AI研习社

视频 | 硅谷深度学习网红传授超参数优化宝典

AI 研习社按:今天为大家带来硅谷深度学习网红 Siraj 在人工智能在线大会 AI WITH THE BEST(AIWTB)上的演讲,雷锋字幕组独家译制。本次...

3455
来自专栏机器学习算法全栈工程师

【随笔记录】1*1卷积核的作用

之前只是知道1x1的卷积核用在Inception模块中具有降维的作用,并没有认真的思考它是怎么样实现降维的,以及它还有哪些作用。于是查阅了一些资料,并记录了它...

1405
来自专栏机器之心

CVPR 2018 | 新型语义分割模型:动态结构化语义传播网络DSSPN

选自arXiv 作者:Xiaodan Liang、Hongfei Zhou、Eric Xing 机器之心编译 参与:乾树、路雪 近日,来自 CMU、Petuum...

3576
来自专栏人工智能头条

CMU最新视觉特征自监督学习模型——TextTopicNet

作者 | Yash Patel,Lluis Gomez,Raul Gomez,Marcal Rusinol,Dimosthenis Karatzas, C.V....

991
来自专栏和蔼的张星的图像处理专栏

2. 神经网络之BN层背景BN使用BN在CNN上的使用。

BN,全称Batch Normalization,是2015年提出的一种方法,在进行深度网络训练时,大都会采取这种算法。 原文链接:Batch Normali...

4244
来自专栏机器学习算法全栈工程师

深度学习以及卷积基础

作者:石文华 编辑:龚 赛 介 绍 ? 深度学习是机器学习的一个分支,是基于数据来学习表示数据的一组算法。下面我们列出最受欢迎的一些深度学习算法。 卷...

3778
来自专栏ATYUN订阅号

一文带你认识深度学习中不同类型的卷积

卷积(convolution)现在可能是深度学习中最重要的概念。靠着卷积和卷积神经网络(CNN),深度学习超越了几乎其它所有的机器学习手段。 ? 这篇文章将简要...

3859
来自专栏用户2442861的专栏

循环神经网络教程第一部分-RNN简介

作者:徐志强 链接:https://zhuanlan.zhihu.com/p/22266022 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业...

821

扫码关注云+社区