YOLO Vision 2026:

Dataset xView#

Il set di dati xView è uno dei più grandi benchmark di immagini satellitari disponibili al pubblico per il rilevamento di oggetti, che fornisce oltre 1 milione di istanze di oggetti in 60 classi annotate con bounding boxes in oltre 1.400 km² di immagini WorldView-3 a 0,3 m. È stato rilasciato per la DIUx xView 2018 Challenge dalla National Geospatial-Intelligence Agency (NGA) degli Stati Uniti e richiede un download manuale di circa 20,7 GB.

Il set di dati è stato creato per spingere quattro frontiere della computer vision:

  1. Ridurre la risoluzione minima per il rilevamento.
  2. Migliorare l'efficienza dell'apprendimento.
  3. Abilitare la scoperta di più classi di oggetti.
  4. Migliorare il rilevamento di classi a grana fine.

Basandosi su benchmark come COCO, xView si concentra sulle immagini aeree, in cui gli oggetti sono molto più piccoli e densamente raggruppati rispetto alle foto a livello del suolo.

Download manuale richiesto

Il set di dati xView non viene scaricato automaticamente. Registrati sul sito web della DIUx xView 2018 Challenge per scaricare train_images.zip (~15 GB), train_labels.zip e val_images.zip (~5 GB), quindi estraili in datasets/xView/ in modo che contenga:

datasets/xView/
├── train_images/          # 847 TIF satellite images
├── val_images/            # 282 TIF images (no public labels)
└── xView_train.geojson    # bounding-box annotations

Al primo avvio dell'addestramento, Ultralytics converte automaticamente le annotazioni GeoJSON nel formato YOLO e divide le immagini etichettate approssimativamente al 90/10 in set di addestramento e validazione; non è necessaria alcuna conversione manuale.

Caratteristiche principali#

  • Classi a grana fine: 60 classi di oggetti che spaziano tra aeromobili, veicoli, materiale rotabile, imbarcazioni marittime, attrezzature da costruzione ed edifici — molti dei quali piccoli, rari e visivamente simili.
  • Alta risoluzione: distanza di campionamento al suolo di 0,3 m raccolta dai satelliti WorldView-3.
  • Annotazione densa: oltre 1 milione di istanze di oggetti in oltre 1.400 km² di immagini, tutte etichettate con bounding boxes orizzontali.
  • Conversione automatica: lo script di download di Ultralytics converte le etichette GeoJSON originali nel formato YOLO e genera la suddivisione train/val al primo utilizzo.

Struttura del dataset#

Le immagini xView sono grandi scene satellitari in formato TIF e solo le 847 immagini di addestramento vengono fornite con etichette pubbliche; il set di validazione della challenge di 282 immagini non ne ha alcuna. La configurazione Ultralytics xView.yaml divide quindi automaticamente le immagini etichettate al primo utilizzo:

SplitImmaginiDescrizione
Addestramento~90% di 847Immagini etichettate elencate in autosplit_train.txt, generate al primo avvio
Validazione~10% di 847Immagini etichettate elencate in autosplit_val.txt, utilizzate per la valutazione

Le 60 classi coprono categorie granulari come velivolo ad ala fissa, aereo cargo, automobile piccola, autobus, locomotiva, nave marittima, escavatore, edificio, hangar per aeromobili e serbatoio di stoccaggio; l'elenco completo si trova nel Dataset YAML sottostante. Durante la conversione, gli ID di classe originali della challenge (11–94) vengono rimappati a indici continui 0–59.

Applicazioni#

Le classi granulari di xView e il punto di vista aereo ad alta risoluzione lo rendono un benchmark standard per l'addestramento e la valutazione di modelli di deep learning nel telerilevamento. Le applicazioni comuni includono:

  • Ricognizione militare e di difesa
  • Pianificazione e sviluppo urbano
  • Monitoraggio ambientale
  • Risposta e valutazione in caso di disastri
  • Mappatura e gestione delle infrastrutture

Per altri benchmark di immagini aeree, consulta il VisDrone dataset incentrato sui droni o il DOTA-v2 dataset con box orientati.

Dataset YAML#

Il file xView.yaml definisce la configurazione del set di dati: i percorsi del set di dati, i 60 nomi delle classi e lo script di download che converte le annotazioni GeoJSON e genera l'autosplit. È mantenuto nel repository Ultralytics su https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/xView.yaml.

ultralytics/cfg/datasets/xView.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# DIUx xView 2018 Challenge dataset https://challenge.xviewdataset.org by U.S. National Geospatial-Intelligence Agency (NGA)
# --------  Download and extract data manually to `datasets/xView` before running the train command.  --------
# Documentation: https://docs.ultralytics.com/datasets/detect/xview
# Example usage: yolo train data=xView.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── xView ← downloads here (20.7 GB)

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: xView # dataset root dir
train: images/autosplit_train.txt # train images (relative to 'path') 90% of 847 train images
val: images/autosplit_val.txt # val images (relative to 'path') 10% of 847 train images

