tuliq
Runs in your browser

YOLO Dataset Health Checker

Checks a YOLO object-detection dataset for the problems that usually only surface once training is already failing in a confusing way: missing or orphaned label files, malformed annotation lines, class IDs outside what data.yaml declares, and degenerate or out-of-bounds boxes. Reads data.yaml when present for class-ID range checking, and resolves both common YOLO folder layouts. A deliberately narrow first version — deterministic structural and syntax checks only, no AI model, no statistics dashboard yet — findings are grouped by problem type with every affected file and line number. A folder, .zip, or manual file selection is read entirely via your browser's own File API; nothing is ever uploaded.

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 YOLO object-detection dataset for the problems that normally only surface once training has already started failing in a confusing way — missing or orphaned label files, malformed annotation lines, class IDs that don't exist, and degenerate or out-of-bounds boxes. It reads data.yaml when present (for class-ID range checking) and resolves both common YOLO folder layouts (images/<split>/... and <split>/images/...). This is a deliberately narrow first version: structural and syntactic checks only, no statistics dashboard, no visual review, no class remapping — those are real, planned next steps, but shipping a smaller tool that's actually been run against real datasets beats a bigger one that hasn't. Every check is deterministic (no AI model involved, nothing to download) and everything runs entirely in your browser: a folder or .zip you pick is read directly via your browser's own File API, never uploaded anywhere. An image without a matching label file is reported as something to review, not an error — that's routinely intentional (a background image, included on purpose to teach a detector what "nothing here" looks like), so this tool doesn't assume it's a mistake.

What you can do

  • Scan a whole YOLO dataset — folder, .zip, or a manual file selection
  • Deterministic checks: pairing, class IDs, box validity, malformed annotations
  • Findings grouped by problem type, with every affected file and line number
  • Nothing is uploaded — every file is read and checked entirely in your browser

How to use

Step 1

Pick your dataset

Choose a folder, or drop a .zip and your image/label files into the second picker — it auto-detects which one you gave it.

Step 2

Checks run automatically

Structure, pairing, class IDs, and every annotation line are validated the moment your files are read.

Step 3

Review the findings

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

Example

A finding looks like this:

CV.CLASS_ID_OUT_OF_RANGE

labels/train/IMG_0042.txt:17 — Class ID 12 is outside the 10 classes declared in data.yaml (0-9).

Every finding names the exact file (and line, for annotation-level problems) — findings are grouped by type in the results so you can see every occurrence of one problem at once, rather than hunting through files individually.

How your data is handled

This tool is labeled 🟢 Browser: every file you pick (folder, .zip, or individual files) is 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 or downloaded; every check is a deterministic rule, not a prediction.

Frequently asked questions

Why isn't an image without any labels treated as an error?+

Because it's routinely correct on purpose — a "background" image with no objects in it, included specifically to teach the model what a negative example looks like, is standard practice in object detection datasets. This tool reports it as something to review, not something to fix, since assuming it's always a mistake would be wrong often enough to be actively unhelpful.

What YOLO folder layouts does this support?+

Both of the common ones: images/<split>/file.jpg with labels/<split>/file.txt, and <split>/images/file.jpg with <split>/labels/file.txt. If your dataset doesn't have an "images" folder at all (a flatter layout), it falls back to expecting the label file right next to the image with the same name.

Does this check image contents — corrupt files, dimensions, aspect ratios?+

Not yet — this first version deliberately only reads label files and data.yaml as text, and never decodes any image, which is also why it stays fast even on a large dataset. Image-level checks (corrupt files, unusual dimensions, size/aspect-ratio outliers) are a planned next step once this narrower version has been run against real datasets.

Why can't I type a folder path instead of picking one?+

No website can read an arbitrary path on your device — every browser blocks that, for the same reason on every site, not something specific to this tool. Picking a folder through your browser's own picker is the real, secure equivalent, and it also means this tool works in every major browser rather than needing a Chromium-specific API.

Why are there two file pickers instead of one?+

The second one already auto-detects between a .zip and a flat file selection, so there's nothing to choose there. Folder selection genuinely can't be merged into it, though — picking "folder" makes the browser show a completely different, folder-only native dialog, and there's no way to make one input conditionally open either dialog depending on what you meant to pick.

How large a dataset can this handle?+

There's no hard limit, but this version runs single-threaded rather than in a background worker, so a very large dataset (tens of thousands of files) will take a real, visible moment to finish rather than staying instant. It won't hang or crash — it just takes as long as it takes, disclosed rather than glossed over.

Is this the finished dataset QA tool?+

It's a deliberately narrow first version — structural and annotation-syntax checks only. Class ID remapping, dataset statistics, a visual review of affected images, train/val/test split checks, and duplicate/leakage detection are planned as follow-ups once this version has proven itself on real datasets.

Related tools