Giter VIP home page Giter VIP logo

selfcontact's Introduction

selfcontact

This repo is part of our project: On Self-Contact and Human Pose.
[Project Page] [Paper] [MPI Project Page]

It includes the main function to segment the SMPL and SMPL-X meshes into inside / outside / in-contact vertices. It includes contact losses that are used with SMPLify-XMC and TUCH.

Result vertices in contact

Vertices in contact (blue) based on geodesic and euclidean distances. In this example, the geodesic threshold is 30 cm and the euclidean threshold is 2 cm. In red, detected self-intersecting vertices with segment tests.

License

Software Copyright License for non-commercial scientific research purposes. Please read carefully the following terms and conditions and any accompanying documentation before you download and/or use the TUCH data and software, (the "Data & Software"), including 3D meshes, images, videos, textures, software, scripts, and animations. By downloading and/or using the Data & Software (including downloading, cloning, installing, and any other use of the corresponding github repository), you acknowledge that you have read these terms and conditions, understand them, and agree to be bound by them. If you do not agree with these terms and conditions, you must not download and/or use the Data & Software. Any infringement of the terms of this agreement will automatically terminate your rights under this License.

!! NEW !!

  • [18 August 2021] Version 0.2.0: Self-contact optimization added. See 5) for more details.
  • [21 June 2021] Version 0.1.0: Self-intersections and self-contact detection (commit b82d6ffaebca3871db8c60b9c2be6f45f84fe807)

Installation

1) Clone this repository

git clone [email protected]:muelea/selfcontact.git
cd selfcontact

2) Create python virtual environment and install requirements

python3 -m venv $YOUR_VENV_DIR/selfcontact
source $YOUR_VENV_DIR/selfcontact/bin/activate
pip install -r requirements.txt

To use the repo as python module, use pip install . instead and move on with step 3).

3) Download essentials

Download the essentials from here. These files are required and include for example the precomputed geodesic distances for the neutral SMPL-X and SMPL body modles. Unpack the essentions to ESSENTIALS_FOLDER

5) Run example script to test for self-intersections

# vertices in contact
python selfcontact/tutorial/find_vertices_in_contact.py --essentials_folder ESSENTIALS_FOLDER --output_folder OUTPUT_FOLDER
# intersecting vertices
python selfcontact/tutorial/find_self_intersecting_vertices.py --essentials_folder ESSENTIALS_FOLDER --output_folder OUTPUT_FOLDER

Result inside / outside segmentation without segment tests
Mesh with result inside / outside segmentation WITHOUT segment tests. Note, how natural intersections, e.g. in the belly or crook regions are detected.

Result inside / outside segmentation without segment tests
Mesh with result inside / outside segmentation WITH segment tests. With segment testing, these self-intersections are ignored.

5) Run example script to test for self-contact optimization

Run the self-contact optimization:

python selfcontact/tutorial/run_selfcontact_optimization.py --essentials_folder ESSENTIALS_FOLDER --model_folder MODEL_FOLDER --output_folder OUTPUT_FOLDER

If you want to enable segment testing set the test_segments parameter to True in the config file (selfcontact/tutorial/configs/selfcontact_optimization_config_orig.yaml). Please not, that we did not use segment tests in the original paper. With segment testing the optimization is more stable, but the hyperparameters are not tuned.

Citation

