diff --git a/README.md b/README.md index 655bba0..1664531 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Learn more on our project page: [iHuman](https://pramishp.github.io/iHuman/index ## Prerequisites -* Cuda 11.8 +* Cuda 11.8/12.1 * Conda * A C++14 capable compiler * __Linux:__ GCC/G++ 8 or higher @@ -15,10 +15,10 @@ Learn more on our project page: [iHuman](https://pramishp.github.io/iHuman/index First make sure all the Prerequisites are installed in your operating system. Then, invoke ```bash -conda env create -f environment.yml +conda env create -f environment-cuda12_1.yml # or environment-cuda11_8.sh conda activate ihuman cd submodules -bash ./install.sh +bash ./install-cuda12_1.sh # or install-cuda11_8.sh ``` ## Running the code @@ -26,19 +26,18 @@ bash ./install.sh ### Step 1: Download Dataset a. download dataset from this link https://drive.google.com/file/d/1qwM1jdabiJFmEGywuYowKD0-nC2-rWVe/view?usp=share_link
-b. place it in {root}/data/people_snapshot/ +b. place it in {root}/data/peoplesnapshot/ ### Step 2: Download Models -a. Download the SMPL v1.1 `SMPL_python_v.1.1.0.zip` model from the [SMPL official website](https://smpl.is.tue.mpg.de/download.php) and move and rename `SMPL_python_v.1.1.0/smpl/models/*.pkl` to `PROJECT_ROOT/data/smplx_models/smpl/`. +a. Download the SMPL v1.1 `SMPL_python_v.1.1.0.zip` model from the [SMPL official website](https://smpl.is.tue.mpg.de/download.php) and move and rename `SMPL_python_v.1.1.0/smpl/models/*.pkl` to `PROJECT_ROOT/data/smpl/models`. After this the project folder should look like this: ``` -PROJECT_ROOT/data/smpl_model +PROJECT_ROOT/data/smpl/models ├── SMPL_FEMALE.pkl ├── SMPL_MALE.pkl ├── SMPL_NEUTRAL.pkl - ``` b. Download the files from this drive link (https://drive.google.com/file/d/17OdyNkfdFKFqBnmFMZtmT9B-6AXKAZeG/view?usp=share_link) and place them in `PROJECT_ROOT/data/smpl/small/`. diff --git a/animatableGaussian/model/nerf_model.py b/animatableGaussian/model/nerf_model.py index 1e3d686..4ded1d1 100644 --- a/animatableGaussian/model/nerf_model.py +++ b/animatableGaussian/model/nerf_model.py @@ -18,6 +18,8 @@ from diff_gaussian_rasterization import GaussianRasterizationSettings, GaussianRasterizer +import yaml + class EvaluatorRecon(nn.Module): """adapted from https://github.com/JanaldoChen/Anim-NeRF/blob/main/models/evaluator.py""" @@ -88,7 +90,9 @@ def __init__(self, opt, datamodule=None): if not os.path.exists("test"): os.makedirs("test") self.robustifier = GMoF(rho=5) - + with open('settings.yaml', "r") as f: + config = yaml.safe_load(f) + self.headless=config[0]['training']['headless'] self.cal_test_metrics = opt.cal_test_metrics if 'cal_test_metrics' in opt else False def forward(self, camera_params, model_param, time, render_point=False, train=True): @@ -505,16 +509,16 @@ def validation_step(self, batch, batch_idx): rasterized_rgbs = torch.stack(rasterized_rgbs) b_vertices = torch.stack(b_vertices) b_normals = torch.stack(b_normals) + if not self.headless: + from animatableGaussian.vis_utils import create_side_by_side_images + gt_rgb_vs_rasterized_rgb = create_side_by_side_images(gt_images=gt_images, pred_images=rasterized_rgbs) - from animatableGaussian.vis_utils import create_side_by_side_images - gt_rgb_vs_rasterized_rgb = create_side_by_side_images(gt_images=gt_images, pred_images=rasterized_rgbs) - - save_image(gt_rgb_vs_rasterized_rgb * 255, - path=f"val/{self.current_epoch}/rasterized_{batch_idx}.png") + save_image(gt_rgb_vs_rasterized_rgb * 255, + path=f"val/{self.current_epoch}/rasterized_{batch_idx}.png") - gt_normal_vs_rasterized_normal = create_side_by_side_images(gt_images=gt_normals, pred_images=b_normals) - save_image(gt_normal_vs_rasterized_normal * 255, - path=f"val/{self.current_epoch}/normal_{batch_idx}.png") + gt_normal_vs_rasterized_normal = create_side_by_side_images(gt_images=gt_normals, pred_images=b_normals) + save_image(gt_normal_vs_rasterized_normal * 255, + path=f"val/{self.current_epoch}/normal_{batch_idx}.png") ## =================================================== @@ -572,85 +576,87 @@ def validation_step(self, batch, batch_idx): ## ========================================== ### # ==================== render model and image =============== - from animatableGaussian.vis_utils import render_model_to_image + if not self.headless: + from animatableGaussian.vis_utils import render_model_to_image - model_image_overlaps = [] - for i, img_path in enumerate(batch['img_path']): - model_img_overlap = render_model_to_image(b_vertices[i].detach().cpu().unsqueeze(0).numpy(), - camera, - [img_path], - save_path=None) - model_image_overlaps.append(torch.from_numpy(model_img_overlap)) + model_image_overlaps = [] + for i, img_path in enumerate(batch['img_path']): + model_img_overlap = render_model_to_image(b_vertices[i].detach().cpu().unsqueeze(0).numpy(), + camera, + [img_path], + save_path=None) + model_image_overlaps.append(torch.from_numpy(model_img_overlap)) - model_image_overlaps = torch.stack(model_image_overlaps).permute(0, 3, 1, 2) + model_image_overlaps = torch.stack(model_image_overlaps).permute(0, 3, 1, 2) - from animatableGaussian.vis_utils import make_grid - grid_model_image_overlap = make_grid(model_image_overlaps) - save_image(grid_model_image_overlap, f'val/{self.current_epoch}/model_over_rgb_{batch_idx}.png') + from animatableGaussian.vis_utils import make_grid + grid_model_image_overlap = make_grid(model_image_overlaps) + save_image(grid_model_image_overlap, f'val/{self.current_epoch}/model_over_rgb_{batch_idx}.png') # ===== # model front side - from animatableGaussian.vis_utils import render_model_front_n_side - front_side_model_views = [] - for i, img_path in enumerate(batch['img_path']): - front_side_model_view = render_model_front_n_side(b_vertices[i].detach().cpu().unsqueeze(0).numpy(), - camera) - front_side_model_views.append(torch.from_numpy(front_side_model_view)) - - front_side_model_views = torch.stack(front_side_model_views).permute(0, 3, 1, 2) - - from animatableGaussian.vis_utils import make_grid - grid_front_side = make_grid(front_side_model_views) - save_image(grid_front_side, f'val/{self.current_epoch}/front_side_view_model_{batch_idx}.png') - - # log to tensorflow - tensorboard = self.logger.experiment - if tensorboard: - - tensorboard.add_image(f'rgb_reconstructed_{batch_idx}', - gt_rgb_vs_rasterized_rgb, - self.current_epoch, dataformats='HWC') - - # if 'pose_2d' in batch: - # tensorboard.add_image(f'pose_{batch_idx}', - # pose_image_grid / 255.0, - # self.current_epoch, dataformats='HWC') - - tensorboard.add_image(f'model_img_overlap_{batch_idx}', - grid_model_image_overlap / 255.0, - self.current_epoch, dataformats='HWC') - - tensorboard.add_image(f'model_front_side_{batch_idx}', - grid_front_side / 255.0, - self.current_epoch, dataformats='HWC') - - tensorboard.add_image(f'normal_{batch_idx}', gt_normal_vs_rasterized_normal, self.current_epoch, - dataformats="HWC") - - # mesh visualization - camera_config = {'cls': 'PerspectiveCamera'} - verts = b_vertices.cpu().clone() - verts[:, :, 1] *= -1 - verts -= verts.mean(1).unsqueeze(1) - - faces = self.model.faces[None, ...] - - pc = verts.clone() - - # pred_gt_verts = verts.unsqueeze(0) - # append GT verts - if self.cal_test_metrics and 'gt_vertices' in batch.keys(): - gt_verts = batch['gt_vertices'].detach().cpu() - gt_verts -= gt_verts.mean(1).unsqueeze(1) - gt_verts[:, :, 1] *= -1 - gt_verts[:, :, 0] += 1 - pc = torch.hstack([verts, gt_verts]) - - tensorboard.add_mesh(f'reconstructed_pc_{batch_idx}', - vertices=pc, - # faces=faces, - config_dict={"camera": camera_config}, - global_step=self.current_epoch) + if not self.headless: + from animatableGaussian.vis_utils import render_model_front_n_side + front_side_model_views = [] + for i, img_path in enumerate(batch['img_path']): + front_side_model_view = render_model_front_n_side(b_vertices[i].detach().cpu().unsqueeze(0).numpy(), + camera) + front_side_model_views.append(torch.from_numpy(front_side_model_view)) + + front_side_model_views = torch.stack(front_side_model_views).permute(0, 3, 1, 2) + + from animatableGaussian.vis_utils import make_grid + grid_front_side = make_grid(front_side_model_views) + save_image(grid_front_side, f'val/{self.current_epoch}/front_side_view_model_{batch_idx}.png') + + # log to tensorflow + tensorboard = self.logger.experiment + if tensorboard: + + tensorboard.add_image(f'rgb_reconstructed_{batch_idx}', + gt_rgb_vs_rasterized_rgb, + self.current_epoch, dataformats='HWC') + + # if 'pose_2d' in batch: + # tensorboard.add_image(f'pose_{batch_idx}', + # pose_image_grid / 255.0, + # self.current_epoch, dataformats='HWC') + + tensorboard.add_image(f'model_img_overlap_{batch_idx}', + grid_model_image_overlap / 255.0, + self.current_epoch, dataformats='HWC') + + tensorboard.add_image(f'model_front_side_{batch_idx}', + grid_front_side / 255.0, + self.current_epoch, dataformats='HWC') + + tensorboard.add_image(f'normal_{batch_idx}', gt_normal_vs_rasterized_normal, self.current_epoch, + dataformats="HWC") + + # mesh visualization + camera_config = {'cls': 'PerspectiveCamera'} + verts = b_vertices.cpu().clone() + verts[:, :, 1] *= -1 + verts -= verts.mean(1).unsqueeze(1) + + faces = self.model.faces[None, ...] + + pc = verts.clone() + + # pred_gt_verts = verts.unsqueeze(0) + # append GT verts + if self.cal_test_metrics and 'gt_vertices' in batch.keys(): + gt_verts = batch['gt_vertices'].detach().cpu() + gt_verts -= gt_verts.mean(1).unsqueeze(1) + gt_verts[:, :, 1] *= -1 + gt_verts[:, :, 0] += 1 + pc = torch.hstack([verts, gt_verts]) + + tensorboard.add_mesh(f'reconstructed_pc_{batch_idx}', + vertices=pc, + # faces=faces, + config_dict={"camera": camera_config}, + global_step=self.current_epoch) @torch.no_grad() def test_step(self, batch, batch_idx, *args, **kwargs): diff --git a/animate.py b/animate.py index 3ff2a7e..16e4b6d 100644 --- a/animate.py +++ b/animate.py @@ -12,6 +12,10 @@ from animatableGaussian.model.nerf_model import NeRFModel DEVICE = "cuda" +import yaml +with open('settings.yaml', "r") as f: + config = yaml.safe_load(f) +create_mesh=config[0]['inference']['create_mesh'] def load_mixamo_smpl(actions_dir, action_type='0007', skip=1): @@ -104,16 +108,16 @@ def main(opt): image = rgb.detach().cpu().permute(1, 2, 0).numpy() * 255.0 animations.append(image) cv2.imwrite(img_path, image[:, :, ::-1]) - - verts_posed = vt - pred_faces = model.model.faces[0] - vertex_colors = model.model.get_vertex_colors() - mesh_o3d = too3dmesh(verts_posed, pred_faces, vertex_colors) - os.makedirs(f"{output_path}/mesh", exist_ok=True) - o3d.io.write_triangle_mesh(f"{output_path}/mesh/{idx}.obj", mesh_o3d) + if create_mesh: + verts_posed = vt + pred_faces = model.model.faces[0] + vertex_colors = model.model.get_vertex_colors() + mesh_o3d = too3dmesh(verts_posed, pred_faces, vertex_colors) + os.makedirs(f"{output_path}/mesh", exist_ok=True) + o3d.io.write_triangle_mesh(f"{output_path}/mesh/{idx}.obj", mesh_o3d) animations = [np.asarray(animation, dtype=np.uint8) for animation in animations] - imageio.mimsave(f"{output_path}/training.gif", animations) + imageio.mimsave(f"{output_path}/training.gif", animations,fps=50) if __name__ == "__main__": diff --git a/environment.yaml b/environment-cuda11_8.yaml similarity index 100% rename from environment.yaml rename to environment-cuda11_8.yaml diff --git a/environment-cuda12_1.yaml b/environment-cuda12_1.yaml new file mode 100644 index 0000000..5657eec --- /dev/null +++ b/environment-cuda12_1.yaml @@ -0,0 +1,332 @@ +name: ihuman +channels: + - pytorch + - nvidia + - conda-forge + - defaults +dependencies: + - _libgcc_mutex=0.1=main + - _openmp_mutex=5.1=1_gnu + - backcall=0.2.0=pyh9f0ad1d_0 + - blas=1.0=mkl + - brotli-python=1.0.9=py38h6a678d5_8 + - bzip2=1.0.8=h5eee18b_6 + - ca-certificates=2024.12.14=hbcca054_0 + - comm=0.2.2=pyhd8ed1ab_0 + - cuda-cudart=12.1.105=0 + - cuda-cupti=12.1.105=0 + - cuda-libraries=12.1.0=0 + - cuda-nvrtc=12.1.105=0 + - cuda-nvtx=12.1.105=0 + - cuda-opencl=12.6.77=0 + - cuda-runtime=12.1.0=0 + - cuda-version=12.6=3 + - dbus=1.13.18=hb2f20db_0 + - debugpy=1.6.7=py38h6a678d5_0 + - decorator=5.1.1=pyhd8ed1ab_0 + - entrypoints=0.4=pyhd8ed1ab_0 + - expat=2.6.4=h6a678d5_0 + - fontconfig=2.14.1=h55d465d_3 + - freetype=2.12.1=h4a9f257_0 + - giflib=5.2.2=h5eee18b_0 + - glib=2.78.4=h6a678d5_0 + - glib-tools=2.78.4=h6a678d5_0 + - gmp=6.2.1=h295c915_3 + - gmpy2=2.1.2=py38heeb90bb_0 + - gnutls=3.6.15=he1e5248_0 + - gst-plugins-base=1.14.1=h6a678d5_1 + - gstreamer=1.14.1=h5eee18b_1 + - icu=73.1=h6a678d5_0 + - intel-openmp=2023.1.0=hdb19cb5_46306 + - ipykernel=6.29.5=pyh3099207_0 + - jedi=0.19.1=pyhd8ed1ab_0 + - jpeg=9e=h5eee18b_3 + - jupyter_client=7.3.4=pyhd8ed1ab_0 + - jupyter_core=5.7.2=pyh31011fe_1 + - krb5=1.20.1=h143b758_1 + - lame=3.100=h7b6447c_0 + - lcms2=2.12=h3be6417_0 + - ld_impl_linux-64=2.38=h1181459_1 + - lerc=3.0=h295c915_0 + - libblas=3.9.0=1_h86c2bf4_netlib + - libcblas=3.9.0=5_h92ddd45_netlib + - libclang=14.0.6=default_hc6dbbc7_1 + - libclang13=14.0.6=default_he11475f_1 + - libcublas=12.1.0.26=0 + - libcufft=11.0.2.4=0 + - libcufile=1.11.1.6=0 + - libcups=2.4.2=h2d74bed_1 + - libcurand=10.3.7.77=0 + - libcusolver=11.4.4.55=0 + - libcusparse=12.0.2.55=0 + - libdeflate=1.17=h5eee18b_1 + - libedit=3.1.20230828=h5eee18b_0 + - libffi=3.4.4=h6a678d5_0 + - libgcc-ng=11.2.0=h1234567_1 + - libgfortran-ng=13.2.0=h69a702a_0 + - libgfortran5=13.2.0=ha4646dd_0 + - libglib=2.78.4=hdc74915_0 + - libgomp=11.2.0=h1234567_1 + - libiconv=1.16=h5eee18b_3 + - libidn2=2.3.4=h5eee18b_0 + - libjpeg-turbo=2.0.0=h9bf148f_0 + - liblapack=3.9.0=5_h92ddd45_netlib + - libllvm14=14.0.6=hecde1de_4 + - libnpp=12.0.2.50=0 + - libnvjitlink=12.1.105=0 + - libnvjpeg=12.1.1.14=0 + - libpng=1.6.39=h5eee18b_0 + - libpq=12.20=hdbd6064_0 + - libsodium=1.0.18=h36c2ea0_1 + - libstdcxx-ng=11.2.0=h1234567_1 + - libtasn1=4.19.0=h5eee18b_0 + - libtiff=4.5.1=h6a678d5_0 + - libunistring=0.9.10=h27cfd23_0 + - libuuid=1.41.5=h5eee18b_0 + - libwebp=1.3.2=h11a3e52_0 + - libwebp-base=1.3.2=h5eee18b_1 + - libxcb=1.15=h7f8727e_0 + - libxkbcommon=1.0.3=he3ba5ed_0 + - libxml2=2.13.5=hfdd30dd_0 + - llvm-openmp=14.0.6=h9e868ea_0 + - lz4-c=1.9.4=h6a678d5_1 + - markupsafe=2.1.3=py38h5eee18b_0 + - mkl=2023.1.0=h213fc3f_46344 + - mkl-service=2.4.0=py38h5eee18b_1 + - mkl_fft=1.3.8=py38h5eee18b_0 + - mkl_random=1.2.4=py38hdb19cb5_0 + - mpc=1.1.0=h10f8cd9_1 + - mpfr=4.0.2=hb69a4c5_1 + - mpmath=1.3.0=py38h06a4308_0 + - mysql=5.7.20=hf484d3e_1001 + - ncurses=6.4=h6a678d5_0 + - nest-asyncio=1.6.0=pyhd8ed1ab_0 + - nettle=3.7.3=hbbd107a_1 + - numpy-base=1.24.3=py38h060ed82_1 + - openh264=2.1.1=h4ff587b_0 + - openjpeg=2.5.2=he7f1fd0_0 + - openssl=3.0.15=h5eee18b_0 + - parso=0.8.4=pyhd8ed1ab_0 + - pcre2=10.42=hebb0a14_1 + - pexpect=4.9.0=pyhd8ed1ab_0 + - pickleshare=0.7.5=py_1003 + - plyfile=1.0.3=pyhd8ed1ab_0 + - prompt_toolkit=3.0.48=hd8ed1ab_1 + - psutil=5.9.1=py38h0a891b7_0 + - ptyprocess=0.7.0=pyhd3deb0d_0 + - pure_eval=0.2.3=pyhd8ed1ab_0 + - pyqt=5.15.4=py38hfa26641_0 + - pysocks=1.7.1=py38h06a4308_0 + - python=3.8.19=h955ad1f_0 + - python_abi=3.8=2_cp38 + - pytorch=2.4.1=py3.8_cuda12.1_cudnn9.1.0_0 + - pytorch-cuda=12.1=ha16c6d3_6 + - pytorch-mutex=1.0=cuda + - pyzmq=25.1.2=py38h6a678d5_0 + - qt-main=5.15.2=h53bd1ea_10 + - readline=8.2=h5eee18b_0 + - sip=6.5.1=py38h709712a_2 + - six=1.16.0=pyh6c4a22f_0 + - sqlite=3.41.2=h5eee18b_0 + - stack_data=0.6.2=pyhd8ed1ab_0 + - tbb=2021.8.0=hdb19cb5_0 + - tk=8.6.12=h1ccaba5_0 + - toml=0.10.2=pyhd8ed1ab_0 + - torchtriton=3.0.0=py38 + - tornado=6.1=py38h0a891b7_3 + - typing_extensions=4.11.0=py38h06a4308_0 + - wcwidth=0.2.13=pyhd8ed1ab_0 + - xz=5.4.6=h5eee18b_0 + - yaml=0.2.5=h7b6447c_0 + - zeromq=4.3.5=h6a678d5_0 + - zlib=1.2.13=h5eee18b_0 + - zstd=1.5.6=hc292b87_0 + - pip: + - absl-py==2.1.0 + - addict==2.4.0 + - aiohttp==3.9.3 + - aiosignal==1.3.1 + - aitviewer==1.13.0 + - alembic==1.13.2 + - antlr4-python3-runtime==4.9.3 + - asttokens==2.4.1 + - async-timeout==4.0.3 + - attrs==23.2.0 + - autopage==0.5.2 + - beautifulsoup4==4.12.3 + - blinker==1.7.0 + - cachetools==5.3.3 + - certifi==2022.12.7 + - cffi==1.16.0 + - charset-normalizer==2.1.1 + - click==8.1.7 + - cliff==4.7.0 + - cmaes==0.10.0 + - cmake==3.25.0 + - cmd2==2.4.3 + - colorlog==6.8.2 + - commonmark==0.9.1 + - configargparse==1.7 + - contourpy==1.1.1 + - cuda-python==12.3.0 + - cycler==0.12.1 + - cython==3.0.10 + - dash==2.16.1 + - dash-core-components==2.0.0 + - dash-html-components==2.0.0 + - fastjsonschema==2.19.1 + - ffmpeg==1.4 + - filelock==3.9.0 + - filterpy==1.4.5 + - flask==3.0.3 + - flatbuffers==24.3.25 + - fonttools==4.51.0 + - frozenlist==1.4.1 + - fsspec==2024.3.1 + - fvcore==0.1.5.post20221221 + - gdown==5.2.0 + - glcontext==3.0.0 + - google-auth==2.29.0 + - google-auth-oauthlib==1.0.0 + - greenlet==3.0.3 + - grpcio==1.62.1 + - h5py==3.10.0 + - hydra-core==1.3.2 + - hydra-optuna-sweeper==1.2.0 + - idna==3.4 + - imageio==2.34.0 + - imgui==2.0.0 + - importlib-metadata==7.1.0 + - importlib-resources==6.4.0 + - iopath==0.1.10 + - ipython==8.12.3 + - ipywidgets==8.1.2 + - itsdangerous==2.1.2 + - jax==0.4.13 + - jaxlib==0.4.13 + - jinja2==3.1.2 + - joblib==1.4.0 + - jsonschema==4.21.1 + - jsonschema-specifications==2023.12.1 + - jupyterlab-widgets==3.0.10 + - kiwisolver==1.4.5 + - lazy-loader==0.4 + - lightning-utilities==0.11.2 + - lit==15.0.7 + - mako==1.3.5 + - markdown==3.6 + - matplotlib==3.7.5 + - matplotlib-inline==0.1.6 + - mediapipe==0.10.11 + - ml-dtypes==0.2.0 + - moderngl==5.12.0 + - moderngl-window==2.4.6 + - multidict==6.0.5 + - multipledispatch==1.0.0 + - nbformat==5.10.4 + - networkx==3.0 + - norfair==2.2.0 + - numpy==1.24.1 + - nvidia-cublas-cu11==11.11.3.6 + - nvidia-cuda-cupti-cu11==11.8.87 + - nvidia-cuda-nvrtc-cu11==11.8.89 + - nvidia-cuda-runtime-cu11==11.8.89 + - nvidia-cudnn-cu11==8.7.0.84 + - nvidia-cufft-cu11==10.9.0.58 + - nvidia-curand-cu11==10.3.0.86 + - nvidia-cusolver-cu11==11.4.1.48 + - nvidia-cusparse-cu11==11.7.5.86 + - nvidia-nccl-cu11==2.20.5 + - nvidia-nvtx-cu11==11.8.86 + - oauthlib==3.2.2 + - omegaconf==2.3.0 + - open3d==0.18.0 + - opencv-contrib-python==4.9.0.80 + - opencv-contrib-python-headless==4.9.0.80 + - opencv-python==4.10.0.84 + - opencv-python-headless==4.10.0.84 + - opt-einsum==3.3.0 + - optuna==2.10.1 + - packaging==24.0 + - pandas==2.0.3 + - pbr==6.0.0 + - pdbr==0.8.9 + - pillow==10.2.0 + - pip==24.3.1 + - pkgutil-resolve-name==1.3.10 + - platformdirs==4.2.0 + - plotly==5.20.0 + - portalocker==2.8.2 + - prettytable==3.10.0 + - prompt-toolkit==3.0.43 + - protobuf==3.20.3 + - pure-eval==0.2.2 + - pyasn1==0.6.0 + - pyasn1-modules==0.4.0 + - pycparser==2.22 + - pyglet==2.0.15 + - pyglm==2.7.3 + - pygments==2.17.2 + - pyopengl==3.1.7 + - pyparsing==3.1.2 + - pyperclip==1.9.0 + - pyqt5==5.15.11 + - pyqt5-qt5==5.15.2 + - pyqt5-sip==12.15.0 + - pyquaternion==0.9.9 + - pyrr==0.10.3 + - pysocks==1.7.1 + - python-dateutil==2.9.0.post0 + - pytorch-lightning==2.1.2 + - pytz==2024.1 + - pywavelets==1.4.1 + - pyyaml==6.0.1 + - referencing==0.34.0 + - requests==2.28.1 + - requests-oauthlib==2.0.0 + - retrying==1.3.4 + - rich==12.6.0 + - roma==1.4.4 + - rpds-py==0.18.0 + - rsa==4.9 + - rtree==1.2.0 + - ruamel-yaml==0.18.6 + - ruamel-yaml-clib==0.2.8 + - scikit-image==0.21.0 + - scikit-learn==1.3.2 + - scikit-video==1.1.11 + - scipy==1.10.1 + - segment-anything==1.0 + - setuptools==75.3.0 + - smplx==0.1.28 + - sounddevice==0.4.6 + - soupsieve==2.5 + - sqlalchemy==2.0.31 + - stack-data==0.6.3 + - stevedore==5.2.0 + - sympy==1.12 + - tabulate==0.9.0 + - tenacity==8.2.3 + - tensorboard==2.14.0 + - tensorboard-data-server==0.7.2 + - termcolor==2.4.0 + - threadpoolctl==3.4.0 + - tifffile==2023.7.10 + - tqdm==4.66.2 + - traitlets==5.14.2 + - trimesh==3.23.5 + - triton==2.3.1 + - typing-extensions==4.8.0 + - tzdata==2024.1 + - ujson==5.10.0 + - urllib3==1.26.13 + - usd-core==24.3 + - websockets==12.0 + - werkzeug==3.0.2 + - wget==3.2 + - wheel==0.45.1 + - widgetsnbextension==4.0.10 + - yacs==0.1.8 + - yarl==1.9.4 + - zipp==3.18.1 +prefix: /home/zeus/miniconda3/envs/ihuman diff --git a/install.sh b/install-cuda11_8.sh similarity index 97% rename from install.sh rename to install-cuda11_8.sh index 096a5bc..676e054 100644 --- a/install.sh +++ b/install-cuda11_8.sh @@ -3,7 +3,7 @@ conda install -c iopath iopath pip install "git+https://github.com/facebookresearch/pytorch3d.git" cd submodules -git clone https://github.com/ashawkey/diff-gaussian-rasterization +git clone https://github.com/ashawkey/diff-gaussian-rasterization --recursive cd .. pip install ./submodules/diff-gaussian-rasterization pip install ./submodules/simple-knn diff --git a/install-cuda12_1.sh b/install-cuda12_1.sh new file mode 100644 index 0000000..6db0ab7 --- /dev/null +++ b/install-cuda12_1.sh @@ -0,0 +1,10 @@ +conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia +conda install -c iopath iopath +conda install pytorch3d -c pytorch3d +cd submodules +git clone https://github.com/ashawkey/diff-gaussian-rasterization --recursive +cd .. +pip install ./submodules/diff-gaussian-rasterization +pip install ./submodules/simple-knn +pip install git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch +pip install git+https://github.com/mattloper/chumpy@9b045ff5d6588a24a0bab52c83f032e2ba433e17 \ No newline at end of file diff --git a/settings.yaml b/settings.yaml new file mode 100644 index 0000000..bc26e83 --- /dev/null +++ b/settings.yaml @@ -0,0 +1,5 @@ +--- +- training: + headless : False +- inference: + create_mesh : False \ No newline at end of file