SegNet徹底解説:Encoder-Decoderで構築するメモリ効率と高精度を両立するセマンティックセグメンテーション

こんにちは、ゆずかきです。
今回は、SegNet という深層学習ベースのセマンティックセグメンテーション(Semantic Segmentation)手法について、ガッツリと解説していきたいと思います。

このSegNetは、道路シーン解析や室内シーン解析などに多用される強力なモデルであり、近年ではSAM(Segment Anything Model)などの注目技術とあわせて議論されることも増えてきました。多くの方が、DeepLabシリーズやFCN(Fully Convolutional Networks)などを耳にする機会はあったかもしれませんが、「SegNetって何が新しいの?」他のセグメンテーション手法と比べて、トレードオフや特徴はどうなの?」といった疑問もあることでしょう。

そこで今回の記事では、「SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation」(Badrinarayanan, Kendall, Cipolla, 2016)をベースに、SegNetアーキテクチャの概要から、エンコーダ/デコーダの仕組み、他手法との比較実験、さらに室内/屋外シーン解析のベンチマーク結果に至るまで、原論文の内容を可能な限り網羅して紹介していきます。
深層学習による画像セグメンテーションはモダンなテーマですが、特にSegNetは「メモリ効率」「推論スピード」の面で大きな強みを持つと言われています。SAMとの組み合わせを念頭に置きつつ、セマンティックセグメンテーションの入門~発展に役立つ情報になれば幸いです。

論文URL
👇
SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation


§本記事の構成

  • はじめに: SegNetとは何か?
  • SegNetのアーキテクチャ概要
  • Encoder: VGG16ベースの特徴抽出
  • Decoder: プーリングインデックス(Pooling Indices)を活用したアップサンプリング
  • FCNやDeepLab-LargeFOV、DeconvNetとの比較
  • 実験とベンチマーク
  • CamVid(道路シーン)での評価
  • SUN RGB-D(室内シーン)での評価
  • メモリ効率と推論時間
  • SegNetの課題と今後の展望
  • SAM(Segment Anything Model)との絡み
  • まとめ

§はじめに: SegNetとは何か?

SegNetは、深層畳み込みニューラルネットワーク(CNN)をベースにしたセマンティックセグメンテーション(画像を画素単位でクラス分類するタスク)に特化したアーキテクチャとして、2016年の論文

“SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation”
で提案されました。

このモデルの最大の特徴は、「Encoder-Decoder構造」という形でネットワークを前半(Encoder)と後半(Decoder)に分割し、かつエンコーダで得られるプーリング情報(具体的には、最大プーリング時のインデックス情報)をデコーダ側のアップサンプリングに活かす点にあります。

最近のセグメンテーション手法には、SAM(Segment Anything Model)など巨大な事前学習モデルも登場していますが、SegNetの基本理念「メモリ効率を意識し、プーリングインデックスを再活用してアップサンプリングする」という工夫は依然として興味深いです。特に、自動運転(車載カメラを使った道路シーン解析)室内ARアプリケーション(壁・床・テーブルのピクセル毎のラベリング)において、計算資源や推論スピードの制約がある現場では、SegNetは今でも十分に魅力的な手法と言えます。


§SegNetのアーキテクチャ概要

SegNetの核となるのは、以下の3つのステップです。

  1. Encoder(畳み込み+プーリングで特徴マップをコンパクト化)
  2. Decoder(プーリングインデックスを用いたアップサンプリング+畳み込み)
  3. 最後にソフトマックスで各ピクセルをクラス分類

Encoder としては、VGG16の第1~第13層のConvolution部分を流用する構造です。つまり、VGG16から全結合層(Fully Connected)は取り除いた形で、連続する畳み込み層+ReLU+バッチ正規化(Batch Normalization)+Maxプーリングを順に繰り返します。

各エンコーダはプーリングによって空間解像度を1/2に落としていくことで、広い受容野(Receptive Field)を獲得。例えば入力解像度が 360×480 の場合、プーリング4~5回でかなりコンパクトになっていきます。

しかし、セマンティックセグメンテーションでは「ピクセル単位の境界の正確性」が重要なので、あまりサンプリングを粗くしすぎると境界情報が失われがちです。そこでSegNetでは、プーリング前のMax-poolingで得られる “どのピクセルが最大値を与えたか” のインデックス(pooling indices) を保存 しておき、Decoder側でのアップサンプリング時に再利用する仕組みになっています。


