传统CNN做分割(Lecun学生做的)时,使用该像素周围的一个图像块作为CNN的输入。
缺点:
一、 储蓄开销很大。
二、 计算效率低,相邻像素重复计算。
三、 像素块大小限制了感知区域大小。
FCN使用卷积层代替最后的全连接层,使用1x1的卷积核。
经过多次卷积后,图像越来越小,分辨率越来越低,使用上采样从分辨率低的粗略图像恢复到原图的分辨率。
分别通过对第五层卷积池化后的输出、第四层的输出、第三层的输出通过32倍、16倍、8倍上采样。
优点:
1. 可接受任意大小的图像。
2. 更高效,避免了像素块带来的重复存储和计算卷积。
缺点:
1. 结果仍模糊不平滑,对细节不敏感。
2. 没有充分考虑像素之间的关系,忽略了通常情况下基于像素分类的分割方法中使用的空间规整。
使用交叉熵作为损失函数。
卷积:
转职卷积:
卷积: C x X
反向: C^T x X
反卷机: C^T x X
反向: C x X
条件随机场
设X与Y是随机变量,P(Y|X)是在给定X的条件下Y的条件概率分布,若Y构成一个由无向图G=(V,E)表示的马尔科夫随机场。
对任意节点v成立,则称P(Y|X)为条件随机场。
w~v表示与v有边连接的所有结点w。
w不等于v表示除v外所有结点。
空洞卷积(dilated convolution、多孔卷积)
语义分割三大挑战:
(1) 特征分辨率减少
(2) 不同尺度下物体的存在状况
(3) 深度卷积不变性造成定位精度减小
传统pooling操作中降低图像尺寸的同时,增大感受野,同时还有压缩特征的作用。
使用空洞卷积的好处是在不做pooling操作损失信息的情况下,加大了感受野,同时不增加计算量和模型参数。
传统卷积的感受野(kernel-1)x (layer) + 1
感受野是卷积每一层输出的特征图上像素点在原始图像上映射的区域大小。
空洞卷积潜在的问题:
仅仅多次叠加rate为2的3x3核的话,会因为不是所有像素点都参与计算而损失信息的连续性。
大的dilation rate只对大目标分割有效果
3. 需要结合pooling(stride = 1, padding = 1)来达到压缩特征的作用(DeepLab)。
解决上述问题的方法,可以是使用混合空洞卷积(hybrid dilated convolution)
叠加的卷积不能大于1的公约数,[2,4,6]就不是一个号的三层卷积
将迪拉通rate设计成锯齿状[1,2,5,1,2,5]
满足Mi = max[Mi+1 - 2ri, Mi+1 - 2(Mi+1 - ri), ri]
ri是i层的dilation rate,Mi为i层最大的dilation rate, 假设共n层,默认Mn = rn
锯齿形满足小物体和达吾提的分割要求。
全连接层前,使用金字塔池化
设经过最后一个卷积得到a x a大小的特征图,想得到的池化视图为n x n
则窗口大小为 win = [a/n], stride = [a/n]
假设分为三个视图 16x16, 4x4, 1x1
则最后输出(16+4+1)x 通道数
采用64个特征的好处:
使用7x7固定核,可以把输出层的像素追溯到输入层中。
使用LCN预处理: