图像分割 2020 最新进展_神经网络

正文字数:3004  阅读时长:4分钟

该文章由Derrick Mwiti发表在Neptune blog,在这篇文章中,我们将会探讨深度学习在图像分割领域的应用。

Posted by Jakub Czakon 

url : https://towardsdatascience.com/image-segmentation-in-2020-756b77fa88fc

图像分割 2020 最新进展_计算机视觉_02

source来源:neptune.ai

在这篇文章中我们将讨论的话题有:

  • 什么是图像分割
  • 图像分割的架构
  • 图像分割中使用的损失函数
  • 在你的图像分割项目中可用的框架

就让我们一探究竟吧。

什么是图像分割

顾名思义,图像分割是将一幅图像转化成多个部分的过程。在这个过程中,图像中的每个像素都与一个具体的物体相关联在一起。图像分割主要有两种类型:语义分割和实例分割。

在语义分割中,所有物体都是同一类型的,所有相同类型的物体都使用一个类标签进行标记,而在实例分割中,相似的物体可以有自己独立的标签。

图像分割 2020 最新进展_python_03

参考Anurag Arnab, Shuai Zheng 等作者的2018年的Paper:“Conditional Random Fields Meet Deep Neural Networks for Semantic Segmentation” http://www.robots.ox.ac.uk/~tvg/publications/2017/CRFMeetCNN4SemanticSegmentation.pdf

图像分割的架构

图像分割的基本结构由编码器和解码器组成。

图像分割 2020 最新进展_神经网络_04

来自Vijay Badrinarayanan等作者2017的Paper:“SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation” https://arxiv.org/abs/1511.00561

编码器通过过滤器从图像中提取特征。解码器负责生成最终输出,通常是包含对象轮廓的分割掩码(segmantation mask)。大多数架构都有这种体系结构或其变体。

让我们看一看一些例子。

U-Net

U-Net是一个最初用于开发生物影响分割的卷积神经网络。从视觉上看,它的架构看起来像字母U,因此而得名U-Net。它的架构由两部分组成,左边是收缩路径,右边是扩展路径。收缩路径的目的是捕获内容,而扩展路径的角色是帮助精确定位。

图像分割 2020 最新进展_计算机视觉_05

来自Olaf Ronneberger等作者2015年的Paper “U-net architecture image segmentation” https://arxiv.org/abs/1505.04597

U-Net由右侧的扩展路径和左侧的收缩路径组成。收缩路径由两个3×3的卷积层组成。卷积之后是一个校正的线性单元和和一个2×2的max-pooling池化层的计算来做下采样。

U-Net的完整实现可以在这里找到:https://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/

FastFCN — 快速全连接网络

在这种结构中,一个使用联合金字塔上采样(JPU)模块来代替了扩展卷积网络,因为卷积网络消耗大量的内存和计算时间。它使用一个完全连接的网络作为核心,同时应用JPU进行上采样。JJPU将低分辨率的feature map上采样为高分辨率的feature map。

图像分割 2020 最新进展_神经网络_06

来自Huikai Wu等作者2019的Paper “FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation” https://arxiv.org/abs/1903.11816

如果你想把通过代码实现,查看这里:https://github.com/wuhuikai/FastFCN

Gated-SCNN

这个架构由一个双流CNN架构组成。在该模型中,使用一个单独的分支来处理图像的形状信息。形状流用于处理边界信息。

图像分割 2020 最新进展_python_07

Towaki Takikawa等 al 2019年“Gated-SCNN:Gated Shape CNNs用于语义分割”  https://arxiv.org/abs/1907.05740

代码实现:https://github.com/nv-tlabs/gscnn

DeepLab(深度实验室)

在这种体系结构中,带有上采样滤波器的卷积用于涉及密集预测的任务。多个对象的分割是通过无空间金字塔空间池完成的。最后,利用DCNNs改进了目标边界的定位。通过插入零或输入特征图进行稀疏采样来对滤波器进行上采样,从而实现无用卷积。

图像分割 2020 最新进展_神经网络_08

陈良杰等人,2016年“ DeepLab:利用深度卷积网络,Atrous卷积和全连接的CRF进行语义图像分割” https://arxiv.org/abs/1606.00915

