رؤية YOLO لعام 2026:

مجموعة بيانات xView#

يعد مجموعة بيانات الـ xView أحد أكبر معايير صور الأقمار الصناعية المتاحة للجمهور لـ object detection، حيث توفر أكثر من مليون مثيل كائن عبر 60 فئة مشروحة باستخدام bounding boxes في أكثر من 1,400 كم² من صور WorldView-3 بدقة 0.3 متر. وقد تم إصدارها لتحدي DIUx xView لعام 2018 بواسطة وكالة الاستخبارات الجغرافية المكانية الوطنية الأمريكية (NGA) وتتطلب تنزيلًا يدويًا بحجم حوالي 20.7 جيجابايت.

تم إنشاء مجموعة البيانات لدفع أربعة آفاق في مجال computer vision:

  1. تقليل الحد الأدنى للدقة المطلوبة للاكتشاف.
  2. تحسين كفاءة التعلم.
  3. تمكين اكتشاف المزيد من فئات الكائنات.
  4. تحسين اكتشاف الفئات الدقيقة.

بناءً على معايير مثل 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/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")

الاستخدام#

تنزيل يدوي بحجم 20.7 جيجابايت

يتوقع التدريب أن يتم استخراج التنزيل اليدوي المذكور أعلاه تحت 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 dataset overhead satellite imagery with 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 أعلاه.

التعليقات