CRF as RNN语义分割

原文地址:http://blog.csdn.net/hjimce/article/details/50888915

作者:hjimce

一、相关理论

本篇博文主要讲解文献《Conditional Random Fields as Recurrent Neural Networks》,实现了图像语义分割的再次突破。首先我觉得这篇文献的题目应该翻译成:把CRF迭代推理过程看成是RNN;可能很多人看到文献题目就把它翻译成:CRF与RNN的结合,以至于后面看文献觉得迷迷糊糊不知所云,然而这篇文献实质上是FCN与CRF的端到端结合训练。

文献最大的意义在于把CRF的求解推理迭代过程看成了RNN的相关运算,嵌入CNN模型中,达到了真正的算法之间的融合。想要深入理解这篇文献,需要先学会文献《Efficient Inference in Fully Connected CRFs with Gaussian Edge Potentials》、《Fully Convolutional Networks for Semantic Segmentation》、《Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs》。特别是需要深入理解稠密条件随机场,并且要理解其代码层面的实现,后面才能看懂文献是怎么把CRF看成是RNN的。

众所周知,近几年CNN在图片分类、物体检测取得了不俗的成绩,于是人们开始探索像素级的标注分类,也就是图片的语义分割,其中语义分割的开山之作当属FCN。然而FCN得到的结果很粗糙,比如物体分割的边缘还不够精确,比如下面:

本来那只马的两只腿之间,有部分的像素是草地,但是分割结果是把那一小块的草地,判别为了马。具体原因如下:

一来是因为CNN感受野过大、以至于我们最后的分割输出很粗糙(在网络最后一层的时候,每个神经元对应到原始图片的一块很大区域);FCN最后放大比例是32倍,分割不粗糙才怪;

二来是因为CNN缺少对空间、边缘信息等约束。CNN是一种端到端的模型,没有加入任何已有的先验约束,我们是希望图像分割的时候,在边缘的地方裂开的概率大一些(梯度越大的地方)。或者说我们希望两个相邻的像素如果差别越大,那么这两个像素属于不同类别的概率应该越大;如果两个相邻像素点的颜色非常接近,那么它们属于不同类别的概率应该越小。因此如果能够把这些人工已有的先验约束信息加入其中,那算法就会有进一步的提升。

二、FCN粗分割+CRF精分割—概述

根据上面FCN分割结果存在的不足是:感受野过大、边缘约束不够强。于是根据这两点不足,文献DeepLab:《Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs》提出的算法是:先利用FCN做粗分割、然后再利用CRF进行精分割。具体FCN改进如下:

1、把第一层卷积层的卷积核大小由7*7改为3*3;(减小感受野)

2、减小下采样比例,本来我们FCN下采样比例是32,通过减小stride大小,下采用比例为8;(减小感受野)

3、采用全连接条件随机场,对FCN分割结果进行精细化分割(增强边缘约束)

我们需要清楚的是这篇文献的算法,粗分割和精分割是完全分开的,并不是一个端到端的训练模型,算法有点low。也就是FCN和CRF扯不上关系,只不过CRF利用了FCN的结果作为一元势函数。

所以如果我们能够把CRF和FCN把这两个强大的招式融汇贯通,搞出一个端到端的训练模型,那么精度必然可以进一步提升,这也正是《CRF as RNN》这篇文献的思想,这篇文献把CRF的学习、推理过程看成是RNN,然后嵌入CNN模型中,搞出了一个新的招式,完成了端到端的训练、预测。

三、全连接条件随机场—概述

1、全连接条件随机场与稀疏条件随机场的区别

学习本部分,默认你已经学过条件随机场的图像处理相关算法,这边只做简单的概述。在以前我们所接触到的条件随机场基本上都是稀疏条件随机场,你所看到的教程也大部分指的是稀疏条件随机场。

这里我们先回顾一下条件随机场图像分割能量函数的构造:定义隐变量Xi为像素点i的分类标签,它的取值范围是就是我们要分类的语义标签L={l1,l2,l3……};Yi为每个随机变量Xi的观测值,也就是每个像素点的颜色值。条件随机场的图像语义分割的目标就是:通过观测变量Yi,推理出潜变量Xi的对应类别标签。

对于一张图像来说,我们把它看成图模型G=(V,E),图模型的每个顶点对应一个像素点,即V={X1,X2,……Xn}。对于边来说,

(1)如果是稀疏条件随机场,那么我们构造图模型的边集合E就是:每对相邻的像素点间可以构造一条边。当然除了4邻域构造边之外,你也可以用8邻域模型。