您可以在PyTorch(https://github.com/fregu856/deeplabv3)或TensorFlow(https://github.com/sthalles/deeplab_v3)上尝试它的实现。

Mask R-CNN

在这个体系结构中,使用一个边界框/包围盒和语义分割对对象进行分类和定位,该语义分割将每个像素分类为一组类别。每个感兴趣的区域都有一个分割蒙版。并且将产生一个类标签和一个边界框作为最终输出。实际上该体系结构是Faster R-CNN的扩展。Faster R-CNN由提出区域的深度卷积网络和利用区域的检测器组成。

图像分割 2020 最新进展_python_09

Kaiming He et. al 2017 “Mask R-CNN” https://arxiv.org/abs/1703.06870

这是在COCO测试集上获得的结果的图像。

图像分割 2020 最新进展_计算机视觉_10

Kaiming He et. al 2017 “Mask R-CNN” https://arxiv.org/abs/1703.06870

图像分割损失函数

语义分割模型在训练过程中通常使用一个简单的跨类别熵损失函数。但是,如果您对获取图像的详细信息感兴趣的话,那么您必须恢复到稍微高级的损失函数。

我们来看看其中的几个。

焦点损失

这个损失是对标准互熵标准的改进。这是通过改变其形状来完成和实现的,以使分配给分类充分的示例的损失降低权重。最终,这确保了没有阶级不平衡的存在。在这个损失函数中,随着对正确类别的置信度增加,交叉熵损失会随着缩放因子以零衰减而缩放。比例因子在训练时自动降低权衡简单示例的贡献,并将重点放在难的示例上。

图像分割 2020 最新进展_python_11

来源source:neptune.ai

骰子损失

这种损失是通过计算平滑骰子系数函数得到的。这种损失是最常用的损失,属于是分割问题。

图像分割 2020 最新进展_大数据_12

来源source:neptune.ai

IoU 平衡损失交集

IoU平衡的分类损失的目的是提高IoU高的样本的梯度,降低低IoU样本的梯度。这样,通过这种方式,可以提高机器学习模型的定位精度。

图像分割 2020 最新进展_大数据_13

来源source:neptune.ai

边界损失

边界损失的一种变体适用于分段高度不平衡的任务。这种损失的形式是空间轮廓\等高线而不是区域的距离度量。以这种方法,可以解决了由高度不平衡的分割任务中区域损失所带来的问题。

图像分割 2020 最新进展_机器学习_14

来源source:neptune.al

加权交叉熵

在交叉熵的一个变量中,所有的正例子都被某个一定系数加权。它用于涉及类不平衡的场景或方案。

图像分割 2020 最新进展_机器学习_15

来源source:neptune.ai

Lovász-Softmax损失

该损失基于子模损失的凸Lovasz扩展,对神经网络中的平均相交-大于联合损失进行直接优化。

图像分割 2020 最新进展_python_16

来源source:neptune.ai

其他值得一提的损失是:

  • TopK损失,其目的是确保网络在训练过程中集中在硬样本上。
  • 距离损失的CE损耗将网络引导到难以分割的边界区域。
  • 敏感性\灵敏性-特异性(SS)损失,用于计算特异性和敏感性的均方差的加权和。
  • Hausdorff 距离(HD)损失,可从卷积神经网络估计Hausdorff距离。

这些只是图像分割中使用的几个损失函数。要了解更多,请点此链接查看:https://github.com/JunMa11/SegLoss

图像分割的数据集

如果你看到了这里的话,你会思考说从哪里可以获得相应的数据集来进行图像分割的学习呢。

现在我们来看下有哪些数据集我们拿来用。

Common Objects in COntext — Coco数据集

COCO是一个大规模的物体检测、图像分割和五项描述生成的大规模数据集。这个数据集中一共包含91个物品类别。包含着250000带有关键点标注的人。它的下载大小是37.57GIB。它包含80个对象类别。它在Apache2.0许可下可用,可以从这里下载(https://cocodataset.org/#download)。

PASCAL可视化对象类(PASCAL VOC)

PASCAL有9963张图片,有20个不同的类别。训练/验证集是一个2GB的tar文件。数据集可以从官方网站下载:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/

Cityscapes 数据集

此数据集包含城市场景的图像。它可以用来评价视觉算法在城市场景中的性能。数据集可以从这里下载:https://www.cityscapes-dataset.com/。

Cambridge驾驶标注视频数据库 — CamVid

这是一个基于运动的分割和识别数据集。它包含32个语义类别。此链接包含进一步的解释和指向数据集的下载链接:http://mi.eng.cam.ac.uk/research/projects/VideoRec/CamVid/。

图像分割框架

现在您已经准备好了可使用的数据集,下面让我来介绍一些可以用来入门的工具/框架。

  • FastAI库——给定一个图像,这个库可以创建图像中对象的掩码/遮罩。
  • Sefexa图像分割工具-——Sefexa是一个免费的工具,可用于半自动图像分割、图像分析和地面真实性的创建。
  • Deepmask——Facebook Research的Deepmask是Deepmask和SharpMask的Torch实现。
  • MultiPath——这是“用于对象检测的MultiPath网络 ”中对象检测网络的Torch实现。
  • OpenCV——这是一个开源的计算机视觉库,有超过2500个优化算法。
  • MIScnn——是一个医学图像分割开源库。它允许在几行代码中使用最先进的卷积神经网络和深度学习模型来建立管道。
  • Fritz——Fritz提供了几种计算机视觉工具,包括用于移动设备的图像分割工具。

总结

希望本文能为您提供一些图像分割的背景知识,并为您提供一些工具和框架,以便您在工作中使用。