个人博客:http://www.chenjianqu.com/

原文链接:http://www.chenjianqu.com/show-81.html

文:Jonathan Long,Evan Shelhamer,Trevor Darrell.Fully Convolutional Networks for Semantic Segmentation.CVPR 2015

素质三连

1.论文贡献

提出了基于VGG16的FCN语义分割模型,将浅层的表征信息和深层的语义信息结合起来,产生准确、精细的语义分割。

关键点 :

1) 卷积化(Convolutional)

2)上采样(Upsample)

3)跳跃结构(Skip)

2.实验结果

达到语义分割的SOTA,在VOC 2012上达到62.2的mean IU,每张图片分割时间少于0.2s。

3.待解决的问题

分割结果不够精细。

语义分割

学习图像处理时就知道了图像语义分割的概念,即把一张图片分割为若干个特定的、具有独特性质的区域。在2000年之前,主要通过阈值分割、区域分割、边缘分割、纹理特征、聚类等方法,2000年到2010年有基于图论、聚类、分类以及聚类和分类结合的方法,2010年以后主要通过神经网络进行分割,而本文提出的FCN则是深度学习语义分割的开山之作。从输入输出的角度看,语义分割就是将输入图片的每一个像素进行分类,因此语义分割也被视为一种dense prediction。语义分割的实例如下:

语义分割和实例分割的不同之处在于它不区分同一类别的实体。语义分割模型接收RGB/灰度图片作为输入,输出同样分辨率的分割图,分割图的每个像素是对应输入图片像素的预测标签,如下:

分割图的每个像素都是一个One-hot向量,即分割图的不同通道对应不同的类别:

应用场景:

A.自动驾驶

B.医学图像诊断

FCN语义分割模型

1.模型提出

Fully Convolutional Network(FCN,全卷积网络)是一个端到端的、像素到像素的语义分割模型。端对端(end to end)的意思就是输入到输出由一个模型搞定,优点是减少了人工操作,模型整体契合度增加,缺点是增加了模型的复杂度,降低了模型的可解释性。全卷积的意思是整个网络所有的层都是卷积层。本文提到的FCN指论文提出的用于语义分割的模型。

全卷积最早出现于拓展LeNet用于识别手写数字,后来在OverFeat中,使用全卷积网络用于定位和检测。有很多工作是使用CNNs进行密集预测(dense prediction),常用以下机制 1.小模型,限制了容量和感受野,2.使用patchwise training 3.使用superpixel projection,random field regularization,filtering,local classification进行后处理。4.输入移位和输出交错,比如OverFeat里面的offset pooling。5.多尺度金字塔处理。6.饱和tanh非线性。7.使用集成模型。但是FCN并不使用以上机制,而是先在ImageNet上预训练大型CNNs(比如VGG16),然后将其转换为FCN,添加新的层,最后进行微调。

在这篇论文之前,有人用CNNs进行语义分割,他们用周围的像素预测某个像素的类别,即patchwise,需要预处理或后处理,使用小型CNNs。相比之下,FCN是像素到像素,即pixelwise,更高效、直接,不需要预处理和后处理,使用预训练的大型CNNs进行fine-tuning:

语义分割要解决语义和位置之间的内在冲突:全局信息解决what(是什么),局部信息解决where(在哪里)。FCN使用深层特征层级( Deep feature hierarchies)局部到全局金字塔(local-to- global pyramid)中共同编码位置和语义,这里作者提出一个叫”skip”新架构,将深层的、粗糙的语义信息和浅层的、精细的表征信息结合起来。

2.FCN原理和架构

像LeNet AlexNet这样的分类模型,由于FC层的存在,只能接收固定分辨率的图片。因此可以像OverFeat一样,将FC层转换为1x1卷积层,就可以接收不同的分辨率的输入。

