Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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/
に基づく応用事例の一つとなっています。

Chie.F

April 21, 2018
Tweet

More Decks by Chie.F

Other Decks in Technology

Transcript

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

    View Slide

  2. 2
    自己紹介
    名前:古澤 知英 (ふるさわ ちえ)
    所属:株式会社ドワンゴ ドワンゴメディアヴィレッジ
    最近DMVのツイッターが出来ました!
    出身研究室:早稲田大学 森島繁生研究室
    研究興味:機械学習、画像処理、CG全般
    最近発表した国際会議:
    SIGGRAPH Asia 2017 (DLを使って白黒漫画の自動着色ネタ)
    @Dwango_DMV

    View Slide

  3. 3
    目次
    何を作ったの?
    最初作ったものをお見せします!
    礎となった研究紹介
    大きく2つの論文がキーとなっています!
    作ったものの仕組み
    ライブラリや環境の説明。
    今後の展望
    間に合わなかったこと・最近弊社で発表したアレ・・・

    View Slide

  4. 4
    結果

    View Slide

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

    View Slide

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

    View Slide

  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 より

    View Slide

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

    View Slide

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

    View Slide

  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枚目より

    View Slide

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

    View Slide

  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より

    View Slide

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

    View Slide

  14. 14
    仕組み
    3D姿勢
    (正面)
    3D姿勢
    (真横)
    静止画
    2D姿勢
    Unity
    (C#)
    Unity
    (C#)
    TF-OpenPose
    (Python/
    Tensorflow)
    UAL3D⇔2D
    (Python/
    Chainer)

    View Slide

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

    View Slide

  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

    View Slide

  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)

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  23. 23
    3D関節座標⇒キャラクタポーズ
    Final IKのVRIK
    Unityの有料Assets
    キャラクタの各関節位置をIK(逆運動学)で決定することが可能
    推定結果の各関節の3D座標をモデルの各関節の長さにスケーリング後、
    頭・肘・手首・膝・足首の位置のアンカーにweight=1(=100%)で設定
    現状では無理な角度になることも度々…
    Final IKの各パラメタの調整の度合いや、
    Final IK以外でのやり方(FKの方がいい等)知見をお持ちの方に
    ご教授いただきたいです…
    スケーリング
    スケーリング後の各関節
    位置をアンカーに

    View Slide

  24. 24
    今後の展望
    3D関節座標⇒キャラクタポーズの計算の検討
    現在、Final IKのVRIKを用いている
    指や顔など細かな関節のシンクロ
    Final IKで出来るはずで、未着手
    OpenPoseの精度の改善
    モデルをThinでないモデルにすれば、本家と同じ精度で2D姿勢推定
    が可能であることまでは検証済み
    端末のスペック上、計算処理の工夫が必要
    新しく公開されたVRMとの統合
    https://www.phileweb.com/news/d-av/201804/16/43769.html

    View Slide

  25. ご清聴ありがとうございました。

    View Slide