图像语义分割(4)- DeepLab_v1

来源:互联网 发布:医疗大数据时代 编辑:程序博客网 时间:2024/06/05 15:39

简单来说,DeepLab_v1【1】就是 FCN + CRF(条件随机场)

按文章《【总结】图像语义分割之FCN和CRF》的说法,以DeepLab为代表的现代图像分割算法普遍开始用 前端(FCN)粗提取 + 后端(CRF/MRF)优化 的通用框架(图1)

               这里写图片描述
                     图1. 前端粗提取+后端迭代优化

如图1所示,DeepLab使用FCN获得粗糙的 Score map,经过二次插值(与FCN不同的地方)后,使用全连接条件随机场做优化


前端FCN分割

1)VGG-16 的修改
参考文章《【Deep Learning】DeepLab》将网络最后的 FC6、FC7 全连接层改成卷积层。

与FCN不同的是,摒弃“第一层对原图加 100 padding 的粗糙做法”,而是“将 pooling 层(pool4和pool5)的 stride 改为 1”

为了弥补由于 stride 变小带来的感受野缩小的问题,在后面的 conv5_1、conv5_2、conv5_3和 fc6 增加孔洞参数

   这里写图片描述
                  图2. 上半部分是 vgg-16 网络结构,下半部分是 DeepLab 改造的结构

图2里 fc8_pascal 的输出就是 8s 的feature map,然后再做个二次插值就变成原图大小

2)输出类别
将原来的 1000 类改为 21 类。同时把损失函数改为交叉熵

3)加速
将 fc6 的卷积核降采样到44,同时该层输出由 4096 减小到 1024


后端CRF精修

后端 CRF 不参与训练,直接在前端输出的结果上做迭代调整

全连接条件随机场

关于条件随机场,可以参考文章《如何轻松愉快地理解条件随机场(CRF)?》。简单来说就是,定义一组特征函数来描述事件之间的概率,所谓的条件就是,所有这些事件的当前的一个组合

文章《CRF as RNN语义分割》里对全连接条件随机场有很好的总结,可惜没写完。以下内容参考此篇文章

如图3所示,定义xi为像素点i的分类标签,其取值就是我们要分类的语义标签;yi为每个随机变量xi的观测值,即该像素的颜色(亮度)值。条件随机场的语义分割的目标就是:通过观测变量yi,推理出变量xi的值

                这里写图片描述
                     图3. 条件随机场图模型

如图3所示,为图模型G=(V,E),其中V={x1,x2,...,xn}为顶点;对于边,有稀疏条件随机场和全连接条件随机场之分:
1)稀疏条件随机场:每对相邻(4邻域、8邻域)的像素点可以构成一条边
2)全连接条件随机场:每个像素点与所有其他像素点相连,可以想象,这样的计算量是非常大的。文献【2】给出了快速推理算法

条件随机场目标函数

一般来说,CRF 的目标函数包含两部分:一元势函数、成对势函数。前者考虑本身(像素)的性质,后者考虑自身与其他点的关系

E(x)=iΨu(xi)+EΨp(xi,xj)

其中E(x)表示边集合的损失,推理的目标就是要最小化这个损失

1)一元势函数:衡量当像素点的亮度为yi时,属于类别xi的概率(比如像素点为绿色,那么其属于草地的概率比较大)。现在直接靠FCN计算得到
2)成对势函数:衡量两个事件同时发生的概率。比如两个相邻的像素,其亮度接近,那么属于同一类别的概率比较大。CRF主要通过这个函数弥补FCN分割的不足

在 DeepLab中
1)Ψu(xi)=logP(xi),其中P(xi)为FCN计算得到的每个像素属于类别的概率
2)Ψp(xi,xj)=μ(xi,xj)Km=1wmkm(fi,fj)
  当两个像素不属于一个类别,即xixiμ(xi,xj)=1,否则为 0
  假设一共有K个衡量特征,wm为第 m 个特征的权重,km(fi,fj)为基于第 m 个特征的高斯核函数。
  文章一共考虑了2种特征:空间距离和颜色
  

wmkm(fi,fj)=w1exp(||pipj||22σ2α||IiIj||22σ2β)+w2exp(||pipj||22σ2γ)

  其中w1对应的一项同时考虑空间pi和颜色Iiw2对应的一项仅考虑空间距离

条件随机场推算

参考文章《CRF as RNN的原理及Caffe实现》和《FCN & CRF 论文笔记》

条件随机场的概率函数为P(X=x|I)=1Zexp(E(x|I)),对E(x)最小化对应对后验概率P(X=x|I)的最大化,从而得到最优分割结果

直接计算P(x)比较麻烦,可以通过Q(X)=iQi(Xi)来近似P(x)。按KL-divergence最小化,得到最小化过程的迭代步骤

Qi(xi=l)=1Ziexp{ψu(xi)VLμ(l,l)m=1Kw(m)jik(m)(fi,fj)Qj(l)

得到如下迭代算法
             这里写图片描述
                      图4. 条件随机场迭代寻优
step1: 信息传递。m个滤波器分别对每一个类别的概率图Qi(j)做滤波
step2: 滤波结果加权相加。对每一个类别的m个滤波结果求加权和
step3: 类别兼容性转换。每一个类别的概率图根据不同类别间的兼容性矩阵μ(l,l)进行更新
step4: 加上一元项
step5: 归一化。就是个 softmax

文章《CRF as RNN的原理及Caffe实现》有《CRF as RNN》的 caffe 实现


代码实现

这里是官方的项目主页,但因为比较老,很多文件下不了
这里是一个第三方的实现,囊括了强监督/弱监督的改进版本


【1】Chen L C, Papandreou G, Kokkinos I, et al. Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs[J]. Computer Science, 2014(4):357-361.
【2】Krähenbühl P, Koltun V. Efficient inference in fully connected crfs with gaussian edge potentials[C]//Advances in neural information processing systems. 2011: 109-117.


原创粉丝点击