>

2017年12月7日木曜日

"Large Pose 3D Face Reconstruction from a Single Image via Direct Volumetric CNN Regression"の著者のオープンソースを動かすまでに行ったことのメモ

"Large Pose 3D Face Reconstruction from a Single Image via Direct Volumetric CNN Regression"の著者 Aaron Jacksonのコードが https://github.com/AaronJackson/vrn   で公開されていたので動かしてみた。その時のメモ。

まずはOSの選定とセットアップについて。
著者によるとOSはFedora 24 and CentOS 7で確認しているとのこと。
VMWareからGPUパススルーで仮想クライアントのLinuxを入れようとしたが難しそうなのでパーティションを切ってデュアルブートでLinuxをインストールすることにする。
まずFedoraは2017/11/22現在最新の27でもcuda9.0に対応していなかったりして今後不便かもしれないので却下。またcuda8.0はfedora25のみに対応しているなどで一つのバージョンのfedoraで複数のcudaに対応していないようである。なのでCentOS7をインストールすることにした。

CentOS7はnvidiaのドライバーのインストールに苦労したが結局
https://gist.github.com/wangruohui/df039f0dc434d6486f5d4d098aa52d07
上記サイトをくまなく読めばうまくいった。但しnouveauが無効になったかどうかの確認は
http://www.demandosigno.study/entry/2016/04/30/230000
にある方法を使った。
sudo dracut --force
はタイミングを誤ったのか二回やらないとできなった。
セキュアブートの無効化は
https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn898540(v=vs.85).aspx
を参考にしたが結局自分のBIOSではwindowsのsecurity的な項目でoffにしたらうまくいった。

macからCentOSへのRDP接続はまずVNCで繋げられるようにする。
このあたりのページの通りにやればよい。
https://gtrt7.com/blog/linux/rdp-centos
https://qiita.com/takao_mofumofu/items/449b8b7bf8e58c7d4d35
しかし、NVDIAのドライバを使っている場合はデスクトップにGNOME系は使えないとのことなのでKDEを導入。
https://qiita.com/arc279/items/69518ea6dd1f45ae571f
https://www.server-world.info/query?os=CentOS_7&p=x&f=2

~/.vnc/xstartup
も編集してdesktopにstartkdeというコマンドを追加。

VNCがつなげたらxrdpも設定する。(VNCだけでもいい気がするが一応。)
http://cobitech.blogspot.jp/2015/12/centos-71-xrdp.html
の記事中色深度を32から24に変更するとのことだが自分の環境では変えなくても問題なかったが逆に/etc/xrdp/xrdp.iniにてport番号を5901にしないと5910につなごうとしてエラーになるようであった。59XXの下2桁がディスプレイ番号と対応しているらしいので今回は5901にした。

日本語入力は右下のタスクトレイから ibusらしきものを見つけて切り替えショートカットキーをctrl+qに設定した。 xstartupに
export QT_IM_MODULE=ibus
という環境変数を追加したのも効いた可能性あり。

smart card managerなるアプリが毎回起動時にポップアップして鬱陶しい件はyum remove escで解決した。


Anacondaをインストールしてデフォルトをpy3.6にした。 source activate py27でpython2.7を使用できるよう仮想環境をインストールした。

以上がOS周りのセットアップ。

以下は元々のお題である著者のコードを動かすための作業を書く。基本的には https://github.com/AaronJackson/vrn#installation-example に従うがそのとき発生したトラブルと対応を書く。

著者の上記サイトからgit cloneしてもface-alignmentのフォルダが空になっている。
これはgitのsubmoduleの仕組みを理解していないからだが下記サイトに書いてある方法で対応できる。
http://dqn.sakusakutto.jp/2013/06/git_submodule_empty_directory.html


まずtorchをインストール。途中でコンパイルエラーが出たが下記に従って環境変数を追加してからやったら CUDA9.0でもできた。(なお、最初CUDA9.0でセットアップしていたが結局後にcudnnのバージョンが合わないとか言われたのでCUDA8.0+CuDNN5.1に変更した。)
https://github.com/pytorch/pytorch/issues/2972

fb.python のインストールでも PYTHON_LIBRARIESなどがないと言われた。これは anaconda envを使っているせいで自動検索できないのではないかと予想している。
cd fblualib/fblualib/python/build
してから
ccmake ..
でcmakeのUIを起動して、tキーを押してadvanced modeにしてPYTHON関係のパスを手動で入力することで対応できた。なお設定したパスは下記の通り。
PYTHON_LIBRARIES=/home/edo/anaconda3/envs/py27/lib/libpython2.7.so
PYTHON_INCLUDE_DIRS=/home/edo/anaconda3/envs/py27/include/python2.7
このとき肝心の python  自体のパスも anaconda3/envs/py27 のものであることを確認。自分が1回目やったときはこれが/usr/bin/pythonになっていたらしくひどい目にあった。

 libiomp5.so が無いと言われるのはこのファイルをfindして見つけたフォルダを LD_LIBRARY_PATH に追加。

matio が無いと言われるのは多分luarocks intall matioで解決。(sudo yum install matioもやったが多分これは関係なかった。)

npy4th が無いと言われるのはこちらのサイトに従ってインストール
https://github.com/htwaijry/npy4th

Lapack library not found in compile timeと言われるのは
https://github.com/torch/torch7/issues/174
に従って OpenBLASをインストールしてからもういちどtorch distroをインストールすると解決。上のほうのtorchインストールの項目でも書いたがtorchのビルドでは環境変数
export TORCH_NVCC_FLAGS="-D__CUDA_NO_HALF_OPERATORS__"
の設定を忘れずに。

以上で動くことを確認したがxrdpからだとOpenGLが呼べないらしく落ちるので普通にデスクトップから動かす必要がある。

なお、このプログラムはanacondaで作ったpython2.7環境で実行する。そのため
source activate py27
を実行してpython2.7になってから行うこと。py27は自分がanacondaで作ったpython2.7用環境の名前。