Transformers 4.37 中文文档(七十一)

2024-06-26 17:13:33 浏览数 (2)

原文:huggingface.co/docs/transformers

SegFormer

原始文本:huggingface.co/docs/transformers/v4.37.2/en/model_doc/segformer

概述

SegFormer 模型是由 Enze Xie、Wenhai Wang、Zhiding Yu、Anima Anandkumar、Jose M. Alvarez、Ping Luo 在SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers中提出的。该模型由一个分层 Transformer 编码器和一个轻量级的全 MLP 解码头组成,以在 ADE20K 和 Cityscapes 等图像分割基准上取得出色的结果。

论文摘要如下:

我们提出了 SegFormer,这是一个简单、高效但功能强大的语义分割框架,将 Transformer 与轻量级多层感知(MLP)解码器统一起来。SegFormer 具有两个吸引人的特点:1)SegFormer 包括一个新颖的分层结构 Transformer 编码器,输出多尺度特征。它不需要位置编码,因此避免了位置代码的插值,这会导致测试分辨率与训练不同时性能下降。2)SegFormer 避免了复杂的解码器。所提出的 MLP 解码器从不同层中聚合信息,从而结合了局部注意力和全局注意力,以生成强大的表示。我们展示了这种简单且轻量级的设计是实现 Transformer 上高效分割的关键。我们将我们的方法扩展到从 SegFormer-B0 到 SegFormer-B5 的一系列模型,达到了比以前更好的性能和效率。例如,SegFormer-B4 在 ADE20K 上达到了 50.3%的 mIoU,参数为 64M,比以前最佳方法小 5 倍,效果提高了 2.2%。我们最好的模型 SegFormer-B5 在 Cityscapes 验证集上达到了 84.0%的 mIoU,并在 Cityscapes-C 上展现出出色的零样本鲁棒性。

下图展示了 SegFormer 的架构。摘自原始论文。

这个模型是由nielsr贡献的。模型的 TensorFlow 版本是由sayakpaul贡献的。原始代码可以在这里找到。

使用提示

  • SegFormer 由一个分层 Transformer 编码器和一个轻量级的全 MLP 解码器头组成。SegformerModel 是分层 Transformer 编码器(在论文中也称为 Mix Transformer 或 MiT)。SegformerForSemanticSegmentation 在顶部添加了全 MLP 解码器头,用于执行图像的语义分割。此外,还有 SegformerForImageClassification,可用于对图像进行分类。SegFormer 的作者首先在 ImageNet-1k 上对 Transformer 编码器进行了预训练,以对图像进行分类。接下来,他们丢弃了分类头,并用全 MLP 解码头替换。然后,他们在 ADE20K、Cityscapes 和 COCO-stuff 上一起对模型进行微调,这些是语义分割的重要基准。所有检查点都可以在hub上找到。
  • 使用 SegFormer 的最快方法是查看示例笔记本(展示了推理和在自定义数据上微调的示例)。也可以查看博客文章介绍 SegFormer 并说明如何在自定义数据上进行微调。
  • TensorFlow 用户应参考此存储库,展示现成的推理和微调。
  • 您也可以查看Hugging Face Spaces 上的交互式演示,尝试在自定义图像上使用 SegFormer 模型。
  • SegFormer 适用于任何输入大小,因为它会填充输入,使其可以被config.patch_sizes整除。
  • 可以使用 SegformerImageProcessor 为模型准备图像和相应的分割图。请注意,此图像处理器相当基础,不包括原始论文中使用的所有数据增强。原始预处理流程(例如 ADE20k 数据集)可以在这里找到。最重要的预处理步骤是将图像和分割图随机裁剪和填充到相同大小,例如 512x512 或 640x640,然后进行归一化。
  • 还有一件事要记住的是,可以使用reduce_labels设置为TrueFalse来初始化 SegformerImageProcessor。在一些数据集(如 ADE20k)中,0 索引用于背景的注释分割图。但是,ADE20k 不包括其 150 个标签中的“背景”类。因此,reduce_labels用于减少所有标签 1,并确保不为背景类计算损失(即,它将注释地图中的 0 替换为 255,这是 SegformerForSemanticSegmentation 使用的损失函数的ignore_index)。然而,其他数据集使用 0 索引作为背景类,并将此类包含在所有标签中。在这种情况下,应将reduce_labels设置为False,因为损失也应计算背景类。
  • 与大多数模型一样,SegFormer 有不同的大小,详情可以在下表中找到(取自原始论文的表 7)。

模型变体

深度

隐藏大小

解码器隐藏大小

参数(百万)

ImageNet-1k Top 1

MiT-b0

[2, 2, 2, 2]

[32, 64, 160, 256]

256

3.7

70.5

MiT-b1

[2, 2, 2, 2]

[64, 128, 320, 512]

256

14.0

78.7

MiT-b2

[3, 4, 6, 3]

[64, 128, 320, 512]

768

25.4

81.6

MiT-b3

[3, 4, 18, 3]

[64, 128, 320, 512]

768

45.2

83.1

MiT-b4

[3, 8, 27, 3]

[64, 128, 320, 512]

768

62.6

83.6

MiT-b5

[3, 6, 40, 3]

[64, 128, 320, 512]

768

82.0

83.8

请注意,上表中的 MiT 指的是 SegFormer 中引入的 Mix Transformer 编码器骨干。有关 SegFormer 在 ADE20k 等分割数据集上的结果,请参阅论文。

资源

一个官方 Hugging Face 和社区(由

0 人点赞