مجموعة بيانات xView#
يعد مجموعة بيانات الـ xView أحد أكبر معايير صور الأقمار الصناعية المتاحة للجمهور لـ object detection، حيث توفر أكثر من مليون مثيل كائن عبر 60 فئة مشروحة باستخدام bounding boxes في أكثر من 1,400 كم² من صور WorldView-3 بدقة 0.3 متر. وقد تم إصدارها لتحدي DIUx xView لعام 2018 بواسطة وكالة الاستخبارات الجغرافية المكانية الوطنية الأمريكية (NGA) وتتطلب تنزيلًا يدويًا بحجم حوالي 20.7 جيجابايت.
تم إنشاء مجموعة البيانات لدفع أربعة آفاق في مجال computer vision:
- تقليل الحد الأدنى للدقة المطلوبة للاكتشاف.
- تحسين كفاءة التعلم.
- تمكين اكتشاف المزيد من فئات الكائنات.
- تحسين اكتشاف الفئات الدقيقة.
بناءً على معايير مثل 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 إلى مجموعات تدريب والتحقق من الصحة تلقائياً — ولا حاجة إلى تحويل يدوي.
الميزات الرئيسية#
- فئات دقيقة (Fine-grained): 60 فئة من الكائنات تشمل الطائرات، والمركبات، والمعدات الخاصة بالسكك الحديدية، والسفن البحرية، ومعدات البناء، والمباني — العديد منها صغير، ونادر، ومتشابه بصرياً.
- دقة عالية: مسافة عينة أرضية تبلغ 0.3 متر تم جمعها من أقمار WorldView-3 الصناعية.
- تعليقات توضيحية مكثفة: أكثر من مليون حالة لكائنات عبر أكثر من 1,400 كم² من الصور، جميعها مصنفة بمربعات إحاطة أفقية.
- تحويل تلقائي: يقوم برنامج التنزيل من Ultralytics بتحويل تعليقات GeoJSON الأصلية إلى تنسيق YOLO ويقوم بإنشاء تقسيم التدريب/التحقق من الصحة عند أول استخدام.
هيكل مجموعة البيانات#
صور xView عبارة عن مشاهد أقمار صناعية كبيرة بتنسيق TIF، ويتم شحن 847 صورة تدريب فقط مع تصنيفات عامة - بينما لا تحتوي مجموعة التحقق من صحة التحدي المكونة من 282 صورة على أي تصنيفات. لذلك يقوم تكوين Ultralytics لـ xView.yaml بتقسيم الصور المصنفة تلقائيًا عند الاستخدام الأول:
| التقسيم (Split) | الصور | الوصف |
|---|---|---|
| التدريب | ~90% من 847 | الصور المصنفة المدرجة في autosplit_train.txt، والتي تم إنشاؤها عند التشغيل الأول |
| التحقق | ~10% من 847 | الصور المصنفة المدرجة في autosplit_val.txt، المستخدمة لـ evaluation |
تغطي الفئات الـ 60 فئات دقيقة مثل الطائرات ثابتة الجناح، طائرات الشحن، السيارات الصغيرة، الحافلات، القاطرات، السفن البحرية، الحفارات، المباني، حظائر الطائرات، وخزانات التخزين؛ والقائمة الكاملة موجودة في Dataset YAML أدناه. أثناء التحويل، يتم إعادة تعيين معرفات فئات التحدي الأصلية (11–94) إلى مؤشرات متجاورة 0–59.
التطبيقات#
تجعل فئات xView دقيقة التفاصيل وجهة النظر العلوية عالية الدقة منها معيارًا قياسيًا لتدريب وتقييم نماذج deep learning في مجال remote sensing. تشمل التطبيقات الشائعة ما يلي:
- الاستطلاع العسكري والدفاعي
- التخطيط العمراني والتطوير
- المراقبة البيئية
- الاستجابة للكوارث وتقييمها
- رسم خرائط البنية التحتية وإدارتها
بالنسبة لمعايير الصور العلوية الأخرى، راجع VisDrone dataset التي تركز على الطائرات بدون طيار أو DOTA-v2 dataset للصناديق الموجهة.
YAML مجموعة البيانات#
يحدد ملف 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")الاستخدام#
يتوقع التدريب أن يتم استخراج التنزيل اليدوي المذكور أعلاه تحت datasets/xView/؛ ثم يتم تشغيل تحويل التعليقات التوضيحية وتقسيم التدريب/التحقق تلقائيًا.
لتدريب نموذج على مجموعة بيانات xView لمدة 100 epochs بحجم صورة يبلغ 640، يمكنك استخدام مقتطفات التعليمات البرمجية التالية. للحصول على قائمة شاملة بالوسائط المتاحة، راجع صفحة نموذج Training.
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 Platform.
عينة من البيانات والتعليقات#
يوضح المثال أدناه مشهد xView نموذجيًا: صور علوية عالية الدقة يتم فيها توضيح الكائنات الصغيرة مثل المركبات والمباني باستخدام مربعات الحدود، مما يوضح سبب طلب object detection في صور الأقمار الصناعية لتحديد الموقع بدقة متناهية.

الاقتباسات والشكر#
إذا كنت تستخدم مجموعة بيانات 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 dataset website.
الأسئلة الشائعة#
مجموعة بيانات الـ xView هي معيار لصور الأقمار الصناعية تم إصداره لتحدي DIUx xView 2018 من قبل وكالة الاستخبارات الجغرافية المكانية الوطنية الأمريكية، حيث توفر أكثر من مليون مثيل كائن عبر 60 فئة دقيقة التفاصيل في صور WorldView-3 بدقة 0.3 متر. وهي تدعم الأبحاث حول اكتشاف الكائنات الصغيرة والنادرة والدقيقة في المناظر العلوية، والتي تعد أهدافًا أصعب بكثير من تلك الموجودة في الصور الملتقطة من مستوى الأرض.
تتطلب xView تنزيلًا يدويًا: قم بالتسجيل في موقع DIUx xView 2018 Challenge، وقم بتنزيل
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 إلى مجموعات التدريب والتحقق؛ راجع Dataset Structure للحصول على التفاصيل.قم بتدريب نموذج YOLO26n على xView لمدة 100 حقبة (epochs) بحجم صورة 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)للحصول على الوسائط والإعدادات التفصيلية، راجع صفحة نموذج Training.
استشهد بالبحث "xView: Objects in Context in Overhead Imagery" (Lam et al., arXiv:1802.07856, 2018)؛ إدخال BibTeX الكامل موجود في قسم Citations and Acknowledgments أعلاه.