xView 데이터셋
xView 데이터셋은 바운딩 박스를 사용하여 주석이 달린 전 세계의 복잡한 장면 이미지를 포함하는 공개된 오버헤드 이미지 데이터셋 중 가장 큰 규모 중 하나입니다. xView 데이터셋의 목표는 다음과 같은 4가지 컴퓨터 비전 분야의 발전을 가속화하는 것입니다:
- 탐지를 위한 최소 해상도 감소.
- 학습 효율성 향상.
- 더 많은 객체 클래스 발견 가능.
- 세밀한 객체 클래스 탐지 향상.
xView는 Common Objects in Context (COCO)와 같은 챌린지의 성공을 바탕으로 하며, 컴퓨터 비전을 활용하여 우주에서 수집되는 방대한 양의 이미지를 분석함으로써 새로운 방식으로 시각적 세계를 이해하고 다양한 중요 애플리케이션을 해결하는 것을 목표로 합니다.
xView 데이터셋은 Ultralytics 스크립트에 의해 자동으로 다운로드되지 않습니다. 반드시 공식 소스에서 먼저 데이터셋을 수동으로 다운로드해야 합니다:
- 소스: 미국 국립지리정보국(NGA)의 DIUx xView 2018 챌린지
- URL: https://challenge.xviewdataset.org
중요: 필요한 파일(예: train_images.tif, val_images.tif, xView_train.geojson)을 다운로드한 후, 압축을 풀고 아래 제공된 학습 명령어를 실행하기 전에 일반적으로 datasets/xView/ 폴더 아래에 위치하도록 올바른 디렉토리 구조로 배치해야 합니다. 챌린지 지침에 따라 데이터셋이 올바르게 설정되었는지 확인하십시오.
주요 특징
- xView는 60개 클래스에 걸쳐 100만 개 이상의 객체 인스턴스를 포함합니다.
- 이 데이터셋은 0.3미터의 해상도를 제공하며, 대부분의 공개 위성 이미지 데이터셋보다 더 높은 해상도의 이미지를 제공합니다.
- xView는 바운딩 박스 주석이 달린 작고 희귀하며 세밀한 다중 유형 객체들의 다양한 컬렉션을 특징으로 합니다.
- TensorFlow 객체 탐지 API를 사용하는 사전 학습된 베이스라인 모델과 PyTorch 예제가 함께 제공됩니다.
데이터셋 구조
xView 데이터셋은 0.3m 지상 표본 거리(GSD)의 WorldView-3 위성에서 수집된 위성 이미지로 구성됩니다. 이는 1,400km² 이상의 이미지에 걸쳐 60개 클래스, 100만 개 이상의 객체를 포함합니다. 이 데이터셋은 원격 탐사 애플리케이션 및 환경 모니터링에 특히 유용합니다.
응용 분야
xView 데이터셋은 오버헤드 이미지 내 객체 탐지를 위한 딥러닝 모델을 학습하고 평가하는 데 널리 사용됩니다. 다양한 객체 클래스와 고해상도 이미지는 컴퓨터 비전 분야의 연구자와 실무자들에게, 특히 위성 이미지 분석 분야에서 매우 귀중한 자원입니다. 응용 분야는 다음과 같습니다:
- 군사 및 방위 정찰
- 도시 계획 및 개발
- 환경 모니터링
- 재난 대응 및 평가
- 인프라 매핑 및 관리
데이터셋 YAML
YAML (Yet Another Markup Language) 파일은 데이터셋 구성을 정의하는 데 사용됩니다. 여기에는 데이터셋의 경로, 클래스 및 기타 관련 정보가 포함되어 있습니다. xView 데이터셋의 경우, xView.yaml 파일은 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")사용법
xView 데이터셋으로 100개의 에폭 동안 이미지 크기 640으로 모델을 학습하려면 다음 코드 스니펫을 사용할 수 있습니다. 사용 가능한 인수의 전체 목록은 모델 학습 페이지를 참조하십시오.
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 데이터셋은 바운딩 박스를 사용하여 주석이 달린 다양한 객체가 포함된 고해상도 위성 이미지를 포함합니다. 데이터셋의 데이터 예시와 해당 주석은 다음과 같습니다:

