Skip to main content

hotcoco

CI PyPI Crates.io License: MIT

hotcoco is a perception evaluation toolkit, written in Rust with Python bindings. It's a drop-in replacement for pycocotools — the same numbers bit for bit, up to 113× faster — plus the analysis that usually lives in separate tools: TIDE error analysis, confusion matrices, confidence calibration, model comparison, label-error detection, and a dataset browser.

It covers detection today — boxes, masks, keypoints, and oriented boxes on the COCO, LVIS, and Open Images protocols. Panoptic and tracking are planned, on the same engine.

Pure Rust, available as a Python package, CLI tool, and Rust library.

Documentation | Changelog | Roadmap

Performance

Bbox evaluation on COCO val2017 runs in 0.05s against 5.11s for pycocotools; segm is ~111× faster and keypoints ~55×. Peak memory is a third of pycocotools' or less at every scale measured. Two other Rust evaluators, ultrafast-pycocotools and vernier, are in the same speed class; the benchmarks page compares all five on time and memory. The precision, recall, and scores arrays and every summary metric are bit-identical to pycocotools', so your AP scores don't change.

Full tables, hardware, the Objects365 scale run, phase breakdowns, and parity verification: Benchmarks.

Get started

pip install hotcoco

No Cython, no C compiler, no Microsoft Build Tools. Prebuilt wheels for Linux, macOS, and Windows.

Already using pycocotools? One line:

from hotcoco import init_as_pycocotools
init_as_pycocotools()

Or use it directly — the API is identical:

from hotcoco import COCO, COCOeval

coco_gt = COCO("instances_val2017.json")
coco_dt = coco_gt.load_res("detections.json")

ev = COCOeval(coco_gt, coco_dt, "bbox")
ev.run()

What's included

Evaluate

  • COCO, LVIS, and Open Images evaluation — bbox, segmentation, keypoints, and oriented bounding box (OBB); all standard metrics plus LVIS federated eval (APr/APc/APf) and Open Images hierarchy-aware eval (group-of matching, GT expansion). OBB evaluation uses rotated IoU via polygon clipping for aerial imagery, document analysis, and scene text. See the evaluation guide and LVIS and Open Images.
  • Streaming evaluation — StreamingEval matches each image as its detections arrive, so a validation epoch ends with only accumulate() and summarize() left to run; the numbers are identical to a batch run. It takes the detector's prediction array directly, and shards streamed on separate ranks merge into one result. See streaming evaluation.
  • Evaluation reports — ev.report() returns metrics, per-class and per-group breakdowns, plottable PR curves, and a provenance field that says whether each number is comparable to a published leaderboard or is a hotcoco extension. See the evaluation report.

Diagnose

  • TIDE error analysis — classifies every false positive and false negative into one of six error types and reports how much AP each type costs. See TIDE errors.
  • Confusion matrix — cross-category matching with per-class breakdowns. See confusion matrix.
  • Confidence calibration — ECE/MCE metrics and reliability diagrams measure whether your model's confidence scores are meaningful. See calibration.
  • Per-image diagnostics and label errors — per-image F1/AP scores, automatic detection of wrong labels and missing annotations in your ground truth. See diagnostics.
  • Model comparison — hotcoco.compare(eval_a, eval_b) with per-metric deltas, per-category AP breakdown, and bootstrap confidence intervals for statistical significance. See model comparison.
  • F-scores — F-beta averaging over precision/recall curves, analogous to mAP. See F-scores.
  • Sliced evaluation — re-accumulate metrics for named image subsets (indoor/outdoor, day/night) without recomputing IoU. See sliced evaluation.
  • Plotting — publication-quality PR curves, per-category AP, confusion matrices, and TIDE error breakdowns. Light and dark themes (cyanotype, cyanotype-dark) with paper_mode for LaTeX/PowerPoint embedding. report() generates a single-page PDF summary. pip install hotcoco[plot]. See plotting.

Explore your data

  • Dataset browser — coco.browse() / coco explore opens a local browser with category filter, annotation overlays (bbox/segm/keypoints/OBB), hover-to-highlight, zoom/pan, and detection comparison. Pass eval= to enable an interactive eval dashboard with PR curves, confusion matrix, TIDE errors, calibration, and per-image F1. pip install hotcoco[browse]. See Dataset browser.
  • Dataset healthcheck — 4-layer validation (structural, quality, distribution, GT/DT compatibility) catches duplicate IDs, degenerate bboxes, category imbalance, and more. See healthcheck.
  • Format conversion — COCO ↔ YOLO, Pascal VOC, CVAT, DOTA (oriented boxes), and Open Images CSV, from Python or the CLI. See format conversion.

