Dataset xView#
El dataset xView es uno de los mayores benchmarks de imágenes satelitales disponibles públicamente para la detección de objetos, con más de 1 millón de instancias de objetos de 60 clases anotadas con cajas delimitadoras en más de 1.400 km² de imágenes WorldView-3 de 0,3 m. Fue publicado para el Desafío DIUx xView 2018 por la Agencia Nacional de Inteligencia Geoespacial de EE. UU. (NGA) y requiere una descarga manual de unos 20,7 GB.
El dataset se creó para ampliar cuatro fronteras de la visión por ordenador:
- Reducir la resolución mínima para la detección.
- Mejorar la eficiencia del aprendizaje.
- Permitir descubrir más clases de objetos.
- Mejorar la detección de clases detalladas.
Basándose en benchmarks como COCO, xView se centra en imágenes aéreas, donde los objetos son mucho más pequeños y están más densamente agrupados que en las fotografías tomadas desde el suelo.
El dataset xView no se descarga automáticamente. Regístrate en el sitio web del Desafío DIUx xView 2018 para descargar train_images.zip (~15 GB), train_labels.zip y val_images.zip (~5 GB); después, extráelos en datasets/xView/ de modo que contenga:
datasets/xView/
├── train_images/ # 847 TIF satellite images
├── val_images/ # 282 TIF images (no public labels)
└── xView_train.geojson # bounding-box annotationsEn la primera ejecución del entrenamiento, Ultralytics convierte las anotaciones GeoJSON al formato YOLO y divide automáticamente las imágenes etiquetadas aproximadamente en una proporción 90/10 entre los conjuntos de entrenamiento y validación; no es necesaria ninguna conversión manual.
Características principales#
- Clases detalladas: 60 clases de objetos que abarcan aeronaves, vehículos, material ferroviario, embarcaciones marítimas, equipos de construcción y edificios; muchas son pequeñas, poco frecuentes y visualmente similares.
- Alta resolución: distancia de muestreo en el terreno de 0,3 m, obtenida de satélites WorldView-3.
- Anotación densa: más de 1 millón de instancias de objetos en más de 1.400 km² de imágenes, todas etiquetadas con cajas delimitadoras horizontales.
- Conversión automática: el script de descarga de Ultralytics convierte las etiquetas GeoJSON originales al formato YOLO y genera la división entre entrenamiento y validación en el primer uso.
Estructura del dataset#
Las imágenes de xView son grandes escenas satelitales en formato TIF, y solo las 847 imágenes de entrenamiento incluyen etiquetas públicas; el conjunto de validación del desafío, compuesto por 282 imágenes, no tiene ninguna. Por tanto, la configuración xView.yaml de Ultralytics divide automáticamente las imágenes etiquetadas en el primer uso:
| Subconjunto | Imágenes | Descripción |
|---|---|---|
| Entrenar | ~90 % de 847 | Imágenes etiquetadas incluidas en autosplit_train.txt, generadas en la primera ejecución |
| Validación | ~10 % de 847 | Imágenes etiquetadas incluidas en autosplit_val.txt, utilizadas para la evaluación |
Las 60 clases abarcan categorías detalladas como aeronave de ala fija, avión de carga, coche pequeño, autobús, locomotora, embarcación marítima, excavadora, edificio, hangar de aeronaves y tanque de almacenamiento; la lista completa se encuentra en el YAML del dataset que aparece a continuación. Durante la conversión, los identificadores de clase originales del desafío (11–94) se reasignan a índices contiguos del 0 al 59.
Aplicaciones#
Las clases detalladas y la perspectiva aérea de alta resolución de xView lo convierten en un benchmark estándar para entrenar y evaluar modelos de aprendizaje profundo en teledetección. Entre sus aplicaciones habituales se incluyen:
- Reconocimiento militar y de defensa
- Planificación y desarrollo urbanos
- Monitorización medioambiental
- Respuesta y evaluación ante catástrofes
- Cartografía y gestión de infraestructuras
Para consultar otros benchmarks de imágenes aéreas, visita el dataset VisDrone, centrado en drones, o el dataset DOTA-v2, basado en cajas orientadas.
YAML del dataset#
El archivo xView.yaml define la configuración del dataset: las rutas del dataset, los nombres de las 60 clases y el script de descarga que convierte las anotaciones GeoJSON y genera la división automática. Se mantiene en el repositorio de Ultralytics, en https://github.com/ultralytics/ultralytics/blob/main/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")Uso#
El entrenamiento espera que la descarga manual descrita anteriormente se extraiga en datasets/xView/; después, la conversión de anotaciones y la división entre entrenamiento y validación se ejecutan automáticamente.
Para entrenar un modelo con el dataset xView durante 100 épocas y con un tamaño de imagen de 640, puedes utilizar los siguientes fragmentos de código. Para consultar la lista completa de argumentos disponibles, visita la página de entrenamiento del modelo.
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)Para etiquetar imágenes satelitales adicionales y gestionar las ejecuciones de entrenamiento de xView desde el navegador, utiliza Ultralytics Platform.
Datos de ejemplo y anotaciones#
El ejemplo siguiente muestra una escena típica de xView: imágenes aéreas de alta resolución en las que objetos pequeños, como vehículos y edificios, están anotados con cajas delimitadoras, lo que ilustra por qué la detección de objetos en imágenes satelitales exige una localización detallada.

