👋

EVA3Dをgoogle colabで試してみた。

2023/05/26に公開

EVA3Dとは

EVA3Dは高品質なHuman 3Dモデルを2D Image collectionから学習させたデータから自動生成するモデルです。Text等で指定することはできないですがかなり綺麗な3Dモデルをランダムに作成し、かつ綺麗なTextureもついてきます。
https://github.com/hongfz16/EVA3D/tree/main

リンク

Colab
github

準備

Google Colabを開き、メニューから「ランタイム→ランタイムのタイプを変更」でランタイムを「GPU」に変更します。

環境構築

(1) EVA3D Install
インストール手順です。Google colabにdefaultで入っているtorch2.0.0ではなくtorch1.11.0を利用します。

!nvidia-smi
!git clone https://github.com/hongfz16/EVA3D.git
!pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113

import sys
import torch
pyt_version_str=torch.__version__.split("+")[0].replace(".", "")
version_str="".join([
    f"py3{sys.version_info.minor}_cu",
    torch.version.cuda.replace(".",""),
    f"_pyt{pyt_version_str}"
])
!pip install fvcore iopath
!pip install --no-index --no-cache-dir pytorch3d -f https://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/{version_str}/download.html
!pip install -r EVA3D/requirements.txt

(2)pretrainedモデルのダウンロード

%cd EVA3D
from download_models import download_pretrained_models
download_pretrained_models()

(3) SMPLモデルの準備
SMPLのページにいってください。サインインしていない場合はサインインを済ませたのちにこのページに戻ってきてください。
以下の画面のハイライトした部分をクリックしてzipファイルをダウンロードしてください。

その後zipをgoogle driveにアップロードして以下のコードを実行してください。

from google.colab import drive
drive.mount('/content/drive')

!unzip /content/drive/MyDrive/SMPL_python_v.1.1.0.zip

!mkdir smpl_models
!mkdir smpl_models/smpl
!cp /content/EVA3D/SMPL_python_v.1.1.0/smpl/models/basicmodel_neutral_lbs_10_207_0_v1.1.0.pkl smpl_models/smpl/SMPL_NEUTRAL.pkl

推論

推論の実行コードは以下の通りです。

!python generation_demo.py --batch 1 --chunk 1 --expname 512x256_deepfashion --dataset_path demodataset --depth 5 --width 128 --style_dim 128 --renderer_spatial_output_dim 512 256 --input_ch_views 3 --white_bg --voxhuman_name eva3d_deepfashion --deltasdf --N_samples 28 --ckpt 420000 --identities 1 --truncation_ratio 0.5

推論の実行結果は以下の通りです。

うーんなかなかいい感じですね。モブキャラなら作り放題?

Advanced Application

と思ったのですが、RGBテクスチャつきの3Dモデルがありませんでした。
そこで以下のコードをgeneration_demo.pyの187行目に入れて

from pytorch3d.io import IO
save_3d_path = os.path.join(opt.results_dst_dir, 'out_rgb_3d.ply')

# IO().save_mesh(pt3d_mesh, save_3d_path)
IO().save_mesh(pt3d_mesh, save_3d_path, binary=False, colors_as_uint8=True)

再度実行してみました。pytorch3d上ではこれで一応色付きメッシュとして保存されるはず、、

# pytorch 3d plot
import torch
from pytorch3d.vis import plotly_vis
from pytorch3d.io import load_obj, load_objs_as_meshes
from pytorch3d.io import IO

# Data structures and functions for rendering
from pytorch3d.structures import Meshes
from pytorch3d.renderer import (
    look_at_view_transform,
    FoVPerspectiveCameras, 
    PointLights, 
    DirectionalLights, 
    Materials, 
    RasterizationSettings, 
    MeshRenderer, 
    MeshRasterizer,  
    SoftPhongShader,
    TexturesUV,
    TexturesVertex
)

obj_filename = "/content/EVA3D/evaluations/512x256_deepfashion/iter_0420000/random_angles/out_rgb_3d.ply"

device = "cuda"
mesh = IO().load_mesh(obj_filename)

# Render the plotly figure
fig = plotly_vis.plot_scene({
    "subplot1": {
        "cow_mesh": mesh
    }
})
fig.show()

あーーだめでした。なんでだろう?

とりあえずEVA3Dの方にRGB 3D Mesh取れるのかIssue投げておきました。
https://github.com/hongfz16/EVA3D/issues/20

取れたらすごいいいんだけどなー

最後に

今回はHuman 3D ReconstructionモデルであるEVA3Dについてgoogle colabで試してみました。google colabのfreeで3Dモデルができるのかヒヤヒヤしてましたが、(3D Fuseとかはメモリで積んだので)無事にできて良かったです。2年前にPIFuHDとかで3Dモデルを生成していた頃よりも推論も早く同精度以上のモデルが簡単に作れるようになっていて驚きです。3Dモデルの生成についても今熱くなってきているので色々試したいですね。

今後ともLLM, Diffusion model, Image Analysis, 3Dに関連する試した記事を投稿していく予定なのでよろしくお願いします。

Discussion