社区计算机视觉课程文档

基于Transformer的图像分割

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

基于Transformer的图像分割

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

本节假设您熟悉图像分割、卷积神经网络(CNN)和视觉Transformer的基础知识。如果您不熟悉这些概念,建议您在继续之前查阅本课程的相关材料。

用于分割的CNN与Transformer

在视觉Transformer出现之前,CNN(卷积神经网络)一直是图像分割的首选。像U-NetMask R-CNN这样的模型捕获了区分图像中不同对象所需的细节,使其在分割任务中达到了最先进的水平。

尽管在过去十年中取得了优异的成果,但基于CNN的模型仍有一些局限性,而Transformer旨在解决这些问题。

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

MaskFormer聚焦:视觉Transformer图像分割示例

MaskFormer(论文Hugging Face transformer文档)是论文“MaskFormer: Per-Pixel Classification is Not All You Need for Semantic Segmentation”中介绍的模型,它预测图像中每个存在的类别的分割掩码,在一个架构中统一了语义和实例分割。

MaskFormer架构

下图展示了从论文中提取的架构图。

该架构由三个组件组成:

像素级模块:使用骨干网络提取图像特征,并使用像素解码器生成逐像素嵌入。

Transformer模块:采用标准Transformer解码器从图像特征和可学习的位置嵌入(查询)计算逐段嵌入,编码每个段的全局信息。

分割模块:分别使用线性分类器和多层感知器(MLP)为每个段生成类别概率预测和掩码嵌入。掩码嵌入与逐像素嵌入结合使用,以预测每个段的二值掩码。

该模型使用二值掩码损失进行训练,与DETR相同,并对每个预测的段使用交叉熵分类损失。

使用Hugging Face Transformer进行全景分割推理示例

全景分割的任务是为图像中的每个像素标记其类别,并识别这些类别内的不同对象,结合了语义分割和实例分割。

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>
  }
]

视觉Transformer分割模型的微调

由于有许多预训练的分割模型可用,迁移学习和微调通常用于使这些模型适应特定的用例,特别是对于基于Transformer的分割模型(如MaskFormer)来说,它们对数据要求高,难以从头开始训练。这些技术利用预训练的表示来有效地将这些模型适应新数据。通常,对于MaskFormer,骨干网络、像素解码器和Transformer解码器保持冻结状态,以利用其学习到的通用特征,而Transformer模块则进行微调,以适应其类别预测和掩码生成能力到新的分割任务。

此笔记本将引导您完成使用MaskFormer进行图像分割的迁移学习教程。

参考文献

< > 在 GitHub 上更新