Link to this sectionمجموعة بيانات xView#
تُعد مجموعة بيانات xView واحدة من أكبر معايير صور الأقمار الصناعية المتاحة للجمهور لمهام اكتشاف الكائنات، حيث توفر أكثر من مليون حالة لكائنات موزعة على 60 فئة ومحددة بـ مربعات الإحاطة في مساحة تزيد عن 1,400 كم² من صور WorldView-3 بدقة 0.3 متر. تم إصدارها لتحدي DIUx xView 2018 من قبل الوكالة الوطنية للاستخبارات الجغرافية المكانية (NGA) الأمريكية، وتتطلب تنزيلاً يدوياً يبلغ حجمه حوالي 20.7 جيجابايت.
تم إنشاء مجموعة البيانات هذه لدفع أربعة آفاق في الرؤية الحاسوبية:
- تقليل الحد الأدنى للدقة المطلوبة للاكتشاف.
- تحسين كفاءة التعلم.
- تمكين اكتشاف المزيد من فئات الكائنات.
- تحسين اكتشاف الفئات الدقيقة.
بناءً على معايير مثل COCO، تستهدف xView الصور الملتقطة من الأعلى، حيث تكون الكائنات أصغر بكثير وأكثر تكدساً مما هي عليه في الصور الملتقطة من مستوى الأرض.
مجموعة بيانات xView لا يتم تنزيلها تلقائياً. سجل في موقع DIUx xView 2018 Challenge لتنزيل 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 إلى مجموعات تدريب والتحقق من الصحة تلقائياً — ولا حاجة إلى تحويل يدوي.
Link to this sectionالميزات الرئيسية#
- فئات دقيقة (Fine-grained): 60 فئة من الكائنات تشمل الطائرات، والمركبات، والمعدات الخاصة بالسكك الحديدية، والسفن البحرية، ومعدات البناء، والمباني — العديد منها صغير، ونادر، ومتشابه بصرياً.
- دقة عالية: مسافة عينة أرضية تبلغ 0.3 متر تم جمعها من أقمار WorldView-3 الصناعية.
- تعليقات توضيحية مكثفة: أكثر من مليون حالة لكائنات عبر أكثر من 1,400 كم² من الصور، جميعها مصنفة بمربعات إحاطة أفقية.
- تحويل تلقائي: يقوم برنامج التنزيل من Ultralytics بتحويل تعليقات GeoJSON الأصلية إلى تنسيق YOLO ويقوم بإنشاء تقسيم التدريب/التحقق من الصحة عند أول استخدام.
Link to this sectionهيكل مجموعة البيانات#
صور xView هي مشاهد أقمار صناعية كبيرة بتنسيق TIF، وفقط 847 صورة تدريب تأتي مع تعليقات توضيحية عامة — مجموعة التحقق من الصحة الخاصة بالتحدي المكونة من 282 صورة لا تحتوي على أي منها. لذلك يقوم ملف تكوين xView.yaml الخاص بـ Ultralytics بتقسيم الصور المصنفة تلقائياً عند أول استخدام:
| التقسيم (Split) | الصور | الوصف |
|---|---|---|
| التدريب | ~90% من 847 | الصور المصنفة المدرجة في autosplit_train.txt، والتي يتم إنشاؤها عند التشغيل الأول |
| التحقق | ~10% من 847 | الصور المصنفة المدرجة في autosplit_val.txt، والتي تُستخدم لـ التقييم |
تغطي الفئات الـ 60 فئات دقيقة مثل الطائرات ذات الأجنحة الثابتة، وطائرات الشحن، والسيارات الصغيرة، والحافلات، والقاطرات، والسفن البحرية، والحفارات، والمباني، وحظائر الطائرات، وخزانات التخزين؛ القائمة الكاملة موجودة في Dataset YAML أدناه. أثناء التحويل، يتم إعادة تعيين معرفات الفئات الأصلية للتحدي (11–94) إلى فهارس متتالية من 0 إلى 59.
Link to this sectionالتطبيقات#
تجعل الفئات الدقيقة ووجهة النظر العلوية عالية الدقة من xView معياراً قياسياً لتدريب وتقييم نماذج التعلم العميق في الاستشعار عن بعد. تشمل التطبيقات الشائعة ما يلي:
- الاستطلاع العسكري والدفاعي
- التخطيط العمراني والتطوير
- المراقبة البيئية
- الاستجابة للكوارث وتقييمها
- رسم خرائط البنية التحتية وإدارتها
للحصول على معايير أخرى للصور الملتقطة من الأعلى، راجع مجموعة بيانات VisDrone التي تركز على الطائرات بدون طيار أو مجموعة بيانات DOTA-v2 ذات الصناديق الموجهة.
Link to this sectionYAML مجموعة البيانات#
يحدد ملف xView.yaml تكوين مجموعة البيانات — مسارات مجموعة البيانات، وأسماء الفئات الـ 60، وبرنامج التنزيل الذي يحول تعليقات 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")Link to this sectionالاستخدام#
يتوقع التدريب استخراج التنزيل اليدوي الموصوف أعلاه تحت 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.
Link to this sectionعينة من البيانات والتعليقات#
يعرض النموذج أدناه مشهد xView نموذجياً: صور علوية عالية الدقة حيث يتم تحديد كائنات صغيرة مثل المركبات والمباني بمربعات إحاطة، مما يوضح سبب تطلب اكتشاف الكائنات في صور الأقمار الصناعية تحديداً دقيقاً للموقع.

