论文链接:https://arxiv.org/pdf/1611.09326.pdf

tensorflow代码:https://github.com/HasnainRaz/FC-DenseNet-TensorFlow

实验代码:https://github.com/fourmi1995/IronSegExperiment-FC-DenseNet.git

摘要

经典的分割结构大致由以下部分构成:(1)用于提取粗略特征的下采样过程。(2)可训练的上采样通道,用于将模型的输出至输入图片大小的分辨率。(3)可选择的加上一个后处理过程,来增强分割边缘,像CRF等。

一种新型的CNN结构DenseNet,其主要思想是在网络的前向传播过程中,每一层网络与其他各层都直接相连,大大提高了网络的准确率,同时,使网络也更易训练。本文,对DenseNet进行改进用于分割任务,此改进网络并没有后处理模型,同时,由于DenseNet结构的优点,改进后的网络现有的模型也具有更少的参数。

介绍

网络很深的CNN在一些标准benchmarks上表现出惊人的效果,但网络由于连续的卷积池化操作大大减少了图像的输入分辨率。FCNs在标准的CNN上增加上采样,来实现模型输出的分辨率恢复(输入分辨率的大小)。因此,FCNs可以处理任意尺寸大小的图片。FCNs通过在下采样与上采样之间引入跳跃结构来恢复分辨率上的损失。

ResNet通过增加一个残差块(将输入的非线性变换与输入相加)来优化深层网络的训练过程。改进ResNet通过引入shortcut paths变为FCN,提高了分割的准确率,同时也加速了模型的收敛。

DenseNet可以看作是ResNet的改进,由dense block和池化操作组成。dense block 由上几层网络的feature maps进行拼接而成。 改进后,DenseNet有如下几个效果:(1)更加有效的利用模型的参数。(2)简介的深层监督,通过引入short paths来实现深层监督。(3)feature resue:通过跳跃结构引入前几层网络的feature map及不同尺寸的信息。

该文将DenseNet引入上采样通道,来恢复输入feature map的分辨率,而这样做的一个缺点是在softmax层前引入大量难以处理的高分辨率feature map,而且,会有大量的filters与feature map进行卷积操作,大大增加了计算量和参数。因此,该文只对dense block后的feature map进行upsampling ,从而在上采样的过程中,每种分辨率的feature map上在不依赖池化层数量的基础上允许有大量的dense block。上采样中的dense block组合相同分辨率下的另一个dense block的特征信息。更高分辨率的信息通过上下采样通道之间的跳跃结构进行连接。网络结构如下,该文贡献:

(1)改进DenseNet结构为FCN用于分割,同时缓解了feature map数量的激增。

(2)根据dense block提出的上采样结构,比普通的上采样方式效果好很多。

(3)该模型不需要预训练模型和后处理过程。

 相关工作

分割网络结构上的改进有:(1)改进上采样过程,同时增加全卷积网络内的连接。(2)增加可以获得上下文信息的模型。(3)让FCN具有结构化输出的能力。

(1)不同的方法用于分辨率的恢复,从双线性插值,上采样,到转置卷积,下采样与上采样之间的跳跃结构也可以获得一个更好的恢复效果。

(2)分割网络中利用更多的上下文信息,一种非监督的全局图像描述因子经计算后添加到每个像素的feature map中。RNN从水平和垂直两个方向上进行旋转过的图片中重新提取语义信息。在CNN后端的池化层用空洞卷积进行替换,从而在不减少图像尺寸的条件下捕捉更多的语义信息。

(3)条件随机场CRF在增强分割网络输出的结构连续性上有着较大的影响,同时,近年来,也引入了RNN来近似CRF的优化效果,同时,允许FCN与RNN进行端到端的联合训练。

(4)目前的分割网络仍依赖于预训练的模型(VGG or  ResNet)进行训练。

方法

全卷积DenseNets:FCNs主要由上采样,下采样及跳跃结构构成。该文主要针对DenseNet进行改进,并在网络的上采样过程中进行了处理避免feature map 数量激增。该文首先回顾了DenseNets,提出了上采样通道并介绍了他的优点。

DenseNets: x_l 为第l层网络的输出,将上一层网络的输出进行H非线性处理(ReLU或者dropout),得到最终的输出结果。

