Mask2Former と OneFormer: 🤗 Transformers における汎用画像セグメンテーションモデル

TL;DR

Mask2Former と OneFormer が 🤗 Transformers で利用可能になり、タスク固有のモデルを必要とせずにインスタンス、セマンティック、パノプティックセグメンテーションを実行できる統一アーキテクチャを提供します。

画像セグメンテーションタスク

Instance segmentation は各オブジェクトインスタンス(例: 各人物)を識別し、インスタンスごとにバイナリマスクを出力します。

Semantic segmentation は各ピクセルに単一のクラスラベルを割り当て、同じクラスの別々のインスタンスを区別しません。

Panoptic segmentation はこの二つを組み合わせ、重ならないセグメントの集合を生成します。各セグメントはバイナリマスクとクラスラベルを持ち、「もの」(インスタンス)と「背景」(stuff)の両方をカバーします。

これら三つのサブタスクは従来、別々のモデルファミリーが必要でしたが、最近の研究はすべてのタスクを均一に扱う「マスク分類」パラダイムへと収束しています。

汎用画像セグメンテーション

2020 年以降、DETR などのモデルはトランスフォーマーベースのデコーダを導入し、バイナリマスクとクラスラベルのセットを並列に予測することで、統一的なアプローチでパノプティックセグメンテーションを実現しました。MaskFormer は同じパラダイムがセマンティックセグメンテーションにも有効であることを示しました。

Mask2Former はこの考え方をインスタンスセグメンテーションに拡張し、バックボーン、ピクセルデコーダ、トランスフォーマーデコーダを改良しています。アーキテクチャは以下から構成されます:

  1. 低解像度の特徴マップを生成するバックボーン(ResNet または Swin Transformer)。
  2. これらのマップを高解像度特徴へアップサンプルするピクセルデコーダ。
  3. 固定数のクエリを受け取り、バイナリマスク提案とクラスロジットを出力するトランスフォーマーデコーダ。

Mask2Former は依然としてタスクごとに別々の学習が必要で、最先端の性能を達成します。

OneFormer は Mask2Former にテキストエンコーダを追加し、タスク記述("instance"、"semantic"、"panoptic")でモデルを条件付けます。パノプティック形式のデータセットだけで学習し、すべてのタスクで最先端の結果を得られますが、テキストエンコーダが追加されるため推論レイテンシが高くなります。Swin Transformer または DiNAT バックボーンをサポートします。

Transformers ライブラリでの推論

両モデルは AutoImageProcessor(または OneFormerProcessor)と対応するモデルクラスを用いて、1 行のコードでロードできます:

from transformers import AutoImageProcessor, Mask2FormerForUniversalSegmentation

processor = AutoImageProcessor.from_pretrained(
    "facebook/mask2former-swin-base-coco-panoptic"
)
model = Mask2FormerForUniversalSegmentation.from_pretrained(
    "facebook/mask2former-swin-base-coco-panoptic"
)

ライブラリは 30 以上の事前学習チェックポイントを提供し、さまざまなデータセットとバックボーンをカバーしています。

典型的な推論パイプライン:

from PIL import Image, ImageDraw
import requests, torch

url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)

inputs = processor(image, return_tensors="pt")
with torch.no_grad():
    outputs = model(**inputs)

# 生のマスク提案をパノプティック出力に変換
prediction = processor.post_process_panoptic_segmentation(
    outputs, target_sizes=[image.size[::-1]]
)[0]
print(prediction.keys())  # dict_keys(['segmentation', 'segments_info'])

prediction['segmentation'] は (H, W) のマップで、各ピクセル値はインスタンス ID をエンコードします。segments_info にはクラス ID、スコア、その他のメタデータが含まれます。

可視化は Matplotlib を用いて各セグメント ID を異なる色にマッピングし、クラス名とインスタンス数を示す凡例を追加することで行えます。

OneFormer の推論 は同じ API を使用しますが、追加のテキストプロンプトが必要です。例: パノプティックの場合は "segment everything"、インスタンスの場合は "segment instances"、セマンティックの場合は "segment semantics"。完全なデモノートブックは Hugging Face Transformers‑Tutorials リポジトリで入手可能です。

カスタムデータでのファインチューニング

ファインチューニングは MaskFormer と同様のハイレベル API を使用します。MaskFormerForInstanceSegmentationMask2FormerForUniversalSegmentation または OneFormerForUniversalSegmentation に置き換えます。プロセッサクラスも変更します:

  • Mask2Former 用は Mask2FormerImageProcessor(または AutoImageProcessor)。
  • OneFormer 用は OneFormerProcessor で、画像とテキストの両方の入力を処理します。 デモノートブックはデータセットの準備、トレーニングループ、3 つのセグメンテーションタスクすべての評価を順に解説しています。

意義と重要性

  • 統一ワークフロー – 研究者や実務者は各セグメンテーションタスクごとに別々のコードベースを維持する必要がなくなります。
  • エンジニアリングコストの削減 – 単一のモデルチェックポイントで複数の下流アプリケーション(自動運転、医療画像、コンテンツモデレーションなど)に展開可能です。
  • 最先端性能 – OneFormer は単一のパノプティックデータセットで学習しながら、専門モデルに匹敵または上回る性能を示し、データ収集を簡素化します。
  • オープンソースでのアクセシビリティ – これらのモデルを 🤗 Transformers に統合することで、Hugging Face は高品質なセグメンテーションへの参入障壁を下げ、迅速なプロトタイピングと再現性のある研究を促進します。

リソース

Sources