Skip to content
/ dut Public

[CVPR 2025 Highlight] Real-time Free-view Human Rendering from Sparse-view RGB Videos using Double Unprojected Textures

Notifications You must be signed in to change notification settings

sunshinnnn/dut

Repository files navigation

DUT

Real-time Free-view Human Rendering from Sparse-view RGB Videos using Double Unprojected Textures

1Max Planck Institute for Informatics, Saarland Informatics Campus   2VIA Research Center   3EPFL

🛠️ Requirements

  • Create conda environment conda create --name dut python=3.9
  • Install cuda11.8: conda install cudatoolkit=11.8 cudnn -c conda-forge
  • Install PyTorch==2.0.0+cu118: pip install torch==2.0.0 torchvision==0.15.1 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118 --no-cache-dir
  • Install pytorch3d: pip install --no-cache-dir pytorch3d==0.7.3 -f https://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/py39_cu118_pyt200/download.html
  • Install kaolin: pip install kaolin==0.15.0 -f https://nvidia-kaolin.s3.us-east-2.amazonaws.com/torch-2.0.0_cu118.html
  • pip install -r requirements.txt
  • Install modules through following commond:
    cd ./tools/extensions/cuda_projection
    python setup.py install
    cd ../../..
    
    cd ./tools/extensions/cuda_skeleton
    python setup.py install
    cd ../../..
    
    cd ./tools/extensions/simple-knn
    python setup.py install
    cd ../../..
    
    cd ./tools/extensions/diff-gaussian-rasterization-mip
    python setup.py install
    cd ../../..
    
    cd ./tools/extensions/nvdiffrast
    pip install .
    cd ../../..
    

🎥 Data

  # Step 1: Download demo data from https://gvv-assets.mpi-inf.mpg.de/DUT and place them in ./datas
  # datas
  #   ├── shaders (exists there)
  #   ├── vis (exists there)
  #   ├── preprocess_data.py (exists there)
  #   ├── preprocess_data_s2618.py (exists there)
  #   ├── select_self_intersection.mlx (exists there)
  #   └── demo
  
  # Step 2: Download DUT dataset from: https://gvv-assets.mpi-inf.mpg.de/DUT to /XX/XX/DUT_official(where to save dataset)
  #         Edit the script "./data/process_data.py", base_dir = /XX/XX/DUT_official
  #         Run the following scripts to generate training datas and testing datas:
  cd ./datas
  python ./preprocess_data.py -subi 724 -ct tight -st training
  python ./preprocess_data.py -subi 724 -ct tight -st training -cs
  python ./preprocess_data.py -subi 724 -ct tight -st testing
  python ./preprocess_data.py -subi 724 -ct tight -st testing -cs
  # Option, geting sparse images for inference, which is more efficient,
  # when evaluation is not necessary.
  # Note, edit indices under isSparse before use it.
  # python ./preprocess_data.py -subi 724 -ct tight -st testing --sparse
  # python ./preprocess_data.py -subi 724 -ct tight -st testing --sparse -cs
  # change the subi (subject index) and ct (cloth type) to process other subjects
  cd ..

🐆 Fast Demo

# Fast demo with provided demo data and checkpoints.
python ./infer_full_normal_xyz.py  --split testing --config ./configs/s724.yaml --deltaType xyz \
 --ckpt1 ./datas/demo/ckpt/s724_geometry_256/s724_150000.pth  --ckpt2 ./datas/demo/ckpt/s724_gaussian_512/s724_1970000.pth \
 --texResGeo 256 --texResGau 512 --demo --saveDebug

🏃 Run

#Step I: Prepare First Texture Cache
python ./infer_full_normal_xyz.py  --split testing --config ./configs/s724.yaml --saveTexFirst --deltaType xyz

#Step II: Train GeoNet
bash ./scripts/s724/submit_1gpu_3hour_s724_geometry_texResGeo256_xyz_iso0.5.sh

#Step III: Prepare Second Texture Cache
python ./infer_full_normal_xyz.py  --split testing --config ./configs/s724.yaml --saveTexSecond --deltaType xyz --ckpt1 /CkptPathOfGeometry/s724_150000.pth

#Step IV: Train GeoNet
bash ./scripts/s724/submit_1gpu_24hour_s724_gaussian_texResGeo256_xyz_1k.sh

#Step V: Infer
python ./infer_full_normal_xyz.py  --split testing --config ./configs/s724.yaml --saveDebug --deltaType xyz --ckpt1 /CkptPathOfGeometry/s724_150000.pth --ckpt2 /CkptPathOfGaussian/s724_1970000.pth --texResGeo 256 --texResGau 512 --vis

📏 Evaluate

# evaluate geometry results
python ./train_geometry.py --split test --config ./configs/s724.yaml --ckpt /CkptPathOfGeometry/s724_150000.pth

# evaluate rendering results
cd ./evaluations
python ./00_eval_dut.py # edit subjectType, scale, tagName

🕙 Inference Time

When cleaning code, we found a hyper-parameter typing error regrading inference time evaluation of Ours-large, namely we used "--texResGeo 512 --texResGau 256" instead of "--texResGeo 256 --texResGau 512". We fix such bug and update the teaser figure and inference time evaluation table in the latest arxiv.

# evaluate time
python ./infer_full_normal_xyz_time.py --split testing --config ./configs/s3.yaml --deltaType xyz \
  --ckpt1 /CkptPathOfGeometry/s3_150000.pth \
  --ckpt2 /CkptPathOfGaussian/s3_1970000.pth \
   --texResGeo 256 --texResGau [256 or 512] --imgScale [0.25 or 1.0]

🔧 Potential bug fixing

In the original implementation of GauNet (./models/unet.py UNet), we followed ASH and used batch norm by default, which performs not well with batch size of 1. Thus, we recommend to use group norm, you may edit the code where I commented out in (DoubleConv). For reusage of our provided checkpoint, we keep the bug and use batch norm in the current version.

🌹 Acknowledgements

Some great prior works and codes we benefit from: 3DGStreamViewer, Nvdiffrast , EasyMocap, metacap, GPS-Gaussian

📖 License

Both the source code and our data are under the terms of the Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) license. This project is only for research or education purposes, and not freely available for commercial use or redistribution. You may drop email to authors to inquire details or authorizations.

🍺 Citation

If you find the codes or datasets from this repository helpful in your projects, welcome to cite our paper and give a star.

@InProceedings{sun2025real,
title = {Real-time Free-view Human Rendering from Sparse-view RGB Videos using Double Unprojected Textures},
author = {Sun, Guoxing and Dabral, Rishabh and Zhu, Heming and Fua, Pascal and Theobalt, Christian and Habermann, Marc},
year = {2025},
month = {June},
booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
}

About

[CVPR 2025 Highlight] Real-time Free-view Human Rendering from Sparse-view RGB Videos using Double Unprojected Textures

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published