xView 데이터셋#
xView 데이터셋은 공개적으로 사용 가능한 가장 큰 위성 이미지 object detection 벤치마크 중 하나로, 0.3m WorldView-3 이미지 1,400 km² 이상에서 60개의 클래스에 걸쳐 1백만 개가 넘는 객체 인스턴스를 bounding boxes로 어노테이션하여 제공합니다. 이 데이터셋은 미국 국립지형공간정보국(NGA)이 DIUx xView 2018 챌린지를 위해 공개했으며, 약 20.7 GB를 수동으로 다운로드해야 합니다.
이 데이터셋은 네 가지 computer vision 분야의 한계를 넓히기 위해 생성되었습니다:
- 탐지를 위한 최소 해상도 감소.
- 학습 효율성 개선.
- 더 많은 객체 클래스 발견 활성화.
- 세밀한 클래스의 탐지 성능 개선.
COCO와 같은 벤치마크를 바탕으로, xView는 지상 사진에 비해 객체가 훨씬 작고 조밀하게 밀집해 있는 항공 이미지를 대상으로 합니다.
xView 데이터셋은 자동으로 다운로드되지 않습니다. DIUx xView 2018 Challenge 웹사이트에 등록하여 train_images.zip(~15 GB), train_labels.zip, val_images.zip(~5 GB)을 다운로드한 후, 다음을 포함하도록 datasets/xView/ 아래에 압축을 해제하세요:
datasets/xView/
├── train_images/ # 847 TIF satellite images
├── val_images/ # 282 TIF images (no public labels)
└── xView_train.geojson # bounding-box annotations첫 번째 학습 실행 시, Ultralytics는 GeoJSON 어노테이션을 자동으로 YOLO 형식으로 변환하고 라벨이 지정된 이미지를 약 90/10 비율로 학습 및 검증 세트로 분할합니다. 수동 변환은 필요하지 않습니다.
주요 특징#
- 세분화된 클래스: 항공기, 차량, 철도 차량, 해상 선박, 건설 장비 및 건물을 포함하는 60개의 객체 클래스 — 다수가 작고 희귀하며 시각적으로 유사합니다.
- 고해상도: WorldView-3 위성에서 수집된 0.3 m 지상 샘플 거리(GSD).
- 조밀한 어노테이션: 1,400 km² 이상의 영상에 걸쳐 100만 개 이상의 객체 인스턴스가 있으며, 모두 수평 bounding boxes로 라벨이 지정되어 있습니다.
- 자동 변환: Ultralytics 다운로드 스크립트가 원래의 GeoJSON 라벨을 YOLO 형식으로 변환하고 처음 사용할 때 train/val 분할을 생성합니다.
데이터셋 구조#
xView 이미지는 TIF 형식의 대형 위성 씬이며, 공개 레이블이 있는 것은 847개의 학습 이미지뿐이고 282개의 이미지로 구성된 챌린지 검증 세트에는 레이블이 없습니다. 따라서 Ultralytics xView.yaml 설정은 처음 사용할 때 레이블이 지정된 이미지를 자동으로 분할합니다:
| Split | 이미지 | 설명 |
|---|---|---|
| 학습(Train) | 847개의 ~90% | autosplit_train.txt에 나열된 레이블이 지정된 이미지, 첫 번째 실행 시 생성됨 |
| 검증 | 847개의 ~10% | autosplit_val.txt에 나열된 레이블이 지정된 이미지는 evaluation에 사용됩니다. |
60개의 클래스는 고정익 항공기(Fixed-wing Aircraft), 화물기(Cargo Plane), 소형 승용차(Small Car), 버스(Bus), 기관차(Locomotive), 해상 선박(Maritime Vessel), 굴착기(Excavator), 건물(Building), 항공기 격납고(Aircraft Hangar), 저장 탱크(Storage Tank) 등 세부 카테고리를 아우르며, 전체 목록은 아래의 Dataset YAML에서 확인할 수 있습니다. 변환 과정에서 원래 챌린지 클래스 ID(11–94)는 연속된 인덱스 0–59로 재매핑됩니다.
응용 분야#
xView의 세분화된 클래스와 고해상도 상공 뷰포인트는 remote sensing 분야에서 deep learning 모델을 학습하고 평가하기 위한 표준 벤치마크로 만듭니다. 일반적인 애플리케이션은 다음과 같습니다:
- 군사 및 방위 정찰
- 도시 계획 및 개발
- 환경 모니터링
- 재난 대응 및 평가
- 인프라 매핑 및 관리
다른 항공 이미지 벤치마크를 보려면 드론 중심의 VisDrone dataset 또는 회전 박스 중심의 DOTA-v2 dataset을 참고하세요.
데이터셋 YAML#
xView.yaml 파일은 데이터셋 경로, 60개의 클래스 이름, GeoJSON 주석을 변환하고 자동 분할을 생성하는 다운로드 스크립트 등 데이터셋 구성을 정의합니다. 이 파일은 Ultralytics 저장소(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")사용법#
학습을 위해서는 위에서 설명한 수동 다운로드 파일을 datasets/xView/ 아래에 압축 해제해야 하며, 그 후 주석 변환 및 학습/검증 분할이 자동으로 실행됩니다.
이미지 크기 640으로 100 epochs 동안 xView 데이터셋으로 모델을 학습하려면 다음 코드 스니펫을 사용할 수 있습니다. 사용 가능한 인수의 전체 목록은 모델 Training 페이지를 참조하세요.
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)추가 위성 이미지에 레이블을 지정하고 브라우저에서 xView 학습 실행을 관리하려면 Ultralytics Platform을 사용하세요.
샘플 데이터 및 주석#
아래 샘플은 전형적인 xView 씬을 보여줍니다. 차량 및 건물과 같은 작은 객체에 bounding box로 주석이 달린 고해상도 항공 이미지로, 위성 이미지에서의 object detection에 왜 세밀한 지역화가 필요한지 잘 보여줍니다.

