What is image annotation?

Image annotation is the practice of marking up images so a computer-vision model can learn from them — drawing a box around each object, outlining it pixel by pixel, placing points on a skeleton, or tagging the whole image with a class. The marks and the images together are the training dataset. Which kind of mark you make is decided by the task the model has to perform, and the finished set is exported in a standard format such as COCO, YOLO, Pascal VOC or Datumaro for whatever trains on it.

Annotation, labelling, and the difference

The two words are used interchangeably most of the time, and arguing about them is rarely worth it. Where a distinction is drawn, "labelling" means attaching a class to something and "annotation" means everything else as well — the geometry, the identity of an object across frames, the attributes hanging off a shape. Tagging a photo as "night" is labelling under either reading; outlining every car in it is annotation under both.

What matters more than the word is that annotation is a data-authoring job, not a data-entry one. A dataset is a set of decisions — what counts as an object, where its edges are, what to do with the ones you can barely see — and the model learns the decisions, including the inconsistent ones.

The main annotation types

Each type produces a different kind of mark, and each trains a different kind of model. They are not interchangeable: a dataset of boxes cannot train a segmenter, and a dataset of masks is expensive over-specification if boxes were all you needed.

Annotation typeWhat you produceWhat it can train
Image classificationOne or more labels for the whole image — no geometry at allA model that says what an image is: "defective", or "outdoor, night, rainy", or a node in a class tree
Object detectionA bounding box around each object, with a classA model that says where objects are and how many — the cheapest useful geometry
Instance segmentationA polygon or a pixel mask per object, with a classA model that outlines each object separately, so two overlapping cars stay two objects
Semantic segmentationA class for every pixel, with no separation between instancesA model that answers "which pixels are road", not "how many roads"
Keypoints and poseNamed points on a skeleton template, each with a visibility flagA model that locates joints or landmarks — human pose, facial points, part positions
PolylinesAn open line rather than a closed regionA model for things with length but no meaningful area — lanes, wires, cracks, seams
Video tracksOne shape per object carried across frames, keeping a stable identityA model that follows the same object over time rather than re-detecting it each frame

AnnotateIt offers exactly six creation types: Object Detection, Instance Segmentation, Keypoint Detection, Classification — Single Label, Classification — Multi Label and Classification — Hierarchical. All six accept images, native video and Camera media — photos or silent recorded clips. Object Detection keeps box identity with video tracks; Instance Segmentation uses object-mask tracks; Keypoint Detection is frame-by-frame; and the three Classification types label frame ranges. Polylines remain a tool inside Instance Segmentation rather than a separate project type.

The AnnotateIt annotator with the bounding-box tool active: labelled boxes drawn over objects in a photo.
Object detection: one box and one class per object. Seconds of work each, and enough to train a detector.

Choosing the type for your task

Work backwards from the question the model has to answer, not forwards from how precise you can be:

If the model has to…Annotate with
Sort images into categoriesClassification — single-label, multi-label or hierarchical
Say where objects are, or count themBounding boxes
Measure area, or separate touching objectsPolygons or pixel masks
Locate parts within an objectKeypoints on a skeleton template
Follow one object through a clipVideo tracks with keyframes
Mark an activity or state over timeWhole-frame classification ranges

The cheapest annotation that answers the question is the right one. A box takes a couple of seconds; an accurate mask takes considerably longer, and on a set of any size that difference is the whole project schedule. Starting narrow and re-annotating a subset later is easier than finishing a mask set you did not need.

One caveat worth knowing before you commit: assisted tools have changed this arithmetic. Segmentation models that turn one click into an editable mask make masks far cheaper than they were, which is why "boxes because masks are too slow" is worth re-testing rather than assumed.

The workflow, start to finish

  1. Decide the label schema first — the list of classes, and for each one what it does and does not include. Ambiguity here is the single most expensive thing to fix later, because fixing it invalidates work already done.
  2. Import the media. Images, or video that you either annotate in place or split into frames.
  3. Annotate — by hand, or with model assistance that proposes shapes for you to accept, correct or reject.
  4. Review. Someone other than the annotator checks a sample; for a small set, all of it. Reviewing nothing is a decision too, and usually the wrong one.
  5. Split into train, validation and test before training rather than after, and keep the split with the dataset so two runs stay comparable.
  6. Export in the format your training stack reads, and keep the archive: it is the version of the dataset that produced a given model.
