1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ubuntuで"End-to-end Recovery of Human Shape and Pose"

1
Last updated at Posted at 2019-10-27

"End-to-end Recovery of Human Shape and Pose"とは?

CVPR2018にて投稿された内容で,簡単に言えば2次元画像から3次元モデルへの復元を行います.
プロジェクトページ:Human Mesh Recovery
これが中々すごい!ぜひプロジェクトページの動画を見て下さい.

どうやってるの?

私もまだざっくりとしか理解しておりませんが,

  • 2D画像の入力
  • 入力された2次元画像から3次元関節位置と体型の推定
  • 復元された3次元モデルを”人間識別器”へ入力
  • ”人間識別器”において,復元されたモデルを人間 or notの判断を下す(例えば,関節角度がおかしくないかなど)
    ”人間識別器”はいわゆるGANになっており,繰り返し学習を行うことでもっともらしい関節可動域や体型を学習していきます.
    3次元モデルの復元にはSMPLを用いております.
    プロジェクトページ:SMPL
    3次元モデルを生成するうえで問題となるのは,異なる体重で同じ手足の長さをもつ場合がある点です.
    ざっくりSMPLを説明すると,SMPLは関節位置が身体の3Dサーフェスとどのように関連しているかを示し,
    解剖学的な関節を表現するわけではなく表面頂点の関数として表現しております.

話をHMRに戻しますが,この論文のすごいところは学習において関節位置がアノテーションされた2次元画像と3次元画像のペアを必要としないところです.
というわけで,早速デモを動かしてみましょう.

環境構築

基本は著者の方が公開されているGithubの内容でいけますが,諸々躓いた点があるので簡単に解説していきます.
Github:HMR

まずはPythonの設定

デモ自体はPython2.7が推奨されています.
Anaconda等で仮想環境を作りましょう.

terminal
conda create -n py27 python=2.7 anaconda

モデルのダウンロード

Githubの解説の通りです.
HMRのディレクトリ内でダウンロードしましょう.

terminal
cd hmr-master
wget https://people.eecs.berkeley.edu/~kanazawa/cachedir/hmr/models.tar.gz && tar -xf models.tar.gz

モジュールのインストール

とりあえず,

terminal
python -m demo --img_path data/im1954.jpg

でデモを動かしてみましょう.
色々モジュールが無いと言われると思うので,エラー文に従って入れていきます.
ここで何点か躓いたので,

Tensorflowのバージョンは1.3.0

terminal
pip install tensorflow==1.3.0

※GPUあれば

terminal
pip install tensorflow-gpu==1.3.0

Githubに書いてあったにも関わらず見落としてましたね...
TF最新版だとcontribが無くなった影響でエラーが吐かれます.
参考:Design Documentから見たTensorFlow 2.0の変更点
ちなみにPython3系だとTensorflow1.3.0は見つからないです.
あと,WindowsだとPython2系にはTensorflowが公開されておりません.
Github上でも"Windows Setup with python 3 and Anaconda"と書いてあるのが納得できます.

Opendr

ここが一番躓きました.直接Githubからとってきてもエラーでたりと...
結局,一番簡単なpip経由のインストールで通るという...

terminal
pip install opendr==0.77

デモの実行

一通りモジュール入れ終わったら,もう一度デモを実行していきましょう.

terminal
python -m demo --img_path data/im1954.jpg

恐らく,下記のようなエラーがでます(2019/10/27時点,エラー出なかったら無視でいいです).

terminal
absl.flags._exceptions.DuplicateFlagError: The flag 'log_dir' is defined twice. First from absl.logging, Second from src.config.  
Description from first occurrence: directory to write logfiles into

log_dirというflagを2回定義していると言われているので,src/config.pyの59行目あたりにある,

src/config.py
flags.DEFINE_string('log_dir', 'logs', 'Where to save training models')

をコメントアウトしましょう(これでエラー回避できますが,どこに影響がでるかは調べきれていません).
また,src/tf_smpl/batch_smpl.pyでもencodingという引数は定義されていないと出ると思います.

src/tf_smpl/batch_smpl.py
dd = pickle.load(f, encoding="latin-1") 

これ自体はpython2系で作ったモデルをpython3系で使う際に必要らしいので,
"encoding="latin-1""の部分を消せばいいです.

src/tf_smpl/batch_smpl.py
dd = pickle.load(f) 

以下のような画像がでてきたら成功です.
Screenshot from 2019-10-27 15-01-07.png

以上になります.
この分野はものすごい速さで発展していってて,めちゃくちゃ圧倒されますね...

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?