漢なら, 単一画像から顔認識したり顔メッシュを復元したりをディープラーニングでやりたいですね!
やりましょう!
DenseReg
DenseReg: Fully Convolutional Dense Shape Regression In-the-Wild
https://arxiv.org/abs/1612.01202
顔のセグメンテーション(目, 鼻, 眉とか)と形状推定ができます.
Semantic Image Segmentation 用に DeepLab http://liangchiehchen.com/projects/DeepLab.html を使っています.
独自 python caffe layer を使っているので, コンパイルするときには注意です!
$ make pycaffe
として python caffe module をビルドすることも忘れずに.
ねんがんの DenseReg: Fully Convolutional Dense Shape Regression In-the-Wild の実行に成功したぞ!!! 😻😻😻😻💪💪💪 pic.twitter.com/QcBrj1JyRO
— Syoyo Fujita (@syoyo) June 7, 2017
DenseReg すごい pic.twitter.com/FzULKzSmLe
— Syoyo Fujita (@syoyo) June 7, 2017
時代は DenseReg pic.twitter.com/bdl3UArwCi
— Syoyo Fujita (@syoyo) June 7, 2017
pix2vertex
Unrestricted Facial Geometry Reconstruction Using Image-to-Image Translation
pix2vertex では, image space で最近流行りの Image-to-Image 変換でまずは顔の position と depth を推定します. その後 non-rigid ICP でテンプレート顔メッシュをフィッティングし, そのあとより詳細な法線を復元することになるのですが, そのためのプログラム postprocess.p
が, まと⭐️らぼのバイナリプログラムっぽくて, 誰でも試せなくてほんとうにかなしい...
まと⭐️らぼ つかうのは本当にやめてほしいですね!
頑張って mattorch とか使わずに lua だけで動かしました(position と depth 推定のみ). image 読み込み関連は An Image toolbox for Torch https://github.com/torch/image を使いました.
ねんがんの pix2vertex の実行に まと⭐︎らぼを使わずに成功したぞ!!! しかし実際はここから non-rigid ICP でメッシュ作らなければなりません. 優秀な ICP 若人を合法的なあらゆるどんな手段を使ってでも探し出し ICP お仕事発注したい. 日々精進. pic.twitter.com/V7a1rKHmp8
— Syoyo Fujita (@syoyo) July 5, 2017
たいせつな pix2vertex pic.twitter.com/pEX3LiiWX9
— Syoyo Fujita (@syoyo) July 6, 2017
時代は pix2vertex pic.twitter.com/iLyRoI8VHW
— Syoyo Fujita (@syoyo) July 6, 2017
なんか position の推定がおかしいようなきもしますが, non-ridig ICP でテンプレートメッシュをフィッティングするプログラムを書かないことにはこれ以上進められないので, あまり深追いしないことにします.
Deep Alignment Network(DAN)
Deep Alignment Network: A convolutional neural network for robust face alignment
https://arxiv.org/abs/1706.01789
Facial landmark 検出します. 横顔とかでも強い.
最近流行りの顔ライブラリ Menpo http://www.menpo.org/ 使っているっぽい?
python ライブラリ群の依存関係が面倒なので, virtualenv とかで DAN 専用の python 環境を作ったほうがよいかもしれません(が, 私はやり方がよくわからないのでとりあえず miniconda2 https://conda.io/miniconda.html でなんとか無理やりセットアップしました)
ねんがんの Deep Alignment Network の実行に 成功したぞ!!!! これを機運に, Deep Alignment Network を C++ で書き直してくれる, 下北沢近辺の優秀な機械学習若人を探し出し, 機械学習お仕事発注したい. 日々精進あるのみですね. pic.twitter.com/g2vMHplQ4H
— Syoyo Fujita (@syoyo) July 7, 2017
時代は Deep Alignment Network pic.twitter.com/XoCgOeK76M
— Syoyo Fujita (@syoyo) July 7, 2017
Deep Alignment Network があれば勝てる!!! pic.twitter.com/cTX7prtFW5
— Syoyo Fujita (@syoyo) July 7, 2017
Regressing Robust and Discriminative 3D Morphable Models with a very Deep Neural Network(3DMM_CNN)
3DMM(3D Morphable Models)をで 3D 形状とテクスチャを復元します.
3DMM を CNN でいい感じにしました.
依存関係の問題で, dlib や opencv は conda で入れましたが, caffe のビルドでは boost は conda で入れた dlib/opencv を見るようにしつつも protobuf は apt で入れるみたいなことをしないとうまく動きませんでした.
優秀な若人さまでしたら dlib, opencv も自前ビルドしたほうが問題が少ないかもしれません.
また, caffe python binding で, モデルの読み込みのときにエラーがでますので, 以下のように std::string
を char *
で置き換える fix が必要になります.
(そもそも std::string
なシグネチャは python 側から呼べなそうな気もしますが...?)
ねんがんの Regressing Robust and Discriminative 3D Morphable Models
— Syoyo Fujita (@syoyo) July 13, 2017
with a very Deep Neural Network(3dmm_cnn) の実行に 成功したぞ!!!! 😍😍😍😍😍😍💪💪💪💪💪💪 pic.twitter.com/WNE4lPzYzq
3dmm_cnn すごい... これは勝てます, ありがとうございます. pic.twitter.com/WxspYR9ufu
— Syoyo Fujita (@syoyo) July 13, 2017
おまけ
InverseFaceNet: Deep Single-Shot Inverse Face Rendering From A Single Image
https://arxiv.org/abs/1703.10956
実装がないですが, 期待なアルゴリズムですね!
学習したい
今回は forward(推論) を実行しただけです.
学習をするにはどうするか? 昨今は顔のデータセットを CG で用意するのが流行りつつあります(depth などの真値を取れるので)
照明環境をを変えて学習用の顔のレンダリングなどは, Blender を使ったり, NanoRT https://github.com/lighttransport/nanort/ などを使って自前レンダラーを書けばできますが, テンプレートメッシュや 3DMM をどうするか, ですね.
(研究に限定して使える 3DMM などはあったりしますが, Basel Face Model or Sully Face Model くらいしかない?)
追記
各人がいろいろ切磋琢磨され, このあたりいろいろ発展していますね.
A collection of deep learning frameworks ported to Keras for face analysis.
https://github.com/shaoanlu/face_toolbox_keras/
いろいろ顔アルゴリズムをまとめて動かせます. ありがとうございます.
まとめ
北欧美人女優アリシア・ヴィキャンデルがかわい過ぎてやばい!
https://ciatr.jp/topics/58021
リファレンス実装が Torch とか Caffe とか Teano とかいろいろばらばらでつらいので C/C++ で全部書き直したい...!
TODO
- まと⭐️らぼのコードを, C/C++ or GNU octave で書き直してくれる, 優秀な若人を探す旅に出たい.
- 優秀な若人が, 最新ディープラーニング顔アルゴリズムを試し, 日々お互い切磋琢磨することで, 優秀な若人が人類史上最速で優秀なディープラーニング顔若人へと昇華されるスキームを確立する旅に出たい.