인용 및 감사의 글#
연구 또는 개발 작업에서 xView 데이터셋을 사용하는 경우 다음 논문을 인용해 주십시오:
@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}
}컴퓨터 비전 연구 커뮤니티에 귀중한 기여를 해주신 Defense Innovation Unit(DIU)과 xView 데이터셋 제작자들에게 감사를 표합니다. 자세한 내용은 xView dataset website를 방문하세요.
FAQ#
xView 데이터셋은 미국 국가지리정보국이 DIUx xView 2018 챌린지를 위해 공개한 위성 이미지 벤치마크로, 0.3m WorldView-3 이미지 내 60개의 세부 클래스에 걸쳐 100만 개 이상의 객체 인스턴스를 제공합니다. 이 데이터셋은 지상 사진보다 훨씬 어려운 타겟인 항공 뷰에서 작고 희귀하며 세밀한 객체를 감지하는 연구를 지원합니다.
xView는 수동 다운로드가 필요합니다. DIUx xView 2018 Challenge 웹사이트에 등록하고,
train_images.zip(~15 GB),train_labels.zip,val_images.zip(~5 GB, 총 약 20.7 GB)을 다운로드한 후, 이 페이지 상단의 경고에 나오는 레이아웃에 따라datasets/xView/아래에 압축을 해제하세요. 첫 번째 학습 실행 시 Ultralytics는 GeoJSON 주석을 YOLO 형식으로 자동 변환하고 학습/검증 분할을 생성합니다.xView는 847개의 레이블이 지정된 학습 이미지와 공개 레이블이 없는 282개의 검증 이미지를 포함하며, 모두 0.3m 해상도의 WorldView-3 위성으로 촬영되었습니다. 주석은 60개 클래스에 걸쳐 100만 개 이상의 객체 인스턴스를 다룹니다. 학습 레이블만 공개되어 있으므로, Ultralytics
xView.yaml설정은 레이블이 지정된 847개의 이미지를 약 90/10 비율로 학습 및 검증 세트로 분할합니다. 자세한 내용은 Dataset Structure를 참조하세요.논문 "xView: Objects in Context in Overhead Imagery" (Lam et al., arXiv:1802.07856, 2018)를 인용하세요. 전체 BibTeX 항목은 위의 Citations and Acknowledgments 섹션에 있습니다.