Towards Streaming Perception の解説


こんにちは、高校生の kamikawaです。
機械学習に興味があって勉強中です。特にCV分野に興味があります。

今回は[ECCV2020](https://eccv2020.eu)でBest paperに選ばれた「[Towards Streaming Perception](https://arxiv.org/abs/2005.10420/)」という論文について解説します。

自動運転やVR、ARなど、リアルタイムでのperceptionに興味がある方、ぜひご覧ください。
間違い等あればご指摘お願いします。

[プロジェクトページ](https://www.cs.cmu.edu/~mengtial/proj/streaming/)
[Git Hub](https://github.com/mtli/sAP/)
[YouTube](https://www.youtube.com/watch?v=x6AJnk2ph00&feature=youtu.be/)


##概要


モチベーション：**リアルタイムで認識から再行動までを行うための高速で正確なperceptionの実現**

![スクリーンショット 2020-11-26 17.05.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/5a8c97ab-887b-972b-cb41-82de11097192.png)

* オフラインの評価と実世界への応用との間に矛盾を指摘
* レイテンシと精度を一貫して評価できる指標を提案
* ストリーミング環境下の様々なタスクへ応用できるメタベンチマークを提案
* ストリーミング環境下のタスクで、性能を向上させるための手法を提案




###提案されたベンチマーク

* streaming accuracy

 * レイテンシと精度を一度に評価できる
      * **評価指標を確立**

* pseudo ground truth
 * 高フレームレートかつ高アノテーションレートのデータセットを人の手を使わずに作れる 
      * **データセット不足を解消**
* infinite GPUsシミュレーション
 * モデルの性能を最大化するために必要なGPU数が分かる
     *  **実用化に向けた計算資源に関する知見が得られる**



###提案手法
ストリーミング環境でperceptionの性能を向上させるための汎用的な手法を提案している

* 動的スケジューリング
 * 処理すべきフレームを決定する
     * レイテンシの累積を防ぐ
* 状態予測
 * 物体の将来の位置を予測する
      * レイテンシを補う
* トラッキング
 * 検出器より高速に動作する
     * レイテンシを減らす


##背景

ストリーミング環境下でのperception（YOLOやSSDなど）は難しい

* レイテンシの問題
 * 処理を行っている間に物体が移動してしまう
 * 精度とレイテンシを間にトレードオフがある
* 良い評価指標がない
 * レイテンシと精度のトレードオフの良さを測りたい
* データセットが少ない　
 * 高フレームレートかつ高アノテーションレートのデータセットが欲しい



##従来のCV分野(リアルタイム)の研究
自動運転やVR、ARなどストリーミング環境で高度なperceptionの需要は高まっている

多くの研究：オフライン環境で精度とレイテンシを評価し、トレードオフを指摘
高速な検出器　・・・　精度が低い
高精度な検出器・・・　遅い

オフライン環境で測定された精度とruntime
![スクリーンショット 2020-11-26 16.40.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/d2d2c6e9-a95a-c522-9a2f-b04f31c69136.png)

##この研究
####オフライン環境での評価と実世界での応用との間に矛盾

* オフライン環境　(従来の研究)
 * 一枚のフレームの処理が終わった段階で次のフレームが与えられる
     * **レイテンシが累積しない**
* ストリーミング環境　(実世界での応用)
 * 処理が終了したかどうかに関わらず、次々とフレームが与えられる 
     * **レイテンシが累積する**

**従来の研究のようなオフライン環境での実験や評価には問題がある**

####高度なperceptionを実現するために 
実世界の応用：人間の反応時間(200ms)に匹敵する速さのperceptionが求められる
ストリーミング環境特有の課題 : アルゴリズムが処理を終えるまでに周囲の環境が遷移してしまう
![スクリーンショット 2020-11-26 17.05.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/5a8c97ab-887b-972b-cb41-82de11097192.png)

そのため、周囲の環境を認識・行動するためには、**将来の状態を予測する**ことが必要


##提案ベンチマークの詳細
###streaming accuracy

 * 適切な評価指標を確立
  * 精度とレイテンシを一貫して評価
  * トレードオフの良さを評価できる


|　|速い|遅い|
|:--:|:--:|:--:|
|**正確**|○|△|
|**不正確**|△|×|


**指標の特徴**

||従来の評価|今回の評価|
|:--:|:--:|:--:|
|ground truth | 入力フレームを使用|**現在のフレームを使用**|
|生成された予測 | 入力フレームから生成|入力フレームから生成|
|評価の式|( y<sub>t</sub> , y<sup>^</sup><sub>t</sub> )|( y<sub>t</sub> , y<sup>^</sup><sub>φ(t)</sub> ) |





t : 連続的な時間（i = 1 ~ T）
φ(t<sub>i</sub>) : アルゴリズが最後に予測を出した時間　φ(t<sub>i</sub>) = argmax<sub>j</sub> s<sub>j</sub>  < t<sub>i</sub> 
s<sub>j</sub> : 特定の予測(y<sup>^</sup>)が要求された時間 ( j = 1 ~ N < T)

![スクリーンショット 2020-11-26 17.50.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/e191b94f-c937-031b-5783-ffecd48b6107.png)

L<sub>streaming</sub> : streaming accuracy
L : 評価関数（AP、IoUなど）
y : ground truth　
t : 連続的な時間（ i = 1 ~ T）　
y<sup>^</sup> : 予測
φ(t<sub>i</sub>) = argmax<sub>j</sub> s<sub>j</sub>  < t<sub>i</sub> 
s<sub>j</sub> : 特定の予測(y<sup>^</sup>)が要求された時間 ( j = 1 ~ N < T)


**様々な評価指標(AP,IoUなど)を拡張し、レイテンシと精度を同時評価できる**




###pseudo ground truth
 * 高フレームレートかつ高アノテーションレートのデータセットを人の手を使わずに作れる 
      * 擬似的なground truth を作成する
      * 高精度の評価器([HTC](https://arxiv.org/abs/1901.07518/))がオフライン環境で物体検出を行なった結果を用いる
      * pseudo ground truth によるAPと実際のground truthを用いたAPは相関が高い
         * 相関係数 : 0.9925(正規化済み)
      * 性能評価に用いることができる (今回の性能評価には用いられていない)

  

###infinite GPUsシミュレーション
 * モデルの性能を最大化するために必要なGPU数が分かる
 * 仮想的にGPU資源が無限である状態でシミュレーション
   * 各GPUタスクを別々のデバイス割り振る
 * タスクのパフォーマンスを最大化するために必要なGPUの数が分かる
   * ハードウェア設計に役立つ可能性がある


![スクリーンショット 2020-11-26 17.59.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/ec670ca2-9ce0-1bcc-7a5f-298c4f8e6cf2.png)

左は単一のGPUでの処理：一つのデバイスが複数のGPUタスク(例 : 物体検出、状態予測、トラッキングなど)を行う
右はinfinite GPUsでの処理：一つのデバイスは一つのGPUタスクを行う






##提案手法の詳細


###動的スケジューリング
 * 処理すべきフレームを決定する
     * レイテンシの累積を防ぐ

t : 連続的な時間（i = 1 ~ T）
s<sub>j</sub> : 特定の予測(y<sup>^</sup>)が要求された時間(離散) ( j = 1 ~ N < T)
r : ランタイム =　１フレームを処理するのに必要な時間


![スクリーンショット 2020-11-26 18.13.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/eb1ef379-fb6b-6db9-0e02-ffc8ec796f7a.png)

τ(s+r) < τ(s)ならば　現在のフレームを処理する
τ(s+r) > τ(s)ならば　現在のフレームを処理せず、新しいフレームを待つ

![スクリーンショット 2020-11-27 17.34.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/9d13bcd9-aed5-3120-79ec-d780f02957bd.png)




###状態予測　
 * 物体の将来の状態を予測することで、レイテンシを補う
   * バウンディングボックスの状態遷移をもとに予測
      * 入力 : BBの左上の座標(x,y)、高さ(h)、幅(w)
 * カルマンフィルターによる予測が最も高性能
    * 4~80%の性能上昇を確認(平均で33％上昇)
 * 軽量


![スクリーンショット 2020-11-27 17.54.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/0344dd65-9d63-5ec0-2d3d-9d12bec1f50d.png)

###Streamer(Meta-Detector)
**Streamer(Meta-Detector)** : 動的スケジューリング ＋ 状態予測(Kalman filter)

* レイテンシ、精度に関わらず、様々なモデルに搭載できる
* 同期的な処理が可能になる

![スクリーンショット 2020-11-28 9.32.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/97b4cba1-48a8-d0d5-5630-d2d4992c244b.png)
右は通常のモデル、左はStreamerを取り入れたモデル
通常モデルは、レイテンシによって**非同期的**に予測を出すことしかできない
Streamerを取り入れたモデルは**同期的**に予測を出せる


### トラッキング
 * 検出器より高速に動作する
    * レイテンシを減らすために高速化
         * 以前検出されたオブジェクトのみを追跡
         * 最新の物体の位置を入力とし、領域提案を省略


![スクリーンショット 2020-11-27 18.31.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/61856117-667a-10dc-cd89-e2b9d3f63d62.png)

領域提案(RPNのhead)を省略することで24%ランタイムを削減できる


##実験
データセットはArgoverse-HDを用いた　(詳細は後述)

* 米国の2つの都市からの多様な走行シーンを収録

![スクリーンショット 2020-11-28 12.13.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/6bbd317d-e9e4-34ba-cfe9-4f246ac9bc8d.png)



* フレームレート  : 30FPS
* アノテーション レート : 30FPS
* 人、自転車、自動車、バイク、バス、トラック、交通信号、止まれの標識の８クラス




###ストリーミング環境とオフライン環境の比較

物体検出のみを行う
[HTC](https://arxiv.org/abs/1901.07518/)やMask R-CNN、RetinaNet などのモデルを用いて実験した


**結果**

* **ストリーミング環境ではAPが大幅に低下する**


![スクリーンショット 2020-11-27 17.45.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/e6c17f77-0dc1-fa11-d415-1d521e48ab57.png)

(AP₅₀ , AP₇₅ とは、IOU が 0.5 , 0.7 を閾値としたAP
@の後の数字は入力のスケール
*は前処理にGPUを使用したもの)


* **高速なモデル(3),(4)は性能が低い**

  * ランタイムのベースライン : 33ms = 30FPSのフレーム間隔(1000/30)を達成している
  * フレーム間隔で処理を行っており、レイテンシは０であるが精度が低い


![スクリーンショット 2020-11-28 12.36.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/2c3c036e-74e8-b6ae-ca28-76fbb471a206.png)





![スクリーンショット 2020-11-27 17.47.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/59a11413-726c-a1ec-bde4-da9b3d7aacab.png)



* **入力スケール0.5のMask R-CNN R 50が最高性能**
  * ストリーミング環境ではHTCより性能が高い

![スクリーンショット 2020-11-27 17.47.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/fb9c872a-eb27-3adf-211d-9cd7ced18892.png)


###infinite GPUsでの検証結果

* **infinite GPUsにおいて、複雑な検出器の方が性能が良い**
  * 入力スケールを0.5から0.75、ランタイム約2倍
* **4つのGPUでstreaming accuracy を最大化できる**


![スクリーンショット 2020-11-27 17.48.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/d48162b6-ebfb-c899-dd5e-49a24083ac55.png)



###動的スケジューリングの有効性の検証
物体検出のみを行う
Mask R-CNN R50で動的スケジューリングの有無による性能差を評価する

結果


* **動的スケジューリングを取り入れたアルゴリズムは性能が向上**
   * AP , APւ において1.0 / 2.3　性能が向上


![スクリーンショット 2020-11-27 17.47.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/82599b07-f22a-b24f-39b1-7f6a39bdfe62.png)




###状態予測の有効性の検証


* 状態予測を取り入れたモデルの性能評価
 * 物体検出 ＋ アソシエーション ＋ 状態予測
      * アソシエーション : IOUベースのgreedy matchingを使用
      * 状態予測 : カルマンフィルターを使用


![スクリーンショット 2020-11-27 18.27.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/7a46f462-c720-fdf1-7bcb-beac7f684acf.png)



**結果**

* **状態予測によって性能が向上**　
  * AP比 13.0 : 16.7
* **複雑なアルゴリズムの方が性能が高い**
  * Mask R-CNN(ResNet 50)が最高性能
  * 入力スケール、ランタイムが共に大きい方が高性能


![スクリーンショット 2020-11-27 17.48.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/2e207cfc-ed5e-167a-d782-c164632c692f.png)



###トラッキングの有効性の検証




トラッキングを取り入れたモデルの性能評価

* Mask R-CNN (ResNet 50)を使用 
* VOT2019 Challenge で２位になったモデル[Tracktor](https://arxiv.org/abs/1903.05625/)を使用
  * 物体検出にはFPNを使用
* 2,5,15,30 の固定ストライドで実験
   * (30固定ストライド→検出器を1回実行してからトラッカーを29回実行)





####通常速度のモデルの性能評価
* **通常速度のトラッキングモデルは、アソシエーションに比べて性能が劣る**
 * トラッキングのみ　AP比 12.0 < 16.7
 * ＋状態予測　　　　AP比 13.7 < 16.7



![スクリーンショット 2020-11-27 17.49.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/478f9ad7-6e1c-716c-f531-df904782c49c.png)



####高速化したモデルの性能評価

高速化したトラッキングモデル

* 以前検出されたオブジェクトのみを追跡
    * 最新の物体の位置を入力とし、領域提案（RPN）を実行しない


![スクリーンショット 2020-11-28 22.16.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/6b31a8b8-9904-5856-01d0-b7d5ebb86328.png)


**結果**

* **同精度で２倍に高速化したモデルは、アソシエーションに比べて性能が良い**
  * トラッキング+ 状態予測　　AP比 19.8 > 16.7


![スクリーンショット 2020-11-27 17.49.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/b0ca06be-5c8d-6d89-39a9-b702a179a0c4.png)


##分析と課題
* **ストリーミング環境はオフライン環境より遥かに難しい**
  * 性能差はAP比 20.3 : 38.0
* **汎用的な内部表現によってstreaming accuracyが向上**
  * 動的スケジューリング、トラッキング、状態予測など
* **精度とレイテンシの最適なトレードオフが存在**
  * streaming accuracyの最大化する点が最適なトレードオフ
* **動的スケジューリングの有効性**
  * 場合によっては「処理をしない」ことでレイテンシを最小化できる




##追加情報

###データセットの詳細
Argoverse-HD

* Argoverse 1.1 をストリーミング評価用に拡張したもの
* 米国の2つの都市からの多様な走行シーンを収録
* RGB画像(1920 × 1200)
* 15~30秒の動画が30本　
 * 総フレーム数 : 15k　
* フレームレート : 30FPS
* アノテーション レート : 30FPS
* アノテーションはMSCOCOに従って行なった
* 人、自転車、自動車、バイク、バス、トラック、交通信号、止まれの標識



###End-to-Endに向けた実験
* 本編の実験では、様々なモジュールに分けてを検証した
  * 物体検出、状態予測、トラッキングなど
* 今回の実験では、[F2F](https://arxiv.org/abs/1803.11496/)を使用する
  * 直接、検出結果を出力するモデル

**結果**

* **F2Fはカルマンフィルターより性能が低い**

![スクリーンショット 2020-11-27 18.36.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/4424ec80-c6bc-8de1-35ed-e2ff5a8f31fd.png)


###レイテンシを減らすテクニック
画像の前処理
モチベーション : 画像の前処理におけるレイテンシを減らしたい

* **前処理にCPUを用いるのではなくGPUを用いる**
  * *は前処理にGPUを使用したもの

![スクリーンショット 2020-11-27 18.38.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909214/db3d2338-ddef-11cd-c9de-d2073e556e97.png)


##最後に
図は[論文](https://arxiv.org/abs/2005.10420/)、[プロジェクトページ](https://www.cs.cmu.edu/~mengtial/proj/streaming/)、[Git Hub](https://github.com/mtli/sAP/)、[YouTube](https://www.youtube.com/watch?v=x6AJnk2ph00&feature=youtu.be/)から引用しています。（一部編集を加えた箇所もあります）

記事をご覧いただきありがとうございました。
今後も機械学習の論文について解説していきたいと思いますのでよろしくお願いします。