45
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

2022年時点リアルタイムセマンティックセグメンテーションモデルのまとめ

Last updated at Posted at 2022-12-09

概要

前回の記事で、リアルタイムセマンティックセグメンテーションの学習やテストに使われるデータセットについてまとめました。

今回は、どのようなモデルが今存在しているのか、ということについてまとめていきたいと思います。

モデルの性能の変遷

Paper with Code のそのままの転載となりますが、
まずはセマンティックセグメンテーションがどのように性能向上し、
リアルタイム性を持ってきたのか、ということについて理解します。

Paper with code + real time semantic segmentation へのリンクはこちら

精度

これを見ていただければわかるように、CityScapesのデータセットに対して、
モデルの持つmIoUの値は年々向上しており、
今現在のSoTAモデルは約80のmIoU を持っていることがわかります。

Screen Shot 2022-11-29 at 12.24.25.png

速度

次に、推論速度ですが、これも年々大きな改善が見られます。
もちろん計算環境が良くなっているという前提はありますが、モデル自体の改善も大きく、
現在では200~300を超えるFPSでの推論も可能な水準です。
リアルタイムセマンティックセグメンテーションという言葉が出てき始めたのは、2016年〜2017年頃からのようです。グラフを見ると、そのあたりでFPSが100前後を達成しており、そのあたりから実際にリアルタイム性をもつセグメンテーションモデルで精度を出すことができるか、という研究が大きくなったようです。

現在の200、300くらいのFPSが出れば
リアルタイムでセグメンテーションをかけながら自動運転に応用したりなども余裕で考えられそうですね。

Screen Shot 2022-11-29 at 12.27.12.png

精度と速度のまとめ(後述のPIDNetの論文より)

Screen Shot 2022-11-29 at 18.25.00.png

ここ数年で、セマンティックセグメンテーションのタスクは非常に早く、正確になっていることがみて取れます。

アルゴリズムの変遷

さて、ここからセグメンテーションモデルのアルゴリズムについて言及します。

ここでは、アルゴリズムの構造に対して、系列分けしてみました。

  • UNet 系列
  • DeepLab 系列
  • 畳み込み層改善 系列
  • マルチパス系列
  • YOLOからの派生系列
  • コンピュータビジョンからの工夫を組み込んだ派生系列

ここからは、各系列ごとにモデルのアルゴリズムを追っていこうと思います。

モデル構造

UNet 系列

まずは、セグメンテーション元祖UNetを踏襲したアルゴリズムです。
Unet として2015年に登場し、Unet++などでより表現力が改善されたモデルになったあと、
2021年にはトレンドのSwin Transformer を応用したSwin Unetも発表されています。

Unet

UNet は知っている方も多いと思いますが、エンコードとデコードをボトルネック層を挟んで実装したモデルで、
デコード部分にはエンコードからのスキップコネクションを使用することで、特徴量を抽出することを抑えた、細部のセグメンテーションに効く部分を残すことで、セグメンテーションタスクのスタンダードモデルとなりました。
モデルの形がU字に見えることから、UNetと呼ばれています。

Screen Shot 2022-11-29 at 12.37.14.png

UNet++

UNetのスキップコネクションを改善する形で発表されたUNet++ですが、元のUNetでは単純だったスキップコネクションを、もっと多層にして実行しています。
こうすることで、今までエンコーダとデコーダで乖離していた特徴マップの差を小さくすること、グラディエントマップを改善することなどをメリットとして挙げています。

Screen Shot 2022-11-29 at 12.39.48.png

Swin UNet

こちらは、Swin Transformer を用いてエンコーダとデコーダを実装しているモデルです。
畳み込み層はSwinTransformerの層に置き換わっています。

Screen Shot 2022-11-29 at 12.42.35.png

DeepLab 系列

DeepLab

DeepLab もまた、畳み込み層を用いて特徴マップを作るところまでは同じなのですが、
そのあとに最終出力を行うところに、アップサンプリングの後にConditional Random Field (CRF) と呼ばれる前結合モデルを使って最終出力を生成しています。
この工夫により、モデルの課題だった、ディテールの情報が畳み込みによって失われてしまうことを克服した、という記述になっています。

Screen Shot 2022-11-29 at 12.46.05.png

DeepLab v2

DeepLab v2 では、CNN層に対して、視野角を通常より大きく取る、Atrous Convolution を用いることによって、出力される画像が小さくなりすぎるのを防ぐ(結果として特徴マップのディテールが保たれる)ことを工夫しています。
Screen Shot 2022-11-29 at 12.57.11.png

