一言で言うと
高速で高性能なSegmentationを実現
基本情報
論文
BiSeNet: Bilateral Segmentation Network for Real-time Semantic Segmentation(2018年)
コード
おそらく非公式実装と思われる
既存手法への問題提起
高速化手法とその欠点
既存の計算量を減らすアプローチでは、精度が低下してしまう問題がある。
1.切り抜きやリサイズによって入力サイズを小さくする
高解像度の情報(=局所的な特徴量)が失われるため,特に境界付近の予測精度が低下してしまう。
2.モデルの初期段階のチャネルを減らす(=プルーニングする)
高解像度の情報(=局所的な特徴量)を保持する容量が小さくなってしまい、精度の低下につながる。
3.モデルの最終ステージをなくす(Enet)
モデルの受容野(畳み込みのカーネル)が大きな物体(=大域的な特徴量)をカバーしきれず、識別能力が低くなる。
U-shape structure(≒U-Net)の問題点
U-shapeは、十分にダウンサンプリングを行うことで大きな物体の情報(=大域的な特徴量)をカバーする。加えて、アップサンプリング時にconcatすることで、ダウンサンプリング時に欠落してしまった細部の情報(=局所的な特徴量)を補完する。しかし、U字形に情報を伝達する(アップサンプリングに計算量が必要)ため、速度が低下してしまう可能性がある。また、プルーニングやクロッピングで失われた高解像度の情報はconcatでは回復できない。
BiSeNet
BiSeNetは、以下の2つの部分からなる。
- Spatial Path (SP):高解像度の情報(=局所的な特徴量)を抽出
- Context Path (CP):大きな物体の情報(=大域的な特徴量)を抽出
この2つの文脈でセグメンテーションを行うので、「Bilateral」なんだと思う。
高速化手法として、以下の2つの構造を持つ。
- Attention Refinement Module (ARM):つまりSENet。(広義の?)attention。アップサンプリング処理を行わないため、計算コストはごくわずか。
- Feature Fusion Module (FFM):SPからの特徴量とCPからの特徴量を融合する。
ネットワーク構造

論文にあるこの図を見ても全体の雰囲気しか分からなかったので、githubに置いてあったコードを見て、詳細なアーキテクチャ図を作成してみた。この図は入力が256×256の場合(全結合層は無いので入力サイズは可変)。出力はnチャンネル(nはセグメンテーションの数)。Context Pathのメインストリームは論文中ではXceptionだが、このgithubではResNet18を使用している点に注意。
