社区计算机视觉课程文档
基于 Transformer 的图像分割
并获得增强的文档体验
开始使用
基于 Transformer 的图像分割
在本节中,我们将探讨 Vision Transformers 在图像分割方面与卷积神经网络 (CNN) 的比较,并详细介绍一个基于 vision transformer 的分割模型的架构作为示例。
CNN 与 Transformer 在分割中的比较
在 Vision Transformers 出现之前,CNN(卷积神经网络)一直是图像分割的首选。诸如 U-Net 和 Mask R-CNN 等模型捕获了区分图像中不同对象所需的细节,使其成为分割任务的先进技术。
尽管基于 CNN 的模型在过去十年中取得了出色的成果,但它们也存在一些局限性,而 Transformers 旨在解决这些局限性
- 空间局限性:CNN 通过小的感受野学习局部模式。这种局部关注使得它们难以“链接”图像中相距遥远但相关的特征,从而影响它们准确分割复杂场景/对象的能力。与 CNN 不同,ViT 旨在捕获图像内的全局依赖关系,利用注意力机制。这意味着基于 ViT 的模型会同时考虑整张图像,从而使它们能够理解图像遥远部分之间复杂的关联。对于分割而言,这种全局视角可以更准确地描绘对象。
- 特定于任务的组件:诸如 Mask R-CNN 等方法结合了手工设计的组件(例如,非极大值抑制、空间锚点)来编码有关分割任务的先验知识。这些组件增加了复杂性,并且需要手动调整。相比之下,基于 ViT 的分割方法通过消除对手工设计组件的需求来简化分割过程,使其更易于优化。
- 分割任务专业化:基于 CNN 的分割模型分别处理语义分割、实例分割和全景分割任务,从而导致每个任务都有专门的架构,并且对每个任务进行单独的研究工作。最近基于 ViT 的模型,如 MaskFormer、SegFormer 或 SAM,为在单个框架内解决语义分割、实例分割和全景分割任务提供了一种统一的方法。
MaskFormer 聚焦:用 ViT 说明图像分割
MaskFormer(论文,Hugging Face transformers 文档),在论文“MaskFormer: Per-Pixel Classification is Not All You Need for Semantic Segmentation”中介绍,是一个模型,它预测图像中存在的每个类别的分割掩码,在一个架构中统一了语义分割和实例分割。
MaskFormer 架构
下图显示了论文中截取的架构图。

该架构由三个组件组成
像素级模块:使用骨干网络提取图像特征,并使用像素解码器生成逐像素嵌入。
Transformer 模块:采用标准 Transformer 解码器从图像特征和可学习的位置嵌入(查询)计算逐段嵌入,编码有关每个段的全局信息。
分割模块:分别使用线性分类器和多层感知机 (MLP) 为每个段生成类别概率预测和掩码嵌入。掩码嵌入与逐像素嵌入结合使用,以预测每个段的二元掩码。
该模型使用二元掩码损失进行训练,与 DETR 相同,以及每个预测段的交叉熵分类损失。
使用 Hugging Face Transformers 的全景分割推理示例
全景分割的任务是标记图像中每个像素的类别,并识别这些类别中的不同对象,结合了语义分割和实例分割。
from transformers import pipeline
from PIL import Image
import requests
segmentation = pipeline("image-segmentation", "facebook/maskformer-swin-base-coco")
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
results = segmentation(images=image, subtask="panoptic")
results
正如您在下面看到的,结果包括同一类别的多个实例,每个实例都有不同的掩码。
[
{
"score": 0.993197,
"label": "remote",
"mask": <PIL.Image.Image image mode=L size=640x480 at 0x109363910>
},
{
"score": 0.997852,
"label": "cat",
"mask": <PIL.Image.Image image mode=L size=640x480 at 0x1093635B0>
},
{
"score": 0.998006,
"label": "remote",
"mask": <PIL.Image.Image image mode=L size=640x480 at 0x17EE84670>
},
{
"score": 0.997469,
"label": "cat",
"mask": <PIL.Image.Image image mode=L size=640x480 at 0x17EE87100>
}
]
微调基于 Vision Transformer 的分割模型
由于有许多预训练的分割模型可用,迁移学习和微调通常用于使这些模型适应特定的用例,尤其是因为基于 transformer 的分割模型(如 MaskFormer)是数据密集型的,并且从头开始训练具有挑战性。这些技术利用预训练的表示来有效地使这些模型适应新数据。通常,对于 MaskFormer,骨干网络、像素解码器和 transformer 解码器保持冻结,以利用它们学习到的一般特征,而 transformer 模块则进行微调,以使其类别预测和掩码生成能力适应新的分割任务。
此 notebook 将引导您完成使用 MaskFormer 进行图像分割的迁移学习教程。