论文题目:《Fully Convolutional Networks for Semantic Segmentation》
论文地址:https://arxiv.org/abs/1411.4038

传统的基于CNN的语义分割方法

传统的基于CNN的语义分割方法为了对一个像素分类,使用该像素周围的一个图像块作为CNN的输入,用于训练和预测。这种方法有以下几个缺点:

1)存储开销很大、例如,对一个像素使用的图像块的大小为15×15,然后不断滑动窗口,每次滑动的窗口给CNN进行判别分类。因此,所需的存储空间根据滑动窗口的次数和大小急剧上升。
2)计算效率低下。相邻的像素块基本上是重复的,针对每个像素块逐个计算卷积,这种计算也有很大程度上的重复。
3)像素块的大小限制了感受野的大小。通常像素块的大小比整幅图像的大小小很多,只能提取一些局部特征,从而导致分类的性能受到限制。

1. FCN概述

通常CNN网络在卷积层之后会接上若干个全连接层, 将卷积层产生的特征图(feature map)映射成一个固定长度的特征向量。以AlexNet为代表的经典CNN结构适合于图像级的分类和回归任务,因为它们最后都期望得到整个输入图像的一个数值描述(概率),比如AlexNet的ImageNet模型输出一个1000维的向量表示输入图像属于每一类的概率(softmax归一化)。
       FCN对图像进行像素级的分类,从而解决了语义级别的图像分割(semantic segmentation)问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。
       如下图所示,在传统的CNN结构中,前5层是卷积层,第6层和第7层分别是一个长度为4096的一维向量,第8层是长度为1000的一维向量,分别对应1000个类别的概率。FCN将这3层表示为卷积层,卷积核的大小(通道数,宽,高)分别为(4096,7,7)、(4096,1,1)、(1000,1,1)。所有的层都是卷积层,故称为全卷积网络。

核心思想:
1)不含全连接层的全卷积网络,可适应任意尺寸的输入。
2)使用反卷积进行上采样扩大图像尺寸,能够输出精细的结果。
3)使用跳跃连接的结构,提升鲁棒性和精确性。

2. 网络结构

网络结构示意图:

网络结构细节图如下:

  1. 对原图进行 conv1、pool1 后图像缩小为原图的 1/2。
  2. 进行 conv2、pool2,图像缩小为原图的 1/4。
  3. 进行 conv3、pool3,图像缩小为原图的 1/8,此时保留 pool3 的输出结果(特征图)。
  4. 进行conv4、pool4,图像缩小为原图的 1/16,此时保留 pool4 的输出结果(特征图)。
  5. 进行 conv5、pool5,图像缩小为原图的 1/32。
  6. 进行将原全连接层变成卷积操作的 conv6、conv7,输出的特征图大小仍为原图的 1/32。

● FCN-32s
       直接将conv7之后只有原图1/32大小的特征图进行32倍上采样恢复到原图大小,然后进行预测。

● FCN-16s
       先将conv7之后只有原图1/32大小的特征图进行2倍上采样,此时特征图为原图的1/16;然后和pool4的输出(也是原图大小的1/16)进行融合;最后将融合后的特征图进行16倍上采样恢复到原图大小,再进行预测。
● FCN-8s
       先将conv7之后只有原图1/32大小的特征图进行4倍上采样,此时特征图为原图的1/8;然后将pool4输出的特征图进行2倍上采样得到原图1/8大小的特征图;接着将前两个处理之后的特征图和pool3的输出(也是原图大小的1/8)进行融合;最后将融合后的特征图进行8倍上采样恢复到原图大小,再进行预测。

3. 训练细节

训练过程分为四个阶段,如下:
1)第一阶段


       使用数据集对模型的分类backbone进行预训练,使卷积层获得提取相应特征的能力。最后两层红色的是全连接层。

2)第二阶段

       从特征小图(16×16×4096)预测分割小图(16×16×21),之后直接升采样为大图(300×300×21)。这里输出通道数为21的原因是:采用的PASCAL数据集中有20类,算上背景类一共21类。每个通道预测一类的像素。反卷积(橙色)的步长为32,故该网络被称为FCN-32s

3)第三阶段


       这个阶段上采样分为两次完成(橙色×2)。 在第二次升采样前,把第4个pooling层(绿色)的预测结果(蓝色)通过跃层结构融合进来,提升精确性。 第二次反卷积步长为16,这个网络称为FCN-16s。

4)第四阶段


       这个阶段上采样分为三次完成(橙色×3)。 进一步融合了第3个pooling层的预测结果。 第三次反卷积步长为8,记为FCN-8s。

4. 实验效果

5. FCN缺点