语义分割需要输出与原图相同分辨率的分割图,而1x1卷积后得到的是粗糙的、抽象的、低分辨率的特征图。从粗糙的特征图中得到密集预测(也就是分割图)的方法,OverFeat使用的是shift-and-stitch(或称为offset pooling)方法,而FCN使用的是插值的方法。学过图像处理的都知道,图像放大采用插值方法,比如最近邻插值,双线性插值等。这里采用插值的方法将低分辨率特征图映射到高分辨率的分割图,采用的是backwards convolution(反卷积、转置卷积)。转置卷积在DCGAN里面也有使用,它的优点是可以端对端训练和使用,更加高效快速,关于转置卷积的理解:https://blog.csdn.net/Fate_fjh/article/details/52882134。

将分类模型转换为分割模型的示意图:

CNNs选择

本论文发表时,可选的预训练CNNs有AlexNet、VGG net、GoogLeNet等,这里对这几个模型迁移到语义分割的性能做了比较。对于三个分类模型,将FC层转换为1x1卷积层,再增加一个有21个通道的1x1卷积层,对应到PASCAL中的分类,最后再后接上采样层得到语义分割模型。特别的,对于GoogLeNet,仅用最后的输出层,去掉GAP层。各模型在PASCAL VOC上的对比结果如下:

可以看到,尽管GoogLeNet和VGG16的分类精度差不多,但是很明显VGG16迁移到FCN的性能要好的多。

将what和where联合起来

作者提出一种新的架构将粗糙的/高级和精细的/低级的特征结合起来,名为跳跃结构(ski),如下图所示:

其中FCN-32s表示不使用跳跃连接,32表示上采样的stride=32; FCN-16s表示先上采样2x,与pooling4层的输出经过1x1卷积得到的特征图相加,再进行16x的上采样;而FCN-8s则是先上采样2x,与pooling4层的输出经过1x1卷积得到的特征图相加,再上采样2x,与pooling3层的输出经过1x1卷积得到的特征图相加,再上采样8x。下面是定性对比:

可以看到,不使用ski架构的情况下(FCN-32s),分割结果十分粗糙,而使用多层语义信息的FCN-8s,分割结果精细得多。这是因为底层的特征图中保留了大量的精细的表征信息,越往后面,网络学到的特征越抽象,因此这种精细层和粗糙层的结合能产生很好的结果。作者称这种非线性局部特征层级为deep jet。下图为定量对比:

从上图还可以知道,对整个模型fine-tuning的效果要远好于只fine-tuning新加入的层。除了通过跳跃结构得到精细结果之外,其它的方法包括减小池化层的stride、使用shift-and-stitch等。

3.训练

Fine-tuning参数

优化器是动量为0.9的SGD。权重衰减系数为5^-4或2^-4。batch size为20。FCN-ALexNet、FCN-VGG16、FCN-GoogLeNet的学习率分别为10^-3、10^-4、10^-5。偏置参数的学习率是权重参数的两倍。对class scoring 卷积层使用零初始化。Dropout和预训练模型里的一样。

这里使用整张图片进行训练,而不是像以前的论文那样使用patch training。下面是使用两者效果的对比,可以看到两者都能收敛到差不多的精度,但是FCN花的时间更少。

Class Balancing

在神经网络中,一个重要的问题是需要平衡各类别的训练样本数。而FCN可以自己平衡类别,即使输入的样本类别不是很平衡,即平均每张图片中有3/4的像素是背景,但这对模型没有影响。

数据增强

作者尝试对训练数据使用镜像或随机平移32像素,但是发现没有明显提升。

训练数据

使用PASCAL VOC 2011语义分割训练集的1112张+Hariharan收集的8498张。

实现

基于Caffe,在单NVIDIA Tesla K40s上训练。

4.实验结果

指标(Metrics)

    nij是类别i被预测为类别j的像素数量,有ncl个不同的类别。令tijnij是类别i的总像素数。计算:

我给翻译翻译:

像素精度:预测正确的像素数/像素总数

平均精度:各个类别的平均像素精度

