Panoptic Segmentation
パノプティックセグメンテーションは、すべてのピクセルにクラスを割り当て、個数を数えられる各オブジェクトに固有のIDを付与し、セマンティックセグメンテーションとインスタンスセグメンテーションを統合します。モデル、PQ、コードを解説します。
パノプティックセグメンテーションは、画像のすべてのピクセルに2つの値を割り当てるコンピュータビジョンタスクです。1つはクラスラベルで、数えられる物体に属するピクセルにはインスタンスIDも割り当てます。セマンティックセグメンテーションはすべてのピクセルにクラスラベルを付けますが、同じクラスの物体を区別しません。一方、インスタンスセグメンテーションは個々の物体を区別しますが、背景にはラベルを付けません。この2つを組み合わせた結果、シーン全体を重複なく表す単一のマップが得られます。道路、空、草地は領域としてラベル付けされ、各車両や人物はそれぞれ独立したセグメントになります。Facebook AI Researchとハイデルベルク大学のAlexander Kirillovらは、CVPR 2019で発表した論文Panoptic Segmentationで、このタスクと評価指標を定義しました。名前には、1つの視野内で見えるものをすべて含めるという定義が反映されています。
StuffとThings#
パノプティックセグメンテーションでは、クラスを次の2種類に分けます。
- Things: 人、車、動物、ハンドバッグなど、形が定義された数えられる物体です。それぞれに独自のインスタンスIDが割り当てられるため、隣り合って立つ2人は2つのセグメントになります。
- Stuff: 道路、空、草地、水、壁など、似たテクスチャや素材からなる形の定まらない領域です。空を複数のインスタンスに分けても意味がないため、同じstuffクラスのピクセルはすべて1つのセグメントになります。
COCOのパノプティックベンチマークは、things 80クラスとstuff 53クラスの計133クラスを使用します。Cityscapesの運転ベンチマークでは、things 8クラスとstuff 11クラスの計19クラスを評価します。曖昧なピクセルやどのクラスにも属さないピクセルにはvoidを割り当て、評価から除外します。COCOのパノプティック形式では、各セグメントに一意のIDを割り当てたPNG画像と、各IDをカテゴリーに対応付けるJSONファイルを保存します。
パノプティックモデルの仕組み#
初期のシステムでは、共有バックボーン上でセマンティックブランチとインスタンスブランチを動かし、固定ルールで出力を統合していました。たとえばPanoptic FPNは、インスタンス間の重複を信頼度で解決し、stuffよりインスタンスを優先してから、面積しきい値を下回るstuff領域を除去します。
Panoptic-DeepLabなどのボトムアップモデルは、セマンティックマップとともに、各物体の中心および各ピクセルから中心へのオフセットを予測し、その後、中心が示す位置に基づいてthingのピクセルをグループ化します。汎用モデルは、セマンティック、インスタンス、パノプティックの各セグメンテーションに同一のマスク分類アーキテクチャを使います。Mask2Formerは固定数のクエリを予測し、それぞれが1つのマスクと1つのクラスを出力するため、thingsとstuffの両方を扱えます。CVPR 2022の論文では、COCOパノプティックでPQ 57.8を達成しました。以下のHugging Face Transformersパイプラインは、COCOパノプティックで学習したMask2Formerチェックポイントを実行します。
import numpy as np
from transformers import pipeline
# Load Mask2Former trained on COCO panoptic: 80 thing and 53 stuff classes
segmenter = pipeline("image-segmentation", model="facebook/mask2former-swin-tiny-coco-panoptic")
# Each returned segment is one non-overlapping region with a class label and a binary mask
segments = segmenter("https://ultralytics.com/images/bus.jpg", subtask="panoptic")
for segment in segments:
share = np.array(segment["mask"]).mean() / 255
print(f"{segment['label']}: {share:.1%} of pixels")出力には10個のセグメントが表示されます。4人、2つのハンドバッグ、そして画像の30.7%を占めるバスは、それぞれ別個のthingセグメントとして表示されます。これらに加えて、stuffセグメントとして、舗装(30.9%)、その他の建物(19.5%)、樹木(4.8%)がそれぞれ1つずつあります。「-merged」接尾辞は、細分化されたラベルを統合して作られたCOCOのstuffクラスを示します。各ピクセルは1つのセグメントにのみ属し、どのセグメントにも割り当てられない0.4%のピクセルはvoidです。
パノプティック品質(PQ)#
パノプティック予測は、パノプティック品質で評価します。同じクラスの予測セグメントは、Intersection over Union(IoU)が0.5を超える場合にグラウンドトゥルースセグメントと一致します。セグメントは重複しないため、各セグメントが一致できる相手は最大1つです。一致したものは真陽性(TP)、一致しない予測は偽陽性(FP)、一致しないグラウンドトゥルースセグメントは偽陰性(FN)です。PQは、一致したすべてのIoUの合計をTP + ½FP + ½FNで割った値で、次の2つの要素に分解できます。
- セグメンテーション品質(SQ): 一致したセグメントのIoUの平均値であり、マスクの適合度を測定します。
- 認識品質(RQ): TP / (TP + ½FP + ½FN)であり、セグメント検出のF1スコアです。
PQはクラスごとに計算して平均します。また、ベンチマークではthingsとstuffを分けた値も報告します。
パノプティック、セマンティック、インスタンスセグメンテーションの違い#
- セマンティックセグメンテーション: すべてのピクセルについて、「このピクセルはどのクラスか」に答えます。隣接する3台の車は1つの車領域になります。
- インスタンスセグメンテーション: 検出された物体のみを対象に、「このピクセルはどの物体の一部か」に答えます。背景ピクセルにはラベルが付かず、異なる物体のマスクは重複する場合があります。
- パノプティックセグメンテーション: すべてのピクセルに対して両方の問いに答え、各ピクセルにセグメントを必ず1つだけ割り当てます。
Ultralytics YOLO26は、この2つの機能を別々のタスクとして提供します。-segモデルは各物体のマスクとクラスを返し、-semのセマンティックセグメンテーションモデルはすべてのピクセルのクラスを返します。これらのモデルは、19クラスのCityscapesまたは150クラスのADE20Kで事前学習されています。
実際のアプリケーション#
- 自動運転車: 1つの出力で、走行可能な道路や歩道をstuffとして、各歩行者や車両をトラッカーが追跡できる個別のthingとして扱えます。
- ロボティクス: 移動ロボットには、走行可能な床面と、持ち上げる対象や回避する対象のそれぞれが、一貫した単一のマップ上に必要です。
- 医用画像解析: デジタル病理画像では、組織領域をstuffとしてセグメント化し、個々の核や細胞をthingsとして数えます。
- 3Dと動画: 動画のパノプティックセグメンテーションでは、フレーム間でインスタンスIDの一貫性を保ちます。SemanticKITTIやnuScenesでベンチマークされるLiDARのパノプティックセグメンテーションでは、スキャン内のすべての3D点にクラスとインスタンスIDを割り当てます。










