An annotation file that parses without an error and one that's actually correct are two different guarantees. A coordinate typo, a swapped width and height, or a class index off by one all produce a file that looks completely plausible as raw numbers or JSON — nothing about the format itself catches the mistake. The only reliable check is rendering the boxes on the actual image and looking at it, and it's the step most pipelines skip because nothing forces you to do it.
Catching structural errors before you even look
Some problems don't need a human eye at all — they're deterministic. A box with xmin >= xmax, a label file pointing at an image that isn't there, a duplicate image ID, a class index with no matching name: all of these are checkable by rule, not by looking. The YOLO, COCO, and Pascal VOC Dataset Health Checkers run these checks across an entire dataset in one pass, entirely in your browser, and are worth running first — they catch a different, complementary class of error than the visual ones below, and they're instant regardless of dataset size. If you're reviewing a dataset that changed since a previous version — a re-export, a relabeling pass — the Annotation Diff tool shows exactly which boxes were added, removed, resized, or reclassified, box by box.
Errors that only show up visually
Normalized vs. absolute coordinates mixed up. YOLO's coordinates are a 0–1 fraction of the image; COCO's and Pascal VOC's are absolute pixels. A script that treats one as the other doesn't crash — it produces a box that's either microscopic (pixels read as fractions) or wildly oversized (fractions read as pixels), and both are obvious the instant you see the box drawn, invisible in the raw file.
Width and height swapped. A box built as (x, y, height, width) instead of (x, y, width, height) is a valid-looking rectangle in the wrong aspect ratio — correct on a square image, visibly wrong on anything else.
Class index off by one. YOLO's numeric class indices are only meaningful paired with the exact classes.txt that produced them. Load the wrong classes file, or a version reordered since the boxes were drawn, and every label is quietly wrong — a "car" box now says "person" — with the file itself giving no indication anything's amiss.
Declared image size no longer matches the actual image. COCO and Pascal VOC both embed the image's width and height at annotation time. Re-export or resize that image afterward and the file still claims the old dimensions, so every box — computed against the size the annotation file remembers — lands shifted or scaled relative to the image you're actually looking at.
None of these four throw a parse error. All four are visible in about a second once the box is actually drawn on the image.
Checking a batch, not just one file
Spot-checking a single image tells you the format is right; it doesn't tell you the rest of the dataset is. The Annotation Visualizer takes a batch — upload your images plus their annotation file(s) — and renders every box on every image, color-coded and labeled by class, scrollable through the whole set at once. For YOLO and Pascal VOC (one annotation file per image), it matches each by filename automatically; for COCO and VIA CSV (one file covering many images), it pulls out the regions belonging to each uploaded image on its own.
It also checks the specific failure mode above where a re-exported image no longer matches its annotation file's declared size, and flags that mismatch directly above the image rather than leaving you to notice the boxes look "slightly off."
What to actually look for
Working through a batch, three questions cover most real annotation problems:
- Is every object actually boxed? Missing annotations are as costly to a trained model as wrong ones, and they're the easiest to miss scrolling quickly.
- Is every box's class correct? The color-coded legend makes a wrong class jump out — a box in the "person" color around a car, for instance.
- Does every box actually fit its object? Not just "roughly there" — a box that's shifted, oversized, or clipped teaches a model the wrong boundary.
A dataset that passes all three on a representative sample is one you can reasonably trust for training. One that doesn't is worth fixing before a training run, not after.
Where each step happens
- Verifying — the Annotation Visualizer renders your annotations on your images and flags dimension mismatches automatically.
- Fixing what's wrong — the Image Annotator opens your images for direct editing, with autosave so a correction session isn't lost to a refresh.
- Re-converting after a fix — if the fix requires a different source format, the Bounding Box Converter covers the same four formats in either direction; see how to convert between YOLO, COCO, and Pascal VOC.