目标分割:SegNet、U-Net

日萌社

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)


 

6.3 SegNet与U-Net

学习目标

  • 目标
    • 说明SegNet的算法结构
    • 掌握SegNet的upsampling方法
    • 掌握U-Net的网络结构特点
  • 应用

6.3.1 SegNet背景

SegNet的主要动机是场景理解的应用。

  • 难点:因此它在设计的时候考虑了要在预测期间保证内存和计算时间上的效率。分割的任务其实应用非常地广,需要理解各个像素之间的关系,比如要区分出人行道和车行道,建筑物和道路,并且还要能够检测识别到小的物体,比如路边的小狗,小猫。所以这个任务需要很高的精度,也很具有挑战性。
  • 思想:所以为了有个好的区分度,需要对物体的边界有一个非常好的效果,特别是在特征提取的时候,需要保持这些边界的信息(忽略高分辨率的特征图(conv1,conv2的特征图)肯定会导致边缘信息的丢失)。另外在计算时间上面的要求也比较高。所以综合这些原则考虑起来,想像着就比较有挑战性。 FCN的解码的部分的上采样是可以学习的,这样导致有很多的参数需要学习,这样在end to end 训练的时候比较难。

6.3.2 SegNet介绍

6.3.2.1 特点

目标分割:SegNet、U-Net_第1张图片

  • 1、编码网络和VGG-16的卷积层相同
  • 2、移除了全连接层
  • 3、解码器使用从相应的编码器接受的max-pooling indices来进行输入特征图的非线性upsampling
  • 结构:
    • 编码网络(encoder network):由13个卷积层组成(使用的时预训练的VGG16的前13层),该部分提取输入特征,用于目标分类,这就是使用预训练的VGG原理所在,至于丢弃FC层是为了保持更高的分辨率,同时也减少了参数。
      • 总共5个Block,每个Block都由Conv + Batch Norm + ReLU组成
    • 解码网络(decoder network):每个encoder会对应一个decoder,故decoder具有13层,将低分辨率的feature map映射回和输入一样大小分类器(mask)。Decoder交替采用conv+upsampling
      • 每个block由Upsampling + Conv + BN组成
    • 像素分类层(pixelwise classification layer):decoder的输出会送到分类层,最终为每个像素独立的产生类别概率

6.3.2.2 max-pooling与deconvolution对比

  • 首先做maxpooling的时候得到的数的原始的位置要记住
  • 然后在上采样的时候,在把这些值给还原到原位置,相当于得到了一个稀疏的上采样feature,而FCN里面直接是deconvolution进行的上采样。

目标分割:SegNet、U-Net_第2张图片

索引记录:

目标分割:SegNet、U-Net_第3张图片

解码网络中max-pooling indics的好处:

  • 1、减少了端到端训练的参数量
  • 2、仅需要少量的修改而可合并到任何编码-解码形式的架构
  • 3、改善了边界划分

decoder阶段是没有加非线性激活的(即没有ReLU)

在上采样部分,卷积操作不使用偏置和ReLU

  • 上采样过程,就是通过卷积将稀疏的特征图稠密化,ReLU激活引入非线性时产生很多0稀疏化了结果,起了反作用,因此不需要ReLU
  • 偏置其实可以看做ReLU作用的阈值,没有ReLU自然不需要偏置,总体都加上一个常数但没有ReLU操作,这个值就没有起到是否需要激活的作用,所以加不加没有区别

6.3.2.3 训练细节

1、使用数据集

使用CamVid路景数据集来对基于解码器变体的性能进行基准测试.该数据集很小,由360×480分辨率的367次训练和233次测试RGB图像(白天和黄昏场景)组成.挑战是划分道路,建筑,汽车,行人,标志,极点,侧路等11类.

2、图像处理

  • 使用BN改变数据分布,归一化加速收敛

