图像分割2020,架构,损失函数,数据集,框架的整理和总结

导读

包括架构,损失函数,数据集,框架的整理和总结。


在这篇文章中,我们将深入探讨使用深度学习进行图像分割。我们将讨论:

  • 什么是图像分割,以及两种主要类型的图像分割

  • 图像分割的结构

  • 用于图像分割的损失函数

  • 你可以用到你的图像分割项目中的框架

就让我们一探究竟吧。

什么是图像分割?

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

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

图像分割结构

图像分割的基本结构包括编码器和解码器。

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

让我们看几个例子。

U-Net

U-Net是最初为分割生物医学图像而开发的卷积神经网络。当它的结构可视化时,它看起来像字母U,因此取名为U-Net。它的结构由两部分组成,左边的部分是收缩路径,右边的部分是扩展路径。收缩路径的目的是捕获上下文,而扩展路径的作用是帮助精确定位。

U-Net由右边的扩展路径和左边的收缩路径组成。收缩路径由两个3×3的卷积组成。卷积之后是一个ReLU和一个用于下采样的2×2最大池化。

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

FastFCN — Fast Fully-connected network

在这个架构中,使用联合金字塔上采样(JPU)模块来代替膨胀卷积,因为它们消耗大量内存和时间。它的核心是一个全连接网络,同时使用JPU进行上采样。JPU将低分辨率的特征图上采样到高分辨率的特征图。

如果你想亲自动手做一些代码实现:https://github.com/wuhuikai/FastFCN。

Gated-SCNN

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

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

DeepLab

在这种结构中,卷积与上采样滤波器用于密集预测的任务。多尺度物体的分割是通过空间金字塔汇聚来完成的。最后,使用DCNNs来改进物体边界的定位。通过插入零或对输入特征图进行稀疏采样来对滤波器进行上采样,从而实现Atrous卷积。

代码:https://github.com/fregu856/deeplabv3(PyTorch),https://github.com/sthalles/deeplab_v3(TensorFlow)

Mask R-CNN

在这个结构中,使用一个边界框和语义分割对物体进行分类和局部化,该边界框和语义分割将每个像素划分为一组类别。每个感兴趣的区域都有一个分割掩码。最终的输出是一个类标签和一个包围框。该架构是Faster R-CNN的扩展。

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

图像风格的损失函数

语义分割模型在训练过程中通常使用一个简单的交叉熵损失函数。但是,如果你对获取图像的粒度信息感兴趣,则必须使用到稍微高级一些的损失函数。

我们来看几个例子。

Focal Loss

这种损失是对标准交叉熵的一种改进。这是通过改变其形状来实现的,这样分配给分类良好的样本的损失的权重就会降低。最终,这确保了不存在类别不平衡。在这个损失函数中,随着对预测正确的类别的信心增加,交叉熵损失的比例因子在0处衰减。比例因子自动降低了训练时简单样本的权重,并将重点放在困难的样本上。

Dice loss

这个损失是通过计算smooth dice coefficient函数得到的。这种损失是分割问题中最常用的损失。

Interp over Union (IoU)-balanced Loss

IoU平衡分类损失的目的是增加高IoU样本的梯度,减少低IoU样本的梯度。这样可以提高机器学习模型的定位精度。

Boundary loss

边界损失的一种变体适用于具有高度不平衡分割的任务。这种损失的形式是空间轮廓上的距离度量,而不是区域。通过这种方式,它解决了高度不平衡的分割任务的区域损失所带来的问题。

Weighted cross-entropy

交叉熵的一种变体,所有正样本都用一个确定的系数来加权。它用于类别不平衡的情况。

Lovász-Softmax loss

这个损失直接在神经网络中基于子模块的凸Lovasz扩展损失来优化平均IOU损失。

其他值得一提的损失有:

  • TopK loss 其目的是确保网络在训练过程中集中于困难样本。

  • Distance penalized CE loss 让网络去重点优化难以分割的边界区域。

  • Sensitivity-Specificity (SS) loss 计算特异性和敏感性的均方差的加权和。

  • Hausdorff distance(HD) loss 估计了卷积神经网络的Hausdorff距离。

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

图像分割数据集

