提升语义分割性能的几种方法
本文主要记录几种提升基于深度学习的图像语义分割精度的方法,以防忘记!
By zhengzibing2011, 2017年10月21日-星期六
1
1.图像语义分割面临的挑战
(1).特征分辨率减小:主要是由神经网络中的重复最大池化和降采样(stride跨越)操作造成的,而采用此种操作的原因是
A.降维,以免参数过多难以优化;
B.基于DL的语义分割是从用于分类任务的CNN转化而来,而在分类任务中,分类器要求对输入的空间变换具有不变性,池化恰能满足这样的要求。
(2).不同scale下的目标存在的状况:主要是目标在multi-scale图像中的状态造成的,因为在同一种尺度下,不同目标的特征往往响应并不相同。如需要在较大的尺度下才能较好地提取图像中比较小的目标,而较大的目标为了获取全局性信息也必须在较小的尺度下才能实现。
(3). CNN的空间不变性造成定位精度的下降:对于分割任务而言,由于pooling操作引起的分类器对输入的空间变换具有不变性丢失空间信息,内在的限制了分割的空间精度。
2.潜在的解决方法
FCN作为将CNN应用于semantic segmentation的forerunner,贡献巨大。但不可回避,其提出的方法具有一些不足。为保证却终的feature map不至于过小,FCN的conv1引入pad=100,引入了较大的噪声;
32倍upsample(deconvolution)非常粗糙,而且deconvolution的filter不可学习; skip architecture虽能有效提高精度,但需要3次训练即FCN-32s->FCN-16s->FCN-8s。除skip architecture外。随着研究的深入,针对以上挑战,有以下几种方法解决:
(1). Encoder-Decoder结构
采用此种思想的代表为DeconvNet,SegNet,其基本思想是采用一种对称结构将由于pooling操作而减小的feature map通过逐步的upsample逐渐恢复到原图像大小,同时在upsample阶段,融合了subsample中pooling index,具体细节可参见原文。
SegNet
(2). Atrous convolution
feature map的减小是由于pooling造成的,为确保一定精度的feature map,能否不使用或减少使用pooling呢?理论上是可行的,但如果这样做会使得需要优化的参数过多,重要的是难以基于以前的model进行fine-tuning,atrous convolution解决了这个问题。
在DeepLab中令pool4,pool5的stride=1,再加上1 padding,这样经过pooling后feature map大小不变,但后层的感受野发生了变化,为使感受野不变,后面的卷积层使用atrous convolution,其作用是在不增加参数的前提下,增加感受野。因此,解决了feature map空间分辨率下降的问题。
(3). ASPP
针对不同scale下的目标存在的状况问题,可通过两种方法解决:
A.标准的多尺度处理方法,用共享相同参数的并行CNN的分支,从不同尺度的Input image中提取score map,然后进行双线性差值,最终对它们进行融合,在不同尺度上获得每个位置的最大响应。训练和测试时均这样处理,比较繁琐的是需要计算输入图像的每个尺度在各layer上的特征响应。
B.基于任意尺度上的区域都可以用在这个单一尺度上重采样卷积特征进行精确有效地分类的思想,使用多个不同采样率上的多个并行多空卷积,每个采样率上提取的特征再用单独的分支处理,融合生成最后的结果。
(4). FC-CRF
CRF几乎可以用于所有的分割任务中图像精度的提高。CNN可用于对图像中的目标进行分类并预测出目标的大致位置,但并不能真正描绘他们的边界。因此,将DCNN的识别能力和全连接CRF优化定位精度耦合在一起,能成功的处理定位挑战问题,生成了精确的语义分割结果。全连接CRF理论较为复杂,在此不作阐述。类似的概率图模型(PGM)还有MRF,G-CRF(高斯-条件随机场)。
3.总结
目前,暂且先记录以上4种提高分割精度的方法。后续若有新的方法,予以追加!
---------------------
作者:zhengzibing2011
来源:CSDN
原文:https://blog.csdn.net/zhengzibing2011/article/details/78305199
版权声明:本文为博主原创文章,转载请附上博文链接!
提升语义分割性能的几种方法相关推荐
- 提升PHP性能的21种方法
提升PHP性能的21种方法. 1.用单引号来包含字符串要比双引号来包含字符串更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会. 2.如果能将类的方法定义成static,就尽量定义成s ...
- 4种语义分割数据集Cityscapes上SOTA方法总结
本文分享自华为云社区<语义分割数据集Cityscapes上SOTA方法总结>,原文作者:fdafad. 1 Cityscapes数据集介绍 Cityscapes评测数据集即城市景观数据集, ...
- 测试显卡性能的两种方法
测试显卡性能的两种方法: 方法一:利用软件包unixbench-5.1.2 用unixbench-5.1.2,需要网上下载相关源码包,并提前需要修改Makefile: GL_LIBS = -lGL - ...
- 语义分割(Semantic Segmentation)方法
翻译来自:https://gist.github.com/khanhnamle1994/e2ff59ddca93c0205ac4e566d40b5e88 语义分割方面的资源:GitHub - mrgl ...
- 提高HTML5 canvas性能的几种方法
简介 HTML5 canvas 最初起源于苹果(Apple)的一项实验,现在已经成为了web中受到广泛支持的2D快速模式绘图(2D immediate mode graphic)的标准.许多开发者现在 ...
- 提高HTML5 canvas性能的几种方法!
http://blog.csdn.net/zyz511919766/article/details/7401792 简介 HTML5 canvas 最初起源于苹果(Apple)的一项实验,现在已经成为 ...
- c#中分割字符串的几种方法
第一种方法:打开vs.net新建一个控制台项目.然后在Main()方法下输入下面的程序. string s="abcdeabcdeabcde"; string[] sArray=s ...
- hibernate性能_改善Hibernate应用程序性能的7种方法
hibernate性能 Hibernate是将Java Web应用程序与SQL数据库集成的好工具,但是当应用程序的响应时间开始显着增加时,我们应该怎么做? 当我们怀疑应用程序是否会随着客户群的增长而扩 ...
- 改善Hibernate应用程序性能的7种方法
Hibernate是将Java Web应用程序与SQL数据库集成的好工具,但是当应用程序的响应时间开始显着增加时,我们应该怎么做? 当我们怀疑应用程序是否会随着客户群的增长而扩展时,我们该怎么办? 在 ...
最新文章
- 毕业年限不长的前端焦虑和突破方法
- 使用C#开发交互式命令行应用
- 了解OAuth2令牌认证
- java修改pdf内容流_java – 在PDFBox中,如何更改PDRectangle对象的原点(0,0)?
- Entity Framework Core导航属性加载问题
- 应用场景之Dynamic End Point(DEP)IPSec的配置
- linux下proc文件的读写(部分转载)
- 如何查看Spark日志与排查报错问题
- matlab求伪逆,逆、伪逆、左右逆、最小二乘、投影矩阵
- 纯鼓点节奏_[鼓点] 简单的鼓点节奏
- Device /dev/ttyS? is locked.
- ElasticSearch的简单了解和使用
- 您所需要的已经不是吃饱喝足和睡暖了
- 小论文中添加脚注(可以不显示标号)
- 【算法】求解最大连续子序列和的问题
- 烽火算法针对的是什么,烽火算法对网站优化有什么好处
- 计算机英语及教学法,计算机英语教学方法探析
- 全球与中国PH传感器盒市场深度研究分析报告
- python统计英文文章中单词出现的次数并排序_Python实现的统计文章单词次数功能示例...
- 手把手教你开发IOT设备
热门文章
- boost::system::error_code相关的测试程序
- boost::sort模块实现Spinsort算法的测试程序
- boost::python::back_reference相关的测试程序
- boost::fusion::cons用法的测试程序
- boost::fusion::make_fused_procedure用法的测试程序
- boost::contract模块实现代码块的测试程序
- Boost:基于boost::asio模块引用计数程序
- VTK:可视化之BoxClipStructuredPoints
- VTK:网格之HyperTreeGridSource
- Qt Creator操作方法