Tập dữ liệu xView
Tập dữ liệu xView là một trong những tập dữ liệu hình ảnh từ trên không công khai lớn nhất, chứa các hình ảnh từ những cảnh quan phức tạp trên khắp thế giới được chú thích bằng các khung bao (bounding box). Mục tiêu của tập dữ liệu xView là thúc đẩy tiến bộ trong bốn lĩnh vực thị giác máy tính:
- Giảm độ phân giải tối thiểu cho phát hiện.
- Cải thiện hiệu quả học tập.
- Cho phép khám phá nhiều lớp đối tượng hơn.
- Cải thiện khả năng phát hiện các lớp đối tượng chi tiết (fine-grained).
xView được xây dựng dựa trên thành công của các cuộc thi như Common Objects in Context (COCO) và nhằm mục đích tận dụng thị giác máy tính để phân tích lượng hình ảnh ngày càng tăng từ không gian, nhằm hiểu thế giới trực quan theo những cách mới và giải quyết hàng loạt ứng dụng quan trọng.
Tập dữ liệu xView không được tự động tải xuống bởi các script của Ultralytics. Bạn phải tải xuống thủ công tập dữ liệu này trước từ nguồn chính thức:
- Nguồn: Cuộc thi DIUx xView 2018 bởi Cơ quan Tình báo Địa không gian Quốc gia Hoa Kỳ (NGA)
- URL: https://challenge.xviewdataset.org
Quan trọng: Sau khi tải xuống các tệp cần thiết (ví dụ: train_images.tif, val_images.tif, xView_train.geojson), bạn cần giải nén và đặt chúng vào đúng cấu trúc thư mục, thường là trong thư mục datasets/xView/, trước khi chạy các lệnh huấn luyện được cung cấp bên dưới. Đảm bảo tập dữ liệu được thiết lập chính xác theo hướng dẫn của cuộc thi.
Các tính năng chính
- xView chứa hơn 1 triệu thực thể đối tượng trên 60 lớp.
- Tập dữ liệu có độ phân giải 0,3 mét, cung cấp hình ảnh có độ phân giải cao hơn hầu hết các tập dữ liệu hình ảnh vệ tinh công khai.
- xView có bộ sưu tập đa dạng các đối tượng nhỏ, hiếm, chi tiết và nhiều loại với chú thích bounding box.
- Đi kèm với một model cơ sở đã được huấn luyện trước sử dụng TensorFlow API phát hiện đối tượng và một ví dụ cho PyTorch.
Cấu trúc tập dữ liệu
Tập dữ liệu xView bao gồm các hình ảnh vệ tinh được thu thập từ vệ tinh WorldView-3 ở khoảng cách lấy mẫu mặt đất 0,3m. Nó chứa hơn 1 triệu đối tượng trên 60 lớp trong hơn 1.400 km² hình ảnh. Tập dữ liệu này đặc biệt có giá trị cho các ứng dụng viễn thám và giám sát môi trường.
Ứng dụng
Tập dữ liệu xView được sử dụng rộng rãi để huấn luyện và đánh giá các model học sâu cho việc phát hiện đối tượng trong hình ảnh trên không. Bộ lớp đối tượng đa dạng và hình ảnh độ phân giải cao của tập dữ liệu này khiến nó trở thành tài nguyên quý giá cho các nhà nghiên cứu và thực hành trong lĩnh vực thị giác máy tính, đặc biệt là phân tích hình ảnh vệ tinh. Các ứng dụng bao gồm:
- Trinh sát quân sự và quốc phòng
- Quy hoạch và phát triển đô thị
- Giám sát môi trường
- Ứng phó và đánh giá thảm họa
- Lập bản đồ và quản lý cơ sở hạ tầng
Dataset YAML
Tệp YAML (Yet Another Markup Language) được sử dụng để xác định cấu hình tập dữ liệu. Nó chứa thông tin về đường dẫn của tập dữ liệu, các lớp và các thông tin liên quan khác. Đối với tập dữ liệu xView, tệp xView.yaml được duy trì tại 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")Cách sử dụng
Để huấn luyện một model trên tập dữ liệu xView trong 100 epoch với kích thước ảnh là 640, bạn có thể sử dụng các đoạn mã sau. Để biết danh sách đầy đủ các đối số, hãy tham khảo trang Huấn luyện của model.
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)Dữ liệu mẫu và Chú thích
Tập dữ liệu xView chứa các hình ảnh vệ tinh độ phân giải cao với tập hợp đối tượng đa dạng được chú thích bằng bounding box. Dưới đây là một số ví dụ về dữ liệu từ tập dữ liệu, cùng với các chú thích tương ứng:

- Hình ảnh trên không: Hình ảnh này minh họa một ví dụ về phát hiện đối tượng trong hình ảnh trên không, nơi các đối tượng được chú thích bằng bounding box. Tập dữ liệu cung cấp các hình ảnh vệ tinh độ phân giải cao để tạo điều kiện phát triển các model cho tác vụ này.
Ví dụ này thể hiện sự đa dạng và phức tạp của dữ liệu trong tập dữ liệu xView và làm nổi bật tầm quan trọng của hình ảnh vệ tinh chất lượng cao cho các tác vụ phát hiện đối tượng.
Các Tập dữ liệu Liên quan
Nếu bạn đang làm việc với hình ảnh vệ tinh, bạn có thể cũng quan tâm đến việc khám phá các tập dữ liệu liên quan này:
- DOTA-v2: Tập dữ liệu cho phát hiện đối tượng có định hướng trong hình ảnh trên không
- VisDrone: Tập dữ liệu cho phát hiện và theo dõi đối tượng trong hình ảnh quay bởi drone
- Argoverse: Tập dữ liệu cho lái xe tự hành với các chú thích theo dõi 3D
Trích dẫn và Ghi nhận
Nếu bạn sử dụng tập dữ liệu xView trong công việc nghiên cứu hoặc phát triển của mình, vui lòng trích dẫn bài báo sau:
@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}
}Chúng tôi xin ghi nhận Defense Innovation Unit (DIU) và những người tạo ra tập dữ liệu xView vì đóng góp quý báu của họ cho cộng đồng nghiên cứu thị giác máy tính. Để biết thêm thông tin về tập dữ liệu xView và những người tạo ra nó, hãy truy cập trang web tập dữ liệu xView.
Câu hỏi thường gặp (FAQ)
Tập dữ liệu xView là gì và nó mang lại lợi ích gì cho nghiên cứu thị giác máy tính?
Tập dữ liệu xView là một trong những bộ sưu tập hình ảnh trên không độ phân giải cao công khai lớn nhất, chứa hơn 1 triệu thực thể đối tượng trên 60 lớp. Nó được thiết kế để nâng cao nhiều khía cạnh của nghiên cứu thị giác máy tính như giảm độ phân giải tối thiểu cho phát hiện, cải thiện hiệu quả học tập, khám phá nhiều lớp đối tượng hơn và thúc đẩy phát hiện đối tượng chi tiết.
Làm thế nào tôi có thể sử dụng Ultralytics YOLO để huấn luyện model trên tập dữ liệu xView?
Để huấn luyện một model trên tập dữ liệu xView sử dụng Ultralytics YOLO, hãy làm theo các bước sau:
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)Để biết các đối số và cài đặt chi tiết, hãy tham khảo trang Huấn luyện của model.
Các tính năng chính của tập dữ liệu xView là gì?
Tập dữ liệu xView nổi bật nhờ bộ tính năng toàn diện:
- Hơn 1 triệu thực thể đối tượng trên 60 lớp khác biệt.
- Hình ảnh độ phân giải cao 0,3 mét.
- Các loại đối tượng đa dạng bao gồm đối tượng nhỏ, hiếm và chi tiết, tất cả đều được chú thích bằng bounding box.
- Có sẵn model cơ sở đã được huấn luyện trước và các ví dụ trong TensorFlow và PyTorch.
Cấu trúc tập dữ liệu xView là gì và nó được chú thích như thế nào?
Tập dữ liệu xView chứa các hình ảnh vệ tinh độ phân giải cao do vệ tinh WorldView-3 chụp ở khoảng cách lấy mẫu mặt đất 0,3m, bao phủ hơn 1 triệu đối tượng trên 60 lớp khác biệt trong khoảng 1.400 km² hình ảnh được chú thích. Mỗi đối tượng được gắn nhãn bằng bounding box, làm cho tập dữ liệu rất phù hợp để huấn luyện và đánh giá các model học sâu cho việc phát hiện đối tượng trong các chế độ xem từ trên không. Để biết chi tiết, hãy tham khảo phần Cấu trúc Tập dữ liệu.
Làm cách nào để trích dẫn tập dữ liệu xView trong nghiên cứu của tôi?
Nếu bạn sử dụng tập dữ liệu xView trong nghiên cứu của mình, vui lòng trích dẫn bài báo sau:
@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}
}Để biết thêm thông tin về tập dữ liệu xView, hãy truy cập trang web tập dữ liệu xView chính thức.