Link to this sectionالاقتباسات والشكر#
إذا كنت تستخدم مجموعة بيانات 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.
Link to this sectionالأسئلة الشائعة#
Link to this sectionما هي مجموعة بيانات xView وكيف تفيد أبحاث رؤية الحاسوب؟#
مجموعة بيانات xView هي معيار لصور الأقمار الصناعية تم إصداره لتحدي DIUx xView 2018 من قبل الوكالة الوطنية للاستخبارات الجغرافية المكانية الأمريكية، حيث توفر أكثر من مليون حالة لكائنات عبر 60 فئة دقيقة في صور WorldView-3 بدقة 0.3 متر. وهي تدعم الأبحاث حول اكتشاف الكائنات الصغيرة والنادرة والدقيقة في المشاهد العلوية، والتي تعد أهدافاً أصعب بكثير من تلك الموجودة في الصور الملتقطة من مستوى الأرض.
Link to this sectionكيف يمكنني تنزيل وإعداد مجموعة بيانات xView؟#
تتطلب xView تنزيلاً يدوياً: سجل في موقع DIUx xView 2018 Challenge، وقم بتنزيل train_images.zip (~15 جيجابايت)، وtrain_labels.zip، وval_images.zip (~5 جيجابايت) — حوالي 20.7 جيجابايت في المجموع — وقم باستخراجها تحت datasets/xView/ باتباع التخطيط الموضح في التحذير في أعلى هذه الصفحة. عند أول تشغيل للتدريب، تقوم Ultralytics تلقائياً بتحويل تعليقات GeoJSON إلى تنسيق YOLO وإنشاء تقسيم التدريب/التحقق.
Link to this sectionكم عدد الصور والفئات التي تحتوي عليها xView؟#
تحتوي xView على 847 صورة تدريب مصنفة و282 صورة للتحقق من الصحة بدون تعليقات عامة، تم التقاطها جميعاً بواسطة أقمار WorldView-3 الصناعية بدقة 0.3 متر. تغطي التعليقات التوضيحية أكثر من مليون حالة لكائنات عبر 60 فئة. نظراً لأن تعليقات التدريب فقط هي العامة، فإن تكوين xView.yaml لـ Ultralytics يقسم 847 صورة مصنفة بنسبة 90/10 تقريباً إلى مجموعات تدريب وتحقق؛ راجع Dataset Structure للحصول على التفاصيل.
Link to this sectionكيف يمكنني تدريب نموذج YOLO26 على مجموعة بيانات xView؟#
درب نموذج 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)للحصول على وسيطات وإعدادات مفصلة، ارجع إلى صفحة التدريب الخاصة بالنموذج.
Link to this sectionكيف يمكنني الاستشهاد بمجموعة بيانات xView في بحثي؟#
استشهد بالورقة البحثية "xView: Objects in Context in Overhead Imagery" (Lam et al., arXiv:1802.07856, 2018)؛ إدخال BibTeX الكامل موجود في قسم Citations and Acknowledgments أعلاه.