图像语义分割之特征整合和结构预测

置顶 2017年03月01日 23:06:33 阅读数:3209 标签: 深度学习特征整合crf 更多

个人分类: 深度学习深度学习理论

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012759136/article/details/59115476

前言

近来阅读了PASCAL VOC 2012排行榜上前几的文章,包括PSPNet和林国省老师的几篇论文,觉得现在在semantic segmentation领域对于Multi-scale Features ensembling的关注又多起来了(当然其实一直都应用的挺多),然后林国省老师对CRF有一些新的认识和解读。这些都将总结于此。

两个发展方向

  • 特征整合(Feature Ensembling) 
    又分为:

    • 多尺度(multi-scale) 特征整合
    • 多级(multi-level)特征整合
  • 结构预测(Structure Prediction) 
    比如之前经常使用的条件随机场

特征整合

多尺度整合

PSPNet

这个方法在前一段时间是PASCAL VOC 2012排行榜上的第一,现在的第二。

语义分割中常见问题

  • 关系不匹配(Mismatched Relationship) 
    场景中存在着可视模式的共现。比如,飞机更可能在天上或者在跑道上,而不是公路上。
  • 易混淆的类别(Confusion Categories) 
    许多类别具有高度相似的外表。
  • 不显眼的类别(Inconspicuous Classes) 
    场景中包括任意尺寸的物体,小尺寸的物体难以被识别但是有时候对于场景理解很重要。

Note:这些大多数错误都部分或者完全和上下文关系以及全局信息有关系 
而PSPNet就是为了整合不同区域的context来获取全局的context信息。

网络结构

其中的一些tricks:

  • 图片输入的CNN是ResNet,使用了dilated convolution
  • Pyramid Pooling Module中的conv是1×1的卷积层,为了减小维度和维持全局特征的权重
  • Pyramid Pooling Module中的pooling的数量以及尺寸都是可以调节的
  • 上采样使用的双线性插值
  • poly learning rate policy
  • 数据扩增用了:random mirror, random resize(0.5-2), random rotation(-10到10度), random Gaussian blur
  • 选取合适的batchsize

结构还是很清晰明确的,没太多可说的。 
此外,文中还提到了为了训练使用了一个辅助的loss,并不在我们讨论内容之内仅展示一下示意图: 

PSPNet在PASCAL VOC 2012 上测试的结果如下: 

FeatMap-Net

这是林国省老师两篇论文中提到的网络结构的前面一部分,我把它抽取出来在此讨论特征整合 
这部分网络结构利用多尺度CNNsliding pyramid pooling来获取patch-background的上下文信息。

网络结构

其中:

  • 图片进来先进行0.4, 0.8, 1.2的放缩
  • 前1-5 conv block是共享参数的
  • 向上采样还是我们熟悉的双线性插值~

Sliding Pyramid Pooling

其中使用的是滑动的pooling,即stride为1,所以不降低feature map的尺寸。不同尺寸的窗口有利于获得不同大小的背景信息,而且增加了field-of-view,这样feature vector能编码更大范围的信息(feature vector会在之后的结构中使用,下文会介绍到)、

多级整合

RefineNet

这个方法在前一段时间是PASCAL VOC 2012排行榜上的第三,现在的第四。 
本方法主要想解决的限制是: 
多阶段的卷积池化会降低最后预测结果图片的尺寸,从而损失很多精细结构信息。

现有方法的解决办法:

  • 反卷积作为上采样的操作 
    反卷积不能恢复低层的特征,毕竟已经丢失了
  • Atrous Convolution (Deeplab提出的) 
    带孔卷积的提出就是为了生成高分辨率的feature map,但是计算代价和存储代价较高
  • 利用中间层的特征 
    最早的FCN-8S就是这样做的,但是始终还是缺少强的空间信息

以上所说方法在我的这篇文章中都有提到,感兴趣的同学可以猛戳,这里就不赘述了。 
作者主张所有层的特征都是有用的,高层特征有助于类别识别,低层特征有助于生成精细的边界。所以有了接下来的网络结构,说实话我是觉得有点复杂。

网络结构

可以看见,整个结构其实是类似于FCN-8S的结构的,只是抽出特征更早,而且经过了RefineNet进行处理。 
整个流程就是,1/32的feature map输入RefineNet处理后和1/16的feature map再一起又输入一个RefineNet优化,后面的过程类似。

RefineNet

可以看出,每个RefineNet的输入是可以调整的,所以整个网络的连接也是可以修改的,当然作者做实验说明在他提出的其他变体中这种连接的效果最好。

Residual Convolution Unit(RCU)

Multi-resolution Fusion

这里将输入的不同分辨率的feature map上采样到和最大feature map 等尺寸然后叠加,此处的conv用于输入的参数自适应。

Chained Residual Pooling

文中提到:

  • conv作为之后加和的权重
  • relu对接下来pooling的有效性很重要,而且使得模型对学习率的变化没这么敏感
  • 这个链式结构能从大范围区域上获取背景context

