Skip to content
AI360Xpert
Beta

CVAT Vision Annotation Guide

An open annotation tool for boxes, masks and tracks across images and video, with interpolation doing the in-between frames.

CVAT interpolates a box from 10 to 20 across 10 frames
CVAT interpolates a box from 10 to 20 across 10 frames

Why Does This Exist?

Video labeling frame by frame is slow enough to kill datasets. CVAT cuts the labor: draw boxes on keyframes, and interpolation fills the gaps; draw masks and skeletons where boxes fall short; review, export to YOLO, COCO and friends, and loop models back in for pre-labels. It feeds tracking and dataset preparation with honest tracks instead of shaky ones.

This page covers the annotation contract, one interpolation fixture, and appropriate use. Version 2.17.0 was the live line verified in-session.

Think of It Like This

A flipbook with key drawings

An animator draws every tenth page in full and assistants fill the nine between by sliding lines evenly. The motion stays smooth because the keys anchor it.

CVAT keys are the drawn frames, interpolation is the assistant. The analogy stops at trust: assistants follow lines, while interpolation follows math, so fast or occluded motion still needs human keys closer together.

How It Actually Works

Input is images or video plus a task with labels and shapes. Output is boxes, polygons, masks and tracks with review states, exportable to standard formats. Purpose is efficient manual labeling with interpolation and model assistance. Appropriate use is detection, segmentation and tracking datasets with quality review. Place keyframes where motion changes, not on a fixed grid, because evenly spaced keys waste effort on still scenes and starve fast ones.

Interpolation fixture

Take a box edge sliding from 1010 to 2020 over 1010 frames. The per-frame step is (20−10)/10=1(20 - 10) / 10 = 1. At frame 55 the edge sits at 10+5×1=1510 + 5 \times 1 = 15. The diagram marks that middle landing, the linearity interpolation promises.

Code

Interpolation in plain Python:

def interp(start: float, end: float, frames: int, at: int) -> float:    step = (end - start) / frames  # even slide per frame    return start + step * at

print(interp(10.0, 20.0, 10, 5))  # -> 15.0

Frame 5 lands exactly at 15.0.

Watch Out For

Trusting long interpolations through occlusions

A box sliding behind a pole keeps gliding mathematically while the object hides. The symptom is ghost labels on empty frames that teach detectors to fire on poles. Fix it by keying around occlusions and marking hidden frames explicitly.

The Quick Version

  • CVAT maps images and video to boxes, masks and tracks with review states.
  • Sliding 10 to 20 over 10 frames lands at 15 on frame 5.
  • Place keyframes where motion changes, not on a fixed grid.
  • Use it for detection, segmentation and tracking datasets.
  • Key around occlusions or interpolation draws ghosts.