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. 2.

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

    森島繁生研究室 研究興味:機械学習、画像処理、CG全般 最近発表した国際会議: SIGGRAPH Asia 2017 (DLを使って白黒漫画の自動着色ネタ) @Dwango_DMV
  2. 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 より
  3. 8.

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

    我々のアプリケーションで用いている技術で使うモデルでは、 3Dポーズのデータセットを一切必要としません!
  4. 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枚目より
  5. 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より
  6. 14.

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

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

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

    (C#) TF-OpenPose (Python/ Tensorflow) UAL3D⇔2D (Python/ Chainer) UAL3D⇔2D (C#)
  8. 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
  9. 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)
  10. 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
  11. 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
  12. 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