论文阅读笔记六:FCN:Fully Convolutional Networks for Semantic Segmentation(CVPR2015)
今天来看一看一个比较经典的语义分割网络,那就是FCN,全称如题,原英文论文网址:https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf
三位大佬:Jonathan Long Evan Shelhamer Trevor Darrell
这个网址是网上一个大佬记录的FCN的博客,同时深深感受到了自己与大佬的差距,但还是硬着头皮把论文阅读完成,贴出网址,和大家一起学习:https://blog.csdn.net/happyer88/article/details/47205839
进入正题,作者在开始就说了,引以为傲的是他们提出了“完全卷积”网络,这种网络的特点是可以输入任意大小的数据,并通过有效的脱离和学习能产生相应大小尺寸的输出。用AlexNet,GoogleNet,VGG修改为全卷积网络,并进行迁移学习微调。接着,作者定义一个跳跃结构,结合来自深层的,粗略层的分割信息,其中,该层中含有来自浅层的,精细层的外观信息,通过前面的结构与信息,能够进行精确的和详细的分割。(插播:CNN的强大之处在于它的多层结构能自动学习特征,并且可以学习到多个层次的特征:较浅的卷积层感知域较小,学习到一些局部区域的特征;较深的卷积层具有较大的感知域,能够学习到更加抽象一些的特征。这些抽象特征对物体的大小、位置和方向等敏感性更低,从而有助于识别性能的提高。)
作者认为卷积网络不仅改进了全图分类效果,而且在结构化输出的定位任务上也取得了较大的进步(边界框对象的检测,部分和关键点的预测,匹配定位等)。FCN进行了很多开创性的工作,是首个对像素点进行end-to-end训练,同时进行有监督的预训练,同时对现有的网络修改为全卷积网络,可以对任意大小的输入产生密集输出。作者指出学习和推理的过程都是通过前馈计算和反向传播在整幅图像上进行的。网络内不的上采样层可以实现像素的预测,同时,采用降采样的池化层在网络中进行学习。大佬表示,分批训练目前是很常见的方式,但是和全卷积训练相比,效率上还是稍逊一点。FCN并不需要产生proposals,或通过随机场,分类器进行事后的优化操作等,由此可以看出,FCN还是很轻便的。作者在论文中经常提到的密集预测,个人 感觉和针对像素点的预测的说法大同小异。语义分割在位置和语义之间有一个紧密的联系,全局信息可以解析局部信息。深层特征层次在非线性的 局部-全局金字塔上进行位置和语义的编码。作者由此定义了前面的跳跃结构,以更好的利用特征信息。
作者提出的方法是将图像分类作为有监督的预训练,同时进行微调全卷积,从而可以从整个输入图片和groundTruth上进行高效的学习。作者融合了各个层的特征定义一个非线性的端到端的局部-全局表示。感受野从CNN可视化的角度来讲,就是输出featuremap某个节点的响应对应的输入图像的区域。网络中卷积,池化,及激活函数等结构在局部的输入图像上运行,并依赖相对应的空间坐标。一般深层网络用于计算一般的非线性函数,但只有计算非线性函数的网络层被叫做深层滤波器或者全卷积网络。在loss函数这,有点不好理解,作者说一个由FCN组成的实值loss函数定义了一个任务,如果这个loss function是最后一层网络所有空间维度的和,这里它给出了一个式子, loss function的梯度是每个像素梯度的和,所以,整幅图像L的随机梯度下降等同于每个像素点随机梯度下降,这里将网络最后一层上所有感受野作为一个minibatch。当感受野显著重叠时,由层与层之间的 计算相比patch-by-patch,前馈计算和反向传播会更高效。
整体过程为,首先是将网络调整为全卷积网络,用于产生粗略的输出,针对像素级的,需要将上述粗略的输出反映到像素。相比改造之前的AlexNet ,VGG,LeNet等网络,这些网络有固定的输入,同时产生非空间的输出,折磨受限的罪魁祸首是全连接层,其固定的尺寸就算了,还把空间位置给扔了,然而,作者就比较机智了,把全连接层看成卷积核覆盖整个输入图像的卷积。这种转变可以进行任意尺寸的输入。
全卷积网络得到的结果图相当于调整前的网络对特定输入区域的评估,但是对那些patch中重叠区域的计算还是比较集中的。在FCN中,虽然输出map的大小由任意大小的输入图片控制,但是输出维度通常是由降采样减少的。分类网络进行降采样的原因是为了保持滤波器数量不大,同时计算要求可行,此版本的全卷积网络,通过乘上输出单元感受野的像素跨度因子使输出变得看起来“粗糙点”。
在看到shift and stitch is filter 这一块感觉没看懂,参考前面提供的大佬的网址,了解到Shift and stitch 是作者为了得到dense pretiction的方案之一,作者提到,Dense Prediction可以由在输入图片上进行移动得到的输出进行一起 拼接得到,如果输出图的下采样因子为f,则将输入像素向右移动x个,同时向下移动y个像素,(x,y) st 0<x,y<f。显而易见,经过一系列移动(这里前面的移动貌似是一步一步走的),相当于可以得到f*f个输入(这里注意,虽然计算量为f*f,增大了,但是获得了可以预测单个像素的效果),同时进行交错输出,使预测能够对应感受野中心的像素。接着,作者又提到了一个stride 为s的网络层(卷积或者池化层)和一系列带有权重fij的卷积层(忽略非相关特征的维度),设定低层网络的输入步长为1,对底层网络的输出进行因子为s的上采样。但是,将原始filter与上采样后的结果进行卷积却与
shift and stitch的不同,这里是因为这里进行卷积的filter只能看到输入减少的一部分,作者为此对filter 进行修改如下:
为了达到shift and stitch的效果,对滤波器进行逐层重复放大滤波器,直到所有的降采样消失。减少网络内的降采样是一个折中的措施,这样,filter可以获得更好的信息,但缺点就是有更小的感受野,并需要更多的时间进行计算。shift and stitch也是一种折中,在不见底滤波器感受野带线啊哦的情况下进行更密集的输出,但是缺点是禁止filters 以比当初设定的更精细的尺寸来访问信息。
卵而,上面两个技巧,作者并没有用到模型中,而是采用了上采样的技能。上采样中用到了插值的思想。作者解释道,一个因子为f的上采样就是一个步长大小为1/f的卷积。所以只要f为一个整数,上采样就进行一个输出stride为f的反卷积(实际上就是反转了卷积的前向和后向过程)。上采样是在网络内通过像素的损失反向传播进行end-to-end学习。反卷积滤波器的一个特点是尺寸不是固定,可以被学习的。
作者将ILSVRC分类器映射为FCN,并进行扩充,使其可以通过上采样和像素级的loss function进行dnese prediction。接下来,进行微调训练。在刚开始,提到过一个skip结构,这个个结构是进行end-to-end学习以细化输出的语义和空间精度(更精细的尺寸需要的网络层较少,将精细网络层和粗糙的网络层组合一起可以让model在考虑全局结构下进行局部预测)。
作者定义的网络结构如下:
FCN的理论大体到此结束,有关网络结构的详细介绍会在代码中出现。
论文阅读笔记六:FCN:Fully Convolutional Networks for Semantic Segmentation(CVPR2015)的更多相关文章
- 论文学习:Fully Convolutional Networks for Semantic Segmentation
发表于2015年这篇<Fully Convolutional Networks for Semantic Segmentation>在图像语义分割领域举足轻重. 1 CNN 与 FCN 通 ...
- Fully Convolutional Networks for Semantic Segmentation 译文
Fully Convolutional Networks for Semantic Segmentation 译文 Abstract Convolutional networks are powe ...
- 论文阅读笔记六十一:Selective Kernel Networks(SKNet CVPR2019)
论文原址:https://arxiv.org/pdf/1903.06586.pdf github: https://github.com/implus/SKNet 摘要 在标准的卷积网络中,每层网络中 ...
- 论文笔记《Fully Convolutional Networks for Semantic Segmentation》
一.Abstract 提出了一种end-to-end的做semantic segmentation的方法,也就是FCN,是我个人觉得非常厉害的一个方法. 二.亮点 1.提出了全卷积网络的概念,将Ale ...
- Fully Convolutional Networks for semantic Segmentation(深度学习经典论文翻译)
摘要 卷积网络在特征分层领域是非常强大的视觉模型.我们证明了经过端到端.像素到像素训练的卷积网络超过语义分割中最先进的技术.我们的核心观点是建立"全卷积"网络,输入任意尺寸,经过有 ...
- 【Semantic segmentation】Fully Convolutional Networks for Semantic Segmentation 论文解析
目录 0. 论文链接 1. 概述 2. Adapting classifiers for dense prediction 3. upsampling 3.1 Shift-and-stitch 3.2 ...
- 论文笔记(4):Fully Convolutional Networks for Semantic Segmentation
一.FCN中的CNN 首先回顾CNN测试图片类别的过程,如下图: 主要由卷积,pool与全连接构成,这里把卷积与pool都看作图中绿色的convolution,全连接为图中蓝色的fully conne ...
- 论文阅读笔记五:U-Net: Convolutional Networks for Biomedical Image Segmentation(CVPR2015)
前面介绍了两个文本检测的网络,分别为RRCNN和CTPN,接下来鄙人会介绍语义分割的一些经典网络,同样也是论文+代码实现的过程,这里记录一下自己学到的东西,首先从论文下手吧. 英文论文原文地址:htt ...
- 论文阅读笔记六十:Squeeze-and-Excitation Networks(SENet CVPR2017)
论文原址:https://arxiv.org/abs/1709.01507 github:https://github.com/hujie-frank/SENet 摘要 卷积网络的关键构件是卷积操作, ...
随机推荐
- 20165337 2017-2018-2《Java程序设计》课程总结
一.每周作业链接汇总 预备作业一:我期望的师生关系 简要内容: 读完文章的感想 我印象深刻的老师 我期望的师生关系 预备作业二:学习基础和C语言基础调查 简要内容: 你有什么技能比大多人(超过90%以 ...
- python基础-----类和实例
在python中,首字母大写的名称指的是类,这个类定义中括号的内容是空的. 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板而实例是根据类创建出来的一个个具体 ...
- springboot+layui实现PC端用户的增删改查 & 整合mui实现app端的自动登录和用户的上拉加载 & HBuilder打包app并在手机端下载安装
springboot整合web开发的各个组件在前面已经有详细的介绍,下面是用springboot整合layui实现了基本的增删改查. 同时在学习mui开发app,也就用mui实现了一个简单的自动登录和 ...
- 类ThreadLocal的使用与源码分析
变量值的共享可以使用public static的形式,所有的线程都使用同一个变量.如果每个线程都有自己的共享变量,就可以使用ThreadLocal.比如Hibernat的session问题就是存在Th ...
- Java 类加载机制(阿里面试题)-何时初始化类
(1)阿里的面试官问我,可以不可以自己写个String类 答案:不可以,因为 根据类加载的双亲委派机制,会去加载父类,父类发现冲突了String就不再加载了; (2)能否在加载类的时候,对类的字节码进 ...
- ubuntu server命令行搭建虚拟专用网
问题: 在做一个国外的开源项目,需要用到很多 ubuntu 上特定版本的应用,由于国内墙的问题,导致Ubuntu 14.04在需要添加一些国外的库的时候(add-apt-repository ppa: ...
- 用WMI监控IIS
参考网站:http://blog.chinaunix.net/uid-7910284-id-5774420.html 参考官方文档:https://docs.microsoft.com/en-us/p ...
- linux下添加删除,修改,查看用户和用户组
一.组操作 1.创建组: groupadd test #增加一个test组 2.修改组 groupmod -n test2 test #将test组的名子改成test2 3.删除组 groupdel ...
- 2-HTML Text Formatting Elements
下表列举了文字格式常见的关键字 Tag Description <b> Defines bold text <em> Defines emphasized text < ...
- mixins,generics(ApiView)
#生成序列化对象class BookModelSerizter(serializers.ModelSerializer): class Meta: model=Book fields='__all__ ...