SimonPose is a research prototype exploring how to improve monocular human pose estimation by fitting a parametric body model (SMPL) to DensePose v2 / CSE outputs.
DensePose provides dense 2D-to-body correspondences (per-pixel embeddings). SimonPose uses those correspondences to optimize SMPL parameters and produce a globally consistent 3D human mesh.
This repository accompanies the write-up for maturita exam in documentation/simon-bravek-mp-2026.pdf.
Tested stack (recommended):
- Python 3.11
- Linux + NVIDIA GPU
- PyTorch 2.4.x + CUDA (tested on CUDA 12.4 with
cu121PyTorch wheels)
It may run on CPU, but DensePose + fitting will be very slow.
- Research code (not a polished library); scripts are the primary interface.
projects/euclidean_fitter.py: usable end-to-end experiment script (SMPL fitting driven by a 2D euclidean loss).projects/precission_fitter.py: work-in-progress analysis prototype; computes/visualizes DensePose correspondence stability, but does not run a full SMPL fitting loop.
projects.euclidean_fitter(ready): fits SMPL to DensePose CSE correspondences and saves per-iteration visualizations + loss plots.projects.precission_fitter(WIP): analyzes DensePose-to-SMPL correspondence stability (per-vertex dispersion) and visualizes it; no fitting/optimization yet.
The report also discusses an embedding-based fitter prototype; it was evaluated as a dead end and is not maintained as a runnable project in this repository.
- Input: RGB images (COCO 2014 val by default) + DensePose CSE weights + SMPL model file.
- Output: visualizations and diagnostics in
output/(loss plots, overlays of the fitted mesh on the image).
You run everything from the repo root.
Full documentation index: docs/README.md
- Setup environment and dependencies:
- Local machine:
docs/setup-local.md - CTU cluster:
docs/setup-ctu.md
- Download datasets and model files:
- Run the working project:
python -m projects.euclidean_fitter -n 1 -i 200Expected output:
- A new run directory
output/euclidean_fitter_0/(or the next available suffix). - Per-image overview PNGs like
output/euclidean_fitter_0/<image_id>_<person_index>_overview.png. - Aggregate plots:
output/euclidean_fitter_0/loss_histogram.pngandoutput/euclidean_fitter_0/loss_remaining_histogram.png.
- How to run each script, what it produces, and what is WIP:
docs/running.md
projects/: runnable experiment scripts.common/: shared utilities (projection, loss functions, DensePose overrides, optional depth experiments).config.py: central paths; assumes this directory structure:data/(ignored by git): datasets and annotationsmodels/(ignored by git): DensePose + SMPL model filesexternal/(ignored by git): third-party code such as Detectron2output/(ignored by git): generated results
If you want a different layout, edit config.py.
Configuration details: docs/configuration.md
- Common install/runtime issues (Detectron2 builds, CUDA mismatch, missing models/data):
docs/troubleshooting.md
The code in this repository is licensed under Apache 2.0 (see LICENSE).
Note: datasets and model files (COCO, DensePose weights, SMPL/SMPL-X) are not redistributed and have their own licenses/terms.
This project relies on:
- Detectron2 + DensePose (Apache 2.0)
- COCO API (Apache 2.0)
- SMPL/SMPL-X model files (separate license/terms from MPI/MPG; see
docs/data.md)
If you use this code in academic work, please cite the accompanying report:
@misc{bravek2026simonpose,
title = {SimonPose},
author = {Šimon Brávek},
year = {2026},
institution = {FEL CTU (fel.cvut.cz) and Johannes Kepler Grammar School (gjk.cz)},
howpublished = {[simon-bravek-mp-2026.pdf](https://github.com/simonbravek/SimonPose/blob/main/documentation/simon-bravek-mp-2026.pdf)}
}