xView 데이터 세트
xView 데이터 세트는 경계 상자를 사용하여 주석이 달린 전 세계 복잡한 장면의 이미지를 포함하는 가장 큰 공개적으로 사용 가능한 오버헤드 이미지 데이터 세트 중 하나입니다. xView 데이터 세트의 목표는 다음 네 가지 컴퓨터 비전 영역에서 발전을 가속화하는 것입니다.
- 감지를 위한 최소 해상도 감소.
- 학습 효율성을 향상합니다.
- 더 많은 객체 클래스 검색 활성화.
- 세분화된 클래스의 탐지율을 향상합니다.
xView는 COCO(Common Objects in Context)와 같은 챌린지의 성공을 기반으로 하며, 컴퓨터 비전을 활용하여 우주에서 얻을 수 있는 이미지의 양을 분석하고 시각적 세계를 새로운 방식으로 이해하며 다양한 중요 응용 분야를 해결하는 것을 목표로 합니다.
수동 다운로드 필요
xView 데이터 세트는 Ultralytics 스크립트에 의해 자동으로 다운로드 되지 않습니다. 먼저 공식 소스에서 데이터 세트를 수동으로 다운로드 해야 합니다.
- 출처: 미국 국가 지리 공간 정보국(NGA)의 DIUx xView 2018 챌린지
- URL: https://challenge.xviewdataset.org
중요: 필요한 파일(예:) train_images.tif
, val_images.tif
, xView_train.geojson
), 압축을 풀고 올바른 디렉토리 구조(일반적으로 아래에 예상되는)에 넣어야 합니다. datasets/xView/
폴더, 이전 아래 제공된 학습 명령을 실행합니다. 챌린지 지침에 따라 데이터 세트가 올바르게 설정되었는지 확인하십시오.
주요 기능
- xView는 60개 클래스에 걸쳐 1백만 개 이상의 객체 인스턴스를 포함합니다.
- 이 데이터 세트는 0.3미터의 해상도를 가지므로 대부분의 공개 위성 이미지 데이터 세트보다 더 높은 해상도의 이미지를 제공합니다.
- xView는 바운딩 박스 어노테이션을 통해 작고 희귀하며 세분화되고 다양한 유형의 객체 컬렉션을 제공합니다.
- TensorFlow 객체 감지 API와 PyTorch용 예제를 사용하여 사전 훈련된 기준 모델과 함께 제공됩니다.
데이터 세트 구조
xView 데이터 세트는 0.3m 지상 샘플 거리에서 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/cfg/datasets/xView.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# DIUx xView 2018 Challenge https://challenge.xviewdataset.org by U.S. National Geospatial-Intelligence Agency (NGA)
# -------- DOWNLOAD DATA MANUALLY and jar xf val_images.zip to 'datasets/xView' before running 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 # train 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
import os
from pathlib import Path
import numpy as np
from PIL import Image
from ultralytics.utils import TQDM
from ultralytics.data.utils import autosplit
from ultralytics.utils.ops import xyxy2xywhn
def convert_labels(fname=Path("xView/xView_train.geojson")):
"""Converts xView geoJSON labels to YOLO format, mapping classes to indices 0-59 and saving 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(path / "labels" / "train")
os.system(f"rm -rf {labels}")
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"]:
id = p["image_id"]
file = path / "train_images" / id
if 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-60
assert 59 >= cls >= 0, f"incorrect class index {cls}"
# Write YOLO label
if id not in shapes:
shapes[id] = Image.open(file).size
box = xyxy2xywhn(box[None].astype(np.float), w=shapes[id][0], h=shapes[id][1], clip=True)
with open((labels / 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 {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")
사용법
640 이미지 크기로 xView 데이터 세트에서 모델을 100 epochs 동안 학습하려면 다음 코드 스니펫을 사용할 수 있습니다. 사용 가능한 인수에 대한 포괄적인 목록은 모델 Training 페이지를 참조하십시오.
훈련 예제
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="xView.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo detect train data=xView.yaml model=yolo11n.pt 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}
}
컴퓨터 비전 연구 커뮤니티에 귀중한 기여를 해주신 Defense Innovation Unit(DIU)와 xView 데이터 세트 제작자에게 감사를 드립니다. xView 데이터 세트 및 제작자에 대한 자세한 내용은 xView 데이터 세트 웹사이트를 방문하십시오.
FAQ
xView 데이터 세트는 무엇이며 컴퓨터 비전 연구에 어떻게 도움이 됩니까?
xView 데이터 세트는 60개 클래스에 걸쳐 100만 개 이상의 객체 인스턴스를 포함하는 고해상도 오버헤드 이미지의 가장 큰 공개 컬렉션 중 하나입니다. 감지를 위한 최소 해상도 감소, 학습 효율성 향상, 더 많은 객체 클래스 발견, 세분화된 객체 감지 발전과 같은 다양한 컴퓨터 비전 연구 측면을 향상시키도록 설계되었습니다.
Ultralytics YOLO를 사용하여 xView 데이터 세트에서 모델을 훈련하려면 어떻게 해야 합니까?
Ultralytics YOLO를 사용하여 xView 데이터 세트에 대해 모델을 훈련하려면 다음 단계를 따르세요.
훈련 예제
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="xView.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo detect train data=xView.yaml model=yolo11n.pt epochs=100 imgsz=640
자세한 인수 및 설정은 모델 학습 페이지를 참조하십시오.
xView 데이터 세트의 주요 특징은 무엇입니까?
xView 데이터 세트는 포괄적인 기능 세트로 인해 두드러집니다.
- 60개의 고유한 클래스에서 100만 개가 넘는 객체 인스턴스.
- 0.3미터의 고해상도 이미지.
- 작고 희귀하며 세밀한 객체를 포함한 다양한 객체 유형이 경계 상자로 주석 처리되어 있습니다.
- TensorFlow 및 PyTorch에서 사전 훈련된 기준 모델 및 예제 사용 가능
xView의 데이터 세트 구조는 무엇이며, 어떻게 어노테이션되어 있습니까?
xView 데이터 세트는 0.3m 지상 샘플 거리에서 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 데이터 세트 웹사이트를 참조하세요.