图像语义分割(4)- DeepLab_v1
简单来说,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 的卷积核降采样到
后端CRF精修
后端 CRF 不参与训练,直接在前端输出的结果上做迭代调整
全连接条件随机场
关于条件随机场,可以参考文章《如何轻松愉快地理解条件随机场(CRF)?》。简单来说就是,定义一组特征函数来描述事件之间的概率,所谓的条件就是,所有这些事件的当前的一个组合
文章《CRF as RNN语义分割》里对全连接条件随机场有很好的总结,可惜没写完。以下内容参考此篇文章
如图3所示,定义
图3. 条件随机场图模型
如图3所示,为图模型
1)稀疏条件随机场:每对相邻(4邻域、8邻域)的像素点可以构成一条边
2)全连接条件随机场:每个像素点与所有其他像素点相连,可以想象,这样的计算量是非常大的。文献【2】给出了快速推理算法
条件随机场目标函数
一般来说,CRF 的目标函数包含两部分:一元势函数、成对势函数。前者考虑本身(像素)的性质,后者考虑自身与其他点的关系
其中
1)一元势函数:衡量当像素点的亮度为
2)成对势函数:衡量两个事件同时发生的概率。比如两个相邻的像素,其亮度接近,那么属于同一类别的概率比较大。CRF主要通过这个函数弥补FCN分割的不足
在 DeepLab中
1)
2)
当两个像素不属于一个类别,即
假设一共有
文章一共考虑了2种特征:空间距离和颜色
其中
条件随机场推算
参考文章《CRF as RNN的原理及Caffe实现》和《FCN & CRF 论文笔记》
条件随机场的概率函数为
直接计算
得到如下迭代算法
图4. 条件随机场迭代寻优
step1: 信息传递。m个滤波器分别对每一个类别的概率图
step2: 滤波结果加权相加。对每一个类别的m个滤波结果求加权和
step3: 类别兼容性转换。每一个类别的概率图根据不同类别间的兼容性矩阵
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.