跳至内容

xView 数据集

The xView dataset is one of the largest publicly available datasets of overhead imagery, containing images from complex scenes around the world annotated using bounding boxes. The goal of the xView dataset is to accelerate progress in four computer vision frontiers:

  1. 降低检测的最小分辨率。
  2. 提高学习效率。
  3. 可发现更多对象类别。
  4. 改进对细粒度类别的检测。

xView 以 "上下文中的常见物体"(COCO)等挑战项目的成功为基础,旨在利用计算机视觉来分析日益增多的太空图像,从而以全新的方式理解视觉世界,并解决一系列重要应用问题。

主要功能

  • xView 包含 60 个类别的 100 多万个对象实例。
  • 该数据集的分辨率为 0.3 米,提供的图像分辨率高于大多数公共卫星图像数据集。
  • xView features a diverse collection of small, rare, fine-grained, and multi-type objects with bounding box annotation.
  • Comes with a pre-trained baseline model using the TensorFlow object detection API and an example for PyTorch.

数据集结构

xView 数据集由 WorldView-3 卫星以 0.3 米的地面采样距离采集的卫星图像组成。它包含 60 个类别的 100 多万个物体,图像面积超过 1,400 平方公里。

应用

xView 数据集被广泛用于训练和评估高空图像中物体检测的深度学习模型。该数据集包含多种物体类别和高分辨率图像,是计算机视觉领域研究人员和从业人员的宝贵资源,尤其适用于卫星图像分析。

数据集 YAML

YAML(另一种标记语言)文件用于定义数据集配置。它包含数据集的路径、类和其他相关信息。就 xView 数据集而言,YAML 文件中的 xView.yaml 文件保存在 https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/xView.yaml.

ultralytics/cfg/datasets/xView.yaml

# Ultralytics YOLO 🚀, AGPL-3.0 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: ../datasets/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 tqdm import tqdm

  from ultralytics.data.utils import autosplit
  from ultralytics.utils.ops import xyxy2xywhn


  def convert_labels(fname=Path('xView/xView_train.geojson')):
      # Convert xView geoJSON labels to YOLO format
      path = fname.parent
      with open(fname) 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') 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')

使用方法

To train a model on the xView dataset for 100 epochs with an image size of 640, you can use the following code snippets. For a comprehensive list of available arguments, refer to the model Training page.

列车示例

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 数据集包含高分辨率卫星图像,其中的各种对象都使用边界框进行了注释。下面是数据集中的一些数据示例及其相应的注释:

数据集样本图像

  • Overhead Imagery: This image demonstrates an example of object detection in overhead imagery, where objects are annotated with bounding boxes. The dataset provides high-resolution satellite images to facilitate the development of models for this task.

该示例展示了 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}
}

我们衷心感谢国防创新部门(DIU)和 xView 数据集创建者为计算机视觉研究界做出的宝贵贡献。有关 xView 数据集及其创建者的更多信息,请访问xView 数据集网站

常见问题

什么是 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 数据集有哪些主要特点?

The xView dataset stands out due to its comprehensive set of features:

  • Over 1 million object instances across 60 distinct classes.
  • High-resolution imagery at 0.3 meters.
  • Diverse object types including small, rare, and fine-grained objects, all annotated with bounding boxes.
  • Availability of a pre-trained baseline model and examples in TensorFlow and PyTorch.

xView 的数据集结构是怎样的?

The xView dataset comprises high-resolution satellite images collected from WorldView-3 satellites at a 0.3m ground sample distance. It encompasses over 1 million objects across 60 classes in approximately 1,400 km² of imagery. Each object within the dataset is annotated with bounding boxes, making it ideal for training and evaluating deep learning models for object detection in overhead imagery. For a detailed overview, you can look at the dataset structure section here.

如何在研究中引用 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 数据集官方网站

📅 Created 11 months ago ✏️ Updated 20 days ago

评论