船长黑板报所有文章和代码的最新版本均在

Captain1986/CaptainBlackboard​github.com

维护,知乎不做维护

您的Star是对我的鼓励

图像分割是计算机视觉中比较常见的技术,广泛应用于智能交通、自动驾驶等领域。恰好船长最近正在做图像分割的项目,也调研了一些图像分割的经典方法,准备把用CNN做图像分割的方法都做个记录,这里是第一篇FCN,原始论文发表于15年的CVPR,属于用深度学习做图像分割的挖坑之作(褒义)。

**欢迎探讨,本文持续维护。**

## 实验平台

N/A

## 语义分割:从整体图片分类到像素级分类

在FCN提出之前,CNN(AlexNet,VGG,GoogLeNet,RCNN和SPPNet)都已经在图像分类和目标检测领域攻城拔寨,既然CNN可以在整图分类和部分图片分类上取得成功,那么把CNN来做pixel-to-pixel的分类进而解决图像分割问题也就是可以想象的了。

以AlexNet为例,它的开始的几层是卷积层,最后卷积层后面连接全连接Softmax层输出一个长度为1000的向量代表分类的类别概率。它的最后输出是针对整个图的分类结果,此时空间信息消失了。如果在去掉全连接层,换上卷积层,那么一样也可以输出分类的结果,还保存了空间维度上的信息,示意图如下图所示:

这里就不再赘述,在[《D#0025-CNN中使用卷积代替全连接》](Captain1986/CaptainBlackboard)已有比较详细的介绍,感兴趣的朋友可以去看。

然后,既然FCN可以生成整张图大小的热力图,那么如果这个图的大小和输入图像大小一致,且有了输入图中每个像素的真值标签(Ground Truth),那么就可以用这个标签来监督FCN的训练,让热力图和标签趋向一致,原理如下图所示。有了每个像素的分类信息,那么做分割就是个太简单的事情了。

## FCN做分割的网络架构

### 基础网络

作者试用了AlexNet,VGG-16,VGG-19和GoogLeNet等在分类任务上表现较好的网络,首先把它们的Softmax砍掉,第二步把全连接层改成卷积层,第三步附加一个1x1的卷积层生成21个PASCAL分类的热力图,最后添加一个双线性采样的upsample层作为Deconvolution层来把热力图扩充到输入图像的分辨率。在做了这些改造之后,如上图所示,实验发现复用了VGG-16的卷积部分的效果最好,VGG-16可以作为特征提取的主干网络。

### Skip连接Combining what and where

像VGG这样的网络是一层一层的层次性结构,不同的层感受野不同,特征图所能表达的含义也不同。浅层的特征感受野小,可以表达一些精细的特征,能回答**在哪里**的问题;而深层的特征感受野大,适合表达一些整体的语义,适合回答**是什么**的问题。如果把不同层次的特征图融合起来,整个网络形成一个有向无环图DAG,那么应该适合于分割这类既要回答是什么,又要(精确到像素级地)回答在哪里的问题。

上图是FCN的网络结构图,VGG不同层的特征在upsample之后会进行(sum或者concate)融合,最终融合到pool3这一层,得出来一个和原图大小一样的图。

上图可以看出,不做不同层特征图的融合会怎么样。可以看到,**融合的浅层特征越多,分割得越精细**。

上表是作者给出的实验数据,具体地证明了上上图的结论。

### UpSample

在类似VGG这样的分类网络中,因为卷积Stride和Pooling层的作用,特征图的空间分辨率是随着层数越来越深递进地越来越小的,但是分割要做pixel-to-pixel的分类任务,真值标签是原图分辨率地像素级的图,那么分割网络的输出也要是同样的分辨率,即输入图片大小的分辨率。

FCN作者这里为了放大特征图分辨率采用了很简单地x2 Upsample层,具体来说就是添加了一个**类似于双线性插值**的层,来根据位置坐标计算输出图的像素级标签。当然,这里说是类似于双线性插值的层,是因为这一层它的插值系数是可以学习的,不是定死了的。

## 总结

本文介绍了一种早期较为经典的分割网络FCN,可端对端地进行全图训练。该网络特征提取部分还是基于VGG-16,改造成全卷积网络。添加了Skip连接融合浅层细节和深层语义特征,采用了可学习的UpSample层使网络输出分辨率和输入一致。

## 参考资料

+ [《D#0025-CNN中使用卷积代替全连接》](Captain1986/CaptainBlackboard)

+ [Fully Convolutional Networks for Semantic Segmentation](https://arxiv.org/pdf/1411.4038.pdf)

+ [Fully Convolutional Networks for Semantic Segmentation](https://arxiv.org/pdf/1605.06211.pdf)

fcn网络训练代码_用FCN做分割相关推荐

  1. fcn网络训练代码_另辟蹊径,中科院自动化所等首次用图卷积网络解决语义分割难题...

    使用 CNN 处理图像问题已经是常规操作,但此类方法会造成局部位置信息的损失.如何解决这个问题呢?来自中科院自动化所和北京中医药大学的研究者另辟蹊径,提出用图卷积网络解决语义分割问题. 选自arXiv ...

  2. fcn网络训练代码_FCN网络训练 菜鸟版

    论文全名:Fully Convolutional Networks for Semantic Segmentation 全卷积神经网络 FCN代码运行详解: 运行平台: Ubuntu 14.04 + ...

  3. FCN网络训练训练——从零开始

    FCN网络训练训练--从零开始 一 数据集准备 在/fcn.berkeleyvision.org/data/下新建文件夹 sbdd trianval: http://www.eecs.berkeley ...

  4. FCN网络训练 SIFTFLOW数据集

    论文全名:Fully Convolutional Networks for Semantic Segmentation 全卷积神经网络 FCN代码运行详解: 运行平台: Ubuntu 14.04 + ...

  5. 【21】FCN网络训练及理解

    准备工作 代码地址:https://github.com/bat67/pytorch-FCN-easiest-demo 论文参考:全卷积网络 FCN 详解 FCN详解与pytorch简单实现(附详细代 ...

  6. 训练代码_代码简介:是的,有完全免费的代码训练营

    训练代码 Here are three stories we published this week that are worth your time: 这是我们本周发布的三个值得您关注的故事: Yo ...

  7. 语义分割FCN网络训练自己的数据集_未完待续

    下载PASCAL VOC2012数据集 wget https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar 参考文献: https:// ...

  8. 训练代码_无需一行代码,完成模型训练和部署,这个AI工具开始公测

    本文转载自淘系技术,文末附官网下载链接. 阿里巴巴淘系技术开源轻量级深度学习推理引擎 MNN 以来,得到了业界的普遍认可 -- 数十家企业成为 MNN 的用户,不乏有一线科技企业:此外,MNN 还与上 ...

  9. 贝叶斯网络python代码_贝叶斯网络,看完这篇我终于理解了(附代码)!

    1. 对概率图模型的理解 概率图模型是用图来表示变量概率依赖关系的理论,结合概率论与图论的知识,利用图来表示与模型有关的变量的联合概率分布.由图灵奖获得者Pearl开发出来. 如果用一个词来形容概率图 ...

最新文章

  1. java方法生命周期_Java线程的第二种实现方式以及生命周期
  2. svn 1.6 linux 下载,LINUX下Subversion1.6.17 部署
  3. java调python报错Cannot create PyString with non-byte value
  4. IDF 实验室 初探乾坤
  5. 《Javascript入门学习全集》 Javascript学习第一季(7)
  6. 如何制作一款HTML5 RPG游戏引擎——第五篇,人物人物特效
  7. c语言txt操作,C语言文件操作总结
  8. Java虚拟机类加载机制--类加载的过程详解
  9. ConcurrentLinkedQueue since java1.5
  10. 系统集成项目管理工程师(试题分析、考试大纲、教材目录)
  11. Windows10磁盘分区和扩展
  12. react 面试 笔记
  13. 户外运动耳机如何选择、最优秀的五款户外运动耳机推荐
  14. IOS获取屏幕分辨率
  15. 1.UEFI-edk2 开发环境搭建
  16. Anaconda/Conda创建环境时报错的解决方案
  17. Buck零电压准谐振变换器
  18. 关于“参商两曜斗西东”中“参商”和“两曜”具体指什么
  19. 数字签名算法MD5和SHA-1的比较
  20. Layui 弹出层插件

热门文章

  1. Instagram 在 PyCon 2017 的演讲摘要
  2. Redis中布隆过滤器的使用及原理
  3. 树的高度 递归法和非递归法
  4. JAVA程序设计----多线程(上)
  5. 【PAT甲级 排序】1096 Consecutive Factors (20 分) C++ 全部AC
  6. Hadoop推测执行(以空间换取时间)
  7. 服务器如何安装多系统,服务器如何安装双操作系统
  8. css fix 手机端,移动端布局fixed问题解决方案
  9. 洛谷——P1219 八皇后
  10. 大话synchronize底层原理