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 条评论
登录 后参与评论

相关文章

来自专栏决胜机器学习

深层神经网络参数调优(五) ——超参数调试、batch归一化、softmax回归

深层神经网络参数调优(五) ——超参数调试、batch归一化、softmax回归 (原创内容,转载请注明来源,谢谢) 一、超参数调试 1、超参数 超参数是不直...

4158
来自专栏计算机视觉

空间金字塔池化Spatial pyramid pooling net,用于语义分割

这篇文章属于小笔记类型,了解空间金字塔的作用就好。 金字塔池化层有如下的三个优点,第一:他可以解决输入图片大小不一造成的缺陷。第二:由于把一个feature m...

3306
来自专栏用户画像

交叉验证

版权声明:本文为博主-姜兴琪原创文章,未经博主允许不得转载。

662
来自专栏WD学习记录

kmeans优化算法

①算法可能找到局部最优的聚类,而不是全局最优的聚类。使用改进的二分k-means算法。

1183
来自专栏marsggbo

Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归)

之前看过一遍,但是总是模模糊糊的感觉,也刚入门,虽然现在也是入门,但是对于一些概念已经有了比较深的认识(相对于最开始学习机器学习的时候)。所以为了打好基础,决定...

2127
来自专栏ml

对sppnet网络的理解

   接着上一篇文章提到的RCNN网络物体检测,这个网络成功的引入了CNN卷积网络来进行特征提取,但是存在一个问题,就是对需要进行特征提取图片大小有严格的限制。...

932
来自专栏贾志刚-OpenCV学堂

理解CNN卷积层与池化层计算

深度学习中CNN网络是核心,对CNN网络来说卷积层与池化层的计算至关重要,不同的步长、填充方式、卷积核大小、池化层策略等都会对最终输出模型与参数、计算复杂度产生...

1431
来自专栏SimpleAI

快速了解 Faster R-CNN

Fast R-CNN 有两个网络:建议窗口网络(RPN)生成建议窗口并使用这些窗口检测物体。与Fast R-CNN 的主要区别在于后者使用选择性搜索来生成建...

843
来自专栏null的专栏

简单易学的机器学习算法——EM算法

一、机器学习中的参数估计问题 image.png 二、EM算法简介     在上述存在隐变量的问题中,不能直接通过极大似然估计求出模型中的参数,EM算法是一种解...

8775
来自专栏ml

对sppnet网络的理解

 前言:    接着上一篇文章提到的RCNN网络物体检测,这个网络成功的引入了CNN卷积网络来进行特征提取,但是存在一个问题,就是对需要进行特征提取图片大小有严...

3666

扫码关注云+社区