此处不得不提到,这个结构中大量使用了identity mapping这样的连接,无论长距离或者短距离的,这样的结构允许梯度从一个block直接向其他任一block传播。

现在回过头来看看RefineNet整个网络结构还是有些复杂的,但是确实还是有一些效果,这种直接将低层特征抽取来优化高层特征的措施可以想象能对结果进行一些优化。但是始终还是觉得这样的处理有点太复杂了。

接下来看一下RefineNet在PASCAL VOC 2012上测试的结果: 

终于可以松一口气了,特征整合这一块结构太多,有点眼花缭乱吧,让我休息休息。 
休息好了吧,接下来是CRF 的show time。

结构预测(CRF)

其实在语义分割这个领域很早就开始使用CRF或者MRF等对语义信息进行建模,在深度学习火起来之前就有不少这样的方法了。所以后来大家很自然地想到了深度学习和条件随机场的结合。但是,林国省老师指出现在利用条件随机场的方法都不太“地道”。 
现有方法:

  • dense CRF作为FCN输出的后处理,并没有真正地结合进CNN
  • CRFasRNN中将二者真正结合了,但是只有其中一元势函数的输入来自CNN,二元势函数的输入来自于一元以及迭代,而且这里的二元势函数被强制考虑为局部平滑度

以上所说方法在我的这篇文章中都有提到,感兴趣的同学可以猛戳,这里就不赘述了。

Contextual CRF

此处提到的结构是和前文所述FeatMap-Net为统一网络结构

整体结构

此处我们主要讨论FeatMap-Net之后的CRF的处理。 
林老师提出的这个方法对一元势函数和二元势函数都用CNN来直接进行处理,而且二元势函数是直接对空间语义建模更精确。

  • feature map中的每个空间位置(即每个像素点)对应CRF图中的一个节点
  • Pairwise connection就是通过每个节点与预定义的spatial range box中其他节点连接来体现的
  • 不同的空间关系通过定义不同类型的range box来实现的,每种空间关系通过特定的pairwise potential function来建模

不同空间关系: 

Surrounding这样的关系就在对应节点的周围画框,Above/Below这样的关系就让节点在一条边的中间然后在其上方或者下方画框,此处的框是原图最短边的0.4. 
此处我们回顾一下CRF的公式:

P(y|x)=1Z(x)exp[−E(y,x)]P(y|x)=1Z(x)exp⁡[−E(y,x)]

E(y,x)=∑U∈Ψ∑p∈ΩU(yp,xp)+∑V∈Θ∑(p,q)∈ΦV(yp,yq,xpq)E(y,x)=∑U∈Ψ∑p∈ΩU(yp,xp)+∑V∈Θ∑(p,q)∈ΦV(yp,yq,xpq)

其中,ΨΨ是不同类型一元势函数的集合,ΩΩ是一元势函数对应的节点集合;ΘΘ是不同类型二元势函数的集合,ΦΦ是二元势函数对应的边的集合。

Unary Potential Functions

U(yp,xp;θU)=−zp,yp(x;θU)U(yp,xp;θU)=−zp,yp(x;θU)

这里,zp,ypzp,yp对应与第pp个节点和第ypyp个类别 

一元势函数对应的处理就是从Feature map上的一个节点提取出feature vector,然后连接几层全连接层,输出KK个值,这个K就是需要预测的类别数。

Pairwise Potential Functions

V(yp,yq,xpq;θV)=−zp,q,yp,yq(x;θV)V(yp,yq,xpq;θV)=−zp,q,yp,yq(x;θV)


我觉得这里对二元势函数的处理很巧妙,将两个节点对应的feature vector提取出来然后连接到一起来学习两个节点之间的边,很棒!之后自然也是连接几层全连接层输出的是K2K2个值,为了将所有类别之间的配对关系都考虑进去,但是这里产生的值应该有很多冗余。

Asymmetric Pairwise Functions

对于不对称的关系比如Above\Below就需要这样的不对称二元势函数进行学习,而这种势函数主要依赖于两个节点输入的顺序,这个可以通过两个feature vector连接的顺序来体现,所以我说这样的处理很巧妙啊。

至此,这种对CRF的解读讲完了~但是这篇文章中的有一些内容还不得不提一下:

  • 这些CRF是用于coarse prediciton stage的,为了提升低分辨率的预测;文中提到在最后的输出的时候还是使用来的dense crf 进行细化输出的(这就比较尴尬了,最开始还说人家不好,现在还是要使用……)
  • 文中提到Piecewise Learning作为新的一种对CRF的训练方法,这里就没有阐述了,感兴趣的同学可以看看原文。

以上 
真是辛苦大家了~

参考文献

  1. Zhao H, Shi J, Qi X, et al. Pyramid Scene Parsing Network[J]. 2016.
  2. Lin G, Shen C, Hengel A V D, et al. Efficient Piecewise Training of Deep Structured Models for Semantic Segmentation[C]// IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society, 2016:3194-3203.
  3. Lin G, Shen C, Hengel A V D, et al. Exploring Context with Deep Structured models for Semantic Segmentation[J]. 2016.
  4. Lin G, Milan A, Shen C, et al. RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation[J]. 2016.