Encoder: VGG16ベースの特徴抽出

SegNetのEncoderは、論文中ではVGG16相当の13層ですが、Fully Connectedは除外されるため、パラメータ総数はVGG16の大半よりグッと抑えられます。具体的には、VGG16だと1億を超えるパラメータがありましたが、SegNetのEncoderでは約1,400万パラメータ程度になるとのこと。

  • Conv層+Batch Normalization+ReLU × (13層)
  • 各ブロックの最後にMax Pooling(2×2、stride=2)

これらの層を経て、入力画像は段階的に空間分解能を半分にしながらチャンネル方向の深い特徴を抽出していきます。


Decoder: プーリングインデックス活用によるアップサンプリング

SegNetの最大の肝と言えるのが、Decoder側でのアップサンプリングです。通常、FCN (Fully Convolutional Networks) では、「Encoderで縮められた特徴マップを逆畳み込み(Deconvolution)や単純な線形補間(Bilinear Interpolation)でアップサンプリング」するアプローチが有名でした。

しかしSegNetでは、EncoderのMax Pooling時に得られたプーリングインデックスを使って、Decoderのアップサンプリングを非線形的に行うというアイデアを採用しています。これによって、「どのピクセルがMaxプーリングで選ばれていたか」という位置情報を再利用でき、元画像の境界を保ちやすいのです。

具体的には

  1. Encoderで2×2プーリングを行う際、どの位置(画素)がMaxだったかをビットorインデックスとして記録
  2. Decoderでアップサンプリングする際、その記録に基づいて復元先の画素位置を決定(他のピクセルは0扱い)
  3. スパースになったアップサンプリング結果に畳み込み+Batch Normを適用して、密(dense)な特徴マップを復元

このインデックスベースのアップサンプリングは、従来の学習によるDeconvolutionと比較してパラメータ数が少なくて済み、かつエッジが比較的シャープに復元されるメリットがあると論文では示されています。

