社区计算机视觉课程文档

基于 Transformer 的图像分割

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

基于 Transformer 的图像分割

在本节中,我们将探讨 Vision Transformers 在图像分割方面与卷积神经网络 (CNN) 的比较,并详细介绍一个基于 vision transformer 的分割模型的架构作为示例。

本节假设您熟悉图像分割、卷积神经网络 (CNN) 和 Vision Transformers 的基础知识。如果您是这些概念的新手,我们建议您在继续之前浏览课程中的相关材料。

CNN 与 Transformer 在分割中的比较

在 Vision Transformers 出现之前,CNN(卷积神经网络)一直是图像分割的首选。诸如 U-NetMask R-CNN 等模型捕获了区分图像中不同对象所需的细节,使其成为分割任务的先进技术。

尽管基于 CNN 的模型在过去十年中取得了出色的成果,但它们也存在一些局限性,而 Transformers 旨在解决这些局限性

  • 空间局限性:CNN 通过小的感受野学习局部模式。这种局部关注使得它们难以“链接”图像中相距遥远但相关的特征,从而影响它们准确分割复杂场景/对象的能力。与 CNN 不同,ViT 旨在捕获图像内的全局依赖关系,利用注意力机制。这意味着基于 ViT 的模型会同时考虑整张图像,从而使它们能够理解图像遥远部分之间复杂的关联。对于分割而言,这种全局视角可以更准确地描绘对象。
  • 特定于任务的组件:诸如 Mask R-CNN 等方法结合了手工设计的组件(例如,非极大值抑制、空间锚点)来编码有关分割任务的先验知识。这些组件增加了复杂性,并且需要手动调整。相比之下,基于 ViT 的分割方法通过消除对手工设计组件的需求来简化分割过程,使其更易于优化。
  • 分割任务专业化:基于 CNN 的分割模型分别处理语义分割、实例分割和全景分割任务,从而导致每个任务都有专门的架构,并且对每个任务进行单独的研究工作。最近基于 ViT 的模型,如 MaskFormerSegFormerSAM,为在单个框架内解决语义分割、实例分割和全景分割任务提供了一种统一的方法。

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 进行图像分割的迁移学习教程。

参考文献

< > 在 GitHub 上更新