Translate

割と新しめの姿勢推定アルゴリズムPHALPをwindows環境でエラーと戦いながら環境構築した話。

今回は姿勢推定のアルゴリズムではPHALPをwindows環境で動かすための環境構築をやっていきます。PHALPの公式HPは以下の通りになります・

https://github.com/brjathu/PHALP)。

大前提として、パソコンにGPUが搭載されていて、CUDA,cuDDNのセットアップがちゃんとできていることが必要になります。あとはGPUのスペックが低いと動かない可能性大です(メモリが足りないとかで。。。)。自分の環境はRTX4080、RTX3070で動かしています。


PHALPの環境構築はトライアンドエラーの繰り返し



①. まずは仮想環境の構築をやっていきます。

conda create -n phalp python=3.10


②. 次にpip install gitをします

③. PHALPの公式に則ってAnaconda prompt上でいろいろとインストールします。コマンドは以下の通り。

pip install phalp[all]@git+https://github.com/brjathu/PHALP.git


④. そうするとおそらくDetectron2のエラーが発生するので個別にそれをインストールする。

⑤。ここが難しくて、まずはgithubからDetectron2のファイルをダウンロードし、setup.pyのファイルの中を編集する。編集方法は以下のサイトを参考に(https://qiita.com/techstrom/items/0b00c0fd0ab0b1519a98)。

⑥。anaconda prompt上でDetectron2のフォルダのあるディレクトリに移動して、次のコードを入力

pip install -e .[all]

⑦. するとなにかいろんな文字がバーっと出てきてコンパイル回りのエラーが出てくるからそれに対処する。


⑧. Visualstudioのビルドツールから必要なパッケージをインストールする。そもそもない人はVisual studioをインストールする。2019か2017が個人的にはうまくきそうな印象。とりあえずビルドツールあたりのエラーっぽいので、ビルドツールからコンパイラとライブラリを入れてみる。あとはなんかtorch周りが変なことになっていそうだ。


とりあえずビルドツールはビンゴではなかったので、torchを再度インストールしてみる。そしたらDetectron2がインストールできた。原因はtorchのバージョンの不一致が考えられます。しかしながら、Visualstudioのビルドツールからコンパイラとかを入れるのは必須になります。

⑨. 以下のコードを入力

pip install phalp

pip install gdown

pip install colordict

pip install PyOpenGL PyOpenGL_accelerate

pip install torch==2.0.0+cu117 torchvision==0.15.1+cu117 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu117

⑩. デモのコードを動かしてみる。

python scripts/demo.py video.source=assets/videos/gymnasts.mp4 video.output_dir='outputs'


⑪ No module named 'sklearn.utils.linear_assignment_'のエラーがでるのでそれの退所。該当のエラー部分に行って該当部分を修正します。場所はここ。envs\phalp\lib\site-packages\phalp\deep_sort_\linear_assignment.py"この部分のコードを直しにいきます。liner をliner_sumに変更する。参考URLはこちら(https://stackoverflow.com/questions/62390517/no-module-named-sklearn-utils-linear-assignment)。


⑫. FileNotFoundError: ("Could not find module 'OSMesa' (or one of its dependencies). Try using the full path with constructor syntax.", 'OSMesa', None)このエラーが出るのでその対処をする。具体的には、\anaconda3\envs\phalp\lib\site-packages\phalp\visualize\py_renderer.py",これを編集する。3行目の、os.environ['PYOPENGL_PLATFORM'] = 'osmesa' をコメントアウトする。


⑬. ModuleNotFoundError: No module named 'phalp.configs' とでるのでその対処。おそらくsite-packageの方のphalpにconfigのフォルダがなかったので、直接githubからダウンロードしたconfigファイルをsite-packageのphalpフォルダに投入する。


⑭. TypeError: expected str, bytes or os.PathLike object, not NoneTypeのエラーが出る。該当箇所はCACHE_DIR = os.path.join(os.environ.get("HOME"), ".cache")のさっきのconfigファイルの中のbase.pyの中を編集する必要がある。CACHE_DIR = os.path.join(os.environ.get("HOME"), ".cache") これはlinux用の文法になっているのでこれをwindows用の文法に変更する。

CACHE_DIR = os.path.join(os.environ.get("HOME"), ".cache") →

CACHE_DIR = os.path.join(os.environ.get("USERPROFILE"), ".cache")これに変更する。


⑮. 今度はModuleNotFoundError: No module named 'phalp.models.hmar.hmr'; 'phalp.models.hmar' is not a package これがエラーとして出てくる。human-4D周りのエラーなのでそれに対処していく。これも⑬と同じでhmrのモデルがsite-packageに入っていないのが原因。なので同じようにダウンロードしたhmarのフォルダをsitte-packageのphalpのmodelのディレクトリにぶち込む。ついでにダウンロードしたutilファイルの中身も移動同じく、site-packageのutilファイルに入れておく。。。。。。。結論をいうと、ダウンロードしたphalp内のフォルダを一気にsite-package内のphalpに張り付けて置きかえたほうが早かったです。そうした後に、⑫-⑭の工程をやり直してください。



 ⑯'wget' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。[Errno 2] No such file or directory: 'basicModel_neutral_lbs_10_207_0_v1.0.0.pkl' そのせいでこのファイルが無いよといわれているので、これに対処していきます。データ自体はここ(https://github.com/classner/up/raw/master/models/3D/basicModel_neutral_lbs_10_207_0_v1.0.0.pkl')にあるみたいなのでそれをダウンロードしてみる。場所はsite-packge内の PHALP.pyとutil.pyのあるディレクトリに保存してみる。

PHALP.pyの640行目のconvert_pkl('basicModel_neutral_lbs_10_207_0_v1.0.0.pkl') こいつが邪魔していそうだったのでこれをコメントアウトしてみる。


⑰AssertionError: Path C:\Users\shimi\.cache/phalp/3D/models/smpl/SMPL_NEUTRAL.pkl does not exist! なんかこれがないといわれたので該当のディレクトリに入れてみることにする。pklファイルはここにあった(https://github.com/sampepose/smpl_models/tree/master)。ここにも入れる必要があった(C:\Users\shimi\.cache\4DHumans\data\smpl)。


⑱ なんか\anaconda3\envs\phalp\lib\site-packages\hmr2\configs\__init__.py", line 5, ここの部分が⑭と同じことになっているからそれを修正。

⑲ Unable to load EGL library', "Could not find module 'EGL' (or one of its dependencies). Try using the full path with constructor syntax.", 'EGL', None)のエラーを吐いたので、\anaconda3\envs\phalp\lib\site-packages\hmr2\utils\mesh_renderer.py"の58,59行目を以下のように変換。

            self.renderer = None

            self.mesh_renderer = None


...うまくいかず。mesh_render.pyではなく、render.pyの

if 'PYOPENGL_PLATFORM' not in os.environ:

   os.environ['PYOPENGL_PLATFORM'] = 'egl'


この部分をコメントアウトするとこのエラーは消えた。

環境構築のコツはエラーログを見て足りないものをうまく組み込めるかどうかにかかっている。

ここまで行ってやっと動きました。あくまでも私の環境で動くまでの過程を記しただけなので、個別の他の環境でうまくいくかは自身ありません。。。事実普段の環境のRTX4080ではうまく動きましたが、RTX3070ではメモリ不足で途中で止まってしまいました。


さらにSMPLモデルとかキャッシュファイルに本来ダウンロードされてはいるものを無理やり直接ぶち込んでいるので、キャッシュ消えたときには動作しない可能性が高いのでご注意を。。。


試行錯誤の過程を描いてみただけなので見づらく、グダグダですみません。多分自分の試行錯誤の過程で偶発的にできた環境設定とかもあるので、確実な方法ではありません。