训练较深的网络会产生梯度弥散的情况,ResNet因此引入了残差块,可以将输入与非线性处理后的feature map进行相加处理,进而可以重新利用前面网络的feature map,同时保证前几层网络的梯度可以直接进行传播。注意这里的H代表的意义是,ResNet中重复2到3个由BN,ReLU,和卷积层组成的dense block形式的非线性操作。

DenseNets的连接模式更加密集,将网络前向过程中的每一个feature map都进行拼接,从而可以使每一层都可以直接接受训练信息,最终,第l层的输出如下,H代表BN,RelU,卷积,DropOut等非线性操作。第l层网络输出由k个feature map,这里,k代表一个参数,所以,DenseNets深度的增加,feature maps的数量也是呈线性的上升。通过一个1x1的卷积与一个大小为2x2的pooling操作组合进而减少feature map空间上的数量。

Dense block 的功能使输入feature map,然后输出新的feature map,结构如下,将通道数m的图片输入第一层网络后,得到通道数为k的featur map ,记为x1,然后与通道数为m的输入x0,进行拼接为[x0,x1],送入到下一层网络中。也得到通道数为k的feature map。这一个dense block中重复n次操作,最终,一个dense block得到n*k个feature map。

将DesneNets结构组成FC-DenseNet的上采样通道。  下采样过程中,feature map 的数量在增长,但每个feature map经过池化后空间分辨率会有所下降。下采样的最后一层通常是网络的中间部分。

为了恢复输入尺寸的分辨率,FC-DenseNet将卷积操作替换为Desne block和一个上采样操作,其中,这里包含着一个转置卷积用于对以前的feature map上采样。上采样后的feature map与跳跃结构的输出进行级联,然后作为新的dense block的输入。由于上采样过程增加了feature map的空间分辨率,同时,feature map的数量也不少,大大增加了内存的压力,特别是在soltmax前需要输入全部feature map的分辨率。因此,上采样通道的Dense block的输入并不与block输出进行级联,减少空间维度。因此,转置卷积只是在最后一个Dense blokc应用,并没有对所有feature map产生效果。同时,最后一层Desne block结合前几个Dense block相同分辨率信息的feature mapde 信息。在下采样通道中,feature map的信息会有所损失,但通过跳跃结构可以尽可能的利用所有可利用的feature maps。

该文将DenseNet103改进用于分割任务。定义了Desne Block Layer,下变换,上变换,结构组成如下,block layer的输出通道为16

网络的整体结构层数说明:

最后经过上采样通道,将feature map的通道数降为256,通过像素级的交叉熵损失进行训练。

实验

在CamVid与Gatech两个数据集上进行实验。

初始化:HeUniform,

优化方法:RMSprop,

learning rate: 1e-3,

exponential decal:0.995,

weight decay:1e-4,

对图片进行随机裁剪与旋转进行数据增强。

Reference

[1] V. Badrinarayanan, A. Kendall, and R. Cipolla. Segnet: A deep convolutional encoder-decoder architecture for image segmentation. CoRR, abs/1511.00561, 2015.

[2] G. J. Brostow, J. Shotton, J. Fauqueur, and R. Cipolla. Segmentation and recognition using structure from motion point clouds. In European Conference on Computer Vision (ECCV), 2008.

[3] L. Castrejon, Y. Aytar, C. Vondrick, H. Pirsiavash, and A. Torralba. Learning aligned cross-modal representations from weakly aligned data. CoRR, abs/1607.07295, 2016.

个人实验结果