また、これらの視野角をいろいろな大きさで実行し、それらを合わせる、ピラミッド型を採用しており、
これらの手法でより精度を高めたという記述になっています。

Screen Shot 2022-11-29 at 12.59.50.png

DeepLab v3

v3については、アーキテクチャは基本的にはv2のものを踏襲し、
モデルの細部の更新により精度の向上を図ったというような記述がなされていました。
細部については論文で確認していただければと思います。

畳み込み層改善 系列

ENet

既存のセグメンテーションモデルの畳み込み層に対して、畳み込みブロックをより少量のパラメータによって実行し、速度を改善したという記述になっています。

Screen Shot 2022-11-29 at 13.14.11.png

マルチパス系列

Screen Shot 2022-11-29 at 13.21.32.png

Screen Shot 2022-11-29 at 13.28.07.png

ARM(Attention Refinement Module) と FFM(Feature Fusion Module)
MobileNetv3のBottleNeckで登場した 
Squeeze and Excitation モジュール に類似しています。

このBisenetで書かれている Context PathSpatial Path
セマンティックセグメンテーションにおいて重要な、
特徴量をより抽出した情報と、ディテールをもっている情報をそれぞれ持っているパスであり、これらの兼ね合いやフュージョンの仕方が全てのモデルにおいて重要であり、それぞれの派生論文での工夫ポイントとなっています。

YOLOからの派生系列

YOLACT(2019)

YOLACT は、物体検出モデルとして知られているYOLOのモデルに、セグメンテーションのチャンネルを付け加えたものです。

Screen Shot 2022-11-29 at 15.23.34.png

Prediction Headには、YOLOの出力である、物体のクラスを識別するチャンネル、ボックスを出力するチャンネルがあります。
Head ArchitectureRetinaNetを見ると、その二つのパスでモデルが構築されています。
YOLACTは、このClassBoxの出力に加えて、Maskの出力を持っています。

Screen Shot 2022-11-29 at 15.25.51.png

このMaskは、Protonetからの出力と内積を取るような形で重みをつけた状態で足し合わされ、それがMask(セグメンテーションを表す)となります。

Screen Shot 2022-11-29 at 15.25.45.png

その足し合わされた後のMaskは、Head Architecture の他の出力によってクロップされ、閾値によって切り分けられます。

また、これはYOLOを理解するキーワードではあるのですが、NMSというキーワードも出てくるため、知らない人がいたら下の解説記事をご覧ください。

また、YOLACTは∼1500 MB of VRAM even with a ResNet-101 backbone ということで、スペックの低いデバイスに対してもデプロイできるのでは、という記述があります。

一通りモデルを眺めてみると、とても面白いなと思いました。
Head Architectureをマルチパスにするのではなく、シングルパスにして、最後に3つの出力に分けるところなども、高速化という観点でメリットなのだろうなと思いました。
内積を取って重みの付いた和をとるというところは、なんとなくアテンションのようなニュアンスも感じますね。

YOLACT++(2019)

根本的なモデル構造についてはYOLACTと同じなのですが、
Fast Mask Re-Scoring と呼ばれる層を追加で実装することで、精度を向上させています。
具体的な実装は単純で、Maskを追加の畳み込み層によってベクトル化します。
このベクトルは、教師データとのIoUを予測するように設計しておいて、
このベクトルと、予測されたクラシフィケーションコンフィデンスの積を使って、最後のマスクの結果を再度回帰することで精度向上を図っている、と記述されていました。

Screen Shot 2022-11-29 at 15.53.25.png

コンピュータビジョンからの工夫を組み込んだ派生系列

SFSeg(2020)

なんとOptical Flowの機構を取り入れたモデルとのこと。
Optical Flowは、動画における隣のフレームの輝度勾配の流れを追って、特徴点がフレーム間でどのように移動したかを予測するものです。
詳しくはいろいろな解説記事をご覧いただければと思います。

SFSeg では、Flow Alignment Moduleと呼ばれるモジュールを組み込みます。
このモジュールと、今までのFeature Pyramid Fusionを組み合わせることで、Backbone がとても小さくても精度が出るようになり、Backbone はResnet18でも精度が出たので、高速化が大きく達成できた、
という記述になっています。

Screen Shot 2022-11-29 at 16.36.42.png

Screen Shot 2022-11-29 at 16.36.48.png

Screen Shot 2022-11-29 at 16.36.55.png

DDRNet(2021/01)

Screen Shot 2022-11-29 at 16.58.59.png

Screen Shot 2022-11-29 at 16.59.05.png

Screen Shot 2022-11-29 at 16.59.12.png

