ProbPose introduces a probabilistic framework for human pose estimation, focusing on reducing false positives by predicting keypoint presence probabilities and handling out-of-image keypoints. It also introduces the new Ex-OKS metric to evaluate models on false positive predictions.
Key contributions:
- Presence probability concept that distinguishes keypoint presence from confidence
- ProbPose: top-down model for out-of-image keypoints estimation
- OKSLoss adapted for dense predictions in risk minimization formulation
- Ex-OKS evaluation metric penalizing false positive keypoints
- CropCOCO dataset for out-of-image and false positive keypoints evaluation
For more details, please visit our project website.
- July 2025: exococotools PyPI package available
- June 2025: Live webcam demo branch available
- April 2025: Code is released
- March 2025: Paper accepted to CVPR 2025! 🎉
This project is built on top of MMPose. Please refer to the MMPose installation guide for detailed setup instructions.
Basic installation steps:
# Clone the repository
git clone https://github.com/mirapurkrabek/ProbPose_code.git ProbPose/
cd ProbPose
# Install your version of torch, torchvision, OpenCV and NumPy
pip install torch==2.1.2+cu121 torchvision==0.16.2+cu121 --extra-index-url https://download.pytorch.org/whl/cu121
pip install numpy==1.25.1 opencv-python==4.9.0.80
# Install MMLibrary
pip install -U openmim
mim install mmengine "mmcv==2.1.0" "mmdet==3.3.0" "mmpretrain==1.2.0"
# Install dependencies
pip install -r requirements.txt
pip install -e .
Run the following command to test ProbPose on a single image:
python demo/image_demo.py \
demo/resources/CropCOCO_single_example.jpg \
configs/body_2d_keypoint/topdown_probmap/coco/td-pm_ProbPose-small_8xb64-210e_coco-256x192.py \
path/to/pre-trained/weights.pth \
--out-file demo/results/CropCOCO_single_example.jpg \
--draw-heatmap
Expected result (click for full size):
For more complex scenarios with multiple people, use the MMDetection-based demo:
python demo/topdown_demo_with_mmdet.py \
demo/mmdetection_cfg/rtmdet_m_640-8xb32_coco-person.py \
https://download.openmmlab.com/mmpose/v1/projects/rtmpose/rtmdet_m_8xb32-100e_coco-obj365-person-235e8209.pth \
configs/body_2d_keypoint/topdown_probmap/coco/td-pm_ProbPose-small_8xb64-210e_coco-256x192.py \
path/to/pre-trained/weights.pth \
--input demo/resources/CropCOCO_multi_example.jpg \
--draw-bbox \
--output-root demo/results/ \
--draw-heatmap
Expected result (click for full size):
For more detailed information on demos and visualization options, please refer to the MMPose documentation.
Pre-trained models are available on VRG Hugging Face 🤗:
The CropCOCO dataset is available on VRG Hugging Face 🤗.
For Ex-OKS and Ex-mAP evaluation, you can use cocoeval.py file which is a direct replacement for the original cocoeval.py file from xtcocotools. We plan to release Ex-mAP evaluation tool as a standalone package similar to xtcocotools.
Our Ex-OKS metric can be computed via the standalone exococotools package, which is fully backward-compatible with xtcocotools/pycocotools. Install and run it as a drop-in replacement:
pip install exococotools
For more details and advanced options, see the package website: https://github.com/MiraPurkrabek/exococotools
- Add config and weights for DoubleProbmap model
- Add out-of-image pose visualization
- Add new package with Ex-OKS implementation --> exococotools
- Add ProbPose to MMPose library
- Create HuggingFace demo
This project is built on top of MMPose. We would like to thank the MMPose team for their excellent work and support.
If you find this work useful, please consider citing our paper:
@InProceedings{Purkrabek2025CVPR,
author = {Purkrabek, Miroslav and Matas, Jiri},
title = {ProbPose: A Probabilistic Approach to 2D Human Pose Estimation},
booktitle = {Proceedings of the Computer Vision and Pattern Recognition Conference (CVPR)},
month = {June},
year = {2025},
pages = {27124-27133}
}