社区计算机视觉课程文档
图像分割
并获得增强的文档体验
开始使用
图像分割
图像分割是将图像分割成有意义的区域。它的核心是创建遮罩,以突出图片中的每个对象。这项任务的直觉是,_它_可以被视为对图像_每个像素_的分类。分割模型是各个行业的核心模型,它们应用于农业和自动驾驶领域。在农业领域,这些模型用于识别不同的土地区域并评估作物的生长阶段。它们也是自动驾驶汽车的关键组成部分,用于识别车道、人行道和其他道路使用者。
根据上下文和预期目标,可以应用不同类型的分割。最常定义的分割类型如下:
- 语义分割:这涉及将最可能的类别分配给每个像素。例如,在语义分割中,模型不区分两只独立的猫,而是关注像素的类别。它关乎每个像素的分类。
- 实例分割:这种类型涉及使用唯一的遮罩识别对象的每个实例。它结合了目标检测和分割的方面,以区分同一类别的单个对象。
- 全景分割:一种混合方法,结合了语义分割和实例分割的元素。它为每个像素分配一个类别和一个实例,有效地整合了图像的“_是什么_”和“_在哪里_”方面。
选择正确的分割类型取决于上下文和预期目标。一个很酷的地方是,最近的模型允许你使用一个模型实现三种分割类型。我们建议你查看这篇文章,它介绍了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可以说是分割任务中最常用的指标。它的优点在于对类别不平衡的敏感性较低,因此在你开始建模时通常是一个不错的选择。
- 像素精度:像素精度计算为正确分类的像素数与总像素数之比。虽然它是一个直观的指标,但由于其对类别不平衡的敏感性,可能会产生误导。
- Dice系数:它是预测遮罩与真实标签的交集的两倍与它们的和之比。Dice系数简单来说就是预测与真实标签之间的重叠百分比。当你需要对重叠之间的微小差异敏感时,这是一个很好的指标。
资源与延伸阅读
- Segment Anything 论文
- 微调 Segformer 博客文章
- Mask2former 博客文章
- Hugging Face 关于分割任务的文档
- 如果你想深入了解这个主题,我们建议你查看斯坦福大学关于分割的讲座。