Pro Yearly is on sale from $80 to $50! »

Androidだけでもアリシアちゃんになれちゃうアプリを作った話@第45回コンピュータビジョン勉強会

Be02a5ccde5138d3edcf47bdda7c5f75?s=47 Chie.F
April 21, 2018

 Androidだけでもアリシアちゃんになれちゃうアプリを作った話@第45回コンピュータビジョン勉強会

DMVことDwango Media Villageの古澤です。
Twitter: https://twitter.com/Dwango_DMV
HP:https://dmv.nico

第45回 コンピュータビジョン勉強会にて発表した
『Androidだけでもアリシアちゃんになれちゃうアプリを作った話』
に関するスライドです。
このアプリケーションは、DMVによる研究
https://dmv.nico/ja/casestudy/3dpose_gan/
に基づく応用事例の一つとなっています。

Be02a5ccde5138d3edcf47bdda7c5f75?s=128

Chie.F

April 21, 2018
Tweet

Transcript

  1. Androidだけでもアリシアちゃんになれちゃう アプリを作った話 @第45回 コンピュータビジョン勉強会 古澤 知英 ㈱ドワンゴ Dwango Media Village

  2. 2 自己紹介 名前:古澤 知英 (ふるさわ ちえ) 所属:株式会社ドワンゴ ドワンゴメディアヴィレッジ 最近DMVのツイッターが出来ました! 出身研究室:早稲田大学

    森島繁生研究室 研究興味:機械学習、画像処理、CG全般 最近発表した国際会議: SIGGRAPH Asia 2017 (DLを使って白黒漫画の自動着色ネタ) @Dwango_DMV
  3. 3 目次 何を作ったの? 最初作ったものをお見せします! 礎となった研究紹介 大きく2つの論文がキーとなっています! 作ったものの仕組み ライブラリや環境の説明。 今後の展望 間に合わなかったこと・最近弊社で発表したアレ・・・

  4. 4 結果

  5. 5 作ったもの モバイル端末上で動く 画像(2D)を入力にポーズをキャラクタに追従(3D)させるアプリ 3D姿勢 (正面) 3D姿勢 (真横) 静止画 2D姿勢

  6. 6 前提知識1 キャラクタのポーズを決定するには、 3Dの各関節座標が必要 ターゲットとなる3D関節位置を決めるために、 モーションキャプチャ, Kinect・・・etcがあった 静止画から3D関節位置を決めることが出来たら、 特別な機械いらずで キャラクタを自在に操ることができる、ということ!

  7. 7 前提知識2 機械いらずに推定する方法として、DLで3Dポーズを推定する研究がなされてきた。 学習で3Dポーズを得るためには、本当につい最近まで 2D⇔3Dの正解ペアが必要だった(過去形!!) つい最近の研究① (SIGGRAPH 2017) つい最近の研究② (ICCV

    2017) いずれも3Dポーズデータセットを用いて訓練を行っている。 VNect: Real-time 3D Human Pose Estimation with a Single RGB Camera DUSHYANT MEHTA et al,. Fig.1 より Towards 3D Human Pose Estimation in the Wild: a Weakly-supervised Approach Xingyi Zhou et al,. Fig.1 より
  8. 8 作ったもの モバイル端末上で動く 画像(2D)を入力にポーズをキャラクタに追従(3D)させるアプリ 静止画 2D姿勢 3D姿勢 (正面) 3D姿勢 (真横)

    我々のアプリケーションで用いている技術で使うモデルでは、 3Dポーズのデータセットを一切必要としません!
  9. 9 作ったもの モバイル端末上で動く 画像(2D)を入力にポーズをキャラクタに追従(3D)させるアプリ 3D姿勢 (正面) 3D姿勢 (真横) 静止画 2D姿勢

  10. 10 研究紹介2 Realtime Multi-Person 2D Pose Estimation using Part Affinity

    Fields Zhe Cao, Tomas Simon, Shih-En Wei, Yaser Sheikh 静止画から人物の2Dポーズを推定する研究 各関節の点としてふさわしい位置の候補の推定(Parts Detection)と、 連結することの出来る関節の結び(Part-to-Part Association)を推定を考慮 Presentation Slides http://image- net.org/challenges/talks/2016/Multi- person%20pose%20estimation-CMU.pdf 50枚目より
  11. 11 作ったもの モバイル端末上で動く 画像(2D)を入力にポーズをキャラクタに追従(3D)させるアプリ 静止画 2D姿勢 3D姿勢 (正面) 3D姿勢 (真横)

  12. 12 研究紹介2 Unsupervised Adversarial Learning of 3D Human Pose from

    2D Joint Locations Yasunori Kudo, Keisuke Ogaki, Yusuke Matsui, Yuri Odagiri (DMV のメンバーが発表した最新の研究なんです!!) 3Dポーズデータセットを用いずに 2Dポーズから3Dポーズを推定する研究 Adversarialなネットワークを構築し、Generatorによって3Dポーズを推定 推定された3Dポーズを再度2Dに射影し、生成された2Dポーズか、2Dデータセットに 存在するポーズであるかを識別するDiscriminatorを用い、学習する nico-opendata プロジェクトページ https://nico-opendata.jp/ja/casestudy/3dpose_gan/index.htmlより
  13. 13 作ったもの モバイル端末上で動く 画像(2D)を入力にポーズをキャラクタに追従(3D)させるアプリ 3D姿勢 (正面) 3D姿勢 (真横) 静止画 2D姿勢

  14. 14 仕組み 3D姿勢 (正面) 3D姿勢 (真横) 静止画 2D姿勢 Unity (C#)

    Unity (C#) TF-OpenPose (Python/ Tensorflow) UAL3D⇔2D (Python/ Chainer)
  15. 15 仕組み TF-OpenPose (C#) UAL3D⇔2D (Python/ Tensorflow) Unity (C#) Unity

    (C#) TF-OpenPose (Python/ Tensorflow) UAL3D⇔2D (Python/ Chainer) UAL3D⇔2D (C#)
  16. 16 仕組み TF-OpenPose (C#) UAL3D⇔2D (Python/ Tensorflow) Unity (C#) Unity

    (C#) TF-OpenPose (Python/ Tensorflow) UAL3D⇔2D (Python/ Chainer) UAL3D⇔2D (C#) ONNX
  17. 17 ONNX(Open Neural Network Exchange) Deep Learningモデルを表現するためのフォーマット Tensorflow, Chainer, MXNet,

    Caffe2など様々なフレームワークがあるが、各フレームワークがこのONNXと いうフォーマットを介すことでモデルの保存・読み込みすることが可能になる。 インストール方法 今回の場合、ChainerとTensorflowを行き来したいので、二つのONNXが必要。 pip install onnx-chainerとpip install onnx-tfでOK 変換(Chainer⇒ONNX) ただしL.Linearが使えないのでL.Convolution2Dに 書き換える必要がある。 _pos2DTfGraph = new TFGraph(); TextAsset asset = Resources.Load("Models/graph_opt") as TextAsset; Stream s = new MemoryStream(asset.bytes); BinaryReader br = new BinaryReader(s); var model = br.ReadBytes((int) br.BaseStream.Length); _pos2DTfGraph.Import(model, ""); using (var session = new TFSession(_pos2DTfGraph)) { var result = output[0].GetValue() as float[,,,]; var runner = session.GetRunner(); runner.AddInput(_pos2DTfGraph["image"][0], tensor); runner.Fetch(_pos2DTfGraph["Openpose/concat_stage7"][0]); var output = runner.Run(); } .onnxファイルを.byteに拡張子を変更する必要がある。 読み込み(ONNX⇒Tensorflow)
  18. 18 仕組み TF-OpenPose (C#) UAL3D⇔2D (Python/ Tensorflow) Unity (C#) Unity

    (C#) TF-OpenPose (Python/ Tensorflow) UAL3D⇔2D (Python/ Chainer) UAL3D⇔2D (C#) ONNX
  19. 19 仕組み TF-OpenPose (C#) UAL3D⇔2D (Python/ Tensorflow) Unity (C#) Unity

    (C#) TF-OpenPose (Python/ Tensorflow) UAL3D⇔2D (Python/ Chainer) UAL3D⇔2D (C#) TensorflowSharp ONNX TensorflowSharp
  20. TensoflowSharp C#でTensorflowを使えるようにするためのライブラリ。 ただし、Androidで動かすためには、Android用のTensoflowSharp用のdllをビルドする必要がある ⇒ ML-agents使えば、ビルドせずともバイナリが含まれている ⇒モバイル端末上で動かすためにはML-Agentをインストールするのが手っ取り速い ML-Agentとは Unity上で機械学習を行うために必要なライブラリが揃ったTensoflowSharp用のラッパー ML-Agentのインストール方法 ML-AgentsNoPlugin.unitypackageをダウンロード後、ダブルクリックでプロジェクトにインポート

    (今はインストール方変わってるっぽい) TensoflowSharp使い方 using TensorFlow; を加えたら基本的にはTensorflowと同じ 20
  21. 21 仕組み TF-OpenPose (C#) UAL3D⇔2D (Python/ Tensorflow) Unity (C#) Unity

    (C#) TF-OpenPose (Python/ Tensorflow) UAL3D⇔2D (Python/ Chainer) UAL3D⇔2D (C#) TensorflowSharp ONNX TensorflowSharp
  22. 22 今後の展望 3D関節座標⇒キャラクタポーズの計算の検討 現在、Final IKのVRIKを用いている OpenPoseの精度の改善 モデルをThinでないモデルにすれば、本家と同じ精度で2D姿勢推定 が可能であることまでは検証済み 端末のスペック上、計算処理の工夫が必要 新しく公開されたVRMとの統合

    https://www.phileweb.com/news/d-av/201804/16/43769.html
  23. 23 3D関節座標⇒キャラクタポーズ Final IKのVRIK Unityの有料Assets キャラクタの各関節位置をIK(逆運動学)で決定することが可能 推定結果の各関節の3D座標をモデルの各関節の長さにスケーリング後、 頭・肘・手首・膝・足首の位置のアンカーにweight=1(=100%)で設定 現状では無理な角度になることも度々… Final

    IKの各パラメタの調整の度合いや、 Final IK以外でのやり方(FKの方がいい等)知見をお持ちの方に ご教授いただきたいです… スケーリング スケーリング後の各関節 位置をアンカーに
  24. 24 今後の展望 3D関節座標⇒キャラクタポーズの計算の検討 現在、Final IKのVRIKを用いている 指や顔など細かな関節のシンクロ Final IKで出来るはずで、未着手 OpenPoseの精度の改善 モデルをThinでないモデルにすれば、本家と同じ精度で2D姿勢推定

    が可能であることまでは検証済み 端末のスペック上、計算処理の工夫が必要 新しく公開されたVRMとの統合 https://www.phileweb.com/news/d-av/201804/16/43769.html
  25. ご清聴ありがとうございました。