📝

pix2pix3dをgoogle colabで試してみた。

2023/06/02に公開

pix2pix3dとは

pix2pix3dはpix2pixの3dアニメーションを作成できるモデルです。
https://www.cs.cmu.edu/~pix2pix3D/

リンク

Colab
github

準備

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

環境構築

インストール手順です。

!git clone https://github.com/dunbar12138/pix2pix3D.git
!pip install ninja pyopengl imgui einops

推論

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

%cd /content/pix2pix3D/
!bash checkpoints/download_models.sh

(2)デモデータの準備

# https://github.com/wkentaro/gdown
# Download seg2cat datasets
import gdown
url = "https://drive.google.com/drive/folders/1yjTTE57P9-hEe-IVcE-GXdh04WGo5lD9"
gdown.download_folder(url, quiet=True, use_cookies=False)

!mv /content/pix2pix3D/AFHQ-Cat-Seg /content/pix2pix3D/data

(3)推論実行
(3-1) generate samples

!rm -rf /content/results
%cd /content/pix2pix3D/
!mkdir /content/results
!python applications/generate_samples.py --network checkpoints/pix2pix3d_seg2cat.pkl --outdir /content/results --random_seed 0 1 --cfg seg2cat --input_id 10

結果の確認

from PIL import Image
display(Image.open("/content/results/seg2cat_10_1_label.png"))

(3-2) generate videos

!rm -rf /content/results
%cd /content/pix2pix3D/
!mkdir /content/results
!python applications/generate_video.py --network checkpoints/pix2pix3d_seg2cat.pkl --outdir /content/results --random_seed 1 --cfg seg2cat --input examples/example_input.png

結果の確認

import IPython


out_filename = '/content/results/seg2cat_1.gif'
IPython.display.Image(out_filename, format='png')


rgbの方はなんかメモリ大きすぎて上げれなかった、、

(3-3) extract mesh
3d系のパッケージを事前にインストールします。

!pip install trimesh pyrender PyMCubes

推論の実行です。実行の前に以下のファイルを直します。

application/extract_mesh.py
# Please edit applications/extract_mesh.py 216
semantic_colors = torch.tensor(color_list)[torch.argmax(semantic_colors.cpu(), dim=-1)]
!rm -rf /content/results
%cd /content/pix2pix3D/
!mkdir /content/results

!python applications/extract_mesh.py --network checkpoints/pix2pix3d_seg2cat.pkl --outdir /content/results --cfg seg2cat --input examples/example_input.png

結果の確認です。.gifはちょっとzennでは載せれないので.plyをMeshlabで描画してみます。

他にもedge2car, seg2faceがあります。同様の手順で試せるのでぜひ!

最後に

今回はpix2pixの3Dバージョンであるpix2pix3dを利用してみました。StyleGAN的なものをすごく感じますが、違う手法で同程度のクオリティを達成しているような気がします。ちょっとパッとは適用先は思い浮かびませんが、使いたいなー

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

Discussion