Ultralytics YOLO27:

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

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

أُنشئت مجموعة البيانات لدفع أربعة حدود في مجال الرؤية الحاسوبية:

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

استنادًا إلى معايير مثل 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/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 حقبة وبحجم صور قدره 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 مع اكتشاف الكائنات

الاقتباسات والشكر والتقدير#

إذا استخدمت مجموعة بيانات 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 الكامل في قسم الاستشهادات والشكر والتقدير أعلاه.

التعليقات