3、训练

  • 1、使用固定学习率0.1和动量0.9的随机梯度下降(SGD)
  • 2、每轮之前,训练集被shuffle,然后按顺序挑选每个小批量(12张图像),从而确保每个图像在一个epoch只被使用一次
  • 3、使用交叉熵损失作为训练网络的目标函数,损失在一个小批量的所有像素上求和得到
  • 4、训练集中的每个类别(例如,道路,天空和建筑像素占主导地位的CamVid数据集)中像素数量的变化很大时,根据真实类别不同地加权.
    • 这被称为class balancing.使用median frequency balancing
    • 分配给损失函数中的类的权重是在整个训练集上计算的类频率的中值除以类频率的比率。这意味着训练集中的较大类的权重小于1,最小类的权重最高
    • 尝试了不同类型的训练,无需类平衡,也可以等效地使用natural frequency balancing

6.3.2.4 效果对比

SegNet并将其性能与FCN(解码器结构不同的)进行比较,我们使用较小版本的SegNet,称为SegNet-Basic,它具有4个编码器和4个解码器。然后创建了FCN-Basic,一个可比较的FCN版本

目标分割:SegNet、U-Net_第4张图片

  • 1、SegNet-Basic-SingleChannelDecoder:显着减少了可训练参数的数量和推理时间
  • 2、内存扩大型SegNet(SegNet-Basic-EncoderAddition):这里使用上采样的max-pooling indices,随后进行卷积步骤以使其稀疏输入变得更加密集.然后将其逐个添加到相应的编码器特征图,以产生解码器输出

  • 结论:最好的情况下,当内存和推理时间都不受约束时,比如FCN-Basic-NoDimReduction和SegNet-EncoderAddition之类的较大型号比其他变体更准确.

  • 特别地,在FCN-Basic模型中丢弃维数降低导致具有高BF分数的FCN Basic变体中的最佳性能。这再次强调了分割架构中存储器与精度之间的权衡。

评测标准

  • G值是global accuracy,测量数据集中所有像素正确分类的百分比。C值class average accuracy,所有类的预测准确度的平均值.还有就是在Pascal VOC12挑战中使用的所有类的mIoU.
度量标准 含义
global accuracy (G) 在数据集上总体的准确率
class average accuracy (C) 平均每个类别的准确率
mean intersection over union (mIoU) 类平均IoU
bf score(少用) f1分数(机器学习中的f1计算)

6.3.3 SegNet总结

  • SegNet一种用于语义分割的深度卷积网络架构。SegNet背后的主要动机是需要设计一种有效的道路和室内场景理解架构,这在存储和计算时间方面都是有效的。

  • SegNet更有效率,因为仅存储特征映射的最大池索引,并将其用于解码器网络以实现良好的性能。在大型和众所周知的数据集中,SegNet具有竞争力,实现道路现场理解的高分。

6.3.4 U-Net-用于生物医学图像分割的卷积网络(冠军)

6.3.4.1 医疗影像的特点

生物学医学领域:在许多视觉任务中,尤其是在生物医学图像处理中,所期待的输出结果中应包括如位置和每一像素的类别标签等信息。而且,在生物医学任务中通常难以获取数以千计的训练图像。

  • 1、图像语义较为简单、结构较为固定。比如就用脑CT和脑MRI,由于器官本身结构固定和语义信息没有特别丰富,所以高级语义信息和低级特征都显得很重要(UNet的skip connection和U型结构就派上了用场)。举两个例子直观感受下。
    • 脑出血: 在CT影像上,高密度的区域就大概率是一块出血,如下图红色框区域。

目标分割:SegNet、U-Net_第5张图片

  • 2、数据量少。医学影像的数据获取相对难一些,很多比赛只提供不到100例数据。所以我们设计的模型不宜多大,参数过多,很容易导致过拟合。

6.3.5 U-Net 详解

U-Net提出了一种新的网络结构和训练方法,依靠数据增强将有效的标注数据更为有效地使用。

  • 该网络由收缩路径(contracting path)和扩张路径(expanding path)组成。其中,收缩路径用于获取上下文信息(context),扩张路径用于精确的定位(localization),且两条路径相互对称。
  • 该网络能够从极少图像端对端进行训练,并且在ISBI竞赛中,对于分割电子显微镜中的神经元结构的表现好于以前最好的方法(滑动窗口卷积网络)。除此之外,该网络的运行速度非常快,在最新一个GPU上,分割一张512*512的图像不到一秒即可完成。