图像语义分割之特征整合和结构预测相关推荐

  1. PaperWeekly 第28期 | 图像语义分割之特征整合和结构预测

    " 余昌黔 华中科技大学硕士 研究方向为图像语义分割 知乎专栏 https://zhuanlan.zhihu.com/semantic-segmentation 前言 近来阅读了 PASCA ...

  2. Recorder︱图像语义分割(FCN、CRF、MRF)、论文延伸(Pixel Objectness、)

    图像语义分割的意思就是机器自动分割并识别出图像中的内容,我的理解是抠图- 之前在Faster R-CNN中借用了RPN(region proposal network)选择候选框,但是仅仅是候选框,那 ...

  3. 探索图像语义分割中的特征融合

    简介 图像语义分割是计算机视觉领域一大重要分支,在benchmark性能一次次提升的过程中,特征融合起到很重要的作用.下面,将介绍图像语义分割任务中历年的比较不错的特征融合方法. 常用的Backbon ...

  4. 图像语义分割之FCN和CRF

    https://blog.csdn.net/u012759136/article/details/52434826?locationNum=7&fps=1 前言 (呕血制作啊!)前几天刚好做了 ...

  5. 关于图像语义分割的总结和感悟

    还是在继续找pooling,unpooling,upsampling的路上发现好文章 转自:https://www.2cto.com/kf/201609/545237.html 前言 (呕血制作啊!) ...

  6. 从特斯拉到计算机视觉之「图像语义分割」

    说起特斯拉,大家可能立马会想到今年5月份发生在特斯拉Model S自动驾驶上的一宗夺命车祸.初步的调查表明,在强烈的日照条件下,驾驶员和自动驾驶系统都未能注意到牵引式挂车的白色车身,因此未能及时启动刹 ...

  7. matlab 图像语义分割,笔记︱图像语义分割(FCN、CRF、MRF)、论文延伸(Pixel Objectness、)...

    图像语义分割的意思就是机器自动分割并识别出图像中的内容,我的理解是抠图- 之前在Faster R-CNN中借用了RPN(region proposal network)选择候选框,但是仅仅是候选框,那 ...

  8. 【论文阅读】SCAttNet:具有空间和通道注意机制的高分辨率遥感图像语义分割网络

    [论文阅读]SCAttNet:具有空间和通道注意机制的高分辨率遥感图像语义分割网络 文章目录 [论文阅读]SCAttNet:具有空间和通道注意机制的高分辨率遥感图像语义分割网络 一.总体介绍 二.概述 ...

  9. 图像语义分割和目标检测(上)

    语义分割是对图像在像素级别上进行分类的方法,在一张图像中,属于同一类的像素点都要被预测为相同的类,因此语义分割是从像素级别来理解图像.但是需要正确区分语义分割和实例分割,虽然他们在名称上很相似,但是他 ...

  10. 图像语义分割模型综述

    文章目录 一.语义分割介绍 二.语义分割的思路 空洞卷积 条件随机场 三.经典语义分割算法介绍 1.FCN 2.UNet Family (1)UNet (2)Attention U-Net (3)UN ...

最新文章

  1. arm linux嵌入式网络控制系统,基于ARMLinux的嵌入式网络控制系统的研究与设计
  2. ngx_lua module 模块安装
  3. csharp attributes
  4. CTF个人总结指南(更新中)
  5. mysql 5.6 修改端口_mysql5.6.24怎么修改端口号
  6. TensorFlow 机器学习秘籍中文第二版·翻译完成
  7. python中 str 和 repr_Python中__repr__和__str__区别详解
  8. Pointer Networks简介及其应用(格式化)
  9. VBA:一个Word VBA编程的例子
  10. 集丰照明|LED点光源安装方法
  11. win10开机字体变大bug
  12. 【考研英语语法】名词性从句
  13. 如何将图片文字转换成word
  14. 怎么恢复360删除的文件?360文件恢复,快速完成
  15. Python电影观众数量回归分析 随机森林 可视化 实验报告
  16. 在线语音识别引擎及识别方法与流程
  17. 编程初学者的一些学习干货笔记
  18. 【LeetCode】1337. 矩阵中战斗力最弱的 K 行(C++)
  19. bedtools指南
  20. 特斯拉电动汽车接连发生两起致命车祸 美国监管机构已介入调查

热门文章

  1. 第二季-专题17-触摸屏显身手
  2. 《矩阵分析》代码Ⅲ——Doolittle分解、Crout分解、Cholesky分解求解线性方程组matlab实现
  3. c# thread数线程的创建
  4. 实用 —— PowerCLI (二)
  5. 为什么Java 8 中不再需要StringBuilder拼接字符串
  6. 新闻发布系统,我学会了什么?
  7. BZOJ 1677. [Usaco2005 Jan]Sumsets 求和
  8. JAVA与C#的区别
  9. openpyxl 2.5.0中文文档
  10. oracle --- to_date('2015','yyyy')