如果你还在看,你可能会问自己从哪里可以获得一些数据集来开始。

让我们来看一些。

Common Objects in COntext — Coco Dataset

COCO是一个大型的物体检测、分割和图像描述数据集。包含91个类。它有25万人拥有关键点,它包含80个对象类别。

链接:https://www.tensorflow.org/datasets/catalog/coco

PASCAL Visual Object Classes (PASCAL VOC)

PASCAL有20个不同的类,9963张图片。训练/验证集是一个2GB的tar文件。

链接:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/

The Cityscapes Dataset

这个数据集包含城市场景的图像。它可以用来评价视觉算法在城市场景中的性能。

链接:https://www.cityscapes-dataset.com/downloads/

The Cambridge-driving Labeled Video Database — CamVid

这是一个基于运动的分割和识别数据集。它包含32个语义类。

链接:http://mi.eng.cam.ac.uk/research/projects/VideoRec/CamVid/

图像分割框架

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

  • FastAI library  — 给定一个图像,这个库能够给图像中的物体创建一个掩码。

  • Sefexa Image Segmentation Tool](http://www.fexovi.com/sefexa.html) — Sefexa是一个免费的工具,可以用于半自动图像分割,图像分析,并创建ground truth。

  • Deepmask — Deepmask是Facebook Research的Deepmask和SharpMask的一个Torch的实现。

  • MultiPath — 这是一个Torch实现的物体检测网络来自“A MultiPath Network for Object Detection”。

  • OpenCV — 这是一个开源的计算机视觉库,有超过2500个优化过的算法。

  • MIScnn — 是一个医学图像分割开源库。它允许使用最先进的卷积神经网络和深度学习模型在几行代码中建立pipeline。

  • Fritz — Fritz提供多种计算机视觉工具,包括用于移动设备的图像分割工具。

最后的一点想法

希望本文为你提供了一些图像分割的背景知识,并提供了一些工具和框架,你可以使用这些工具和框架来入门。

我们讨论了:

  • 什么是图像分割

  • 几个图像分割架构

  • 一些图像分割损失

  • 图像分割工具和框架

分割快乐!

—END—

英文原文:https://neptune.ai/blog/image-segmentation-in-2020?utm_source=medium&utm_medium=crosspost&utm_campaign=blog-image-segmentation-2020


Detectron2框架是一个用于计算机视觉任务的强大框架,它可以用来训练和测试多种视觉任务,包括目标检测、实例分割和全景分割等。如果我们要在Detectron2框架中使用自己的COCO格式的全景分割数据集,我们可以按照以下步骤进行: 1. 数据集准备:首先,我们需要准备自己的全景分割数据集,并且将其转换为COCO格式的标注。COCO格式的标注是一种常用的标注格式,它包含了图像路径、图像尺寸、每个目标的类别、边界框和分割掩膜等信息。 2. 注册数据集:接下来,我们需要注册我们的数据集,以便Detectron2框架能够识别和加载我们的数据集。在Detectron2中,我们可以使用`register_coco_instances`函数来注册COCO格式的数据集。我们需要提供数据集的名称、数据集目录、图像和标注文件的路径,以及数据集类别和颜色映射等信息。 3. 数据集预处理:在加载数据集之前,我们可以定义一些数据预处理的操作,例如图像缩放、归一化和随机增强等,以提高训练效果。我们可以使用Detectron2提供的预处理函数或者自定义自己的预处理函数来实现。 4. 模型配置:在使用Detectron2进行训练或测试之前,我们需要配置模型的参数。我们可以指定使用的模型架构损失函数、学习率等参数,并将其写入一个配置文件中。 5. 模型训练和测试:最后,我们可以使用Detectron2框架提供的API来进行模型的训练和测试。在训练过程中,框架会自动加载我们注册的数据集,并根据配置文件中的参数进行训练;在测试过程中,框架会加载训练好的模型,并对测试集进行预测和评估。 通过以上步骤,我们可以很方便地在Detectron2框架中使用自己的COCO格式的全景分割数据集进行训练和测试。这也是Detectron2框架的一个强大功能,它可以帮助我们快速地构建和训练自定义的计算机视觉模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值