Info
- タイトル:Unity Perception: Generate Synthetic Data for Computer Vision
- 著者:Steve Borkman, Adam Crespi, Saurav Dhakad, Sujoy Ganguly, Jonathan Hogins, You-Cyuan Jhang, Mohsen Kamalzadeh, Bowen Li, Steven Leal, Pete Parisi, Cesar Romero, Wesley Smith, Alex Thaman, Samuel Warren, Nupur Yadav
- 論文:https://arxiv.org/abs/2107.04259
- プロジェクトページ:https://github.com/Unity-Technologies/com.unity.perception
概要
- Unity Editorとエンジンコンポーネントを拡張し、アノテーションを施したデータセットを生成するツールを紹介する。
- 拡張可能なランダム化フレームワークを提供する。データセットにバリエーションを持たせるためのランダム化のシミュレーションパラメータを簡単に設定することができる。
背景
- ディープラーニングのタスクが複雑になるにつれてアノテーションも複雑になり、レビューが必要になるなどデータ構築コストは増大していく。
- EUのGDPRやカリフォルニアのCCPAなど、プライバシー保護関係の法整備により、ユーザーのデータを使用することが難しくなっている。
- バーチャルなデータ生成環境があれば、アノテーションコストを削減でき、プライバシーの問題も発生しない。
手法
Perceptionではボックス、セグメンテーション、キーポイントのアノテーションを利用可能。フレームワークに沿ってスクリプトを書くことで、機能を拡張することもできる。
データの生成はシナリオと呼ばれるエンティティとランダマイザーと呼ばれるエンティティで構成される。ランダマイザーはランダム化のための環境パラメータを持ち、物体の配置や物体の回転等を生成する。シナリオは全てのランダマイザーを順番に実行する制御の役割を持つ。シナリオとランダマイザーはベースのクラスを継承して自分で拡張することができる。
データ生成はローカルコンピュータのUnity Editorでも実行できるし、クラウド計算環境サービスであるUnity Simulationでも実行できる。クラウド環境は大規模な並列計算環境で、大規模データセットを構築に向いている。並列計算ではあるが、決定論的なランダムサンプリングとランダム化の順序付けにより、生成されたデータの再現性が担保されている。
Perceptionパッケージに加えて、DatasetInsights3という付属のPythonパッケージが提供されている。データセットの統計情報の生成と可視化が可能。
サンプルプロジェクト
プロジェクトSynthDetを行った。63種類の日用品の物体検出で、人工データと実データを使用して比較を行った。モデルはFaster-RCNNを使用した。
データセット
背景には位置・回転・色相・テクスチャをランダムに決定したシンプル形状の物体を配置した。前景には位置・回転・スケールをランダムに決定した日用品オブジェクトを配置した。前景のさらに前の位置には、少数のオブジェクトを配置してオクルージョンが発生するにようにした。また、照明にもランダム要素を加え、出力画像にはblurなどもランダムに加えた。
人工データは400,000枚、実データは1,267枚用意した。
学習戦略
ResNet50(pretrained ImageNet)をbackboneとして、3つの学習戦略を比較した。
- 実データのみ学習に使用。実データを6:2:2=760:253:254で分け、それぞれ学習、バリデーション、テストに使用する。ミニバッチは8で、100epoch学習。
- 人工データのみ学習に使用。90%を学習、残り10%をバリデーションに使用し、テストは戦略1と同じ。ミニバッチは4で、GPUを8個用意し10epoch学習。
- 戦略2で学習したモデルを、760個からサンプルした実データでファインチューニング。ミニバッチは8で、30epoch学習。
評価
それぞれ5回繰り返して平均をとって精度を算出。表3左のmAPはIoU[0.5:0.95]の平均であることに注意。
また、人工データを増やしていった場合の精度比較も実施。
まとめ・感想
- 人工データで学習後、実データでのファインチューニングは必須に思える。
- 人口データを増やしすぎてもあまり効果はなさそう。実データが少ないとむしろ悪影響?
- ランダマイザーの拡張自体は容易だが、そもそもUnityに癖があって初心者はむしろUnityにとっつきにくい。