- 오버헤드 이미지: 이 이미지는 객체가 바운딩 박스로 주석 처리된 오버헤드 이미지에서의 객체 탐지 예시를 보여줍니다. 데이터셋은 이 작업을 위한 모델 개발을 원활하게 하기 위해 고해상도 위성 이미지를 제공합니다.
이 예시는 xView 데이터셋 데이터의 다양성과 복잡성을 보여주며, 객체 탐지 작업을 위한 고품질 위성 이미지의 중요성을 강조합니다.
관련 데이터셋
위성 이미지를 다루고 있다면 다음 관련 데이터셋도 살펴볼 수 있습니다:
- DOTA-v2: 항공 이미지 내 지향성 객체 탐지를 위한 데이터셋
- VisDrone: 드론으로 촬영한 이미지 내 객체 탐지 및 추적을 위한 데이터셋
- Argoverse: 3D 추적 주석이 포함된 자율 주행 데이터셋
인용 및 감사의 글
연구 또는 개발 작업에 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}
}국방 혁신 부대(DIU)와 컴퓨터 비전 연구 커뮤니티에 귀중한 기여를 해준 xView 데이터셋 제작자들에게 감사를 표합니다. xView 데이터셋 및 제작자에 대한 자세한 내용은 xView 데이터셋 웹사이트를 방문하십시오.
FAQ
xView 데이터셋이란 무엇이며 컴퓨터 비전 연구에 어떤 이점을 제공합니까?
xView 데이터셋은 60개 클래스에 걸쳐 100만 개 이상의 객체 인스턴스를 포함하는 가장 큰 공개 고해상도 오버헤드 이미지 컬렉션 중 하나입니다. 이는 탐지를 위한 최소 해상도 감소, 학습 효율성 향상, 더 많은 객체 클래스 발견, 세밀한 객체 탐지 진보와 같은 컴퓨터 비전 연구의 다양한 측면을 강화하도록 설계되었습니다.
Ultralytics YOLO를 사용하여 xView 데이터셋으로 모델을 학습하려면 어떻게 해야 합니까?
Ultralytics YOLO를 사용하여 xView 데이터셋으로 모델을 학습하려면 다음 단계를 따르십시오:
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 데이터셋의 주요 특징은 무엇입니까?
xView 데이터셋은 포괄적인 기능 세트로 인해 두드러집니다:
- 60개의 뚜렷한 클래스에 걸친 100만 개 이상의 객체 인스턴스.
- 0.3미터의 고해상도 이미지.
- 바운딩 박스로 주석이 달린 작고 희귀하며 세밀한 객체를 포함한 다양한 객체 유형.
- TensorFlow 및 PyTorch로 제공되는 사전 학습된 베이스라인 모델 및 예제.
xView의 데이터셋 구조는 어떠하며 주석은 어떻게 처리됩니까?
xView 데이터셋은 0.3m GSD의 WorldView-3 위성으로 캡처한 고해상도 위성 이미지를 포함하며, 약 1,400km²의 주석이 달린 이미지 내 60개 클래스, 100만 개 이상의 객체를 다룹니다. 각 객체는 바운딩 박스로 라벨링되어 있어, 오버헤드 뷰에서의 객체 탐지를 위한 딥러닝 모델 학습 및 평가에 매우 적합합니다. 자세한 내용은 데이터셋 구조 섹션을 참조하십시오.
연구에서 xView 데이터셋을 어떻게 인용합니까?
연구에서 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}
}xView 데이터셋에 대한 자세한 내용은 공식 xView 데이터셋 웹사이트를 방문하십시오.