真锋
永远保持一颗学习和专注的心
嵌入式视觉

基于深度学习的语义分割技术总览

本文写的比较简单,属于入门入门入门级别,仅当作个人学习笔记和回忆时使用,更多细节和内容请参考论文和网络资料。

在计算机视觉领域,有一个方向是语义分割,一般是针对图像进行像素级分类,具体而言,就是语义图像分割会将每个像素都标注上其对应的类别。与实例分割(mask rcnn)不同,实例分割常常与目标检测系统相结合,用于检测和分割场景中同一对象的多个实例。

基于深度学习的语义分割方法介绍

用卷积神经网络分类(全卷积网络FCN),与普通CNN网络不通的是,FCN的分类层是卷积层,普通网络为全连接层。方法介绍如下: 
最近的语义分割架构一般都用卷积神经网络(CNN)为每个像素分配一个初始类别标签。卷积层可以有效地捕捉图像中的局部特征,并以层级的方式将许多这样的模块嵌套在一起,这样 CNN 就可以试着提取更大的结构了。通过一系列卷积捕捉图像的复杂特征,CNN 可以将一张图的内容编码为紧凑表征。 
但为了将单独的像素映射给标签,我们需要将标准 CNN 编码器扩展为编码器-解码器架构。在这个架构中,编码器使用卷积层和池化层将特征图尺寸缩小,使其成为更低维的表征。解码器接收到这一表征,用通过转置卷积执行上采样而「恢复」空间维度,这样每一个转置卷积都能扩展特征图尺寸。在某些情况下,编码器的中间步骤可用于调优解码器。最终,解码器生成一个表示原始图像标签的数组。

Encoder

encoder本质其实就是一连串的卷积网络。该网络主要由卷基层,池化层和BatchNormalization层组成。卷基层负责获取图像局域特征,池化层对图像进行下采样并且将尺度不变特征传送到下一层,而BN主要对训练图像的分布归一化,加速学习。 
概括地说,encoder对图像的低级局域像素值进行归类与分析,从而获得高阶语义信息(“汽车”, “马路”,“行人”),Decoder收集这些语义信息,并将同一物体对应到相应的像素点上,每个物体都用不同的颜色表示。

Decoder

Encoder已经获取了所有的物体信息与大致的位置信息,那么下一步就需要将这些物体对应到具体的像素点上了。这一系列工作是由Decoder完成。Decoder对缩小后的特征图像进行上采样,然后对上采样后的图像进行卷积处理,目的是完善物体的几何形状,弥补Encoder当中池化层将物体缩小造成的细节损失。

Convolution Layer in Encoder and Decoder

Encoder和Decoder中都存在卷积层。他们在算法上一模一样,但是在作用上有一点不同。

  • Encoder阶段,卷基层的主要作用就是获取图像的局部信息,并传送给池化层,然后由2×2最大池化处理,把最大值特征再次传递到下一层。所以在这部分当中,Convolution+Pooling的主要作用从图像中获取信息。
  • Decoder阶段的处理是将特征层进行上采样,然后交给卷基层进行处理。上采样后的2×2区域只有一个前一层传来的1×1特征点,其余区域都是空值,因此这些空值需要被填补成适当的特征值,来让这个区域变得完整并且平滑。这个工作就是由卷基层担任的。所以位于Decoder当中的卷积层的作用是对图像进行“填补”。

总结

  • Encoder对图像进行分析,弄清某一区域是什么物体,然后Decoder来寻找这个物体对应的是原图像当中的哪些像素点。
  • 两个阶段的卷积层在计算方式上完全一样,但是表现结果有差异,因此根据此差异,Enocder阶段的卷积层命名为“卷积”,Decoder阶段的卷积命名为“反卷积”。

常见模型

FCN系列

三种模型FCN-32S, FCN-16S,FCN-8S 
全卷积神经网络(FCN)的主要贡献在于,因为没有全连接层(fc),网络可适应任意尺寸输入,增大数据尺寸的反卷积(deconv)层,能够输出精细的结果,结合不同深度层结果的跳级(skip)结构,可确保鲁棒性和精确性。

SegNet

SegNet和FCN思路十分相似,只是Encoder,Decoder(Upsampling)使用的技术不一致。SegNet的上采样Upsampling(反向池化),通过Pooling Indices方式来保存池化点的来源信息,在Encoder的池化层处理中,会记录每一个池化后的1×1特征点来源于之前的2×2的哪个区域,在这个信息在论文中被称为Pooling Indices。Pooling Indices在Decoder中使用,SegNet是一个对称网络,那么在Decoder中需要对特征图进行上采样的时候,我们就可以利用它对应的池化层的Pooling Indices来确定某个1×1特征点应该放到上采样后的2×2区域中的哪个位置,这样解决了特征点随机分配任意位置(或者固定)带来的层层误差。过程如下图所示:

此外SegNet的编码器部分使用的是VGG16的前13层卷积网络,每个编码器层都对应一个解码器层,最终解码器的输出被送入soft-max分类器以独立的为每个像素产生类概率。

SegNet网络结构

Unet及各种变体

Unet在生物医学图像处理中是非常著名的解决方案,它在全卷积层上构建模型,对其做了修改使得它能够在少量的训练图像数据上运行,得到了更加精确的分割。网络结构如下图所示: 

U-Net网络结构

U-net架构(最低分辨率为32×32像素的示例)。每个蓝色框对应一个多通道feature map。通道数量在框的顶部。框的左下角是x-y大小。白色框表示复制过来的feature map。箭头表示不同的操作。

Deeplab系列

  • 主要有模型Deeplabv1,Deeplabv2,Deeplabv3,Deeplabv3+。
  • DeepLab系列是针对Semantic Segmentation任务提出的一系列模型,主要使用了DCNN、CRF、空洞卷积做密集预测。重点讨论了空洞卷积的使用,并提出的获取多尺度信息的ASPP模块,在多个数据集上获得了state-of-the-art 表现.
  • V3+使用深度分离卷积替代了pooling,并且使用了Xception,Xception的核心是使用了Depthwise separable convolution。Depthwise separable convolution的思想来自inception结构,是inception结构的一种极限情况。Inception 首先给出了一种假设:卷积层通道间的相关性和空间相关性是可以退耦合的,将它们分开映射,能达到更好的效果。在inception结构中,先对输入进行11的卷积,之后将通道分组,分别使用不同的33卷积提取特征,最后将各组结果串联在一起作为输出。更多内容可以参考这篇文章

参考资料

2019年最新基于深度学习的语义分割技术讲解(含论文+指标+应用+经验) 
U-net 论文笔记
语义分割论文-DeepLab系列

赞赏
更多干货文章,欢迎关注我的微信公众号-嵌入式视觉。

发表回复

textsms
account_circle
email

嵌入式视觉

基于深度学习的语义分割技术总览
本文写的比较简单,属于入门入门入门级别,仅当作个人学习笔记和回忆时使用,更多细节和内容请参考论文和网络资料。 在计算机视觉领域,有一个方向是语义分割,一般是针对图像进行像素…
扫描二维码继续阅读
2019-08-12