# Classes
names:
  0: Fixed-wing Aircraft
  1: Small Aircraft
  2: Cargo Plane
  3: Helicopter
  4: Passenger Vehicle
  5: Small Car
  6: Bus
  7: Pickup Truck
  8: Utility Truck
  9: Truck
  10: Cargo Truck
  11: Truck w/Box
  12: Truck Tractor
  13: Trailer
  14: Truck w/Flatbed
  15: Truck w/Liquid
  16: Crane Truck
  17: Railway Vehicle
  18: Passenger Car
  19: Cargo Car
  20: Flat Car
  21: Tank car
  22: Locomotive
  23: Maritime Vessel
  24: Motorboat
  25: Sailboat
  26: Tugboat
  27: Barge
  28: Fishing Vessel
  29: Ferry
  30: Yacht
  31: Container Ship
  32: Oil Tanker
  33: Engineering Vehicle
  34: Tower crane
  35: Container Crane
  36: Reach Stacker
  37: Straddle Carrier
  38: Mobile Crane
  39: Dump Truck
  40: Haul Truck
  41: Scraper/Tractor
  42: Front loader/Bulldozer
  43: Excavator
  44: Cement Mixer
  45: Ground Grader
  46: Hut/Tent
  47: Shed
  48: Building
  49: Aircraft Hangar
  50: Damaged Building
  51: Facility
  52: Construction Site
  53: Vehicle Lot
  54: Helipad
  55: Storage Tank
  56: Shipping container lot
  57: Shipping Container
  58: Pylon
  59: Tower

# Download script/URL (optional) ---------------------------------------------------------------------------------------
download: |
  import json
  from pathlib import Path
  import shutil

  import numpy as np
  from PIL import Image

  from ultralytics.utils import TQDM
  from ultralytics.data.split import autosplit
  from ultralytics.utils.ops import xyxy2xywhn

  def convert_labels(fname=Path("xView/xView_train.geojson")):
      """Convert xView GeoJSON labels to YOLO format (classes 0-59) and save them as text files."""
      path = fname.parent
      with open(fname, encoding="utf-8") as f:
          print(f"Loading {fname}...")
          data = json.load(f)

      # Make dirs
      labels = path / "labels" / "train"
      shutil.rmtree(labels, ignore_errors=True)
      labels.mkdir(parents=True, exist_ok=True)

      # xView classes 11-94 to 0-59
      xview_class2index = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, -1, 3, -1, 4, 5, 6, 7, 8, -1, 9, 10, 11,
                           12, 13, 14, 15, -1, -1, 16, 17, 18, 19, 20, 21, 22, -1, 23, 24, 25, -1, 26, 27, -1, 28, -1,
                           29, 30, 31, 32, 33, 34, 35, 36, 37, -1, 38, 39, 40, 41, 42, 43, 44, 45, -1, -1, -1, -1, 46,
                           47, 48, 49, -1, 50, 51, -1, 52, -1, -1, -1, 53, 54, -1, 55, -1, -1, 56, -1, 57, -1, 58, 59]

      shapes = {}
      for feature in TQDM(data["features"], desc=f"Converting {fname}"):
          p = feature["properties"]
          if p["bounds_imcoords"]:
              image_id = p["image_id"]
              image_file = path / "train_images" / image_id
              if image_file.exists():  # 1395.tif missing
                  try:
                      box = np.array([int(num) for num in p["bounds_imcoords"].split(",")])
                      assert box.shape[0] == 4, f"incorrect box shape {box.shape[0]}"
                      cls = p["type_id"]
                      cls = xview_class2index[int(cls)]  # xView class to 0-59
                      assert 59 >= cls >= 0, f"incorrect class index {cls}"

                      # Write YOLO label
                      if image_id not in shapes:
                          shapes[image_id] = Image.open(image_file).size
                      box = xyxy2xywhn(box[None].astype(float), w=shapes[image_id][0], h=shapes[image_id][1], clip=True)
                      with open((labels / image_id).with_suffix(".txt"), "a", encoding="utf-8") as f:
                          f.write(f"{cls} {' '.join(f'{x:.6f}' for x in box[0])}\n")  # write label.txt
                  except Exception as e:
                      print(f"WARNING: skipping one label for {image_file}: {e}")

  # Download manually from https://challenge.xviewdataset.org
  dir = Path(yaml["path"])  # dataset root dir
  # urls = [
  #     "https://d307kc0mrhucc3.cloudfront.net/train_labels.zip",  # train labels
  #     "https://d307kc0mrhucc3.cloudfront.net/train_images.zip",  # 15G, 847 train images
  #     "https://d307kc0mrhucc3.cloudfront.net/val_images.zip",  # 5G, 282 val images (no labels)
  # ]
  # download(urls, dir=dir)

  # Convert labels
  convert_labels(dir / "xView_train.geojson")

  # Move images
  images = Path(dir / "images")
  images.mkdir(parents=True, exist_ok=True)
  Path(dir / "train_images").rename(dir / "images" / "train")
  Path(dir / "val_images").rename(dir / "images" / "val")

  # Split
  autosplit(dir / "images" / "train")

