## 1. プロジェクト概要
教師あり学習において、学習データセットの作成はコストが大きい。また、著作権や被写体の個人情報など法律に関わる問題も無視できない。本プロジェクトでは学習データセットをコンピューター・グラフィックス(CG)を用いて生成することで人手によるアノテーションコストを排除し、正確で大量の学習データをユーザーの目的に合わせて作成することを可能にした。
## 2. チーム情報
1. 私
- データセット生成モジュールの開発
- 生成したデータセットを使った物体検出ネットワークのトレーニング
- 解析ツールの開発および性能評価
2. プロジェクトリーダー
- クライアントとの調整
- 進捗管理・方針決定
- 成果の発表、報告書の作成
3. クライアント
- 計画立案・予算執行
- データの提供
- 意見・要望
## 3. 開発・実装内容
### 3.1. データセット生成モジュールの開発
#### 概要
CGの人物モデルにモーションを付与し、ヴァーチャルカメラで撮影する。出力として画像(動画)とCOCO形式のアノテーションファイル(人物のバウンディングボックスとセグメンテーション等)を生成する。
ユーザーは登録された人物モデルと基本モーション(歩く・走る・跳ぶ等)、シーン(背景)などを指定するだけで自動的にデータセットを作れる。
#### 開発・実装
- 体型・人種・服装などを調整してCGモデルを作れる[MakeHuman](http://www.makehumancommunity.org/)を使用して数十パターンの人物モデルを作成
- モーションデータは[CMU Motion Capture Database](http://mocap.cs.cmu.edu/)等の公開されているものを利用
- CGの撮影はBlenderを採用。オブジェクトやカメラの配置、レンダリング等の操作をPythonで記述
- 前景(人物)と背景(シーン)を合成するモジュールを実装
- 人物モデルからバウンディングボックスとセグメンテーション情報を計算しアノテーションファイル(COCO形式)をエクスポートするモジュールをPythonで実装
#### 課題・問題点
- Blender for Pythonの習熟
→Blenderの情報はGUIを使った解説が多く、Pythonからの操作は公式ドキュメントを含め資料が少なかったため実際にコードを実行し動作を確認しながら機能を実装していった。
- 実カメラの再現
→実際のカメラはレンズに歪みが生じるため、Blenderでレンズ歪みや色収差を再現した。
- 人物モデルのボーン(born, armature)とモーションの対応付け(retarget)
→人物モデルにモーションを自動的に付与するために既存のアドオンをメンテナンスしてモジュールに組み込んだ。Blenderのアドオンのソースコードを読むことでBlender for Pythonの習熟にも役に立った。
### 3.2. 生成したデータセットを使った物体検出ネットワークのトレーニング
#### 概要
既存の物体検出ネットワークを使ってトレーニング(ファインチューニング)を行う。本プロジェクトは効率的なデータセットの生成が目的であるため、ネットワークのデザインやハイパーパラメーター調整には深入りせずにデータセット生に関わる部分の最適化を中心に行う。
#### 開発・実装
- [MMDetection](https://github.com/open-mmlab/mmdetection)を利用した物体検出ネットワークのトレーニング(ファインチューニング)
-トレーニングとテストのサイクルを高速化するため大型計算を利用
- 大規模データセット(COCO2017)と実環境を想定したデータセットで性能評価
#### 課題・問題点
- MMDetectionを使ったネットワークのトレーニング
→MMDetectionはコンフィグレーションファイルでコスト関数の選択や学習計画の変更を容易にできる。ドキュメントとソースコードを参考にして本プロジェクトに最適な学習パラメーターを選定した。
### 3.3. 解析ツールの作成および性能評価
#### 概要
データセット生成時のどのパラメーターが最終的な性能にどう影響したかを分析した。生成したデータセットでトレーニング(ファインチューニング)した場合と既存のデータセットでトレーニングした場合を比較して、本モジュールで生成されるデータセットの特性やバイアスを評価した。
#### 開発・実装
- 学習モデルの性能でデータセットを評価
- 物体検出のオーソドックスな指標Average Precision (AP) や Average Recall (AR) 等を比較してパラメーターを最適化
- 上記指標以外にも本プロジェクト応じた指標や可視化ツールを作成
#### 課題・問題点
- 既存の指標では見えにくい性能向上の定量化
→定性的には性能向上が認められるが、AP/AR等の定量的な指標では性能向上が見えにくかった。指標を計算するまでの過程を可視化することでグラフの形などの情報もモデルの性能を測る材料にした。たとえば、APを計算するときに使用するPrecision-Recallカーブをプロットして同じAPでもグラフの形で定性的な性能の違いを表現できることを示した。