This work was accepted by CVPR 2025.
You may check the repo with all commits in https://github.com/ShuYuMo2003/TransArticulate/tree/main
if you are interested :).
git clone https://github.com/ShuYuMo2003/ArtFormer.git
conda env create -f env.yml
conda activate gao
Get into utils/z_to_mesh/utils/libmcubes
, run python setup.py build_ext --inplace
.
compile utils/z_to_mesh/utils/libmise
and ``utils/z_to_mesh/utils/libsimplify` with the same command.
We use wandb
to recording the logs durning the training. You may need to login first.
wandb login
mkdir 3rd && cd 3rd
wget https://ftp.halifax.rwth-aachen.de/blender/release/Blender4.2/blender-4.2.2-linux-x64.tar.xz
tar -xvf blender-4.2.2-linux-x64.tar.xz
download articulation transformer checkpoint and change the first line of configs/3_TF-Diff/text-eval.yaml
.
python demo.py -c configs/3_TF-Diff/text-eval.yaml
Download the dataset(partnet-mobility-v0.zip
) from https://sapien.ucsd.edu/downloads
.
cd data/datasets
# place `partnet-mobility-v0.zip` here
unzip partnet-mobility-v0.zip
mv dataset 0_raw_dataset
cd ../process_data_script
python 1_extract_from_raw_dataset.py
The script above will refactor the structure of data in the raw dataset. It's fine if you encounter a little Failed shape
after the execution, which is caused by some broken objects in PartNet-Mobility.
python 2.1_generate_gensdf_dataset.py --n_process 20
The script above will sample the
This process may take about --n_process 20
. If your CPU or memory is insufficient, please reduce --n_process
appropriately.
After the processing of each mesh, the script will print a table about some related info like:
┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓
┃ Item ┃ Shape ┃ Occ Rate ┃ Bounds ┃ Abs Sdf Range ┃
┡━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩
│ Point Uniform │ (200000, 3) │ 0.0249 │ -1.0250 ~ 1.0250 │ 0.0000 ~ 1.0486 │
│ Point Surface │ (200000, 3) │ 0.4907 │ -1.0470 ~ 1.0485 │ 0.0000 ~ 0.0521 │
│ Point On Mesh │ (144018, 3) │ 0.1795 │ -1.0057 ~ 1.0058 │ 0.0000 ~ 0.0000 │
│ Total │ (544018, 3) │ 0.2371 │ -1.0470 ~ 1.0485 │ 0.0000 ~ 1.0486 │
└───────────────┴─────────────┴──────────┴──────────────────┴─────────────────┘
If you do see this table, it means everything is working fine. If you never see this table in stdout, it might indicate a sampling failure! Please reduce your --n_process
value appropriately.
Following script will start the training process for SDF model.
cd ../.. # back to repo root folder.
python 1_train_SDF.py -c configs/1_SDF/train.yaml
After training of SDF model, you can choose a checkpoint of SDF model in train_root_dir
. The path of checkpoint should be like train_root_dir/SDF/checkpoint/05-16-02PM-26-34/sdf_epoch=2539-loss=0.00233.ckpt
.
cd data/process_data_script
python 2.2_generate_diff_dataset.py --sdf_ckpt_path path/to/SDF/checkpoint
The script will generate the dataset for diffusion model.
cd ../.. # back to repo root folder.
python 2_train_diff.py -c configs/2_Diff/train.yaml
cd data/process_data_script
python 3.0_generate_text_used_image.py
The script above will generate the image of each object by call blender
and save the image and log files in 4_screenshot_high_q
.
The images will be used to generate the description of each articulated object.
You can use the script below to call ChatGPT (via. poe.com
) to generate the description by your self:
python 3.1_generate_text_condition.py
or use our description dataset:
cd ../datasets # you should be in `data/datasets` now
cp ../../attachment/3_text_condition.zip .
unzip 3_text_condition
To encode the text description into tokens (by T5 Encoder):
python 3.2_generate_encoded_text_condition.py
To refactor the dataset into final articulation transformer dataset:
python 5_generate_text_transformer_dataset.py --diff_ckpt_path \
path/to/diffusion/checkpoint # in train_root_dir/Diff/checkpoint/<datetime>/*, you should choose one.
Start training of Articulation Transformer:
python 3_train_trans.py -c configs/3_TF-Diff/text-train.yaml
Choose a Articulation Transformer checkpoint in train_root_dir/Transformer_Diffusion/checkpoint/<training_datetime>/<name>.ckpt
and fill the path of checkpoint into the first line of configs/3_TF-Diff/text-eval.yaml
.
Generate the example articulated object by:
python 3_pred_trans.py -c configs/3_TF-Diff/text-eval.yaml