The AnnotateIt Splits tab: train, validation and test percentage fields with a seed and a stratify switch, and an unsaved preview showing the image count per subset.
Step five. A split made with a recorded seed is reproducible; a split made ad hoc at training time is not.

Dataset formats

A dataset is only useful if the thing that trains on it can read it. Four formats cover most image work:

FormatUsually read byCarries
COCOMost detection and instance-segmentation stacksBoxes, polygons, run-length-encoded masks and keypoints, in one JSON file for the whole set
YOLOThe YOLO family of detectors and segmentersOne .txt of normalised rows per image, plus a class list
Pascal VOCOlder detection pipelinesOne XML per image — bounding boxes only
DatumaroInterchange, and anything the others cannot expressEvery shape type, plus attributes, label hierarchy and colours

Conversion loses more than people expect, and it loses it silently. A pixel mask exported to YOLO is traced into polygon rows, which drops holes and thin bridges. A rotated box exported to COCO becomes the axis-aligned box around it. Neither is a bug — the target format has no field for what went missing — but it does mean one format has to be your source of truth. For most computer-vision pipelines that is COCO — the richest of the mainstream formats, and the one everything else can be produced from; reach for Datumaro only when your data holds something COCO cannot express.

Where annotation quality goes wrong

Most datasets fail for the same handful of reasons, and all of them are findable before training rather than after:

  • Inconsistent class boundaries — two people disagreeing about whether a half-visible object counts. Written rules with example images fix this; adding annotators does not.
  • Loose boxes. A box padded with background teaches the model that background is part of the object.
  • Missing objects. An unlabelled object is not neutral: in detection it reads as a negative example, so the model is actively taught to ignore that thing.
  • Duplicate images split across train and test, which makes evaluation report a score the model has not earned.
  • Class imbalance severe enough that the rare classes are never learned — and are also the classes you probably care about.
  • Degenerate shapes left behind by a mis-click: zero-width boxes, self-intersecting polygons, points outside the image.
The AnnotateIt Quality tab: counts of errors, warnings, affected media and duplicate groups, a filterable problem list, and distribution panels for object sizes and image dimensions.
A dataset scan that reports the list above — unannotated media, invalid shapes, byte-identical duplicates, class balance and size outliers — without changing anything.

This is worth automating because none of it is visible while you are annotating. AnnotateIt runs the scan on demand over a dataset and reports what it finds; it never repairs anything on its own, and it tells you when the dataset has changed since the last scan so a stale report cannot be mistaken for a clean one.

Video is a different problem

Annotating video frame by frame scales badly — a one-minute clip at 30 fps is 1,800 images — and it produces a dataset that has no idea the frames are related. Tracks solve both: you annotate an object on a few keyframes, the positions in between are interpolated, and the object keeps one identity across the clip, so car #1 stays car #1.

The alternative is to extract frames and treat them as independent images, which is the right move when you are training a plain image model and only need variety. Both are legitimate; the deciding question is whether the model needs to know that two frames show the same object.

Does annotation have to happen in the cloud?

No, and it is worth being clear about why it usually does. The images are already on your machine, the drawing happens in your machine’s graphics stack, and the assisting models are a few hundred megabytes that a current laptop runs locally. Hosted platforms exist for team workflow, managed annotation labour and shared storage — real problems, but not computational ones. Nothing about the annotation itself requires a server.

That distinction starts to matter the moment the images are medical, legal, industrial, or simply not yours to upload. AnnotateIt is built on the other side of it: the app, the AI tools and your data all stay on your device, in the browser or in a native build, with no account and no upload step. What that does and does not mean is set out on the privacy page rather than summarised in one line here.

See also

Open AnnotateIt in your browser

Create your first local project in the browser. Optional ChatGPT or Claude annotation needs your own AI connection.

Questions before you start?Contact support →

Video tutorial

AnnotateIt tutorial