PIDNet(2022/07)

ハイレゾリューションの情報が、セマンティックな意味合いの強いローレゾリューションの情報で上書きされてしまう問題(Overshoot)に着目。
PID制御にアナロジーを見出し、3つのブランチを持つネットワークを構築。

オーバーシュート問題とは、Detail branch (Spatial branch) がContext branch の8倍の大きさを持っており、フュージョンを行うときに物体の境界が周りのピクセル値によってぼやかされてしまい、小さなスケールの物体が圧倒されてしまい、うまくセグメンテーションできない現象のこと。

the output size for detailed branch is 8 times of
context branch in DDRNet (4 times in BiSeNet) and direct
fusion of them will inevitably leads to a phenomenon that
the object boundary are easily corroded by its surrounding
pixels and the small-scale object could be overwhelmed by
its adjacent large objects, namely overshoot in this paper

PID制御をまず理解することでPIDネットでどのような提案がされているか、ということについて理解できます。

Pは現時点と目標の差、Iは時間方向に足し上げた差の積分値、
Dは現時点での変化率を抑える方向の力、
という解釈になっているようです。

​PID​コントローラ​の​ゲイ​ン​は​トライアル​&​エラー​メソッド​により​得​ら​れ​ます。​エンジニアが各ゲインパラメータの重要性を理解すれば、​この​メソッド​は​比較的​簡単​です。​この​メソッド​では、​まず​I​と​D​がゼロに設定され、​ループ​出力​が​変動​する​まで​比例​ゲイ​ン​が​向上​し​ます。​比例​ゲイ​ン​を​向上​させる​と​システム​は​高速​に​なり​ます​が、​システム​が​不安定​な​状態​に​なら​ない​よう​対策​が​必要​となり​ます。​P​が​希望​の​応答​速度​と​なる​よう​設定​さ​れる​と、​積分​項​が​増加​し​て​変動​は​停止​し​ます。​積分​項​により​定常​状態​と​の​誤差​は​減少​し​ます​が、​オーバー​シュート​は​増加​し​ます。​ある程度​の​オーバー​シュート​は​常に​高速​な​システム​に​必要​な​ため、​即座​に​変化​に​反応​する​可能性​が​あり​ます。​統合項は微調整され、​定常​状態​と​の​誤差​を​最小限​に​抑え​ら​れ​ます。​定常​状態​と​の​誤差​を​最小限​に​抑え​た​最適​な​高速​制御​システム​と​なる​よう​P​と​I​が​設定​さ​れる​と、​ループ​が​容認​できる​程度​の​高速​で​設定​点​に​戻る​まで​微分​パラメータ​が​増加​し​続​け​ます。​微分​パラメータ​が​増加​すると​オーバー​シュート​が​減少​し、​安定性​の​ある​高​ゲイ​ン​となり​ます​が、​システム​は​ノイズ​の​影響​を​非常​に​受け​や​すく​なり​ます

Auxiliary Derivative Branch という第3のブランチを提唱し、
それはバウンダリ(つまりピクセルのセマンティクスの変化、微分値)に特化して反応するようなブランチを形成しました。

PID制御を模倣したPIDNetは

  • P: ハイレゾリューションの情報を保持したブランチ
  • I: コンテキスト情報に特化したブランチ
  • D: 高周波数な特徴によりバウンダリーを予測するブランチ

として構成されています。

Screen Shot 2022-11-29 at 18.15.31.png

PはPixel-attention-guided fusion module (Pag)を通して、
Iブランチから必要なセマンティクスを選択的に学習できるようにしている。
ただしOverwelm されることなく。ここはセルフアテンションのような実装になっています。

Screen Shot 2022-11-29 at 18.18.26.png

Boundary-attention-guided fusion module (Bag) を使って、3つのブランチの情報を統合します。

Screen Shot 2022-11-29 at 18.21.32.png

まとめと感想

今回は、セマンティックセグメンテーションタスクにおける近年のAIモデルについて、
いろいろと潮流を理解しながら追いかけてみようとしてみました。

全てを細部まで理解することは難しいですが、画像系AIの基礎知識があれば大体の流れは理解できるはずです。
また、いわゆるAIの知識のみならず、Computer Visonの知識もAIモデルに応用されている様子をみることができ、非常に興味深かったです。
Computer Vison やいろいろな周辺知識もモデル構築のアイディアとして活用され、それらがSoTAを作っているのは非常に素晴らしいことのように感じました。

これからもAIの知識のみならず、いろんな知識をインプットしていくことが大事ですね。

今回はこの辺で。

@kenmaro

45
32
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?