tuliq
Runs in your browser

COCO Dataset Health Checker

Checks a COCO-format annotation file for the problems that normally only surface once a training or evaluation script chokes on it: annotations pointing at an image_id or category_id that doesn't exist, duplicate image or category IDs, boxes with zero size or extending past the image's edge, and — when you include the image files — images referenced but missing, or present but unreferenced. The COCO counterpart to the YOLO Dataset Health Checker, sharing that tool's findings model rather than reinventing it. Point it at just the instances.json on its own, or the whole folder/.zip; it also handles a dataset with instances_train.json alongside instances_val.json, checking each and rolling everything into one report. No image decoding needed — real COCO files declare each image's width and height directly, which is all the box-bounds check requires. Nothing is uploaded; every check runs in your browser.

Nothing is uploaded — every file is read directly in your browser. Pick a .zip and it's unzipped automatically; pick image/label files directly and they're used as-is. Folder selection can't be combined into the same picker — your browser shows a genuinely different, folder-only dialog for it.

About this tool

This tool checks a COCO-format annotation file for the problems that normally only surface once a training or evaluation script chokes on it: an annotation pointing at an image_id or category_id that doesn't exist, duplicate image or category IDs, boxes with zero size or extending past the image's edge, and — if you provide the image files alongside the JSON — images referenced but missing, or present but unreferenced. It's the COCO counterpart to the YOLO Dataset Health Checker, and deliberately shares that tool's findings model rather than reinventing it. You can point it at just the instances.json on its own (a completely valid way to inspect a dataset you received), or the whole folder/.zip including images for the additional file-presence checks. It handles a dataset with more than one annotation file — instances_train.json alongside instances_val.json — checking each independently and rolling everything into one report. No image decoding is needed: real COCO files declare each image's width and height directly, which is all the box-bounds check requires, so this stays as fast as reading the JSON. A malformed individual entry (an image missing its file_name, a bbox that isn't four numbers) is skipped and counted, not treated as a reason to give up on the whole file — the same philosophy the YOLO checker uses for a bad label line. Nothing is uploaded; the file is parsed and every check runs in your browser.

What you can do

  • Validate a COCO annotation file — the JSON alone, or alongside its images
  • Cross-reference integrity, duplicate IDs, degenerate and out-of-bounds boxes, missing image files
  • Findings grouped by problem type, one report even across multiple split files
  • Nothing is uploaded — the file is parsed and checked entirely in your browser

How to use

Step 1

Pick your COCO file(s)

Just the instances.json, or the whole dataset folder/.zip — image files are used for extra checks if present, but aren't required.

Step 2

Checks run automatically

Structure, every image/annotation/category cross-reference, and every box are validated the moment the file is read.

Step 3

Review the findings

Grouped by problem type, worst first — expand any group to see exactly which entries are affected.

Example

A finding looks like this:

COCO.ORPHAN_ANNOTATION

instances_train.json — Annotation 5123 references image_id 88, which doesn't exist.

Every finding names the annotation file and the specific entry involved — findings are grouped by type in the results, so all occurrences of one problem are visible at once.

How your data is handled

This tool is labeled 🟢 Browser: the COCO JSON (and any image files you include) are read directly via your browser's File API, and every check runs entirely client-side — nothing is uploaded, and there's no server involved anywhere in this tool. No AI model is used; every check is a deterministic rule, not a prediction. No image is ever decoded — the box-bounds check uses the width/height declared in the JSON itself.

Frequently asked questions

Do I need to include the image files, or is the JSON enough?+

The JSON alone is enough for almost everything — structure, cross-references, duplicate IDs, degenerate and out-of-bounds boxes all check fine from the annotation file by itself. Including the images adds two checks: images referenced in the JSON but missing from your files, and image files present but not referenced by any entry. If you don't include images, those two checks are simply skipped, not failed.

Why isn't an image with no annotations treated as an error?+

Because it's routinely intentional — a background image with nothing to detect, included on purpose. It's reported as an observation to review, exactly as the YOLO Dataset Health Checker treats an unlabeled image, not as a mistake.

What happens with a COCO file that has segmentation but no bounding boxes?+

Each annotation with no bbox is flagged as a warning, not an error — that's fine for a segmentation-only dataset, but a real problem if you're expecting to train an object detector. The distinction is left for you to make; the tool just surfaces it.

Does this check the segmentation masks or keypoints, or just bounding boxes?+

Just bounding boxes and the structural cross-references for now. Segmentation and keypoint validation would be a reasonable future addition, matching where the YOLO side of the CV Workbench is also heading.

How does it handle a dataset with instances_train.json and instances_val.json?+

Each annotation file is found, parsed, and checked on its own, and the findings are combined into one report with per-file paths so you can tell which file each problem is in. The top-line counts (images, annotations, categories) are the totals across all of them.

Related tools