1)得到的结果还是不够精细。进行8倍上采样虽然比32倍上采样的效果好了很多,但是上采样的结果还是比较模糊,对图像中的细节不敏感。
2)对各个像素进行分类,没有充分考虑像素与像素之间的关系,即便是用卷积层替换了全连接层,但是依然是独立像素进行分类。

【语义分割】全卷积网络(Fully Convolutional Networks, FCN)详解相关推荐

  1. 开源|如何利用Tensorflow实现语义分割全卷积网络(附源码)

    导读:本项目是基于论文<语义分割全卷积网络的Tensorflow实现>的基础上实现的,该实现主要是基于论文作者给的参考代码.该模型应用于麻省理工学院(http://sceneparsing ...

  2. 彻底讲透FCN语义分割开山之作Fully Convolutional Networks

    FCN论文标题:Fully Convolutional Networks for Semantic Segmentation​ 论文下载地址:https://arxiv.org/abs/1411.40 ...

  3. 图卷积网络(Graph Convolutional Networks, GCN)详细介绍

    本文翻译自博客. 在这篇博文中会为大家详细地介绍目前使用广泛的图神经网络--图卷积网络(Graph Convolutional Networks, GCN)的相关知识.首先将带领大家直觉上感受其工作原 ...

  4. DL之SegNet:SegNet图像分割/语义分割算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之SegNet:SegNet图像分割/语义分割算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 导读 基于CNN的神经网络SegNet算法可进行高精度地识别行驶环境. 目录 SegN ...

  5. 【GCN】图卷积网络(GCN)入门详解

    机器学习算法与自然语言处理出品 @公众号原创专栏作者 Don.hub 单位 | 京东算法工程师 学校 | 帝国理工大学 图卷积网络(GCN)入门详解 什么是GCN GCN 概述 模型定义 数学推导 G ...

  6. FCN网络(Fully Convolutional Networks for Semantic Segmentation)

    一.概述 FCN是深度学习应用在图像分割的代表作, 是一种端到端(end to end)的图像分割方法, 让网络做像素级别的预测直接得出label map.因为FCN网络中所有的层都是卷积层,故称为全 ...

  7. FCN网络(Fully Convolutional Networks)

    首个端到端的针对像素级预测的全卷积网络 原理:将图片进行多次卷积下采样得到chanel为21的特征层,再经过上采样得到和原图一样大的图片,最后经过softmax得到类别概率值 将全连接层全部变成卷积层 ...

  8. 可变形卷积网络--Deformable Convolutional Networks

    https://arxiv.org/abs/1703.06211 Microsoft Research Asia Code coming soon 本文可以看做是对 Spatial Transform ...

  9. 【GCN】图卷积网络 Graph Convolutional Networks

    公众号关注 "视学算法" 设为 "星标",DLCV消息即可送达! 作者 | Frank Cao 专栏 | 深度学习 地址 | https://zhuanlan. ...

最新文章

  1. 硅谷产品实战-总结:14、如何用数据做出产品决定?
  2. anaconda-spyder-ipython终端控制台无法停止程序--问题解决
  3. 自学python数据分析要多久-数据分析培训班要学习多长时间?
  4. Java基础(二) 程序格式
  5. ContentType的集中数据编码格式
  6. qgraphicsitem 复制副本_如何在pyqt5中复制粘贴Qgraphicsitem?
  7. 一个合格网络管理员的成长经历
  8. 使用Spring使用Java发送电子邮件– GMail SMTP服务器示例
  9. 为什么jupyterlab运行程序的时候会自动停止_气象人的JupyterLab
  10. 从Xbox和Zune中学到的四门创业课
  11. Java基础---接口的使用
  12. maven 整体打包_Maven打包方式整理
  13. 贾跃亭:在性能、奢华和科技综合评比中 FF 91战胜了奔驰S迈巴赫、库里南
  14. 特征工程之特征预处理
  15. ansible读不到java_home_ansible执行带有环境变量的脚本不生效
  16. BZOJ 1007 [HNOI2008]水平可见直线 ——半平面交 凸包
  17. JSEclipse安装后无法打开js文件_火狐浏览器打开邮箱添加不了附件
  18. 单例模式(java代码实现)
  19. 80和443端口的区别
  20. meebo FireFox add-on

热门文章

  1. 5006.c++类中使用static变量bug
  2. 安装win10 无网络_微软已修复Win10“无网络连接”问题 已在Dev频道测试
  3. (3)散列函数设计:直接定址法
  4. ROS 教程之 vision: 摄像头标定camera calibration
  5. java main传入参数_Main方法中传入参数
  6. 贝叶斯网络学习Python环境搭建(pgmpy)
  7. 《Reids 设计与实现》第十九章 慢查询日志
  8. 平滑空间滤波器(附C语言实现代码)
  9. 初学Oracle的一点心得
  10. intellij idea开发工具