参考にしたのはこちら
russoale/hmr2.0
前回HMRを試してみたのですがpython2.7で環境を作りました
サポートされていないのでやはりpython3で試してみたくなり、こちらを発見しました
実行環境
・MacBook Pro10.14.4
・Anaconda3
・python3.6.10
結論
環境はつくれませんでした
SMPLのTFRecordが作れずうまくいきませんでした
トレーニング方法も記載してくれていたのですが作れず、、
時間がかかってしまったので断念することにしました
注意点
今回はpython3で試すことが目的でしたが、SMPLのデータセットがfor python2.7
になってるのが気になります
また容量の少ないPCでやっているため、何をするにもディスクがいっぱいになってしまって辛かったので
容量は確保してやるべきでした
MPIIのデータセットダウンロードには何時間かかかったので注意です
推奨通りにvirtualenv+python3.x環境
Python > 3.6
が推奨されていますので、3.7で試してみました
3.8もありますが、安定しているのは3.7らしいので3.7をvirtualenvでいれてみたところ
エラーが発生しました
エラー
- 発生したエラー
virtualenvwrapper.hook_loader
参考リンク
どうやら前回作ったanaconda環境と競合が発生したようです
参考リンク - pyenvとanacondaを共存させる時のactivate衝突問題の回避策3種類
Anacondaの環境は残しておきたかったのでAnacondaで環境をつくってみます
Anaconda3で環境作り
conda環境でpython3.8でHMR2.0を試してみましたがこちらもできませんでした
pythonを3.8にした理由は新しいからというだけです
Recomendが3.xなので新しい方が良いだろうという安易な判断です
conda install matplotlib==3.1.2
こちらが異常に時間がかかり、はいりません
どうやらpythonのバージョンを落とす必要があります
参考リンク
python3.6に変更することでmatplotlibは入りました!
他にも入らないものが、、
- opendr==0.77
- deepdish[version='>=0.3']
- opencv-python
- ipdb
ダウンロード先チャンネルを追加することで2つは入るようになりました
conda config --append conda-forge
残った2つをどう入れるのか。。
- opendr==0.77
- opencv-python
condaとpipは混在NGですが、pipだと入るみたいなので入れてみました
× conda install opencv-python
○ pip install opencv-python==4.1.2.30
とりあえず今のところ問題なく入ってるのでopendrの解消を目指します
こちらを参考に進めますがダウンロードが長い!
入らない気がするので中断します
こちらを参考にtensorflowを入れます
conda install -c conda-forge tensorflow
We recommend you use --use-feature=2020-resolver to test your packages with the new resolver before it becomes the default.
と言われることがあるので、その時は言われた通り --use-feature=2020-resolver
をつけてあげれば大丈夫です
この後もまだtensorflowをいれるためにエラーが発生します
ERROR: awscli 1.16.144 requires botocore==1.12.134, which is not installed. awscli 1.16.144 requires docutils>=0.10, which is not installed. awscli 1.16.144 requires s3transfer<0.3.0,>=0.2.0, which is not installed. awscli 1.16.144 requires rsa<=3.5.0,>=3.1.2, but you’ll have rsa 4.6 which is incompatible.
そしてawscliを入れるとbotocore、s3transfer、、とないものが続きます
必要なものはいれていき、requirements.txtに書かれているものは入れてしまいます
名称 | バージョン |
---|---|
matplotlib | 3.1.2 |
numpy | 1.18.1 |
scipy | 1.4.1 |
opencv-python | 4.1.2.30 |
pycocotools | 2.0.2 |
trimesh | 3.8.5 |
tqdm | 4.48.2 |
デモを実行
環境が整ったはずなので手順通りにlogsフォルダの作成をしてパッケージを解凍します
解凍したらデモの実行をします
cd src/notebooks
python trimesh_renderer.py
ここからまだまだエラーが続きます
実行した流れの通りに記載します
importエラー
デモ実行後、importエラーが発生しました
Traceback (most recent call last):
File "trimesh_renderer.py", line 8, in
from main.local import LocalConfig
ModuleNotFoundError: No module named 'main'
どうやらlocalのimportに失敗しているのでパスを通してみます
import sys
sys.path.append(os.path.join('..', 'main'))
import local
実行するとエラー内容が変わりました
PermissionError
mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/data'
mkdirに失敗しているようです
main/config.py
の中でフォルダ作成されているようです
ROOT_DATA_DIR = os.path.join('/', 'data', 'ssd1', 'russales')
パスの場所を自分で管理できる場所にしたいので
os.path.join
の第一引数の場所を適当に自分のわかる場所に変更してしまします
そしてデモを実行
Configurations:
と表示されて情報が表示されていきます、、、
building model...
Downloading data、、、、、
、、、、、、、、、、、、、、
いけそうでしたが エラー発生です
AttributeError
...main/model.py", line 434, in detect
AttributeError: 'Model' object has no attribute 'restore_check'
ソースを確認してみると↓でひっかかっているようです
if self.restore_check is None:
raise RuntimeError('restore did not succeed, pleas check if you set config.LOG_DIR correctly')
checkpoint_manager.latest_checkpoint
がNone
となっているため、self.restore_checkがNoneになるようです
公式の例文をみるとcheckpoint_manager.latest_checkpoint
は取得できそうなので調べてみます
ちなみにcheckpoint_manager.checkpointsも[]でした
初め、matplotlib==3.3.1、numpy==1.19.1を入れていたので推奨通りに入れなおしましたがエラーに変化はありませんでした
checkpoint.save()を呼ぶことでself.checkpoint_manager.latest_checkpointが作成され、restoreに成功しましたが、ドキュメントをみるとここでsaveする必要がなさそうに感じますが、restoreできなければ次へ進めないのでsaveすることにしました
とりあえず次のエラーが出たので解消します
ModuleNotFoundError : networkx, pyglet
ModuleNotFoundError: No module named 'networkx'
ModuleNotFoundError: No module named 'pyglet'
conda install によって解消しました
名称 | バージョン |
---|---|
networkx | 2.5 |
pyglet | 1.5.7 |
ValueError
ValueError: operands could not be broadcast together with shapes (448,448) (224,224)
for c in range(0, 3): img[y1:y2, x1:x2, c] = (alpha_mesh * image[:, :, c] + alpha_image * img[y1:y2, x1:x2, c])
imageとimgのサイズが違うのでこのエラーがでているようです
調べてみると引数にあたるresolution
とは解像度なようです
渡しているh, wは画像のサイズのようなのでいい感じに同じサイズにしてくれるというわけではなさそうでした
image_bytes = scene.save_image(resolution=(h, w), background=bg_color, visible=True)
save_imageでなんとかできるのかもしれないのですが、見つからず
opencvでリサイズすることにしました
image2 = cv2.imdecode(np.frombuffer(image_bytes, np.uint8), -1)
image = cv2.resize(image2 , (w, h))
デコード後にリサイズします
ここでやっとデモが動きました!
ただこれはデモの結果として理想としているものとは違います
このissueはclosedになっていたのでさっそく試してみます
トレーニング
- データセットをダウンロードして
datasets_preprocessing/convert_datasets.sh
のパスを書き換えます data/ssd1/russales
にdatasets/xxx
とtfrecords_with_toes/xxx
フォルダを作成しスクリプトを実行しますHMR2のREADME.mdにしたがってjupyterをいれます
conda install jupyter
名称 | バージョン |
---|---|
jupyter | 1.0.0 |
jupyter_client | 6.1.6 |
jupyter_console | 6.2.0 |
jupyter_core | 4.6.3 |
- 実行します
jupyter nbconvert inspect_dataset.ipynb --to python
[NbConvertApp] Converting notebook inspect_dataset.ipynb to python [NbConvertApp] Writing 3368 bytes to inspect_dataset.py
これでpyファイルが作成されたはずです
python model.py
を実行しましたが、エラーですsix.raise_from(core._status_to_exception(e.code, message), None)
File "", line 3, in raise_from
tensorflow.python.framework.errors_impl.InvalidArgumentError: buffer_size must be greater than zero. [Op:ShuffleDatasetV2]
smplデータセットが無いことが原因なようです
またrussalesの下にtfrecords
フォルダも必要なようです
pklファイルをデータセットの下に置く必要がありますが、このファイルがどれにあたるものなのかがわからず、ここで断念することにしました
keypoint_markerフォルダ内にあるpklファイルを使ってみたところ
key = 'poses' if 'poses' in res.keys() else 'new_poses'
というところでエラーがでました
確かにpklファイル内部にposesというキーもnew_posesというキーもありません
SMPL公式ページからファイルをダウンロードしても同じようにキーがありませんでした
そこでlsp
とlsp_ext
をダウンロードしてTFRecordファイルを作成します
こちらは説明通りTFRecordファイルの作成ができます
SMPLのTFRecordもmodel.pyの実行に必要なのですが、どう作れば良いのかわからず
ここでどうやって進めれば良いのかがわからなくなり作業が止まってしまいました
model.pyファイルの途中でsaveが悪影響になっているのではないかとも思いました
時間をかけすぎてしまったのでちょっとここら辺でストップして他の作業をしながら空いた時間で引き続きみていきたいと思います
あとちょっとでできそうなのに。。
pklファイルの中身をterminalでみる
python -m pickle [filename]