(2)全连接条件随机场与稀疏条件随机场的最大差别在于:每个像素点都与所有的像素点相连接构成连接边。这就恐怖了,如果一张图像是100*100,那么就相当于有10000个像素点,因此如果采用全连接条件随机场的话,那么就会构造出约10000*10000条边。如果图像大小再大一些,那么就会变得非常恐怖,普通条件随机场推理算法,根本行不通。好在文献《Efficient Inference in Fully Connected CRFs with Gaussian Edge Potentials》给出了快速推理算法。接着我们就简单讲解具体的求解算法。

2、条件随机场的目标函数是

E表示边集合。

(1)能量方程的第一项Ψu(xi),称之为一元势函数,用于衡量当像素点i的颜色值为yi时,该像素点属于类别标签xi的概率。这个从直观上可以这么理解:假如一个像素点的颜色值yi是绿色,那么它属于草地的概率应该比较大;假如一个像素点颜色值是蓝色,那么它属于天空的概率应该比较大,这就是这个能量项的作用。在深度还未杀入这个领域之前,以前的算法第一项一元函数势能一般是通过SVM等分类器训练得到的,或者通过构建每个类别的高斯混合模型(构建每个类别的高斯混合模型,这样当一个像素点的值为yi的时候,我们就可以计算出此像素点属于每个类别的概率值,类似图像分割Grab cut算法)。

不过现在有了CNN了,这一个能量项我们可以直接通过CNN计算出来,因为CNN训练完毕后,可以输出每个像素点,属于每个类别的概率值。DeepLab这篇文献的算法就是用CNN输出,作为CRF的一元势能量。

(2)能量方程的第二项成对势函数Ψp(xi,xj)。用于衡量两事件同时发生的概率p(xi,xj),或者说的简单一点就是:我们希望两个相邻的像素点,如果颜色值yi、yj非常接近,那么这两个像素点xi、xj属于同一个类别的概率应该比较大才对;反之如果颜色差异比较大,那么我们分割的结果从这两个像素点裂开的概率应该比较大才对。这一个能量项正是为了让我们的分割结果,尽量的从图像边缘的地方裂开,也就是为了弥补前面所说的FCN分割的不足之处。

这个我们可以用如下公式计算:

其中Kg是一个高斯核,用于度量像素点i和j的特征向量相似度的一个高斯权重项。特征向量fi我们可以用(x,y,R,G,B)表示,也就是以像素点的像素值和坐标位置作为特征向量。然后u(xi,xj)就表示两个标签之间的一个兼容性度量。通过最小化上面的CRF能量函数,我们就可以实现CRF的隐变量X的推理。接着我们就来说说怎么稠密条件随机场怎么推理,求解能量函数。

3、求解方法

成对势函数Ψp(xi,xj),也就是相当于图模型的每一条边的能力值,上面我们说到对于一个稠密条件随机场来说,边数数目是非常多的:

四、CRF as RNN

OK,言归正传,我们接着就来讲讲怎么把CRF的推理过程看成是、卷积层、SoftMax层等神经网络层的组合,同时又和RNN有什么样的渊源。下面公式中的下标i表示第i张特征图。

4.1  

Zi是归一化因子。其实这个计算公式就是softmax函数,所以这一步的计算我们可以把它看成是神经网络的softmax层,所以我们用神经网络的softmax层替代这个步骤。

4.2

Q(l)是一张概率图片,对应着原始图像每个像素点属于类别l的概率,这个就像引导滤波一样。如果我们语义分割有21个类别,那么CNN softmax层输出就是21张这样的概率图,每一张对应一个分类类别的概率图。

OK,这一步操作又是什么意思呢?K(fi,fj)是一个高斯核权重,或者说白了上面的公式就是要对图像Q(l)进行高斯模糊,这就相当于神经网络的卷积运算一样。

具体K(fi,fj)一般包含:位置、颜色度量等作为特征。比如我们就是用了这两种特征(见文献《Efficient Inference in Fully Connected CRFs with Gaussian Edge Potentials》):

颜色特征:

位置特征:

这样我们可以每一张概率图Q(l),我们经过不同的特征滤波器之后,都可以得到两张滤波结果。这两张之间用加权组合在一起:

4.3

这一步可以看成是采用1*1的卷积层,对多个特征图进行卷积层运算。经过运算完后,每两张特征图又输出一张新的概率图