Citas y agradecimientos#
Si utilizas el dataset xView en tu trabajo de investigación o desarrollo, cita el siguiente artículo:
@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}
}Nos gustaría reconocer la contribución de la Unidad de Innovación de Defensa (DIU) y de los creadores del dataset xView a la comunidad de investigación en visión por ordenador. Para obtener más información, visita el sitio web del dataset xView.
Preguntas frecuentes#
El dataset xView es un benchmark de imágenes satelitales publicado para el Desafío DIUx xView 2018 por la Agencia Nacional de Inteligencia Geoespacial de EE. UU., que proporciona más de 1 millón de instancias de objetos de 60 clases detalladas en imágenes WorldView-3 de 0,3 m. Permite investigar la detección de objetos pequeños, poco frecuentes y detallados en vistas aéreas, objetivos mucho más difíciles que los de las fotografías tomadas desde el suelo.
xView requiere una descarga manual: regístrate en el sitio web del Desafío DIUx xView 2018, descarga
train_images.zip(~15 GB),train_labels.zipyval_images.zip(~5 GB) —unos 20,7 GB en total— y extráelos endatasets/xView/siguiendo la estructura que se muestra en el aviso de la parte superior de esta página. En la primera ejecución del entrenamiento, Ultralytics convierte automáticamente las anotaciones GeoJSON al formato YOLO y crea la división entre entrenamiento y validación.xView contiene 847 imágenes de entrenamiento etiquetadas y 282 imágenes de validación sin etiquetas públicas, todas capturadas por satélites WorldView-3 con una resolución de 0,3 m. Las anotaciones abarcan más de 1 millón de instancias de objetos de 60 clases. Como solo son públicas las etiquetas de entrenamiento, la configuración
xView.yamlde Ultralytics divide las 847 imágenes etiquetadas aproximadamente en una proporción 90/10 entre los conjuntos de entrenamiento y validación; consulta Estructura del dataset para obtener más información.Entrena un modelo YOLO26n con xView durante 100 épocas y con un tamaño de imagen de 640:
Ejemplo de entrenamientofrom 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)Para consultar los argumentos y ajustes detallados, visita la página de entrenamiento del modelo.
Cita el artículo «xView: Objects in Context in Overhead Imagery» (Lam et al., arXiv:1802.07856, 2018); la entrada BibTeX completa se encuentra en la sección Citas y reconocimientos anterior.



