مجموعة بيانات xView#
تُعد مجموعة بيانات xView واحدة من أكبر معايير الصور الفضائية المتاحة للعامة لاكتشاف الكائنات، إذ توفر أكثر من مليون مثيل لكائنات ضمن 60 فئة، موضحةً باستخدام مربعات الإحاطة في أكثر من 1,400 كم² من صور WorldView-3 بدقة 0.3 م. وقد أُطلقت لتحدي DIUx xView 2018 من قِبل الوكالة الوطنية للاستخبارات الجغرافية المكانية في الولايات المتحدة (NGA)، وتتطلب تنزيلًا يدويًا يبلغ حجمه نحو 20.7 جيجابايت.
أُنشئت مجموعة البيانات لدفع أربعة حدود في مجال الرؤية الحاسوبية:
- تقليل الحد الأدنى للدقة اللازمة للكشف.
- تحسين كفاءة التعلم.
- إتاحة اكتشاف المزيد من فئات الكائنات.
- تحسين اكتشاف الفئات الدقيقة.
استنادًا إلى معايير مثل COCO، تستهدف xView الصور الملتقطة من أعلى، حيث تكون الكائنات أصغر بكثير وأكثر تكدسًا من تلك الموجودة في الصور الملتقطة من مستوى الأرض.
لا يتم تنزيل مجموعة بيانات xView تلقائيًا. سجّل في موقع تحدي DIUx xView 2018 لتنزيل train_images.zip (~15 جيجابايت) وtrain_labels.zip وval_images.zip (~5 جيجابايت)، ثم فك ضغطها ضمن datasets/xView/ بحيث يحتوي على:
datasets/xView/
├── train_images/ # 847 TIF satellite images
├── val_images/ # 282 TIF images (no public labels)
└── xView_train.geojson # bounding-box annotationsفي أول تشغيل للتدريب، يحوّل Ultralytics التعليقات التوضيحية بتنسيق GeoJSON إلى تنسيق YOLO ويقسّم الصور الموسومة تلقائيًا بنسبة تقارب 90/10 إلى مجموعتي التدريب والتحقق — ولا حاجة إلى تحويل يدوي.
الميزات الرئيسية#
- الفئات الدقيقة: 60 فئة من الكائنات تشمل الطائرات والمركبات ومعدات السكك الحديدية والسفن البحرية ومعدات البناء والمباني — وكثير منها صغير ونادر ومتقارب بصريًا.
- الدقة العالية: مسافة أخذ عينات أرضية تبلغ 0.3 م، جُمعت من الأقمار الصناعية WorldView-3.
- التعليقات التوضيحية الكثيفة: أكثر من مليون مثيل لكائنات ضمن أكثر من 1,400 كم² من الصور، وكلها موسومة بمربعات إحاطة أفقية.
- التحويل التلقائي: يحوّل برنامج التنزيل من Ultralytics التسميات الأصلية بتنسيق GeoJSON إلى تنسيق YOLO، وينشئ تقسيم التدريب/التحقق عند أول استخدام.
بنية مجموعة البيانات#
صور xView عبارة عن مشاهد أقمار صناعية كبيرة بتنسيق TIF، ولا تأتي سوى الصور التدريبية البالغ عددها 847 صورة مع تسميات عامة — بينما لا تحتوي مجموعة التحقق الخاصة بالتحدي، البالغ عدد صورها 282، على أي تسميات. لذلك يقسّم تكوين Ultralytics xView.yaml الصور الموسومة تلقائيًا عند أول استخدام:
| التقسيم | الصور | الوصف |
|---|---|---|
| التدريب | ~90% من 847 | الصور الموسومة المدرجة في autosplit_train.txt، والتي تُنشأ عند أول تشغيل |
| التحقق | ~10% من 847 | الصور الموسومة المدرجة في autosplit_val.txt، والمستخدمة في التقييم |
تغطي الفئات الستون فئات دقيقة مثل الطائرات ذات الأجنحة الثابتة، وطائرات الشحن، والسيارات الصغيرة، والحافلات، والقاطرات، والسفن البحرية، والحفارات، والمباني، وحظائر الطائرات، وخزانات التخزين؛ وتوجد القائمة الكاملة في ملف YAML لمجموعة البيانات أدناه. أثناء التحويل، تُعاد مطابقة معرّفات فئات التحدي الأصلية (11–94) مع مؤشرات متتالية من 0 إلى 59.
التطبيقات#
تجعل الفئات الدقيقة في xView والمنظور العلوي عالي الدقة منها معيارًا مرجعيًا لتدريب نماذج التعلم العميق وتقييمها في الاستشعار عن بُعد. وتشمل التطبيقات الشائعة:
- الاستطلاع العسكري والدفاعي
- التخطيط الحضري والتنمية
- المراقبة البيئية
- الاستجابة للكوارث وتقييمها
- رسم خرائط البنية التحتية وإدارتها
للاطلاع على معايير أخرى للصور الملتقطة من أعلى، راجع مجموعة بيانات VisDrone المخصصة للطائرات المسيّرة أو مجموعة بيانات DOTA-v2 ذات المربعات الموجّهة.
YAML مجموعة البيانات#
يعرّف الملف xView.yaml تكوين مجموعة البيانات — مسارات مجموعة البيانات، وأسماء الفئات الستين، وبرنامج التنزيل الذي يحوّل التعليقات التوضيحية بتنسيق GeoJSON وينشئ التقسيم التلقائي. ويُحافَظ عليه في مستودع Ultralytics على العنوان 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")الاستخدام#
يتوقع التدريب فك ضغط التنزيل اليدوي الموضح أعلاه ضمن datasets/xView/؛ ثم تُجرى عملية تحويل التعليقات التوضيحية وتقسيم التدريب/التحقق تلقائيًا.
لتدريب نموذج على مجموعة بيانات 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 في متصفحك، استخدم منصة Ultralytics.
بيانات العينة والتعليقات التوضيحية#
يوضح المثال أدناه مشهدًا نموذجيًا من 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 هي معيار مرجعي للصور الفضائية أُطلق لتحدي DIUx xView 2018 من قِبل الوكالة الوطنية للاستخبارات الجغرافية المكانية في الولايات المتحدة، ويوفر أكثر من مليون مثيل لكائنات ضمن 60 فئة دقيقة في صور WorldView-3 بدقة 0.3 م. وتدعم أبحاث اكتشاف الكائنات الصغيرة والنادرة والدقيقة في المناظر العلوية، وهي أهداف أصعب بكثير من تلك الموجودة في الصور الملتقطة من مستوى الأرض.
تتطلب xView تنزيلًا يدويًا: سجّل في موقع تحدي DIUx xView 2018، ونزّل
train_images.zip(~15 جيجابايت) وtrain_labels.zipوval_images.zip(~5 جيجابايت) — بحجم إجمالي يبلغ نحو 20.7 جيجابايت — ثم فك ضغطها ضمنdatasets/xView/باتباع البنية الموضحة في التحذير أعلى هذه الصفحة. في أول تشغيل للتدريب، يحوّل Ultralytics التعليقات التوضيحية بتنسيق GeoJSON تلقائيًا إلى تنسيق YOLO وينشئ تقسيم التدريب/التحقق.تتضمن xView عدد 847 صورة تدريبية موسومة و282 صورة تحقق من دون تسميات عامة، وقد التُقطت جميعها بواسطة الأقمار الصناعية WorldView-3 بدقة 0.3 م. وتغطي التعليقات التوضيحية أكثر من مليون مثيل لكائنات ضمن 60 فئة. ونظرًا إلى أن تسميات التدريب فقط متاحة للعامة، يقسّم تكوين Ultralytics
xView.yamlالصور الموسومة البالغ عددها 847 صورة بنسبة تقارب 90/10 إلى مجموعتي التدريب والتحقق؛ راجع بنية مجموعة البيانات لمزيد من التفاصيل.درّب نموذج YOLO26n على 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: Objects in Context in Overhead Imagery" (Lam وآخرون، arXiv:1802.07856، 2018)؛ ويوجد إدخال BibTeX الكامل في قسم الاستشهادات والشكر والتقدير أعلاه.



