>

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用環境の名前。


2016年4月26日火曜日

"iTunes Matchはこのデバイスのミュージックライブラリに置き換わります" というダイアログはOKしてよい。

iPhoneでiTunes MatchをONにしようとすると出て来る
"iTunes Matchはこのデバイスのミュージックライブラリに置き換わります"
というメッセージ。なんとなく今まで貯めてきたCloud上の自分のライブラリがiPhoneの少量の曲で上書きされてしまうと解釈してしまいそうだが、そうではない。正しくは"iTunes Match「が」このデバイスのミュージックライブラリに置き換わります"という意味で今使っているiPhoneのライブラリがiTunes Matchのたくさんの曲で上書きされるという意味らしい。

※このメッセージの意図はiTunes MatchをONにするとiPhoneだけに保存されている曲は消えてしまうのでそのような曲がある場合はあらかじめバックアップをとっておく必要があるという注意喚起のようである。


2016年1月17日日曜日

Amazon EC2を安全に使うために最低限やっておくこと。

※2015/12/25現在の情報です。
自分の家のPCにGeForceがないのでAmazon EC2でやってみることに。
Amazon EC2でGPUが使えるインスタンスを起動すると大体1時間に1ドルくらいかかるのでインスタンスの停止し忘れとかは非常に怖い。そういうことがないように最低限やっておくべき設定のメモ。


実際のインスタンスでCUDAが使えるようにする設定方法はすでに様々な記事があって例えば
http://sla.hatenablog.com/entry/chainer_on_ec2
この辺を参考に構築できます。

Amazon AWSの請求金額の総額が一定金額を超えた時にアラートメールが来るように設定する。


https://aws.amazon.com/jp/
上記URLからAmazon AWSのコンソールにサインイン。
サインインすると表示されるコンソール画面の一番上のメニューバーから自分のアカウント名をクリックするとドロップダウンメニューが表示される。その中から、「請求とコスト管理」をクリック。

請求情報とコスト管理ダッシュボード
にて
アラートおよび通知
というセクションがありこの文章中に「初回請求アラームの設定」というリンクがあるのでクリック。(下図)

「アラームの作成」をクリック(下図)

あとは表示されるダイアログに従って通知の閾値にする金額とe-mailアドレスを設定してアラームを作成する。必ずまずは$1とかの低額に設定してEC2を利用してあえてその閾値を超えさせてみて通知メールが実際に届くことを確認する。そして忘れずに閾値の金額を適切な値に再設定する。



2015年9月24日木曜日

xCode7.0にしたらAVAudioPlayerの初期化処理で"Call can throw, but errors cannot be thrown out of a property initializer"というエラーが出るようになった件

エラー伝搬を無効にして良いなら下記のようにtryの後に!をつけることでエラーを回避できる。
let myPlayer:AVAudioPlayer = try! AVAudioPlayer(contentsOfURL: url)

xCode7.0にしたらNSUserDefaults.registerDefaultsで'NSMutableDictionary' is not convertible to '[String: AnyObject]'と言われるようになった件

NSUserDefaults.registerDefaultsで引数にNSMutableDictionaryのインスタンスを[String : AnyObject]にキャストして渡していたコードがXCode7.0にアップデートしたらエラーになった件。

原因は多分NSMutableDictionaryの[String : AnyObject]へのキャストが認められなくなったからと思われるので次のようにNSMutableDictionaryを使用せずに指定することで回避。
        
myNSUserDefaultsObj.registerDefaults(
            [
                "key1" : myObj1,
                "key2" : myObj2
            ]
        )

2015年8月29日土曜日

iTunes ConnectのマイAppのバンドルID(Bundle ID)を変更する。

iTunes Connectで登録したマイAppのバンドルIDはそのアプリがストアで公開される前であれば変更できます。(幾つかのサイトで変更できないといった記述が見受けられたがそれは誤りです。)
下記の通りiTunes ConnectのマイAppから当該Appを開いてメニューから その他>このAppについて を選択するとバンドルIDを変更できるダイアログが開きます。


2015年8月10日月曜日

iPython notebookでpyplotを使って表示する画像のサイズを変更する

iPython notebookで画像として可視化しながらデバッグするときに画像のサイズが変更できないで少し困った。以下のfigureという命令でfigsizeを指定することで変更できることが分かったのでメモ。
import matplotlib.pyplot as plt

plt.figure(figsize=(12,12))