深度学习(三十三)CRF as RNN语义分割-未完待续相关推荐

  1. 【深度学习】深入浅出CRF as RNN(以RNN形式做CRF后处理)

    [深度学习]深入浅出CRF as RNN(以RNN形式做CRF后处理) 文章目录 1 概述 2 目标 3 思路 4 简述 5 论文原文5.1 Introduction5.2 相关工作5.3 关键步骤 ...

  2. 三维深度学习中的目标分类与语义分割

    (转载的文章,仅供学习,如有侵权请随时联系删帖) 在过去的几年中,基于RGB的深度学习已经在目标分类与语义分割方面取得了非常好的效果,也促进了很多技术的发展,深度学习在现实生活中的应用也越来越多.但是 ...

  3. 基于深度学习的青菜病害区域图像语义分割与定位

    基于深度学习的青菜病害区域图像语义分割与定位 1.研究思路 提出了一种基于深度学习的青菜灾害区域图像语义分割的方法,通过 fine-tune FCN 以像素级精度分割出图像中作物灾害区进行识别,并借助 ...

  4. 【深度学习论文翻译】应用于语义分割问题的深度学习技术综述01

    目录 一.前言 二.摘要 三.引言 四.术语及背景概念 1. 常见的深度网络架构 2. 迁移学习 3. 数据预处理与数据增强 五. 数据集及竞赛 1.2维数据集 2.2.5维数据集 3.3维数据集 一 ...

  5. 计算机视觉方向简介 | 三维深度学习中的目标分类与语义分割

    三维数据的表示方法 ●  point cloud:点云,也就是三维坐标系统中点的集合,这些点通常以x,y,z坐标来表示,并且一般用来表示物体的外表形状.当然,除了最基本的位置信息以外,也可以在点云中加 ...

  6. 深度学习(9)——无监督语义分割之全卷积域适应网络(译文)

    无监督语义分割之全卷积域适应网络 Fully Convolutional Adaptation Networks for Semantic Segmentation 摘要 深度神经网络的最新进展令人信 ...

  7. 深度学习:使用UNet做图像语义分割,训练自己制作的数据集,详细教程

    语义分割(Semantic Segmentation)是图像处理和机器视觉一个重要分支.与分类任务不同,语义分割需要判断图像每个像素点的类别,进行精确分割.语义分割目前在自动驾驶.自动抠图.医疗影像等 ...

  8. 5G网络学习(三)——大白话讲解PDU会话(未完待续)

    在介绍PDU会话之前让我们介绍一下什么是PDU PDU简介 PDU(Protocol Data Unit)是协议层的协议在对等层之间交换的信息叫协议数据单元. 封装 数据要通过网络进行传输,要从高层一 ...

  9. 2020届 AAAI Fellow名单新鲜出炉!!!深度学习三巨头终于齐聚

    点击上方"深度学习技术前沿",选择"星标"公众号 资源干货,第一时间送达 AAAI 是国际人工智能领域最权威的学术组织,Fellow 是该学会给予会员的最高荣誉 ...

最新文章

  1. 如何有效使用每一点脑力总结_如何更有效地节省脑力和编码
  2. 用思维导图做的求婚计划,哈哈哈
  3. Python网络编程(1.利用socket(udp)+网络调试助手,发送数据)
  4. 大龄程序员失业后,看他们是如何破局突围的? | 技术头条
  5. FPGA与DSP区别
  6. 计算机信息科学与应用技术学术论,第三届计算机信息科学与应用技术国际学术论坛(ISCISAT .DOC...
  7. HTTP 浏览器发送给服务器的数据编码问题
  8. Java线程池ExecutorService
  9. 6.卷1(套接字联网API)---I/O复用 : select 和 poll 函数
  10. string中c_str()用法
  11. stm32 LCD1602显示
  12. ANSYS Maxwell 2D永磁体建模
  13. Python对话框使用
  14. Android App 安全登录认证解决方案
  15. 计算机的学情分析报告,计算机教学计划合集总结5篇
  16. 时间标准 GMT, UTC, CST
  17. win7启动任务管理器快捷键
  18. 王厚祥谈《古诗四帖》基本笔画的书写方法
  19. 为什么不建议使用免费的IP代理?
  20. DiskGenius 恢复文件

热门文章

  1. 多个pdf合并成一个pdf_十秒教你将多个PDF如何合并成一个PDF
  2. 白帽子学Linux教程,网络安全工程师与白帽子***教你Kali Linux***:内网***实战技巧...
  3. linux系统密码正确但是一直登录不了报错Account locked due to failed logins
  4. 汉字转拼音,一二级词库,不支持多音字
  5. iis如何处理并发请求
  6. win7 / mysql-8.0.11-winx64 安装的测坑步骤
  7. VC6.0 +WDK 开发驱动的环境配置
  8. bzoj4448 [Scoi2015]情报传递
  9. C# Exception 对象的属性
  10. VS2013中修改.dll工程项目的.lib和.dll的输出路径