Skip to main content
Blog
Tutorial
Oct 25, 20267 min

Export Tracked Video Annotations to COCO and YOLO Training Formats

What each LabelOp Tracker export contains, which format keeps track IDs, how train/val splits work for a single video, and the checks to run before you train.

A tracked video is not a training dataset yet.

Your training code expects image files and label files in a specific layout. Somewhere between the timeline and that layout, frame numbers shift, IDs disappear, or a class index points at the wrong name.

This guide explains exactly what LabelOp Tracker writes when you export, which format to pick for which model, and what to check before you start a training run. Tracker is the free, in-browser video annotation app in the LabelOp family; exports are built in your browser and saved straight to your computer.

Pick the format by what you train

Tracker exports five formats from the Export tab. Each one is a ZIP named after your project and format.

Format Train this Keeps track IDs Needs JPEG frames
COCO JSON Detection, instance segmentation, keypoints; tracking research Yes, track_id per annotation Optional
YOLO TXT YOLO object detection No Optional
YOLO-SEG YOLO instance segmentation No Optional
YOLO-POSE YOLO pose estimation No Yes, always included
YOLO-CLS YOLO image classification No Yes, always included

The short rule: if you need object identities across frames, export COCO. YOLO label formats have no field for a track ID, so identities are dropped.

What is inside each ZIP

COCO JSON

  • annotations.json covering the frame range you chose
  • images/frame_NNNNNN.jpg for each exported frame, if you turned on Include JPEG frames

Each annotation has a bounding box, area, category and track_id. Polygons and ellipses add a COCO polygon segmentation. Tracks with a pose skeleton add keypoints in the COCO-17 layout.

Two details catch people:

  • file_name has no folder prefix. Images are listed as frame_000042.jpg but stored in images/. Point your loader's image root at the images/ folder.
  • Every frame in the range gets an image entry, including frames with no objects. That is useful for background examples, but it also means the image count can be larger than the number of annotated frames.

The category list keeps the full class list of the project, so category IDs stay stable even if some classes have no objects in the exported range.

YOLO TXT

  • labels/frame_NNNNNN.txt, one per frame, with lines of class cx cy w h normalized to 0–1
  • classes.txt, where line order is the class index
  • images/frame_NNNNNN.jpg if JPEG frames are included

Frames with no objects get an empty label file, which YOLO treats as background.

This export does not write a data.yaml or a train/val split. You add both yourself. If you hit loader errors, the YOLO data.yaml errors guide covers the common ones, and remapping YOLO class IDs helps when you merge with another dataset.

YOLO-SEG

Same layout as YOLO TXT, but each line is a normalized polygon. Polygons come from drawn polygons, ellipses and Segment assist masks (SAM 2.1).

Plain boxes cannot become polygons, so frames where an exported object is only a box are left out entirely rather than written with a missing object. If every frame in the range is box-only, the export stops and tells you to pick YOLO instead. See polygon vs bounding box annotation if you are deciding which shape to draw.

YOLO-POSE

  • A box plus 17 COCO joints (x, y, visibility) per posed track
  • train.txt and val.txt image lists
  • data.yaml with kpt_shape: [17, 3], a left/right flip_idx and class names
  • Decoded JPEG frames

Tracks without joints are skipped. You need at least two posed frames, and every class in validation must also appear in training. Pose is placed by hand in Tracker; no pose-estimation model ships yet.

YOLO-CLS

Whole-frame labels, not boxes. The ZIP contains train/<class>/ and val/<class>/ folders of JPEG frames. Each class needs at least two labeled frames, and each class is split separately so both sides see every class.

How train/val splits work for one video

YOLO-POSE and YOLO-CLS exports split for you. The split is chronological: the last 20% of labeled frames go to validation, the earlier frames to training.

Neighboring video frames are nearly identical. If frame 400 is in training and frame 401 is in validation, the validation score mostly measures memory. Tracker shows a warning above these formats and offers Gap before validation (frames): that many frames just before the validation block are dropped from training, so the two sides are not direct neighbors.

