社区计算机视觉课程文档
图像分割
并获得增强的文档体验
开始使用
图像分割
图像分割是将图像划分为有意义的片段。它的核心是创建能够突出图片中每个物体的掩码。这项任务背后的直觉是*它可以被视为对图像中每个像素进行分类*。分割模型是各个行业的核心模型。它们可以应用于农业和自动驾驶领域。在农业领域,这些模型用于识别不同的土地区域并评估农作物的生长阶段。它们也是自动驾驶汽车的关键组成部分,用于识别车道、人行道和其他道路使用者。
不同类型的分割可以根据上下文和预期目标应用。最常见的分割类型如下。
- 语义分割:这涉及到为每个像素分配最可能的类别。例如,在语义分割中,模型不区分两只单独的猫,而是专注于像素类别。它的核心是对每个像素进行分类。
- 实例分割:这种类型涉及到使用唯一的掩码识别物体的每个实例。它结合了目标检测和分割的方面,以区分同一类别的各个物体。
- 全景分割:一种混合方法,结合了语义分割和实例分割的元素。它为每个像素分配一个类别和一个实例,有效地整合了图像的*内容*和*位置*方面。
选择正确的分割类型取决于上下文和预期目标。一件很酷的事情是,最近的模型允许你使用单个模型实现三种分割类型。我们建议你查看这篇文章,它介绍了 Mask2former,Meta 的一个新模型,仅使用全景数据集即可实现三种分割类型。
现代方法:基于 Vision Transformer 的分割
你可能听说过 U-Net,这是一种用于图像分割的流行网络。它设计有多个卷积层,并在两个主要阶段工作:下采样阶段,它压缩图像以理解其特征;以及上采样阶段,它将图像扩展回其原始大小以进行详细分割。
计算机视觉曾经由卷积模型主导,但最近已转向 Vision Transformer 方法。一个例子是 *Segment anything model (SAM)*,这是一个流行的基于提示的模型,由 *Meta AI Research, FAIR* 于 2023 年 4 月推出。该模型基于 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)
有关如何使用该模型的更多详细信息,请参阅文档。
如何评估分割模型?
你现在已经了解了如何使用分割模型,但如何评估它呢?正如上一节所示,分割主要是一项监督学习任务。这意味着数据集由图像及其对应的掩码组成,这些掩码充当ground truth。可以使用一些指标来评估你的模型。最常见的指标有:
- 交并比 (IoU) 或 Jaccard 指数指标是预测掩码和 ground truth 的交集与并集之间的比率。IoU 可以说是分割任务中最常用的指标。它的优势在于对类别不平衡不太敏感,这使其成为你开始建模时的通常是一个不错的选择。
- 像素准确率:像素准确率计算为正确分类的像素数与总像素数的比率。虽然这是一个直观的指标,但由于其对类别不平衡的敏感性,它可能会产生误导。
- Dice 系数:它是交集的两倍与预测掩码和 ground truth 之和的比率。Dice 系数简单来说就是预测和 ground truth 之间的重叠百分比。当你需要对重叠之间的小差异敏感时,这是一个很好的指标。
资源和进一步阅读
- Segment Anything 论文
- 微调 Segformer 博客文章
- Mask2former 博客文章
- Hugging Face 关于分割任务的文档
- 如果你想更深入地了解这个主题,我们建议你查看斯坦福大学关于分割的讲座。