コンピュータービジョン

セマンティックセグメンテーション せまんてぃっくせぐめんてーしょん

セマンティックセグメンテーションピクセル分類U-Net自動運転医療画像コンピュータービジョン
セマンティックセグメンテーションについて教えて

簡単に言うとこんな感じ!

セマンティックセグメンテーションは「画像の全ピクセルに対して『これは道路・これは空・これは人』と分類する技術」だよ。自動運転カーが「どこが走れる道で、どこが障害物か」をピクセル単位で把握するのに使われるんだ。複数の人がいても「みんな同じ人クラス」として扱うのが特徴だよ!


セマンティックセグメンテーションとは

セマンティックセグメンテーション(Semantic Segmentation) は、画像の全ピクセルに対してクラスラベル(「道路」「空」「人」「車」など)を割り当てるコンピュータービジョンのタスクです。インスタンスセグメンテーションと異なり、同じクラスの複数の物体を個別に区別せず、「人クラスのピクセル群」として一括して扱います。

代表的なアーキテクチャはFCN(Fully Convolutional Network) で、全結合層を畳み込み層に置き換えることで任意サイズの画像に対して密なピクセル単位の予測を可能にしました。U-Netはエンコーダ-デコーダ構造とスキップ接続を使い、医療画像での高精度セグメンテーションで広く使われています。

自動運転(走行可能領域の把握)・医療画像(臓器・病変の分割)・衛星画像解析(農地・建物の抽出)・製造業(品質検査)など、精密な空間理解が必要な多くの分野で活用されています。


主要なアーキテクチャ

モデル特徴
FCN2015全畳み込み化でピクセル単位の予測を実現
SegNet2015エンコーダ-デコーダ構造
U-Net2015スキップ接続で細部を保持。医療画像の定番
DeepLab v3+2018Atrous Convolution・CRFで精度向上
SegFormer2021Transformerベースの高精度モデル
SAM2023Meta製の汎用セグメンテーション
# U-Netのエンコーダ-デコーダ構造(概略)
class UNet(nn.Module):
    def __init__(self, num_classes):
        super().__init__()
        # エンコーダ(ダウンサンプリング)
        self.enc1 = ConvBlock(3, 64)
        self.enc2 = ConvBlock(64, 128)
        # ボトルネック
        self.bottleneck = ConvBlock(128, 256)
        # デコーダ(アップサンプリング)+ スキップ接続
        self.dec2 = ConvBlock(256 + 128, 128)  # スキップ接続で連結
        self.dec1 = ConvBlock(128 + 64, 64)
        # 出力
        self.out = nn.Conv2d(64, num_classes, kernel_size=1)

歴史と背景

  • 2015年:FCN・U-Net・SegNetが相次いで発表。ディープラーニングによるセグメンテーションが実用化
  • 2016〜2018年:DeepLabシリーズがAtrous Convolutionで精度を大幅向上
  • 2021年:SegFormerがTransformerベースで新たなSOTAを達成
  • 2023年:Meta SAMが任意物体の汎用セグメンテーションを実現

活用シーンと必要なラベル数

分野典型的なクラス数精度要求
自動運転19〜30クラス非常に高い(安全要件)
医療画像1〜10クラス非常に高い(臨床精度)
衛星画像5〜20クラス高い
一般物体認識150クラス以上中〜高い

関連用語