简单来说,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 的卷积核降采样到 4∗4 ,同时该层输出由 4096 减小到 1024
后端CRF精修
后端 CRF 不参与训练,直接在前端输出的结果上做迭代调整
全连接条件随机场
关于条件随机场,可以参考文章《如何轻松愉快地理解条件随机场(CRF)?》。简单来说就是,定义一组特征函数来描述事件之间的概率,所谓的条件就是,所有这些事件的当前的一个组合
文章《CRF as RNN语义分割》里对全连接条件随机场有很好的总结,可惜没写完。以下内容参考此篇文章
如图3所示,定义 xi 为像素点 i 的分类标签,其取值就是我们要分类的语义标签;
图3. 条件随机场图模型
如图3所示,为图模型 G=(V,E) ,其中 V={
x1,x2,...,xn} 为顶点;对于边,有稀疏条件随机场和全连接条件随机场之分:
1)稀疏条件随机场:每对相邻(4邻域、8邻域)的像素点可以构成一条边
2)全连接条件随机场:每个像素点与所有其他像素点相连,可以想象,这样的计算量是非常大的。文献【2】给出了快速推理算法
条件随机场目标函数
一般来说,CRF 的目标函数包含两部分:一元势函数、成对势函数。前者考虑本身(像素)的性质,后者考虑自身与其他点的关系