Use the gap, but be clear about what it does. A split from one video is still not an independent evaluation set. Validation footage from separate videos is the honest test. The dataset split planning guide covers this in more depth.

For COCO and YOLO detection exports, split by source video or by long time blocks, not by random frames.

Export settings that matter

Frame range

Choose Annotated (first to last annotated frame), Full video, or type a start and end frame. Export only the part you reviewed.

Include JPEG frames

Frames are decoded from the video and saved as JPEG at 80% quality. Leave it off if you already extract frames with your own pipeline and only need labels. It is always on for YOLO-POSE and YOLO-CLS.

Save directly to disk

When JPEG frames are included and your browser supports it, Save directly to disk writes the ZIP to a file as it is built, which keeps large exports out of browser memory.

The checklist

Above the form, Before you export lists open review items, object and class counts, and hidden objects or classes. Hidden items are still exported; hiding only affects the view.

Frame numbers: watch the off-by-one

The app shows frame numbers starting at 1. Exported file names and COCO image IDs use the zero-based frame index, so frame 1 in the timeline is frame_000000.jpg.

This matters when you compare exports with notes, bug reports or ground truth made by hand. Decide which convention your team uses and write it down, as the video annotation workflow guide recommends.

Checks before you train

Run these on every export, even small ones:

  1. Open the ZIP. Confirm the folders match what your loader expects.
  2. Count images and label files. For YOLO, every image should have a label file, even if it is empty.
  3. Read classes.txt or the COCO categories. Check that index 0 is the class you think it is.
  4. Draw a few labels back onto their images. Pick frames with fast motion and occlusion, not only easy ones.
  5. For tracking work, check track_id continuity on one object you know crosses an occlusion.
  6. Train for one epoch before a long run, to catch path and format errors early.

The COCO and YOLO export formats guide covers the general format differences, and converting COCO JSON to YOLO helps if you export COCO for identities and still need YOLO labels.

Fix problems before export, not after

Most export problems are annotation problems:

  • Unstable IDs: merge or split tracks and work through the ID change items in the QA tab. See auto-annotating video with object tracking for the correction loop.
  • Classes named class_N: name your classes in the Setup tab. Text-prompt (OWLv2) runs name their classes after your prompts automatically.
  • Duplicate boxes: clear the Duplicate items in the QA tab, or your model learns to predict two boxes per object.

Bringing annotations back in

The Import tab reads COCO JSON. If annotations carry track_id, identities are kept. If not, Tracker links boxes into tracks by class and overlap. Unsupported mask formats (RLE or multi-part masks) are reported before anything is imported.

The Media tab lets you download the original video kept in your browser.

For moving a whole project between browsers, use a project backup (.labelop.zip) from the workspace menu instead of a dataset export. A backup keeps the editable project and can include the source video.

From export to a team dataset

A Tracker export is one person's reviewed clip. When several clips become a shared dataset, LabelOp takes over: it imports annotation files, adds team review, keeps dataset versions you can compare, and exports to more formats, including Pascal VOC and CVAT.

To produce your first export, open LabelOp Tracker, run Auto-annotate on a short clip, clear the QA queue, and export COCO with JPEG frames. If you are new to the app, the Tracker walkthrough covers each step from opening a video.

FAQ

Which export format keeps object track IDs?

COCO JSON. Each annotation includes a track_id. YOLO formats have no ID field, so identities are not exported there.

Does the YOLO export include a data.yaml?

YOLO-POSE does, with train and val lists. YOLO TXT and YOLO-SEG write labels and classes.txt; you add data.yaml and your own split.

Why is my exported frame number one lower than in the app?

Exported file names and COCO image IDs use the zero-based frame index, while the app shows frames starting at 1.

Are empty frames exported?

Yes, for COCO and YOLO TXT. COCO lists them as images without annotations, and YOLO writes an empty label file, which trains as background.

Is my video uploaded during export?

No. Frames are decoded and packed into the ZIP in your browser, and the file is saved to your computer.

Take the next step with your dataset.

Use local AI, managed cloud labeling, and team review in LabelOp. Export your work or train with your own Vast.ai account.

Start free