Utilizzo#

20,7 GB di download manuale

L'addestramento richiede che il download manuale descritto sopra venga estratto in datasets/xView/; la conversione delle annotazioni e la suddivisione train/val vengono quindi eseguite automaticamente.

Per addestrare un modello sul set di dati xView per 100 epochs con una dimensione dell'immagine di 640, puoi utilizzare i seguenti frammenti di codice. Per un elenco completo degli argomenti disponibili, fai riferimento alla pagina Training del modello.

Esempio di Addestramento
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="xView.yaml", epochs=100, imgsz=640)

Per etichettare immagini satellitari aggiuntive e gestire le esecuzioni di addestramento xView nel tuo browser, usa Ultralytics Platform.

Dati di esempio e annotazioni#

L'esempio seguente mostra una tipica scena xView: immagini aeree ad alta risoluzione in cui piccoli oggetti come veicoli ed edifici sono annotati con bounding box, illustrando il motivo per cui il rilevamento di oggetti nelle immagini satellitari richiede una localizzazione granulare.

xView dataset overhead satellite imagery with object detection

Citazioni e riconoscimenti#

Se utilizzi il dataset xView nella tua ricerca o nel tuo lavoro di sviluppo, cita il seguente articolo:

Citazione
@misc{lam2018xview,
      title={xView: Objects in Context in Overhead Imagery},
      author={Darius Lam and Richard Kuzma and Kevin McGee and Samuel Dooley and Michael Laielli and Matthew Klaric and Yaroslav Bulatov and Brendan McCord},
      year={2018},
      eprint={1802.07856},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Ringraziamo la Defense Innovation Unit (DIU) e i creatori del set di dati xView per il loro prezioso contributo alla comunità di ricerca sulla computer vision. Per ulteriori informazioni, visita il sito web del set di dati xView.

FAQ#

  • Il set di dati xView è un benchmark di immagini satellitari rilasciato per la DIUx xView 2018 Challenge dalla National Geospatial-Intelligence Agency degli Stati Uniti, che fornisce oltre 1 milione di istanze di oggetti in 60 classi granulari nelle immagini WorldView-3 a 0,3 m. Supporta la ricerca sul rilevamento di oggetti piccoli, rari e granulari in viste aeree, che sono bersagli molto più difficili rispetto a quelli nelle foto a livello del suolo.

  • xView richiede un download manuale: registrati sul sito web della DIUx xView 2018 Challenge, scarica train_images.zip (~15 GB), train_labels.zip e val_images.zip (~5 GB) — circa 20,7 GB in totale — ed estraili in datasets/xView/ seguendo il layout mostrato nell'avviso in cima a questa pagina. Al primo ciclo di addestramento, Ultralytics converte automaticamente le annotazioni GeoJSON in formato YOLO e crea la suddivisione di addestramento/validazione.

  • xView contiene 847 immagini di addestramento etichettate e 282 immagini di validazione senza etichette pubbliche, tutte catturate dai satelliti WorldView-3 a una risoluzione di 0,3 m. Le annotazioni coprono oltre 1 milione di istanze di oggetti in 60 classi. Poiché solo le etichette di addestramento sono pubbliche, la configurazione Ultralytics xView.yaml divide le 847 immagini etichettate approssimativamente al 90/10 in set di addestramento e validazione; vedi Dataset Structure per i dettagli.

  • Addestra un modello YOLO26n su xView per 100 epoche a una dimensione dell'immagine di 640:

    Esempio di Addestramento
    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")  # load a pretrained model (recommended for training)
    
    # Train the model
    results = model.train(data="xView.yaml", epochs=100, imgsz=640)

    Per argomenti e impostazioni dettagliate, fai riferimento alla pagina Training del modello.

  • Cita il documento "xView: Objects in Context in Overhead Imagery" (Lam et al., arXiv:1802.07856, 2018); la voce BibTeX completa si trova nella sezione Citations and Acknowledgments sopra.

Commenti