Skip to main content
Draw boxes around objects. Each sample is one image plus one Pascal VOC XML file that lists the objects in it. There is no labels CSV: the ingestor reads the image list and the classes straight from the XML files.

Folder layout

  • Both folders must have exactly these names and sit side by side.
  • Images and annotations pair by file stem: images/frame01.jpg belongs to annotations/frame01.xml. Every image needs its XML and every XML needs its image.
  • All images share one extension (.jpg, .jpeg or .png; default .jpg) and one resolution. The ingestor copies them unchanged and does not resize.

Annotation format (Pascal VOC)

Every element shown is required: An XML file with no <object> is accepted with a warning.

ingest.yaml

How records are stored

One record per image, not per box. The stored label of an image is its class histogram (for example car:3 motor:1), so the dataset summary reports class counts in boxes while the record count is the number of images. Data ids are content hashes, so re-running a failed ingest re-uses its rows.

What the ingestor checks

Plus the checks every ingest runs. A record is copied only when both its image and its XML copy succeed.

Sample dataset

The template ships one 1920×1080 aerial traffic frame from the public VisDrone dataset with its VOC annotation (classes such as car and motor). The ingest.yaml above ingests it with no overrides.

Next steps