@inproceedings{Mueller:CVPR:2021,
  title = {On Self-Contact and Human Pose},
  author = {M{\"u}ller, Lea and Osman, Ahmed A. A. and Tang, Siyu and Huang, Chun-Hao P. and Black, Michael J.},
  booktitle = {Proceedings IEEE/CVF Conf.~on Computer Vision and Pattern Recogßnition (CVPR)},
  month = jun,
  year = {2021},
  doi = {},
  month_numeric = {6}
}

Acknowledgement

We thank Vassilis Choutas for his implementation of the generalized winding numbers.

Contact

For questions, please contact [email protected]

For commercial licensing (and all related questions for business applications), please contact [email protected].

selfcontact's People

Contributors

muelea avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

selfcontact's Issues

SelfContact - tensor issue (running on GPU)

Hi Lea!

Running:

self_contact_module = SelfContact(essentials_folder=essentials)
self_contact_loss = SelfContactLoss(self_contact_module, device='cuda')
self_contact_loss(vertices.to(self_contact_loss.device))

Fails with:

Traceback (most recent call last):
  File "/disk2/guytevet/.pycharm_helpers/pydev/_pydevd_bundle/pydevd_exec2.py", line 3, in Exec
    exec(exp, global_vars, local_vars)
  File "<input>", line 1, in <module>
  File "/disk2/guytevet/venvs/py3.7_vibe/lib/python3.7/site-packages/torch/nn/modules/module.py", line 1051, in _call_impl
    return forward_call(*input, **kwargs)
  File "/disk2/guytevet/selfcontact/selfcontact/losses/general_selfcontact_loss.py", line 80, in forward
    test_segments=self.test_segments
  File "/disk2/guytevet/selfcontact/selfcontact/selfcontact.py", line 214, in segment_vertices
    vertices, v2v_min, incontact, exterior, test_segments)
  File "/disk2/guytevet/selfcontact/selfcontact/selfcontact.py", line 242, in segment_hd_points
    nzv = (exp1 == exp2).any(1).reshape(-1, 3).any(1)
RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!

From my understanding, this happens since the essentials are not loaded to self_contact_loss.device.

Many Thanks,

3DCP Dataset

Thanks for your great work!
Looking at the released 3DCP dataset - Does it contain the reported 3DCP Mocap dataset and how can I distinct 3DCP Mocap from 3DCP Scan?

Thanks:)

running run_selfcontact_optimization.py in SMPL model

Hi, I successfully run the run_selfcontact_optimization.py in model_type='smplx', when I change model_type from smplx to smpl, and modify some codes to be compatible with it, the mismatch still occurs. Finally, It may be a solution to utilize the smpl_to_smplx.pkl to convert to smplx by smpl model, but I don't how to use it. Could you offer some help? Thanks @paulchhuang @ahmedosman

TUCH regressor

Thanks for your great works. Will you public the 3D human pose regressor model(TUCH) in the future?

SelfContactLoss - memory issues (running on GPU)

Hi Lea:)
Applying SelfContactLoss with default parameters on batch_size=32 (i.e. [32, 10475, 3] tensor for a smplx mesh), fails for trying to allocate 112GB of GPU memory. Is there a way to handle this?

RuntimeError: CUDA out of memory. Tried to allocate 112.33 GiB (GPU 0; 10.76 GiB total capacity; 309.89 MiB already allocated; 9.30 GiB free; 346.00 MiB reserved in total by PyTorch)

Datasets availability

Thanks for your great work!
Will your datasets be made available to download?
Thanks

running speed

Hi,

Thanks for proposing this meaningful work! I wonder if the running speed can be improved so that the proposed loss functions, i.e. inside, outside, normal losses, can be incorporated into a training framework?

Thanks,

running run_selfcontact_optimization meet error

Thank you for sharing so excellent research. The error happens when I run run_selfcontact_optimization.py.
At first, My system is ubuntu18.04, cuda11.0, pytorch1.8.1
the detailed error is following:
File "/opt/conda/envs/selfcontact/lib/python3.6/site-packages/selfcontact/utils/mesh.py", line 66, in compute_vertex_normals vertices_faces[:, 0] - vertices_faces[:, 1])) RuntimeError: index_add_cuda_ does not have a deterministic implementation, but you set 'torch.use_deterministic_algorithms(True)'. You can turn off determinism just for this operation if that's acceptable for your application. You can also file an issue at https://github.com/pytorch/pytorch/issues to help us prioritize adding deterministic support for this operation.

I set the command torch.use_deterministic_algorithms(True), but it's useless. Hoping for your answer, thanks! @paulchhuang @ahmedosman

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.