All guides
6 min readannotationformatsexport

COCO vs YOLO vs Pascal VOC vs JSONL: which annotation format should you use?

A plain-English comparison of the COCO, YOLO, Pascal VOC and JSONL annotation formats — how each stores boxes and labels, what they can and can't represent, and when to pick each for your training pipeline.

Most object-detection datasets ship in one of four annotation formats. They all describe boxes and labels, but they differ in structure, tooling support, and what extra information they can carry. Here's how to choose.

COCO

A single JSON file describing all images, categories and annotations, with bounding boxes stored as [x, y, width, height]. COCO is the de-facto research standard and is widely supported by training frameworks. It also supports segmentation masks and keypoints, which the others handle less uniformly.

YOLO

One plain-text file per image, each line a box as class-id plus normalized center-x, center-y, width and height (values 0–1). Minimal and fast to parse; the native format for the YOLO family of detectors. It carries only boxes and class ids — no metadata.

Pascal VOC

One XML file per image with human-readable box coordinates (xmin, ymin, xmax, ymax) and per-object attributes. Verbose but readable and easy to inspect by hand; common in older pipelines and some tooling.

JSONL

One JSON object per line (one line per sample). Not a fixed schema but a container — which makes it the right choice when you need to carry more than a box: keypoints, pose, joint angles, or hand→object contact. This is why robotics and multimodal datasets gravitate to JSONL.

Which should you pick?

  • Training a YOLO detector → YOLO format.
  • Research / broad framework support, or you need masks/keypoints → COCO.
  • Legacy tooling or you want human-readable per-image files → Pascal VOC.
  • You need pose, contact, or any non-box signal (e.g. robotics) → JSONL.

You rarely have to commit to one. PI Recorder exports all four from the same dataset, so you can hand YOLO to your trainer and keep JSONL for the robotics extras — the whole dataset or a scoped subset.

Try it in PI Recorder

Collect, annotate and export your dataset — free to start.