Conjunto de datos xView#
El conjunto de datos xView es uno de los mayores puntos de referencia de imágenes satelitales disponibles públicamente para la object detection, que ofrece más de 1 millón de instancias de objetos en 60 clases anotadas con bounding boxes en más de 1400 km² de imágenes de WorldView-3 de 0,3 m. Fue publicado para el desafío DIUx xView 2018 por la Agencia Nacional de Inteligencia Geoespacial (NGA) de EE. UU. y requiere una descarga manual de unos 20,7 GB.
El conjunto de datos se creó para impulsar cuatro fronteras de computer vision:
- Reducir la resolución mínima para la detección.
- Mejorar la eficiencia del aprendizaje.
- Permitir el descubrimiento de más clases de objetos.
- Mejorar la detección de clases de grano fino.
Partiendo de puntos de referencia como COCO, xView se centra en imágenes cenitales, donde los objetos son mucho más pequeños y están más apiñados que en las fotos a nivel de suelo.
El conjunto de datos xView no se descarga automáticamente. Regístrate en el sitio web del DIUx xView 2018 Challenge para descargar train_images.zip (~15 GB), train_labels.zip y val_images.zip (~5 GB), y luego extráelos en datasets/xView/ para 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 automáticamente las anotaciones GeoJSON al formato YOLO y divide las imágenes etiquetadas aproximadamente en 90/10 en conjuntos de entrenamiento y validación; no es necesaria ninguna conversión manual.
Características clave#
- Clases de grano fino: 60 clases de objetos que abarcan aeronaves, vehículos, material ferroviario, buques marítimos, equipos de construcción y edificios; muchos de ellos pequeños, raros y visualmente similares.
- Alta resolución: 0,3 m de distancia de muestreo del suelo capturados por 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 cuadros delimitadores horizontales.
- Conversión automática: el script de descarga de Ultralytics convierte las etiquetas GeoJSON originales al formato YOLO y genera la división de entrenamiento/validación en el primer uso.
Estructura del dataset#
Las imágenes de xView son grandes escenas de satélite en formato TIF, y solo las 847 imágenes de entrenamiento se entregan con etiquetas públicas; el conjunto de validación del desafío de 282 imágenes no tiene ninguna. Por lo tanto, la configuración xView.yaml de Ultralytics divide las imágenes etiquetadas automáticamente en el primer uso:
| Split | Imágenes | Descripción |
|---|---|---|
| Entrenar | ~90% de 847 | Imágenes etiquetadas enumeradas en autosplit_train.txt, generadas en la primera ejecución |
| Validación | ~10% de 847 | Imágenes etiquetadas enumeradas en autosplit_val.txt, utilizadas para la evaluation |
Las 60 clases cubren categorías detalladas como avión de ala fija, avión de carga, coche pequeño, autobús, locomotora, embarcación marítima, excavadora, edificio, hangar de aviones y tanque de almacenamiento; la lista completa se encuentra en el Dataset YAML a continuación. Durante la conversión, los ID de clase del desafío original (11–94) se reasignan a índices contiguos de 0 a 59.
Aplicaciones#
Las clases detalladas y el punto de vista cenital de alta resolución de xView lo convierten en un punto de referencia estándar para entrenar y evaluar modelos de deep learning en remote sensing. Las aplicaciones comunes incluyen:
- Reconocimiento militar y de defensa
- Planificación y desarrollo urbano
- Monitoreo ambiental
- Respuesta y evaluación ante desastres
- Mapeo y gestión de infraestructura
Para otros puntos de referencia de imágenes cenitales, consulta el VisDrone dataset enfocado en drones o el DOTA-v2 dataset de cuadros orientados.
YAML del dataset#
El archivo xView.yaml define la configuración del conjunto de datos: las rutas del conjunto de datos, los 60 nombres de clases y el script de descarga que convierte las anotaciones de GeoJSON y genera la división automática (autosplit). 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/; la conversión de anotaciones y la división de entrenamiento/validación se ejecutan automáticamente a continuación.
Para entrenar un modelo en el conjunto de datos xView durante 100 epochs con un tamaño de imagen de 640, puedes utilizar los siguientes fragmentos de código. Para obtener una lista completa de los argumentos disponibles, consulta la página de Training 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 de satélite adicionales y gestionar las ejecuciones de entrenamiento de xView en tu navegador, usa Ultralytics Platform.
Ejemplos de datos y anotaciones#
La muestra a continuación muestra una escena típica de xView: imágenes cenitales de alta resolución en las que los objetos pequeños como vehículos y edificios se anotan con cuadros delimitadores, lo que ilustra por qué la object detection en imágenes satelitales exige una localización detallada.

Citas y agradecimientos#
Si utilizas el conjunto de datos xView en tu trabajo de investigación o desarrollo, por favor 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}
}Queremos agradecer a la Defense Innovation Unit (DIU) y a los creadores del conjunto de datos xView por su valiosa contribución a la comunidad de investigación de visión artificial. Para obtener más información, visita el xView dataset website.
FAQ#
El conjunto de datos xView es un punto de referencia de imágenes satelitales lanzado 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 en 60 clases detalladas en imágenes de WorldView-3 de 0,3 m. Admite la investigación sobre la detección de objetos pequeños, raros y detallados en vistas aéreas, que son objetivos mucho más difíciles que los de las fotos a nivel del suelo.
xView requiere una descarga manual: regístrate en el sitio web del DIUx xView 2018 Challenge, 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 en la parte superior de esta página. En la primera ejecución de entrenamiento, Ultralytics convierte automáticamente las anotaciones de GeoJSON al formato YOLO y crea la división de entrenamiento/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 a una resolución de 0,3 m. Las anotaciones cubren más de 1 millón de instancias de objetos en 60 clases. Debido a que solo las etiquetas de entrenamiento son públicas, la configuración
xView.yamlde Ultralytics divide las 847 imágenes etiquetadas aproximadamente en una proporción de 90/10 en conjuntos de entrenamiento y validación; consulta Dataset Structure para obtener más detalles.Entrena un modelo YOLO26n en xView durante 100 épocas 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 ver los argumentos y la configuración detallados, consulta la página de Training 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 Citations and Acknowledgments anterior.