Compose and integrate

  • Metric functions on plain arrays — hotcoco.metrics and hotcoco.primitives expose the engine as free functions, the way sklearn.metrics and torchmetrics.functional do. No evaluator, no dataset, no COCO JSON: metrics.average_precision(scores, matched, num_gt=...), primitives.lsap(cost). COCOeval calls the same functions, so the numbers cannot diverge. See metrics and primitives.
  • PyTorch integrations — CocoDetection and CocoEvaluator drop-in replacements for torchvision's detection classes; no torchvision or pycocotools dependency required. See PyTorch integration.
  • Experiment tracker integration — get_results(prefix="val/bbox", per_class=True) returns a flat dict ready for W&B, MLflow, or any logger. See logging metrics.
  • Python CLI (coco) — included with pip install hotcoco; eval, healthcheck, stats, filter, merge, split, sample, convert, compare, and explore subcommands. See CLI reference.
  • Rust CLI (coco-eval) — lightweight eval-only binary; cargo install hotcoco-cli. See CLI reference.
  • Type stubs — ships with .pyi stubs and py.typed marker for full autocomplete and type checking in VS Code, PyCharm, and other IDEs.
  • Rust library — use hotcoco directly in your Rust projects via cargo add hotcoco. See Rust API.

Contributing

Contributions are welcome. See CONTRIBUTING.md for the architecture overview, build and test workflow, and pre-commit checks.

Parity with pycocotools is a hard requirement for any change to evaluation logic; CONTRIBUTING.md describes how to verify it.

License

MIT

Metadata

Release files for hotcoco 1.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hotcoco 1.2.0
File Size Uploaded
hotcoco-1.2.0.tar.gz 1.7 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for hotcoco 1.2.0
File
hotcoco-1.2.0-cp310-abi3-win_amd64.whl CPython 3.10 abi3 Windows x86-64 Details
hotcoco-1.2.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 abi3 Linux glibc 2.17+ x86-64 Details
hotcoco-1.2.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 abi3 Linux glibc 2.17+ ARM64 Details
hotcoco-1.2.0-cp310-abi3-macosx_11_0_arm64.whl CPython 3.10 abi3 macOS 11.0+ ARM64 Details
hotcoco-1.2.0-cp310-abi3-macosx_10_12_x86_64.whl CPython 3.10 abi3 macOS 10.12+ x86-64 Details

Total release size: 14.0 MB

Release files / hotcoco-1.2.0.tar.gz

Download URL hotcoco-1.2.0.tar.gz
Size 1.7 MB
Tags Source
SHA-256 checksum
How to use checksums
e2985d66d546d4856250867f6ee2c8447305003ed7897196da407394d6536021
BLAKE2b-256 checksum
How to use checksums
38e48febeb234b2eeffa0087fe62801774349e142ee53192988f7c7edb8027d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / hotcoco-1.2.0-cp310-abi3-win_amd64.whl

Download URL hotcoco-1.2.0-cp310-abi3-win_amd64.whl
Size 2.3 MB
Tags CPython 3.10 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
5297c872e41ae01249cec39afd50bca9c70afe4a6a19afd5fcbecbd24116210f
BLAKE2b-256 checksum
How to use checksums
373c601f3ad30cfdddff41d89df90f890172fc925102516652051e51dffa6f30
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / hotcoco-1.2.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL hotcoco-1.2.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 2.6 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
c3627d46a1c09ffaca6e7d534673f6d3f62098f0071a4c588c0a77f71be96265
BLAKE2b-256 checksum
How to use checksums
b579a7fca201f9978379d5d3dc1f3f59192fa21adc51fb72703f8ed449350b65
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / hotcoco-1.2.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL hotcoco-1.2.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 2.5 MB
Tags CPython 3.10 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
ee8f134af199ad87a70174b93150ffff4d93fb5c5c23c88ae4d527d47aa5b87a
BLAKE2b-256 checksum
How to use checksums
490e9093f410bf119189c7c2e19b374f28a263b7d127d570712d215274db6e73
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / hotcoco-1.2.0-cp310-abi3-macosx_11_0_arm64.whl

Download URL hotcoco-1.2.0-cp310-abi3-macosx_11_0_arm64.whl
Size 2.4 MB
Tags CPython 3.10 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
e09a29a1b897153184dee853964612dd911a3fe2097ca05ff4e8aa763c7967a3
BLAKE2b-256 checksum
How to use checksums
208223d97064f8652383fc5620b7f28107d03d4f421927cc546d707456a0c656
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / hotcoco-1.2.0-cp310-abi3-macosx_10_12_x86_64.whl

Download URL hotcoco-1.2.0-cp310-abi3-macosx_10_12_x86_64.whl
Size 2.5 MB
Tags CPython 3.10 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
b309c3ed867d67cb71fd1924ed204df151bac45ce370179f4f6aba9bc917b2e2
BLAKE2b-256 checksum
How to use checksums
77fa55f129a42b97be1612964917262ce21b329fe9b1bc8c6683e8be2287005f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

1.2.1

6 release files

This release

1.2.0 This release

6 release files

1.1.0

6 release files

1.0.1

6 release files

1.0.0

6 release files

0.5.0

6 release files

0.4.1

6 release files

0.4.0

7 release files

0.3.0

7 release files

0.2.0

8 release files

0.1.0

8 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page