콘텐츠로 건너뛰기

xView 데이터 세트

xView 데이터 세트는 경계 상자를 사용하여 주석이 달린 전 세계 복잡한 장면의 이미지를 포함하는 가장 큰 공개적으로 사용 가능한 오버헤드 이미지 데이터 세트 중 하나입니다. xView 데이터 세트의 목표는 다음 네 가지 컴퓨터 비전 영역에서 발전을 가속화하는 것입니다.

  1. 감지를 위한 최소 해상도 감소.
  2. 학습 효율성을 향상합니다.
  3. 더 많은 객체 클래스 검색 활성화.
  4. 세분화된 클래스의 탐지율을 향상합니다.

xView는 COCO(Common Objects in Context)와 같은 챌린지의 성공을 기반으로 하며, 컴퓨터 비전을 활용하여 우주에서 얻을 수 있는 이미지의 양을 분석하고 시각적 세계를 새로운 방식으로 이해하며 다양한 중요 응용 분야를 해결하는 것을 목표로 합니다.

수동 다운로드 필요

xView 데이터 세트는 Ultralytics 스크립트에 의해 자동으로 다운로드 되지 않습니다. 먼저 공식 소스에서 데이터 세트를 수동으로 다운로드 해야 합니다.

중요: 필요한 파일(예:) 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 데이터 세트 웹사이트를 참조하세요.



📅 1년 전에 생성됨 ✏️ 4개월 전에 업데이트됨

댓글