论文阅读笔记十三:The One Hundred Layers Tiramisu: Fully Convolutional DenseNets for Semantic Segmentation(FC-DenseNets)(CVPR2016)的更多相关文章

  1. 论文阅读笔记十七:RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation(CVPR2017)

    论文源址:https://arxiv.org/abs/1611.06612 tensorflow代码:https://github.com/eragonruan/refinenet-image-seg ...

  2. 论文阅读笔记二十:LinkNet: Exploiting Encoder Representations for Efficient Semantic Segmentation(CVPR2017)

    源文网址:https://arxiv.org/abs/1707.03718 tensorflow代码:https://github.com/luofan18/linknet-tensorflow 基于 ...

  3. 【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. 论文阅读笔记六:FCN:Fully Convolutional Networks for Semantic Segmentation(CVPR2015)

    今天来看一看一个比较经典的语义分割网络,那就是FCN,全称如题,原英文论文网址:https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn ...

  5. Fully Convolutional Networks for semantic Segmentation(深度学习经典论文翻译)

    摘要 卷积网络在特征分层领域是非常强大的视觉模型.我们证明了经过端到端.像素到像素训练的卷积网络超过语义分割中最先进的技术.我们的核心观点是建立"全卷积"网络,输入任意尺寸,经过有 ...

  6. 论文阅读笔记六十二:RePr: Improved Training of Convolutional Filters(CVPR2019)

    论文原址:https://arxiv.org/abs/1811.07275 摘要 一个训练好的网络模型由于其模型捕捉的特征中存在大量的重叠,可以在不过多的降低其性能的条件下进行压缩剪枝.一些skip/ ...

  7. 论文笔记(4):Fully Convolutional Networks for Semantic Segmentation

    一.FCN中的CNN 首先回顾CNN测试图片类别的过程,如下图: 主要由卷积,pool与全连接构成,这里把卷积与pool都看作图中绿色的convolution,全连接为图中蓝色的fully conne ...

  8. 论文笔记《Fully Convolutional Networks for Semantic Segmentation》

    一.Abstract 提出了一种end-to-end的做semantic segmentation的方法,也就是FCN,是我个人觉得非常厉害的一个方法. 二.亮点 1.提出了全卷积网络的概念,将Ale ...

  9. 论文学习:Fully Convolutional Networks for Semantic Segmentation

    发表于2015年这篇<Fully Convolutional Networks for Semantic Segmentation>在图像语义分割领域举足轻重. 1 CNN 与 FCN 通 ...

随机推荐

  1. 第二节,mnist手写字体识别

    1.获取mnist数据集,得到正确的数据格式 mnist = input_data.read_data_sets('MNIST_data',one_hot=True) 2.定义网络大小:图片的大小是2 ...

  2. Spring Aware接口

    实现aware接口的bean必须在spring的xml文件中注册,由spring的IOC容器管理 1-ApplicationContextAware接口 可以获取spring的IOC容器 2-Bean ...

  3. events.py 知识点记录

    1.__all__ __all__是一个字符串list,其他模块中使用from xxx import *的时候只能导入__all__列表里的内容 2.sys.version_info 获取版本号 im ...

  4. python3+selenium框架设计02-自动化测试框架需要什么

    什么是自动化测试框架 自动化测试框架能够提供便利给用户高效完成一些事情,比如,结构清晰开发脚本,多种方式.平台执行脚本,良好的日志和报告去跟踪脚本执行结果. 关于自动化测试框架的定义有很多,在我大致理 ...

  5. requests库入门08-delete请求

    还是使用GitHub的接口,之前我们新增了邮箱,这次使用delete请求来删除邮箱,接口文档地址 import requests test_url = 'https://api.github.com' ...

  6. Html input 常见问题

    1.input回车事件不执行导致页面刷新 场景:在文本框中输入关键字按回车,页面自动刷新了 <form name="keywordForm" method="pos ...

  7. 遇到一个json解码失败的问题

    今日批量导入游戏, 从别人接口拉去的字符串json_decode总是失败, 但是把log里面记录的解码失败的字符串copy出来单独解析,却可以成功. 排除了是字符编码的问题后, 还是不行, 百思不得其 ...

  8. jvm 监控工具

    背景 不懂jvm监控工具好意思说自己搞java的吗.其实搞了十多年的人我都见过不懂得,不懂不要紧,老实工作就行啊.这就是属于非技术的话题了,实在不知从何说起.还是赶紧学习下吧,可以去装了.我认真学习后 ...

  9. openwrt页面显示问题修改

    页面显示错误如下: 在不应该的位置显示了这个,查看配置文件: config igmpproxy        option quickleave '1' config phyint         o ...

  10. 运维与自动化系列③自动化部署基础与shell脚本实现

    自动化部署基础与shell脚本实现 关于自动化的基础知识: 1.1:当前代码部署的实现方式: 运维纯手工scp到web服务器纯手工登录git服务器执行git pull或svn服务器执行svn upda ...