6.3.5.1 结构

目标分割:SegNet、U-Net_第6张图片

一个contracting path即收缩路径(左侧)和一个expansive path即扩展路径(右侧)组成。

  • 1、收缩路径遵循卷积网络的典型架构。它包括重复使用两个3x3卷积(无填充卷积),每个卷积后跟一个线性修正单元(ReLU)和一个2x2最大池化操作,步长为2的下采样。
    • 在每个下采样步骤中,我们将特征通道的数量加倍。
  • 2、扩展路径中的每一步都包括特征映射的上采样
    • 1、进行2x2卷积(“反卷积”),将特征通道数量减半,与来自收缩路径的相应裁剪特征映射串联
    • 2、然后是两个3x3卷积,每个卷积后面接ReLU。
      • 由于每一次卷积都会丢失边界像素,因此裁剪是必要的。在最后一层,使用1x1卷积将每个64分量特征向量映射到所需数量的类别上。
  • 3、网络采样细节
    • UNet的encoder下采样4次,一共下采样16倍,对称地,其decoder也相应上采样4次,将encoder得到的高级语义特征图恢复到原图片的分辨率。网络较小运行速度快

图中箭头解释:

* 每一步都首先使用反卷积(up-convolution),每次使用反卷积都将特征通道数量减半,特征图大小加倍。(绿箭头)
* 反卷积过后,将反卷积的结果与contracting path中对应步骤的特征图拼接起来。(白/蓝块)
* contracting path中的特征图尺寸稍大,将其修剪过后进行拼接。(左边深蓝虚线)
* 对拼接后的map再进行2次3*3的卷积。(右侧蓝箭头)
* 最后一层的卷积核大小为1*1,将64通道的特征图转化为特定类别数量(分类数量,二分类为2)的结果。(青色箭头)

为什么效果好

1、底层(深层)信息:经过多次下采样后的低分辨率信息。能够提供分割目标在整个图像中上下文语义信息,可理解为反应目标和它的环境之间关系的特征。这个特征有助于物体的类别判断(所以分类问题通常只需要低分辨率/深层信息,不涉及多尺度融合)

2、高层(浅层)信息:经过concatenate操作从encoder直接传递到同高度decoder上的高分辨率信息。能够为分割提供更加精细的特征。

6.3.5.2 训练细节

目标分割:SegNet、U-Net_第7张图片

6.3.5.3 数据增强

  • 1、平移与旋转不变性,并且对形变和灰度变化鲁棒
  • 2、将训练样本进行随机弹性形变是训练分割网络的关键
    • 使用随机位移矢量在粗糙的3x3网格上(random displacement vectors on a coarse 3 by 3 grid)产生平滑形变(smooth deformations)。
      • 位移是从10像素标准偏差的高斯分布中采样的。然后使用bic插值计算每个像素的位移。在contracting path的末尾采用drop-out 层更进一步增加数据(bilinear与bicubic 插值图像处理介绍)

目标分割:SegNet、U-Net_第8张图片

6.3.6 U-net实验效果

下面是U-Net在两种不同的分割任务中的应用效果

1、U-Net应用于光学显微图像中的细胞分割任务

目标分割:SegNet、U-Net_第9张图片

ISBI细胞跟踪挑战的结果。(a)“PhC-U373”数据集的输入图像的一部分 (b)分割结果(青色掩模)和人工标注的GT(黄色边框) (c)“DIC-HeLa”数据集的输入图像 (d)分割结果(随机彩色掩模)和人工GT(黄色边框)

评估结果:包含35个部分注释的训练图像。实现了92%的平均IOU

目标分割:SegNet、U-Net_第10张图片

其中“DIC-HeLa”是另外一个数据集,这里不做介绍了。

2、总结

U-Net结构在不同的生物医学分割应用中都取得了非常好的性能。由于弹性形变的数据增强,它只需要很少的标签图像,并且有一个非常合理的训练时间,在英伟达Titan GPU(6GB)只需10小时。

6.3.7 总结

  • SegNet的算法结构
  • SegNet的upsampling方法
  • U-Net的网络结构特点

 

 

你可能感兴趣的:(人工智能,TensorFlow)