従来手法(FCNなど)のDecoder:

  • Encoderから得られた特徴マップを“学習済み” deconvフィルタで拡大 or Bilinearで固定的に拡大
  • メモリ面ではEncoderの中間特徴マップを保存しておく必要がある(かなり重い

SegNetのDecoder:

  • アップサンプリングにはプーリングインデックスのみを使う
  • Denseな特徴マップを得るための畳み込み層をデコーダに用意
  • メモリ消費はインデックスだけでOK(非常に軽い)

もちろん、Encoderのどの段階のプーリングインデックスを再利用するかという対応付けが必要になりますが、VGGの1段目エンコーダには1段目デコーダを…というふうに層対応を取っています。結果として、最終的なDecoder出力(高解像度に戻した特徴マップ)は、ソフトマックス分類層に通されて各ピクセルのクラス確率が得られます。


§FCNやDeepLab-LargeFOV、DeconvNetとの比較

SegNet論文で特にフォーカスされる比較対象は、FCN ([Long et al., CVPR 2015][2] で一世を風靡) と、DeconvNet ([Noh et al., ICCV 2015][4])、そしてDeepLab-LargeFOV ([Chen et al., ICLR 2015][3]) などです。

  • FCN
  • EncoderにVGG16を使い、Decoder部は学習するdeconvEncoder特徴とのスキップ接続で高解像度を復元
  • しかし大きなメモリを消費(すべてのEncoder特徴を保持)
  • 学習に段階的な工夫(Stage-wise training)が必要だったりする
  • DeepLab-LargeFOV
  • VGG16ベース
  • アトロス畳み込み(空洞畳み込み)などを使って、出力解像度を確保する
  • CRF(Conditional Random Field)を後処理で組み合わせるのが一般的
  • 計算コストは比較的少なめながら、小さい物体や境界付近は弱め
  • DeconvNet
  • こちらもEncoder-Decoder構造だが、EncoderにVGG16(FC層をConv化)を使っているため非常に巨大
  • DecoderでMaxプーリングの位置情報を再利用する点はSegNetに類似
  • ただし総パラメータが膨大(100Mオーダー)になりやすく、学習や推論時間が長い

SegNetは、DeconvNetに近い設計ながら、全結合層を廃止してパラメータ総数をぐっと減らし、かつプーリングインデックスのみを保存することで推論時メモリも節約しています。その一方で、境界付近の再現性も良いというバランスを目指しているわけですね。

論文内では、「SegNetはFCNなどに比べるとやや学習時間はかかるかもしれないが、メモリ面やエッジの表現力でメリットがある」とされています。逆にDeepLab-LargeFOVは軽量で早いが、細かい物体の境界表現が苦手など。


§実験とベンチマーク

SegNetの評価実験は、主に

  1. CamVid(道路シーン)
  2. SUN RGB-D(室内シーン)

の2つの大きなデータセットで行われました。

CamVid(道路シーン)

CamVidは、車載カメラ映像からフレームを抽出したもので、道路や建物、人、車、標識、歩道などを含む11クラスのピクセルラベリングが行われています。データは合計600枚ほど(train/val/test)と比較的小規模ですが、自動運転に向けた道路シーン解析の文脈でよく使われるベンチマークです。

SegNetと以下のモデルを比較すると:

  • FCN(アップサンプリングにDeconvを使用)
  • DeepLab-LargeFOV
  • DeconvNet

結論を先に言うと、SegNetとDeconvNetがもっとも輪郭の精度(Boundary F1スコアなど)が高く、Global AccuracyやmIoUでも高い値を記録しました。一方、DeepLab-LargeFOVは軽量かつ学習しやすい利点があるものの、細かいクラスの境界が若干崩れがち。

さらに論文では、「小型クラスをどれくらい正しく捉えられるか」を指標に、各手法のクラス平均精度を比較。SegNetは歩行者標識などもそこそこ正確に再現できていたそうです。加えて、より多くの道路シーンデータ(3,000枚超)を組み合わせて学習すると、さらに精度が上がり、CRF後処理がなくても十分滑らかなセグメンテーションが得られるという報告でした。


SUN RGB-D(室内シーン)

もう1つは、SUN RGB-Dという室内シーンが対象の大規模データセット(約5,000枚のトレーニング画像+5,000枚のテスト画像、計37クラス)。壁や床、天井、テーブル、椅子、ソファ、ランプ、カーテン、洗面台など、室内空間を構成する数多くのクラスが含まれています。

屋外シーンよりも物体数が多く、位置関係も複雑で、非常に難しいタスクとされます。そのため、総じてモデルの精度がCamVidよりも大幅に低下しました。SegNet、FCN、DeepLab-LargeFOV、DeconvNetいずれもmIoUが30%前後に留まるという厳しい結果。

とはいえ、その中でもSegNetはBoundary F1(境界スコア)でリードを見せ、DeepLab-LargeFOVがmIoU上でわずかに優位、という感じです。どのモデルも多くのクラスが入り乱れるような室内画像では苦戦しており、データセットの多様性の前に性能が頭打ちになる印象があります。


§メモリ効率と推論時間

SegNetの最大の売りの一つは、推論(テスト)時のメモリ使用量が小さいことです。というのも、FCNのようにEncoderのフル解像度の特徴マップを保持するのではなく、プーリングインデックスのみを保存すればよいからです。具体的には

  • FCN系: 例えば64チャネル分のEncoderマップを保持→何十MBも消費
  • SegNet: 2×2プーリングのビットインデックスだけ保存→はるかに少量

論文の実験では、例えば画像サイズ360×480でエンコーダの1層目(64チャネル分)をフル保存すると11MBが必要なのに対し、SegNetはインデックスだけでわずかに済むという数字が挙げられています。モバイルデバイスや組込み向けの推論装置を考えると、この差はかなり大きいですね。

一方、学習(トレーニング)面では、SegNetはDecoderに畳み込み層が多めに入るため多少重くなるかもしれませんし、あとはBatch Normalizationを各層に入れることで学習を安定化させている反面、Forward/Backward計算量はそれなりに発生します。

それでも、DeconvNetのように全結合層を大量に含む巨大ネットワークに比べれば、SegNetのほうがはるかに軽量学習がスムーズという報告がされています。DeepLab-LargeFOVはさらに軽いが、境界や小物体表現が甘いなどのトレードオフですね。


§SegNetの課題と今後の展望

SegNetは素晴らしい手法ですが、もちろん課題もいくつかあります。

  1. 室内シーンなど、多数のクラスや複雑な物体が多いケースでは精度が伸び悩む
  • 論文でもSUN RGB-DでのmIoUが30%前後に留まり、最先端の大規模モデルに比べるとやや物足りない。
  1. アップサンプリングがプーリングインデックスに強く依存
  • Max Pooling時の情報しか復元できないので、場合によっては不足する情報がある。
  1. クラスアンバランス
  • Roadシーンでも、歩行者・標識などの小さいクラスは精度が低い。SUN RGB-Dで小物のクラスはさらに正解率が下がる(クラスバランスの問題)。

さらに、近年ではSegment Anything Model(SAM)などの新興モデルが、巨大な事前学習を通じて汎用的なセグメンテーション能力を示しています。特にSAMは画像上の任意の領域をインタラクティブに切り出せるという画期的な機能で話題を集めており、これを従来のEncoder-Decoder型モデル(SegNet含む)とどう組み合わせるか、Self-Attention(自己注意)をどう活かすか、といった議論も活発です。

  • SegNet × SAM:
  • 例えば、実際のエッジ情報をSegment Anything Modelが事前に推定し、SegNetのデコーダに条件付けできる可能性も考えられます。
  • 自律走行等の用途であれば、リアルタイム性能組込みハードウェアへの実装などでSegNetの軽量さとSAMの高い汎用性を両立する余地があるかもしれません。

今後はマルチモーダル(RGB+Depth+LiDAR)の発展や、事前学習済み大規模モデルとの組み合わせなどがさらに進む中で、SegNetのような「Encoder-Decoder構造の設計ノウハウ」が活きてくると思います。SAMを始めとする自己注意(Self-Attention)ベースの大規模モデルが主流になりつつある流れの中でも、メモリ効率が高く、軽量でシャープな境界が得られるSegNetの哲学は十分検討の余地があるはずです。


§まとめ

以上、SegNet の概要と実験結果、他手法との比較などを網羅的に見てきました。ポイントを整理すると:

  • Encoder-Decoder構造:Encoder(VGG16をベース)で段階的にプーリング→Decoderでプーリングインデックスを用いてアップサンプリング、最後にソフトマックスで画素単位のクラス予測
  • プーリングインデックスの再利用:従来のFCN系のようにEncoderのフル特徴マップを参照するのではなく、Max Pooling時のインデックスだけを保存するのでメモリ効率に優れる
  • 実験結果:道路シーン(CamVid)や室内シーン(SUN RGB-D)で評価→特に境界の再現性に優位性が見られ、メモリ使用量も少ない
  • 課題:クラス数が多く複雑なシーンでは性能が低下しがち。Max Poolingインデックス由来の制限、クラスアンバランスの問題など
  • SAMとの絡み:巨大事前学習モデルが増える中、軽量かつ境界表現に強いSegNetの特性をどう活用するかが今後のトピック

「SegNetは、初期のEncoder-Decoder型セグメンテーションのエポックメイキング的存在」といっても過言ではなく、そのメモリ効率境界表現の両立は、後発のDeconvNetやFCN派生などとともに多くの示唆を与えてくれました。

現在ではSAMやVision Transformer系の自己注意メカニズム(Self-Attention)を用いたモデルも勢いがあり、より汎用的・大規模な方向に研究が進んでいます。しかし、実際の組込み用途やリアルタイム推論を求める場合には、SegNetの設計哲学(Decoderでのプーリングインデックス再利用)が大いに活かせるでしょう。自動運転、ロボティクス、ARなど幅広い応用シーンにおいて、まだまだSegNetが活躍する余地はありそうです。

最後までお読みいただきありがとうございました!


🔑この記事のポイントまとめ

  • SegNet: エンコーダとデコーダから成るEncoder-Decoder構造。プーリング時のインデックス情報を活用してアップサンプリング
  • 他手法との比較: FCNやDeepLab、DeconvNetに比べ、メモリ効率境界表現でアドバンテージ。
  • CamVid / SUN RGB-Dでの実験: 屋外道路シーン(特に小さなクラスの正確性)、室内シーン(複雑シーン)の両面で検証→Boundary F1などでSegNet優位の結果も
  • SAM(Segment Anything Model)やTransformer系の大規模モデルとの組み合わせが今後の注目点。軽量推論への需要は引き続き高い

画像解析

Posted by yuzukaki-dialog