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

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。也就是FCNCRF扯不上关系,只不过CRF利用了FCN的结果作为一元势函数。

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

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

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

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

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

 

对于一张图像来说,我们把它看成图模型G=(V,E),图模型的每个顶点对应一个像素点,即V={X1X2,……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),或者说的简单一点就是:我们希望两个相邻的像素点,如果颜色值yiyj非常接近,那么这两个像素点xixj属于同一个类别的概率应该比较大才对;反之如果颜色差异比较大,那么我们分割的结果从这两个像素点裂开的概率应该比较大才对。这一个能量项正是为了让我们的分割结果,尽量的从图像边缘的地方裂开,也就是为了弥补前面所说的FCN分割的不足之处。

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


其中Kg是一个高斯核,用于度量像素点ij的特征向量相似度的一个高斯权重项。特征向量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的卷积层,对多个特征图进行卷积层运算。经过运算完后,每两张特征图又输出一张新的概率图


  • 49
    点赞
  • 137
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值