社区计算机视觉课程文档

图像分割

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

图像分割

图像分割是将图像分割成有意义的区域。它的核心是创建遮罩,以突出图片中的每个对象。这项任务的直觉是,_它_可以被视为对图像_每个像素_的分类。分割模型是各个行业的核心模型,它们应用于农业和自动驾驶领域。在农业领域,这些模型用于识别不同的土地区域并评估作物的生长阶段。它们也是自动驾驶汽车的关键组成部分,用于识别车道、人行道和其他道路使用者。

Image segmentation

根据上下文和预期目标,可以应用不同类型的分割。最常定义的分割类型如下:

  • 语义分割:这涉及将最可能的类别分配给每个像素。例如,在语义分割中,模型不区分两只独立的猫,而是关注像素的类别。它关乎每个像素的分类。
  • 实例分割:这种类型涉及使用唯一的遮罩识别对象的每个实例。它结合了目标检测和分割的方面,以区分同一类别的单个对象。
  • 全景分割:一种混合方法,结合了语义分割和实例分割的元素。它为每个像素分配一个类别和一个实例,有效地整合了图像的“_是什么_”和“_在哪里_”方面。

Comparison of segmentation types

选择正确的分割类型取决于上下文和预期目标。一个很酷的地方是,最近的模型允许你使用一个模型实现三种分割类型。我们建议你查看这篇文章,它介绍了Meta的新模型Mask2former,该模型仅使用全景数据集就能实现三种分割类型。

现代方法:基于视觉Transformer的分割

你可能听说过U-Net,一种用于图像分割的流行网络。它设计有多个卷积层,并分两个主要阶段工作:下采样阶段,用于压缩图像以理解其特征;上采样阶段,将图像扩展回其原始大小以进行详细分割。

计算机视觉曾一度由卷积模型主导,但最近已转向视觉Transformer方法。一个例子是_Meta AI Research, FAIR_于2023年4月推出的_Segment anything model (SAM)_,这是一个流行的基于提示的模型。该模型基于Vision Transformer (ViT) 模型,专注于创建一个可提示(即你可以提供单词来描述你想在图像中分割的内容)的分割模型,能够在新图像上实现零样本迁移。该模型的优势来自于它在最大的可用数据集上进行训练,该数据集包含超过10亿个遮罩和1100万张图像。我建议你在几张图片上玩一下Meta的演示,甚至更好地,你可以在transformers中玩一下这个模型

以下是如何在transformers中使用该模型的一个示例。首先,我们将初始化mask-generation管道。然后,我们将图像传入管道进行推理。

from transformers import pipeline

pipe = pipeline("mask-generation", model="facebook/sam-vit-base", device=0)

raw_image = Image.open("path/to/image").convert("RGB")

masks = pipe(raw_image)

有关如何使用该模型的更多详细信息,请参见文档

如何评估分割模型?

现在你已经了解了如何使用分割模型,那么如何评估它呢?如前一节所示,分割主要是一个监督学习任务。这意味着数据集由图像及其对应的遮罩组成,这些遮罩作为真实标签。可以使用几种指标来评估你的模型。最常见的有:

  • 交并比(IoU)或Jaccard指数指标是预测遮罩与真实标签的交集和并集之比。IoU可以说是分割任务中最常用的指标。它的优点在于对类别不平衡的敏感性较低,因此在你开始建模时通常是一个不错的选择。

IoU

  • 像素精度:像素精度计算为正确分类的像素数与总像素数之比。虽然它是一个直观的指标,但由于其对类别不平衡的敏感性,可能会产生误导。

Pixel accuracy

  • Dice系数:它是预测遮罩与真实标签的交集的两倍与它们的和之比。Dice系数简单来说就是预测与真实标签之间的重叠百分比。当你需要对重叠之间的微小差异敏感时,这是一个很好的指标。

Dice coefficient

资源与延伸阅读

< > 在 GitHub 上更新