社区计算机视觉课程文档

基于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:展示ViT用于图像分割

MaskFormer(论文Hugging Face Transformers文档),在论文“MaskFormer:逐像素分类并非语义分割所需的一切”中提出,是一个预测图像中每个类别的分割掩码的模型,在一个架构中统一了语义和实例分割。

MaskFormer架构

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

该架构由三个组件组成

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

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

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

该模型使用二进制掩码损失进行训练,与DETR相同,以及每个预测分割的交叉熵分类损失。

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

全景分割(Panoptic Segmentation)的任务是为图像中的每个像素分配类别标签,并识别这些类别中不同的对象,它结合了语义分割和实例分割。

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 上更新