【语义分割系列:二】SegNet 论文阅读翻译笔记
2015 CVPR
SegNet: A Deep Convolutional Encoder-Decoder Architecture for Robust Semantic Pixel-Wise Labelling
Introduce
SegNet 是一个encoder-decoder结构的卷积神经网络.
- Cambridge提出
- 解决自动驾驶或者智能机器人的图像语义分割深度网络
- 基于FCN,修改VGG-16网络
- 有两种,分别为SegNet与Bayesian SegNet
- end to end
SegNet和FCN思路十分相似:
- 只是Encoder,Decoder(Upsampling)使用的技术不一致。
- SegNet的编码器部分使用的是VGG16的前13层卷积网络,每个编码器层都对应一个解码器层,最终解码器的输出被送入soft-max分类器以独立的为每个像素产生类概率。
Network
- 左边是卷积提取特征,通过pooling增大感受野,同时图片变小,该过程称为Encoder
-
右边是反卷积(在这里反卷积与卷积没有区别)与upsampling,通过反卷积使得图像分类后特征得以重现,upsampling还原到图像原始尺寸,该过程称为Decoder
- 绿色的pooling与红色的upsampling通过pool indices 相连,实际上是pooling后的indices输出到对应的upsampling
- 最后通过Softmax,输出不同分类的最大值,得到最终分割图。
- 最后一个卷积层会输出所有的类别(包括other类),网络最后加上一个softmax层,由于是end to end, 所以softmax需要求出所有每一个像素在所有类别最大的概率,做为该像素的label,最终完成图像像素级别的分类。
Architectural
Encoder
-
Convolution
-
通过卷积提取特征,SegNet使用的卷积为same卷积,即卷积后保持图像原始尺寸
-
在Decoder过程中,同样使用same卷积,不过卷积的作用是为upsampling变大的图像丰富信息,使得在Pooling过程丢失的信息可以通过学习在Decoder得到。
-
Batch Normalisation
-
RELU
SegNet作者的研究中发现,**层越多越有利于图像语义分割。
Decoder(Pooling&Upsampling)
-
在SegNet中的Pooling比其他Pooling多了一个indice 功能(亮点)
- 每次Pooling,都会保存通过max选出的权值在2x2 filter中的相对位置
- net中绿色的pooling与红色的upsampling通过pool indices相连,实际上是pooling后的indices输出到对应的upsampling
- Upsamping就是Pooling的逆过程(index在Upsampling过程中发挥作用)
- max-pooling indics advantage
- 改进了边界划分
- 减少了实现端到端训练的参数数量
- 这种upsampling模式可以包含到任何编码-解码网络中(FCN、crfasrnn)
-
Upsampling中先对输入的特征图放大两倍,然后把输入特征图的数据根据Pooling indices放入
- SegNet上采样不需要训练学习(只是占用了一些存储空间)
- FCN则是用transposed convolution策略,即将feature 反卷积后得到upsampling,这一过程需要学习
SegNet
- uses the max pooling indices to upsample (without learning) the feature map(s)
- convolves with a trainable decoder filter bank.
FCN
- upsamples by learning to deconvolve the input feature map
- adds the corresponding encoder feature map to produce the decoder output.( feature map is the output of the max-pooling layer in the corresponding encoder. )
- no trainable decoder filters in FCN.
Deconvolution
- 除了被记住位置的Pooling indices,其他位置的权值为0。
- 所以使用反卷积在这里用于填充缺失的内容,这里的反卷积与卷积是一样的。
output
- 最后一个卷积层会输出所有的类别(包括other类)
- 最后加上一个softmax层
- 求出所有每一个像素在所有类别最大的概率,最为该像素的label
Bayesian SegNet
先验概率
在SeNet中最后每个像素都会对每一类的概率进行计算,再通过 softmax 输出概率最大的一个,然后这个像素点就认为是这一类别,对应的概率就是这一像素属于该类的概率。(由原因到结果的推导)
problem
- 对于不同的样本,先验概率无法保证一定正确。
- 需要有从结果寻找原因的贝叶斯概率,即后验概率,它能给出结果的可信程度,即置信度。
different
- 网络:与普通比,Bayesian SegNet只是在卷积层中多加了一层DropOut
DropOut
在传统神经网络中DropOut层的主要作用是防止权值过度拟合,增强学习能力。
-
输入经过DropOut层之后,随机使部分神经元不工作(权值为0),即只**部分神经元,结果是这次迭代的向前和向后传播只有部分权值得到学习
-
DropOut层服从二项分布,结果不是0,就是1
-
Bayesian SegNet中,SegNet作者把概率设置为0.5,即每次只有一半的神经元在工作。
-
Bayesian SegNet中通过DropOut层实现多次采样,多次采样的样本值为最后输出,方差为其不确定度,方差越大不确定度越大
Gaussian process & Monte Carlo Dropout Sampling
Dropout as a Bayesian approximation: Representing model uncertainty in deep learning
高斯分布
高斯过程是指任意有限个随机变量都服从联合高斯分布,同时只需要知道均值与协防差就能够确定一个高斯过程,所以高斯过程可以用于从有限维到无限维的回归问题,从已知高斯分布,增加新的随机变量分布可以求出新的高斯分布,根据新的分布可以求出其均值与方差。
如何确定一个高斯分布?
- 需要多次采样才能确定一个分布。
- 蒙特卡罗抽样告诉我们可以通过设计一个试验方法将一个事件的频率转化为概率,因为在足够大的样本中,事件发生的频率会趋向事件发生的概率,因此可以很方便地求出一个未知分布。
- 通过蒙特卡罗抽样,就可以求出一个新分布的均值与方差,这样使用方差大小就可以知道一个分布对于样本的差异性,我们知道方差越大差异越大。
Use
1.对于分类的边界位置,不确定性较大,即其置信度较低。
2.对于图像语义分割错误的地方,置信度也较低。
3.对于难以区分的类别,例如人与自行车,road与pavement,两者如果有相互重叠,不确定度会增加。