mIU(Mean Intersection over Union,均交并比):IoU=(A交B)/(A并B ) = Sab / (Sa + Sb - Sab),则mIU是每个类像素总数ti与预测为该类的像素总数Σjnji的IoU的均值。

频率加权IU:各类加权的IoU。

下面是FCN在各个数据集上的测试结果:

PACAL VOC实验结果

FCN-8s与RCNN、SDS的对比:

可以看到FCN不仅性能大幅超过其它模型,达到了SOTA,而且推断时间大大减小。下面是语义分割实例:

NYUDv2实验结果

SIFT Flow实验结果

最详细的FCN论文笔记相关推荐

  1. 最详细的SSD论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-90.html 文:Wei Liu, Dragomir Angu ...

  2. 最详细的U-net论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-84.html 论文:Olaf Ronneberger, Phi ...

  3. 最详细的YOLOv3论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-117.html 论文:YOLOv3: An Increment ...

  4. 最详细的YOLOv2论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-116.html 论文:YOLO9000:Better, Fas ...

  5. 最详细的FPN论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-110.html 论文:Tsung-Yi Lin, Piotr ...

  6. 最详细的YOLO论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-77.html 论文:Joseph Redmon, Santos ...

  7. 最详细的R-CNN论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-69.html RBG大佬的论文<Rich feature ...

  8. 论文笔记(FCN网络,语义分割):Fully Convolutional Networks for Semantic Segmentation

    FCN论文笔记:Fully Convolutional Networks for Semantic Segmentation 语义分割模型结构时序: FCN SegNet Dilated Convol ...

  9. 全卷积神经网络(FCN)论文笔记

    全卷积神经网络(FCN)论文笔记 Fully Convolutional Networks for Semantic Segmentation Abstract 卷积网络是一种功能强大的视觉模型,可以 ...

最新文章

  1. 万万没想到,“红孩儿”竟然做了程序员,还是 CTO!
  2. 字节跳动每一轮都会考算法吗?已拿Offer的兄弟分享经验!
  3. 趣学python3(19)-函数-Lambda
  4. javascript基本语法(输入输出语句,变量常量,数据类型,运算符,流程控制语句,数组,函数)
  5. t-sql里Linked server跨数据库查询
  6. 计算机学院肖鹏,肖鹏-生命科学与技术学院
  7. xtrabackup迁移单独一张INNODB表
  8. Git初学札记(七)————合并分支(merge)
  9. B. Fortune Telling
  10. 方法的重载与重写_我们不一样,不一样,重写与重载
  11. 万人报名2020腾讯广告算法大赛,顶级技术争锋正式开战!
  12. java quartz实例_一个非常简单的quartz例子
  13. iOS 对付内存泄漏,来说说我的调试方法
  14. 20170813xlVBA跨表筛选数据
  15. java8 时间加一秒_好好讲讲关于Java中的时间处理
  16. 计算机cad论文参考文献,autocad论文参考文献大全 autocad参考文献怎么写
  17. 证书制作,各个环节的原理以及推送证书制作,和如何为推送服务器提供证书
  18. pic系列单片机c语言编程与应用实例,PIC单片机C语言编程实例
  19. 五金模具设计统赢外挂提升效率技巧、外挂模具设计流程的问题归纳
  20. 自学编程的5个技巧总结

热门文章

  1. 各层电子数排布规则_一文读懂PCB多层板各层含义与设计原则
  2. BZOJ 3626 LCA(离线+树链剖分+差分)
  3. Spring security UserDetailsService autowired注入失败错误
  4. Java语言Socket接口用法详解
  5. 不用if/while等操作实现
  6. BasKet Note Pads-利用软件作条记
  7. 数据太少怎么办?深入浅出,带你了解小样本学习如何“破局”!
  8. 字节跳动招聘【三维视觉】算法实习生
  9. ECCV 2020 论文大盘点-人体形状与姿态估计篇
  10. SSL:Self-Supervised Learning(自监督学习)是什么?