PicoPose is a novel three-stage framework for zero-shot 6D pose estimation of unseen objects from RGB images. It first matches RGB features with rendered templates for coarse correspondences, then smooths the correspondences by globally regressing a 2D affine transformation, and finally learns correspondence offsets within local regions to achieve fine-grained correspondences.
conda create -n picopose python=3.9
conda activate picopose
python -m pip install -r requirements.txt
Click to expand
Our data structure in data folder is constructed as follows:
data
├── MegaPose-Training-Data
├── MegaPose-GSO
├──google_scanned_objects
└──train_pbr_web
├── MegaPose-ShapeNetCore
├──shapenetcorev2
└──train_pbr_web
├── MegaPose-Templates
├──GSO
└──ShapeNetCore
├── BOP_Datasets # https://bop.felk.cvut.cz/datasets/
├──tudl
├──lmo
├──ycbv
├──icbin
├──hb
├──itodd
├──tless
└──templates
└── bop23_default_detections_for_task4
└──cnos-fastsam
The training datasets you can download the rendered images of c provided by BOP official in the respective MegaPose-Training-Data/MegaPose-GSO/train_pbr_web and MegaPose-Training-Data/MegaPose-ShapeNetCore/train_pbr_web folders.
The pre-processed object models of the two datasets provided by MegePose can be downloaded to the MegaPose-Training-Data/MegaPose-GSO/google_scanned_objects and MegaPose-Training-Data/MegaPose-ShapeNetCore/shapenetcorev2 folders respectively.
To evaluate on BOP datasets, you can download the test data and object CAD models for the seven core datasets from the official BOP website. We use the CNOS detection results on seven datasets officially provided by BOP.
Before starting training and testing, please render the corresponding templates in advance. We mainly render the templates based on the code of GigaPose, and the entire rendering environment is on the docker provided by MegaPose.
# Installing extra environments on megapose docker
bash rendering/inv_env.sh
# Rendering shapenetv2
python rendering/scripts/render_shapenet_templates.py
# Rendering gso
python rendering/scripts/render_gso_templates.py
# Rendering bop
python rendering/scripts/render_bop_templates.py
To train PicoPose, please prepare the training data and run the folowing command:
python run_train.py --model picopose --config config/base.yaml --version_id 0
To evaluate the model on BOP datasets, please run the following command:
python run_test.py --gpus 0 --model picopose --config config/base.yaml --dataset $DATASET --version_id 0
The string "DATASET" could be set as lmo, icbin, itodd, hb, tless, tudl or ycbv. We also offer downloadable rendered templates [link].
One could also directly specify the checkpoint path for evaluation:
python run_test.py --gpus 0 --model picopose --config config/base.yaml --dataset $DATASET --version_id 0 --checkpoint_path $CHECKPOINT_PATH
The string "CHECKPOINT_PATH" is the path to the checkpoint saved during training. Our trained model is provided here.
If you find our work useful in your research, please consider citing:
@article{liu2025picopose,
title={PicoPose: Progressive Pixel-to-Pixel Correspondence Learning for Novel Object Pose Estimation},
author={Liu, Lihua and Lin, Jiehong and Liu, Zhenxin and Jia, Kui},
journal={arXiv preprint arXiv:2504.02617},
year={2025}
}