セマンティックセグメンテーション入門 - U-Net と DeepLab の仕組みを徹底解説
セマンティックセグメンテーションとは何か
セマンティックセグメンテーションは、画像内の全ピクセルにクラスラベルを割り当てるタスクです。物体検出がバウンディングボックスで物体の位置を示すのに対し、セグメンテーションはピクセル単位で「この領域は人」「この領域は道路」「この領域は空」と分類します。自動運転、医療画像解析、衛星画像分析など幅広い分野で活用されています。
物体検出との違い:
物体検出 (Object Detection) は矩形領域で物体を囲みますが、セマンティックセグメンテーションは物体の正確な輪郭を捉えます。例えば自動運転では、歩行者の正確な形状を把握することで安全な経路計画が可能になります。YOLO や SSD が矩形で検出するのに対し、セグメンテーションモデルは 1 ピクセルごとの分類マップを出力します。
セグメンテーションの種類:
- セマンティックセグメンテーション: 同じクラスの物体を区別しない (全ての車を「車」クラスとして一括分類)
- インスタンスセグメンテーション: 同じクラスでも個々の物体を区別する (車 A、車 B を別々に識別)
- パノプティックセグメンテーション: セマンティックとインスタンスを統合し、背景も含めた完全な場面理解を実現
評価指標には mIoU (mean Intersection over Union) が標準的に使用され、予測領域と正解領域の重なり具合を 0 から 1 のスコアで表します。PASCAL VOC データセットでは 21 クラス、Cityscapes では 19 クラスの分類精度が競われています。
FCN - 全結合層を排除した先駆的アーキテクチャ
Fully Convolutional Network (FCN) は 2015 年に Long らが提案した、セマンティックセグメンテーションの基盤となるアーキテクチャです。従来の CNN が画像分類のために全結合層を使用していたのに対し、FCN はすべての層を畳み込み層に置き換えることで、任意サイズの入力画像に対してピクセル単位の予測を可能にしました。
アーキテクチャの核心:
FCN は VGG-16 などの分類ネットワークをベースに、最終層の全結合層を 1x1 畳み込みに変換します。これにより空間情報が保持され、出力は入力と同じ空間次元のヒートマップになります。ダウンサンプリングで失われた解像度は、転置畳み込み (Transposed Convolution) によるアップサンプリングで復元します。
スキップ接続の導入:
FCN-32s は 32 倍のアップサンプリングを一度に行うため、出力が粗くなります。FCN-16s では pool4 の特徴マップを結合し、FCN-8s では pool3 も加えることで、より精細な境界を復元します。このスキップ接続のアイデアは後の U-Net に大きな影響を与えました。
実装上のポイント:
PyTorch での FCN 実装では torchvision.models.segmentation.fcn_resnet50 が利用可能です。入力画像を正規化し、出力の argmax を取ることでクラスマップが得られます。PASCAL VOC 2012 での mIoU は FCN-8s で約 62.2% を達成しています。学習には cross-entropy loss のピクセル単位適用が基本ですが、クラス不均衡への対処として weighted cross-entropy や focal loss も有効です。
U-Net - エンコーダ・デコーダ構造と医療画像への応用
U-Net は 2015 年に Ronneberger らが医療画像セグメンテーション向けに提案したアーキテクチャです。少量の学習データでも高精度なセグメンテーションを実現する設計が特徴で、細胞画像や臓器画像の分割で広く採用されています。名前の由来は、ネットワーク構造を図示すると U 字型になることからです。
エンコーダ (収縮パス):
エンコーダは 3x3 畳み込み (2 回) + ReLU + 2x2 MaxPooling の繰り返しで構成されます。各段階でチャネル数を 64 → 128 → 256 → 512 → 1024 と倍増させながら、空間解像度を半分に縮小します。これにより広い受容野を確保し、画像全体の文脈情報を捉えます。
デコーダ (拡張パス):
デコーダは 2x2 転置畳み込みによるアップサンプリング + エンコーダからのスキップ接続 + 3x3 畳み込み (2 回) で構成されます。スキップ接続により、エンコーダの高解像度特徴マップがデコーダに直接伝達され、細かい境界情報が保持されます。
スキップ接続の重要性:
U-Net の最大の特徴は、エンコーダの各段階の特徴マップをデコーダの対応する段階に連結 (concatenation) することです。これにより、低レベルの空間情報 (エッジ、テクスチャ) と高レベルの意味情報 (物体の種類) が統合されます。FCN のスキップ接続が加算だったのに対し、U-Net は連結を使用することでより豊富な情報を保持します。
医療画像での成果:
ISBI 2015 の細胞追跡チャレンジで優勝し、わずか 30 枚の学習画像から高精度なセグメンテーションを達成しました。データ拡張 (弾性変形、回転、反転) を積極的に活用し、少量データでの汎化性能を向上させています。現在も網膜血管セグメンテーション、肺 CT 解析、脳腫瘍検出などで標準的に使用されています。
DeepLab シリーズ - Atrous Convolution と CRF による高精度化
DeepLab は Google Research が開発したセグメンテーションモデルのシリーズで、v1 (2015) から v3+ (2018) まで進化を続けています。Atrous Convolution (Dilated Convolution) を核心技術とし、解像度を落とさずに広い受容野を確保する設計が特徴です。
Atrous Convolution の仕組み:
通常の畳み込みはカーネル要素が隣接していますが、Atrous Convolution はカーネル要素の間に「穴 (trous)」を挿入します。rate=2 の場合、3x3 カーネルの実効的な受容野は 5x5 に拡大しますが、パラメータ数は 3x3 のままです。これにより計算コストを抑えつつ、広い文脈情報を捉えられます。
ASPP (Atrous Spatial Pyramid Pooling):
DeepLab v2 で導入された ASPP は、異なる rate (6, 12, 18, 24) の Atrous Convolution を並列に適用し、マルチスケールの特徴を抽出します。小さな物体から大きな物体まで、様々なスケールの情報を同時に捉えることが可能です。DeepLab v3 では ASPP にグローバル平均プーリングを追加し、画像全体の文脈情報も統合しています。
DeepLab v3+ のエンコーダ・デコーダ構造:
DeepLab v3+ は ASPP ベースのエンコーダに軽量なデコーダを追加しました。エンコーダの低レベル特徴 (stride 4) をデコーダで結合することで、物体境界の精度が大幅に向上しています。バックボーンには Xception や ResNet-101 が使用され、Cityscapes で mIoU 82.1% を達成しています。
CRF による後処理:
DeepLab v1/v2 では、CNN の出力を Conditional Random Field (CRF) で後処理し、物体境界を鮮明化していました。CRF はピクセル間の色や位置の類似性を考慮し、セグメンテーション境界を画像のエッジに沿わせます。v3 以降は CRF なしでも十分な精度が得られるようになっています。
学習データの準備とアノテーション手法
セマンティックセグメンテーションの学習には、ピクセル単位のアノテーション (ラベルマップ) が必要です。1 枚の画像に対して全ピクセルにクラス ID を割り当てたマスク画像を作成する作業は、物体検出のバウンディングボックスと比較して 10 倍以上の工数がかかります。
主要データセット:
- PASCAL VOC 2012: 21 クラス、約 10,000 枚。セグメンテーション研究の標準ベンチマーク
- Cityscapes: 都市景観 19 クラス、5,000 枚の精密アノテーション + 20,000 枚の粗アノテーション
- ADE20K: 150 クラス、25,000 枚。室内外の多様なシーンをカバー
- COCO-Stuff: 171 クラス、164,000 枚。物体と背景の両方をアノテーション
アノテーションツール:
Labelme、CVAT、Supervisely などのツールがポリゴンベースのアノテーションを支援します。ポリゴンの頂点を物体の輪郭に沿って配置し、内部を塗りつぶすことでマスクを生成します。1 枚あたりの作業時間は画像の複雑さに依存しますが、Cityscapes の精密アノテーションでは 1 枚あたり平均 90 分を要しています。
半教師あり・弱教師あり学習:
アノテーションコストを削減するため、画像レベルのラベル (この画像に車が含まれる) だけで学習する弱教師あり手法や、少量のピクセルアノテーション + 大量の未ラベルデータで学習する半教師あり手法が研究されています。CAM (Class Activation Map) を擬似ラベルとして利用する手法は、完全教師ありの 80% 程度の精度を達成しています。
データ拡張戦略:
セグメンテーションのデータ拡張では、入力画像とマスクに同一の変換を適用する必要があります。水平反転、ランダムクロップ、スケール変換、色調変換が標準的です。CutMix や MixUp のセグメンテーション版も提案されており、学習データの多様性を効率的に増加させます。
実装とデプロイ - PyTorch による学習からエッジ推論まで
セマンティックセグメンテーションモデルの実装から本番環境へのデプロイまでの実践的なワークフローを解説します。PyTorch を中心に、学習パイプラインの構築からモデルの軽量化、エッジデバイスでの推論までをカバーします。
PyTorch での学習パイプライン:
torchvision.models.segmentation には DeepLab v3、FCN が事前学習済みモデルとして用意されています。カスタムデータセットでファインチューニングする場合、最終層のクラス数を変更し、学習率 1e-4 程度で 50-100 エポック学習するのが一般的です。損失関数には nn.CrossEntropyLoss を使用し、クラス不均衡がある場合は各クラスの出現頻度の逆数で重み付けします。
学習のテクニック:
学習率スケジューラには Poly Learning Rate (初期学習率 × (1 - iter/max_iter)^0.9) が広く使用されています。バッチサイズは GPU メモリに依存しますが、Batch Normalization の安定性のため 8 以上が推奨されます。Synchronized Batch Normalization を使用すれば、マルチ GPU 環境でバッチ統計量を共有できます。
モデルの軽量化:
エッジデバイスでのリアルタイム推論には、軽量モデルが必要です。MobileNet v3 をバックボーンとした DeepLab v3 は、精度を大きく犠牲にせずに推論速度を 5-10 倍高速化できます。さらに、量子化 (INT8) により推論速度を 2-3 倍向上させ、モデルサイズを 75% 削減できます。TensorRT や ONNX Runtime での最適化も有効です。
リアルタイムモデル:
BiSeNet、ICNet、ENet などのリアルタイムセグメンテーションモデルは、720p 画像を 30fps 以上で処理できます。自動運転や AR アプリケーションでは、精度と速度のトレードオフを考慮してモデルを選択します。NVIDIA Jetson Xavier NX では、BiSeNet v2 が 1,024 × 512解像度で 45fps を達成しています。