🦁
SegNet
SegNetのポイント
- エンコーダー・デコーダー構造の理解
- プーリングとアップサンプリングの仕組み
- セマンティックセグメンテーションの評価指標
- メモリ効率化の手法
SegNetとは
基本定義
SegNetは2015年にケンブリッジ大学が発表した、セマンティックセグメンテーション用の
ディープニューラルネットワークです。
ニューラルネットワークを使ったセグメント手法の先駆けといわれています。
アーキテクチャの詳細
エンコーダー部分
入力画像 → 畳み込み層 → プーリング層 → ... → 特徴マップ
構成要素:
- ベースネットワーク:VGG-16の畳み込み層(13層)※後半の全結合層は使用していない。
- プーリング層:5個の2×2マックスプーリング
- 活性化関数:ReLU
解像度の変化:
- エンコーダーで画像サイズは1/32に縮小
- 特徴マップの解像度:元画像→1/2→1/4→1/8→1/16→1/32
デコーダー部分
SegNetの最大の特徴はデコーダーのアップサンプリング手法です。
従来手法の問題点:
- 転置畳み込み(Transposed Convolution)では学習パラメータが多い
- スキップ接続では大量のメモリが必要
Point! SegNetの解決策:プーリングインデックス
# エンコーダーでのマックスプーリング
def max_pooling_with_indices(x):
# 最大値とその位置(インデックス)を保存
max_val, indices = torch.max_pool2d_with_indices(x, 2, 2)
return max_val, indices
# デコーダーでのアップサンプリング
def unpooling(x, indices, output_size):
# 保存したインデックスを使って元の位置に復元
return torch.max_unpool2d(x, indices, 2, 2, output_size=output_size)
覚えるべき流れ:
- エンコーダーでマックスプーリング時にインデックスを保存
- デコーダーで保存したインデックスを使ってアップサンプリング
- 畳み込み層で特徴マップを精緻化
重要な比較・特徴
従来手法との比較
手法 | アップサンプリング | メモリ使用量 | 境界保存性 |
---|---|---|---|
FCN | 転置畳み込み + スキップ接続 | 大 | 良好 |
SegNet | プーリングインデックス | 小 | 良好 |
U-Net | 転置畳み込み + 連結 | 大 | 非常に良好 |
SegNetの利点
-
メモリ効率性
- エンコーダーの特徴マップを保存不要
- インデックスのみ保存(1/64のメモリ)
-
境界保存性能
- マックスプーリングの位置情報で正確な復元
- 物体の境界が鮮明
-
計算効率
- シンプルな構造で高速推論
- パラメータ数が少ない
SegNetの欠点
-
小物体の検出困難
- プーリングで細かい情報が失われる
-
文脈情報の不足
- 局所的特徴に依存しがち
【実装・応用】知識
損失関数
セマンティックセグメンテーションの標準:
# ピクセル単位クロスエントロピー損失
loss = F.cross_entropy(predictions, targets)
# クラス重み付き損失(不均衡データ対策)
weights = torch.tensor([0.1, 1.0, 2.0, ...]) # クラス別重み
loss = F.cross_entropy(predictions, targets, weight=weights)
評価指標
1. Pixel Accuracy
セグメンテーションしたピクセルの内どれだけが正解のピクセルか評価
pixel_acc = correct_pixels / total_pixels
2. Mean IoU (mIoU)
各クラスのIoUの平均
miou = sum(class_ious) / num_classes
3. Frequency Weighted IoU
出現頻度で重み付けしたIoU
fw_iou = sum(freq[i] * iou[i] for i in range(num_classes))
【応用分野】
1. 自動運転
- 道路セグメンテーション:車道、歩道、車線の識別
- Cityscapesデータセット:19クラスの都市風景
- リアルタイム性:SegNetの軽量性が重要
2. 医療画像
- 臓器セグメンテーション:MRI、CTでの臓器領域抽出
- 病変検出:腫瘍、血管の自動検出
3. 衛星画像
- 土地利用分類:森林、農地、都市部の分類
- 環境モニタリング:海洋汚染、森林破壊の監視
参考
https://arxiv.org/pdf/1511.00561
https://qiita.com/cyberailab/items/d11862852eccc17585e8
https://cvml-expertguide.net/terms/dl/semantic-segmentation/segnet/
Discussion