画像処理
MachineLearning
DeepLearning

SimGAN: 機械学習の学習データが無いときに生成データをリアルっぽく加工して見せると精度が上がる話

機械学習の学習データが無いときに生成データをリアルっぽく加工して見せると精度が上がる話です。
Appleから出された論文で、CVPR2017でべストペーパーを受賞しています。

Reference

文中の図表は論文より引用しています。

この記事は、Wantedlyの勉強会で取り上げられた論文・技術をまとめたものです。
2018年に読んだ機械学習系論文・技術まとめ at Wantedly Advent Calendar 2018 - Qiita

雑なまとめ

  • 機械学習でデータ作るのはマジで大変
  • →人工データを作ってそれから学習すればいいじゃん?
  • →作ってやってみたけど偽物っぽいデータに過学習して精度上がらん
  • →偽物っぽいのをベースに、GANで本物と見分けつかないの作ったらいいじゃん?
  • →精度上がった 🎉

モチベーション

機械学習・人工知能では「データは石油」という言葉があります。「使うためには精製が必要」、「加工して様々に使える」、「あるところには大量にあるけど無いところには無い」ところが似ていると言われています。

巨大企業でもないと大量に独自のデータは持っていません。そんな状況でも先人たちはデータが無い状況からなんとか学習する方法を見出してきました。
その一つが、生成データによる機械学習です。文字通り、学習データを生成してそれを学習データとして使うというアイディアです。

このアイディア自体は前からあるものですが、生成データはリアルさに欠けるという欠点があります。
この論文のモチベーションは、「大量の正解データがなくても、生成データからGANを使ってリアルと見分けつかないリアルっぽいデータを作って精度を上げたい。」というものです。

image.png

Eye gaze estimation

実際生成データが使えるタスクは限られています。正解データからデータが作れる必要があるのでシミュレータや何かしらの生成モデルが必要です。
この論文では、「眼球の画像」から視線の方向をあてるタスクに生成データを使っています。

眼球の画像と視線の方向の対応データはEye Trackerが必要なので大量の人にやってもらうのは機器と時間がかかりコストがかかります。
そのため3Dシミュレーション上であるポイントを見ている人間の顔モデルを作り、それを2Dにレンダリングしたら無限にデータが作れそうです。
しかし、シミュレーション画像では様々な人間の目の形状やノイズなどの「本物っぽさ」が失われてしまいます(沢山の人間の目のシミュレーション画像を作るのも大変そうです)。

Proposed Method

  • GANと同じように、RefinerとDescriminatorがいる
  • Refinerは人工的に生成された画像を受け取って、リアルっぽい画像を生成する
  • Descriminatorは、本物かどうかを判定する。(普通のGANのdescriminatorと同じ)
  • Generatorのロス関数に、「入力のピクセルをあまり変えない」項が追加されている
  • Descriminatorに入力するバッチにGenerator のHistoryを入れる工夫がある
    • 過去のGeneratorから生成された画像をシャッフルして入れることで、ロバストになったと報告されている image.png

Result

2017年の精度でState-of-the-art(そのときの一番良い精度)を達成しました(表の一番下)。
image.png

感想

大量の正解データを作らなくても教師あり機械学習を実現するという論文の目指すところが好きなところです。
この枠組自体は他でも使えそうですね。