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 CR Fs 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 把这两个强大的招式融汇贯通,搞出一个端到端的训练模型,那么精度必然可以进一步提升,这也正是 C RF 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 的卷积层,对多个特征图进行卷积层运算。经过运算完后,每两张特征图又输出一张新的概率图