hannahwxy/AffordBot

Official implementation of AffordBot: 3D Fine-Grained Embodied Reasoning via Multimodal Large Language Models

13

stars

3

commits

Python

primary language

Dec 4, 2025

updated

README


[NeurIPS 2025] AffordBot: 3D Fine-grained Embodied
Reasoning via Multimodal Large Language Models

Xinyi Wang, Xun Yang, Yanlong Xu, Yuchen Wu, Zhen Li, Na Zhao

Paper PDF Project Page

Pipeline

AffordBot pioneers the Fine-grained 3D Embodied Reasoning task, introducing a unified framework that integrates multimodal large language models to jointly perform affordance grounding and motion estimation.

πŸ”§ Installation

Clone the repository:

git clone https://github.com/hannahwxy/AffordBot.git
cd AffordBot

Set up the environment:

conda env create -f environment.yml
conda activate affordbot

If the installation of PyTorch3D fails, please comment out the pytorch3d line in the environment.yml and install it manually following official installation guide.

πŸ—‚οΈ Data Preparation

Download the Qwen2.5-VL-72B-Instruct, and place it in:

./ckpts/

Download the SceneFun3D dataset, and place it in:

./data/scenefun3d/dataset/

Download the SceneFun3D segmentation results generated with Mask3D, and place them in:

./data/scenefun3d/pred_mask/

Folder Structure:

AffordBot
β”œβ”€β”€ ckpts
β”‚Β Β  β”œβ”€β”€ Qwen2.5-VL-72B-Instruct
β”œβ”€β”€ data
β”‚Β Β  β”œβ”€β”€ scenefun3d
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ annotation
β”‚Β   β”‚Β Β  β”œβ”€β”€ dataset
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ...
β”‚Β Β  β”‚Β Β  └── utils
β”œβ”€β”€ eval
β”œβ”€β”€ infer
β”œβ”€β”€ outputs
β”œβ”€β”€ ...
└── README.md

πŸš€ Usage

Descriptor Generation

python infer/export_descriptor.py

MLLM Deployment

python -m vllm.entrypoints.openai.api_server --model <path_to_mllm>  --served-model-name <model_name> --tensor-parallel-size 4

Inference

python infer/inference_scenefun3d.py --exp_name <experiment_name>
  • Replace <experiment_name> with a custom name for your experiment.
  • The results will be saved under ./outputs/experiment_name/

Evaluation

python eval/evaluate_scenefun3d.py --exp_name <experiment_name> --wmotion
  • Replace <experiment_name> with the name used during inference.

🧩 Acknowledgments

We would like to thank the following repositories for their contributions:

Contributors

hannahwxy

3 commits

hannahwxy/AffordBot

Official implementation of AffordBot: 3D Fine-Grained Embodied Reasoning via Multimodal Large Language Models

13

stars

3

commits

Python

primary language

Dec 4, 2025

updated

README


[NeurIPS 2025] AffordBot: 3D Fine-grained Embodied
Reasoning via Multimodal Large Language Models

Xinyi Wang, Xun Yang, Yanlong Xu, Yuchen Wu, Zhen Li, Na Zhao

Paper PDF Project Page

Pipeline

AffordBot pioneers the Fine-grained 3D Embodied Reasoning task, introducing a unified framework that integrates multimodal large language models to jointly perform affordance grounding and motion estimation.

πŸ”§ Installation

Clone the repository:

git clone https://github.com/hannahwxy/AffordBot.git
cd AffordBot

Set up the environment:

conda env create -f environment.yml
conda activate affordbot

If the installation of PyTorch3D fails, please comment out the pytorch3d line in the environment.yml and install it manually following official installation guide.

πŸ—‚οΈ Data Preparation

Download the Qwen2.5-VL-72B-Instruct, and place it in:

./ckpts/

Download the SceneFun3D dataset, and place it in:

./data/scenefun3d/dataset/

Download the SceneFun3D segmentation results generated with Mask3D, and place them in:

./data/scenefun3d/pred_mask/

Folder Structure:

AffordBot
β”œβ”€β”€ ckpts
β”‚Β Β  β”œβ”€β”€ Qwen2.5-VL-72B-Instruct
β”œβ”€β”€ data
β”‚Β Β  β”œβ”€β”€ scenefun3d
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ annotation
β”‚Β   β”‚Β Β  β”œβ”€β”€ dataset
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ...
β”‚Β Β  β”‚Β Β  └── utils
β”œβ”€β”€ eval
β”œβ”€β”€ infer
β”œβ”€β”€ outputs
β”œβ”€β”€ ...
└── README.md

πŸš€ Usage

Descriptor Generation

python infer/export_descriptor.py

MLLM Deployment

python -m vllm.entrypoints.openai.api_server --model <path_to_mllm>  --served-model-name <model_name> --tensor-parallel-size 4

Inference

python infer/inference_scenefun3d.py --exp_name <experiment_name>
  • Replace <experiment_name> with a custom name for your experiment.
  • The results will be saved under ./outputs/experiment_name/

Evaluation

python eval/evaluate_scenefun3d.py --exp_name <experiment_name> --wmotion
  • Replace <experiment_name> with the name used during inference.

🧩 Acknowledgments

We would like to thank the following repositories for their contributions:

Contributors

hannahwxy

3 commits

Languages

Python

100.0%