セグメンテーション — 画像を画素単位で理解する

「どこに何があるか」を四角い枠で答えるのが物体検出なら、セグメンテーションはすべての画素に「あなたは何クラスか」を答えさせるタスクです。画素分類という見方、エンコーダ・デコーダ構造とskip接続、そしてIoU/Diceによる評価までを、動かしながら掘り下げます。

1. 分割とは「画素の分類」である

セマンティックセグメンテーションの出力は、入力と同じ解像度のクラスマップです。ネットワークは各画素について全クラスの確率分布(softmax)を出し、その argmax を塗ったものが分割結果になります。つまり本質は「H×W 個の分類問題を一度に解く」こと。分類 CNN との違いは、空間解像度を最後まで(あるいは最後に)保たなければならない点に尽きます。

下のデモは道路シーンの分割結果です。画素の上にマウスを乗せると、その画素のクラス確率分布が見えます。物体の内部では確率が1クラスに集中し、境界付近では分布がなだらかに混ざることを確認してください。損失関数(画素ごとの交差エントロピー)が一番苦労しているのは、まさにこの境界画素です。

道路シーンのセマンティック分割 — 画素をホバーして確率を見る
色=各画素の argmax クラス。チェックでクラスごとに表示を切り替えられます。ホバーで表示される棒グラフがその画素の softmax 出力(クラス確率)。車や歩行者の輪郭付近では「車 55% / 道路 40%」のような曖昧な画素が並んでいます。
POINT — 出力は「確率の地図」 分割モデルの生出力は H×W×C の確率テンソル。argmax で塗った途端に情報が捨てられる。境界の不確かさ・小物体の存在確率などは argmax 前のマップにしか残っていないため、後段(追跡・計画など)に渡すときは確率のまま使う設計も多い。

2. エンコーダ・デコーダとskip接続

画素分類には矛盾した2つの要求があります。クラスを当てるには広い受容野=深い層で得る文脈情報が必要ですが、深い層はプーリングで解像度を失い、境界の位置情報が消えます。これが受容野と解像度のジレンマです。

FCN (2015) は全結合層を畳み込みに置き換えて「任意サイズの入力→粗いクラスマップ」を実現し、アップサンプリングで解像度を戻しました。U-Net はさらに、エンコーダの各解像度の特徴マップをデコーダの同じ解像度へ横渡しするskip接続を導入し、失われた位置情報を復元段に注入します。下のU字を流れるデータを眺めながら、skip接続をOFFにしたときの出力境界の変化を見てください。

U-Net の情報の流れ — skip接続が境界を救う
左=入力画像、U字=特徴マップ(箱の高さが空間解像度)、右=出力マスク。skip接続ONでは高解像度の位置情報がデコーダへ直結し境界がシャープに。OFFにすると 16×16 まで潰れた情報だけから復元するため、輪郭(白線=正解境界)からはみ出したぼやけたマスクになります。
注意 — 受容野と解像度のジレンマの別解 解像度を落とさず受容野だけ広げる手もある。DeepLab 系の膨張畳み込み(dilated / atrous convolution)はカーネルの目を飛び飛びに広げ、ダウンサンプリングなしで受容野を指数的に拡大する。さらに ASPP(複数の膨張率を並列に使う)でマルチスケールの文脈を一度に集める。FCN → U-Net → DeepLab は「解像度をどう守るか」への異なる回答として読むと系譜が繋がる。

3. どこまで合えば「正解」か — IoU と Dice

分割の評価は画素の集合同士の重なりで測ります。予測マスク A と正解マスク B に対して、定番は次の2つ。

IoU(A, B) = |A ∩ B| / |A ∪ B| Jaccard係数。ベンチマークでは全クラス平均の mIoU が標準指標
Dice(A, B) = 2|A ∩ B| / (|A| + |B|) F1スコアと同値。Dice = 2·IoU/(1+IoU) の単調な関係にあり、常に IoU ≤ Dice

数式だけでは「IoU 0.5」がどれくらいのズレなのか感覚が湧きません。下のデモで予測マスクをドラッグして、IoU=0.5 の見た目を体に入れてください。思ったよりずっと「ズレて見える」はずです — 検出タスクで IoU 0.5 が合格ラインとされるのはかなり緩い基準で、だからこそ COCO では 0.5〜0.95 を平均する厳しい指標が使われます。

IoU 実験室 — 予測マスクをドラッグ/スケールして重なりを体感する
IoU: —
Dice: —
緑=正解マスク、オレンジ=予測マスク(ドラッグで移動)、明るい領域=交差部分。ゲージの白い目盛りが IoU=0.5。マスクを完全に含む大きすぎる予測でも IoU が伸びないこと(分母の ∪ が膨らむ)も確かめてください。
POINT — なぜ Dice も使うのか 医用画像など前景が極端に小さい場面では、画素交差エントロピーは「全部背景」と答えても損失が小さくなってしまう。Dice を微分可能な形にした Dice loss は前景の重なりそのものを最大化するため、クラス不均衡に強い。実務では CE + Dice の複合損失が定番。

4. セマンティックからインスタンスへ

セマンティック分割は「車というクラス」を塗るだけで、車が3台いても全部同じ色です。1台ずつを別の個体として切り分けるのがインスタンスセグメンテーション(代表格は検出枠の中でマスクを推定する Mask R-CNN)。さらに、可算物体(thing)はインスタンスで、空や道路のような不可算領域(stuff)はセマンティックで塗り分ける統合タスクがパノプティックセグメンテーションです。

セマンティック vs インスタンス — 「車」か「あの車」か
セマンティック=クラス単位(車は全部オレンジ)。インスタンス=個体単位(車1台ごとに別色、ID付き)。道路や空のような stuff はインスタンス表示では塗られない — 両者を統合したものがパノプティック分割です。

5. まとめ

一歩先へ — 基盤モデル SAM 以後 2023年の SAM (Segment Anything Model) は、点・枠・テキストなどのプロンプトを与えると「何でも」切り抜く分割の基盤モデルで、11億マスクという桁違いのデータで学習された。タスク特化の学習なしに未知の物体を切れる zero-shot 性能が衝撃を与え、以後の分割研究は「クラス語彙を固定しない open-vocabulary 化」と「プロンプトで制御する対話的分割」へ大きく舵を切っている。Transformer ベースの統一構造(Mask2Former など)がセマンティック/インスタンス/パノプティックを単一モデルで解くのも現在の標準。