An open API service indexing awesome lists of open source software.

https://github.com/ptrvilya/tridi

[ICCV'25] Method for generating static human-object interactions
https://github.com/ptrvilya/tridi

3d-human human-object human-object-interaction iccv iccv2025 iccv25

Last synced: 5 months ago
JSON representation

[ICCV'25] Method for generating static human-object interactions

Awesome Lists containing this project

README

          


TriDi: Trilateral Diffusion of 3D Humans, Objects and Interactions




Ilya A. Petrov

Riccardo Marin

Julian Chibane

Gerard Pons-Moll



ICCV 2025




Project Teaser





Paper PDF



Project Page



YouTube video

## Environment
The code was tested under `Ubuntu 24.04, Python 3.10, CUDA 13.0, PyTorch 2.9.0`.
Use the following command to create a conda environment with necessary dependencies:
```bash
conda env create -f environment.yml
```

## Data downloading and processing
The steps are described in [docs/data.md](./docs/data.md).

## Pre-trained models and evaluation
Pre-trained model can be obtained from the [link](https://nc.mlcloud.uni-tuebingen.de/index.php/s/bmsRACRqzCQ4QPq).
With the commands:
```bash
wget https://nc.mlcloud.uni-tuebingen.de/public.php/dav/files/bmsRACRqzCQ4QPq/gb_main.pth -O ./assets/gb_main.pth
wget https://nc.mlcloud.uni-tuebingen.de/public.php/dav/files/bmsRACRqzCQ4QPq/gb_contacts.pth -O ./assets/gb_contacts.pth
```

The command below is used to run sampling. Prameter `sample.mode` controls the choice of modalities, i.e.:
three numbers correspond to human, object, and interaction, respectively;
`1` means the modality is sampled, `0` means it is conditioned on.
For example, `sample.mode="sample_101"` means sampling human and interaction conditioned on the object.
```bash
python main.py -c config/env.yaml scenarios/gb_main.yaml -- \
run.job=sample run.name=001_gb_main sample.target=hdf5 \
resume.checkpoint="./assets/gb_main.pth" \
dataloader.batch_size=1024 sample.mode="sample_101" \
run.datasets=["grab","behave"] sample.dataset=normal sample.repetitions=3 \
model.cg_apply=True model.cg_scale=2.0
```
Use the command below to run evaluation on the generated samples. The `eval.sampling_target` parameter controls
which modalities are evaluated (possible values: `sbj_contact`, `obj_contact`,):
```bash
python main.py -c config/env.yaml scenarios/gb_main.yaml -- \
run.job=eval run.name=001_gb_main resume.step=-1 \
eval.sampling_target=['sbj_contact']
```

## Training
Use the following command to run the training:
```bash
python main.py -c config/env.yaml scenarios/gb_main.yaml -- \
run.name=001_gb_main run.job=train
```

## Citation
```bibtex
@inproceedings{petrov2025tridi,
title={TriDi: Trilateral Diffusion of 3D Humans, Objects and Interactions},
author={Petrov, Ilya A and Marin, Riccardo and Chibane, Julian and Pons-Moll, Gerard},
booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision},
year={2025}
}
```

## Acknowledgements
This project benefited from the following resources:
* [BEHAVE](https://virtualhumans.mpi-inf.mpg.de/behave/license.html), [GRAB](https://grab.is.tue.mpg.de/),
[OMOMO](https://github.com/lijiaman/omomo_release), and [InterCap](https://intercap.is.tue.mpg.de/) datasets;
* [grab](https://github.com/otaheri/GRAB) preprocessing code;
* [smplx](https://github.com/vchoutas/smplx) repository: SMPL-X to SMPL+H conversion;
* [PC^2 diffusion](https://github.com/lukemelas/projection-conditioned-point-cloud-diffusion): diffusion implementation;
* [PointNeXt](https://github.com/guochengqian/PointNeXt): point cloud encoder;
* [blendify](https://github.com/ptrvilya/blendify/): all visualizations;
* [blogpost](http://danshiebler.com/2016-09-14-parallel-progress-bar/): parallel map implementation.