参考
論文の概要
動画の活用への期待が高まっている?
動画のボリュームが増し、分析者が動画分析に興味を持っている。
- 交通meter設定の計画、都市計画。
- 車の行き交うのを観測し、台数を算出する
- 自動車会社
- ペデストリアンの感想? ★要確認
これらを人手で確認するのは費用対効果が悪い。
既存手法としては、物体検知手法が挙げられる。
課題感
深層学習を使ったビジュアルデータの処理において、 GPUを使ったとしても高いfpsでの実時間処理が難しい。 state-of-artな物体検知手法Mask R-CNNですら、3fpsである。
またそれらの処理を実装するときには低レベルのライブラリ(例:OpenCV、Caffe2、Detectron)を使って 複雑な実装を施さないといけない。
なお、ビデオ処理の最適化の既存の研究はあるが、 それらは単一の機能を最適化するものである。 BlazeItは、Declarativeなクエリ言語を使って処理を記述し、さらに 最適化された処理のパイプラインを生成する。
BlazeItの構成
- FrameQL
- 最適化と実行エンジン
- Aggregation
- 物体検知を行うサンプリングレートを指定可能
- 特化したNNを使う
- control variateを使う ★要確認
- Scrubbing
- 稀に登場する物体を効率的に検知するため、 特化したNNのconfidence scoreを使う。
- サンプリングにバイアスをかける
- Selection
- クエリの内容に応じていくつかのフィルタリングを組み合わせる
- NoScopeラベルベース、コンテンツベース、スキップ(サブサンプリング)、 クロッピング
- Aggregation
ユースケース
BlazeItは探索的なクエリに注力。 ★重要
- aggregate: 車の数を数える、など
- 探す: 動画の中で鳥が沢山飛んでいる瞬間を探す、など
特に動画が多く、全部に対して物体検知を行うのは非現実的なケースが適切。
ただし一部のデータに関しては、学習データとしてラベル付けされていることを前提とする。 ★重要
具体例:
- 都市計画
- 交通状況の観測と計画
- 例えばバスX台、車Y台がいるタイミングを見つける、など
- 自動運転
- 黄色信号時の状況把握
- 例えば黄色信号で通行者がX人いるタイミングを見つける、など
- ストア計画
- 店舗を区分けし、どの商品が人気なのか人の動向から把握する
- 鳥類の研究者
- 餌やりの状況把握
システム概要
設定
設定可能なコンポーネントは以下の通り。
- 物体検知
- フレーム跨りの物体検知
- UDF
例えばフレーム跨りで物体を検知するときに、車のナンバープレートを使う、など 独自のロジックの差し込みが可能。
フィルタ
BlazeItのフィルタは確率的動作。 特化されたNNは、すべてのフレームにおいて精度が高いわけではない。 そこで、オプティマイザはエラーレートを参考にしつつプランを立てる。
特化NN
大きなNNの代わりに用いることができる単純化されたNN。 高速な計算が特徴。 既存研究ではバイナリ検知が主だったが、BlazeItの研究では カウントや多クラス分類に発展させた。
フィルタのブートストラップ
少量のラベル付け済みデータを用いる。
現時点での制約
- モデルドリフト:動画の傾向が途中で変わる場合、モデルの再トレーニングが必要
- ラベル付け済みデータセット:最初に特化NNをトレーニングするためのデータが必要
- 物体検知が物体検知手法に依存:もし特別なことをさせたいならUDFを使用
FrameQL
ビデオを関係とみなし、selection、projection、aggregation(など関係に対するオペレーション)を可能とする。 テーブルのようなスキーマを提供することで、背景となる深層学習等の技術の専門家である必要なく、SQLが分かれば処理を記述可能とする。 また物体検知やフレーム間でのトラッキングロジックは、ユーザが独自のものを指定可能。 BlazeItはそれに応じて、スキーマを選択する。
シンタックスシュガーがあるが、それはBlinkDBと同じようなもののようだ。 ※BlinkDB由来、ということでUCBの流れを改めて感じる…
FrameQLのスキーマ
- timestamp: オブジェクトのタイムスタンプ
- class: オブジェクトタイプ(車、バス、など)
- mask: オブジェクトの場所を表すポリゴン
- trackid: 時間をまたいでオブジェクトを追跡するID
- content: ポリゴンの中のピクセル
- features: 物体検知手法により出力された特徴
FCOUNT
フレーム内に現れるオブジェクトの出現割合から算出される出現率?
いくつかの例
論文上はいくつかのFrameQLの例が載っている。
クエリ実行の概要
BlazeItにはFrameQLに基づいて処理を実行する際に最適化が行われる。 例えば、物体検知は計算コストが高いので、できるだけ減らそうとする。
aggregation、scrubbing、content-based selectionに関する最適化。
aggregationの最適化
最適化の方向性は以下の3点
- トラディショナルなAQP
- 特化NNを用いて書き換え
- 特化NNを用いたControl Variate
BlazeItは最初に最適化の種類を特定する。
まず学習データが十分にあるかどうか。もしなければAQPを用いる。 またアダプティブなサンプリング手法も用いる。(例: オンラインアグリゲーション、BlinkDB)
十分にデータがあれば特化NNを用いる。
サンプリングについて補足
所定の(詳しくは論文参照)サンプル数から始め、 所定の基準に達するまでサンプル数を増やしていく。
Control Variateについて補足
Control Variateについては、 Control Variateについての解説記事 などを参照。
Optimizing Scrubbing Queriesについての補足
分析者はレアなシーンこそ検索したくなるものだが、 そうするとすべてのフレームに対し、物体検知をしないといけない。(そしてそれは遅い)
「レアイベントシミュレーション」と特化NNを組み合わせる。
複数の対象(例:バスと車)を検知する特化NNを それぞれ 用いる。 もし「バス1台、車3台」のような条件の時にはアンドをとって用いる。
コンテントベースのSelection
フィルタを使って検知処理を動かす前にフィルタする。 ラベルベース、コンテントベース、テンポラル、スペーシャル。
BlazeItはクエリからどのフィルタを使うべきかを推測する。 またユーザの期待するフレーム数に応じて、サンプリングレートを変える。
実装
既存のプロダクトを活用して作られている箇所とスクラッチで実装した箇所があるようだ。
- コントロールプレーンはPython
- NNではないフィルタはC++
- PyToarchを学習や評価に利用
- 物体検知にはFGFAを利用
- MXNet v1.2、Mask R-CNNを利用
- ビデオはOpenCVで走査
その他調べておきたいこと
- NoScope
- 物体検知関係の研究(YOLOv2、MS-COCO、Mask R-CNN、…)