Ultralytics YOLO27:
No license

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

تُعد مجموعة بيانات VisDrone معيارًا مرجعيًا واسع النطاق للصور الملتقطة بالطائرات المسيّرة، إذ توفر مجموعة الكشف الخاصة بها (VisDrone2019-DET) عدد 8,629 صورة جوية — 6,471 للتدريب، و548 للتحقق، و1,610 للاختبار التطويري — مشروحة بـ10 فئات من الكائنات من أجل كشف الكائنات. وقد أنشأها فريق AISKYEYE في مختبر التعلّم الآلي وتنقيب البيانات بجامعة تيانجين في الصين.



Watch: How to Train Ultralytics YOLO on the VisDrone Dataset | Aerial Detection | Complete Tutorial 🚀

يتألف معيار VisDrone الكامل من 288 مقطع فيديو (261,908 إطارًا) و10,209 صور ثابتة التُقطت بكاميرات مثبّتة على طائرات مسيّرة في 14 مدينة مختلفة في أنحاء الصين، وتشمل بيئات حضرية وريفية، ومشاهد قليلة الكثافة ومزدحمة، وظروفًا متنوعة من الطقس والإضاءة. وتضم إطاراته أكثر من 2.6 مليون صندوق إحاطة مشروح يدويًا، مع سمات إضافية مثل وضوح المشهد وفئة الكائن والحجب. يستخدم إعداد Ultralytics VisDrone.yaml مجموعة الصور الثابتة VisDrone2019-DET من هذا المعيار.

الميزات الرئيسية#

  • كائنات صغيرة وكثيفة: تجعل المناظير الجوية الأهداف صغيرة ومتقاربة — إذ تحتوي صور التحقق البالغ عددها 548 وحدها على 38,759 صندوقًا موسومًا، بمتوسط يقارب 70 كائنًا في الصورة.
  • تنوع المشاهد: صور من 14 مدينة صينية تغطي مواقع حضرية وريفية، والنهار والليل، وظروفًا جوية مختلفة.
  • شروحات غنية: أكثر من 2.6 مليون صندوق في المعيار الكامل، مع سمات الحجب والوضوح.
  • تقسيمات محددة مسبقًا: تقسيمات ثابتة للتدريب / التحقق / الاختبار التطويري (6,471 / 548 / 1,610 صورة) لإجراء تقييم متسق.

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

يغطي إعداد Ultralytics لـVisDrone مجموعة الصور VisDrone2019-DET، المقسّمة إلى ثلاثة أجزاء:

التقسيمالصورالوصف
التدريب6,471صور جوية موسومة تُستخدم لتدريب الكاشف
التحقق548صور تُستخدم من أجل التقييم أثناء التطوير
الاختبار التطويري1,610صور محجوزة للتقييم النهائي للنموذج المدرَّب

يوجد تقسيم رابع، وهو test-challenge (1,580 صورة)، محجوب لمسابقة VisDrone ولا يتم تنزيله، ولذلك يبلغ إجمالي مجموعة DET الكاملة 10,209 صور.

تشرح مجموعة البيانات 10 فئات من الكائنات: pedestrian وpeople وbicycle وcar وvan وtruck وtricycle وawning-tricycle وbus وmotor. ويميّز VisDrone بين pedestrian (شخص واقف أو يمشي) وpeople (شخص في أي وضعية أخرى).

التحويل التلقائي إلى YOLO

عند الاستخدام الأول، يحوّل نص التنزيل شروحات VisDrone الأصلية إلى تنسيق YOLO، متجاوزًا المناطق الموسومة بأنها متجاهلة (ما يستبعد أيضًا الفئة غير المستخدمة "others").

التطبيقات#

تجعل مشاهد VisDrone الكثيفة وأهدافها الصغيرة منها معيارًا مرجعيًا شائعًا لـكشف الكائنات الصغيرة من المناظير الجوية. وتشمل التطبيقات الشائعة ما يلي:

  • مراقبة حركة المرور وعدّ المركبات من الطائرات المسيّرة
  • تحليل الحشود والمراقبة لأغراض السلامة العامة
  • فحص البنية التحتية ومواقع الإنشاء
  • أبحاث الرؤية الحاسوبية حول كشف الكائنات الصغيرة في المشاهد المزدحمة

للاطلاع على معايير مرجعية أخرى للصور الجوية، راجع مجموعة بيانات xView التي تركز على صور الأقمار الصناعية، أو مجموعة بيانات DOTA-v2 ذات الصناديق الموجّهة.

YAML مجموعة البيانات#

يعرّف ملف VisDrone.yaml إعداد مجموعة البيانات — مسارات مجموعة البيانات، وأسماء الفئات، ونص التنزيل والتحويل التلقائي. ويُصان في مستودع Ultralytics على https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VisDrone.yaml.

ultralytics/cfg/datasets/VisDrone.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# VisDrone2019-DET dataset https://github.com/VisDrone/VisDrone-Dataset by Tianjin University
# Documentation: https://docs.ultralytics.com/datasets/detect/visdrone
# Example usage: yolo train data=VisDrone.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── VisDrone ← downloads here (~2 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: VisDrone # dataset root dir
train: images/train # train images (relative to 'path') 6471 images
val: images/val # val images (relative to 'path') 548 images
test: images/test # test-dev images (optional) 1610 images

# Classes
names:
  0: pedestrian
  1: people
  2: bicycle
  3: car
  4: van
  5: truck
  6: tricycle
  7: awning-tricycle
  8: bus
  9: motor

# Download script/URL (optional) ---------------------------------------------------------------------------------------
download: |
  import os
  from pathlib import Path
  import shutil

  from ultralytics.utils.downloads import download
  from ultralytics.utils import ASSETS_URL, TQDM

  def visdrone2yolo(dir, split, source_name=None):
      """Convert VisDrone annotations to YOLO format with images/{split} and labels/{split} structure."""
      from PIL import Image

      source_dir = dir / (source_name or f"VisDrone2019-DET-{split}")
      images_dir = dir / "images" / split
      labels_dir = dir / "labels" / split
      labels_dir.mkdir(parents=True, exist_ok=True)

      # Move images to new structure
      if (source_images_dir := source_dir / "images").exists():
          images_dir.mkdir(parents=True, exist_ok=True)
          for img in source_images_dir.glob("*.jpg"):
              img.rename(images_dir / img.name)

      for f in TQDM((source_dir / "annotations").glob("*.txt"), desc=f"Converting {split}"):
          img_size = Image.open(images_dir / f.with_suffix(".jpg").name).size
          dw, dh = 1.0 / img_size[0], 1.0 / img_size[1]
          lines = []

          with open(f, encoding="utf-8") as file:
              for row in [x.split(",") for x in file.read().strip().splitlines()]:
                  if row[4] != "0":  # Skip ignored regions
                      x, y, w, h = map(int, row[:4])
                      cls = int(row[5]) - 1
                      # Convert to YOLO format
                      x_center, y_center = (x + w / 2) * dw, (y + h / 2) * dh
                      w_norm, h_norm = w * dw, h * dh
                      lines.append(f"{cls} {x_center:.6f} {y_center:.6f} {w_norm:.6f} {h_norm:.6f}\n")

          (labels_dir / f.name).write_text("".join(lines), encoding="utf-8")

  # Download (ignores test-challenge split)
  dir = Path(yaml["path"])  # dataset root dir
  urls = [
      f"{ASSETS_URL}/VisDrone2019-DET-train.zip",
      f"{ASSETS_URL}/VisDrone2019-DET-val.zip",
      f"{ASSETS_URL}/VisDrone2019-DET-test-dev.zip",
      # f"{ASSETS_URL}/VisDrone2019-DET-test-challenge.zip",
  ]
  download(urls, dir=dir, threads=4)

  # Convert
  splits = {"VisDrone2019-DET-train": "train", "VisDrone2019-DET-val": "val", "VisDrone2019-DET-test-dev": "test"}
  for folder, split in splits.items():
      visdrone2yolo(dir, split, folder)  # convert VisDrone annotations to YOLO labels
      shutil.rmtree(dir / folder)  # cleanup original directory

الاستخدام#

تنزيل بحجم يقارب 2 غيغابايت

تُنزل VisDrone تلقائيًا عند التدريب للمرة الأولى — ثلاثة أرشيفات يبلغ إجمالي حجمها نحو 2 غيغابايت — وتحتاج إلى نحو 4 غيغابايت من مساحة القرص الحرة أثناء الاستخراج والتحويل.

لتدريب نموذج YOLO26n على مجموعة بيانات VisDrone لمدة 100 حقبة وبحجم صور قدره 640، يمكنك استخدام مقتطفات التعليمات البرمجية التالية. للحصول على قائمة شاملة بالوسائط المتاحة، راجع صفحة تدريب النموذج.

مثال على التدريب
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load a pretrained model (recommended for training)

# Train the model - dataset will auto-download on first run
results = model.train(data="VisDrone.yaml", epochs=100, imgsz=640)

لوَسم صور جوية إضافية وإدارة عمليات تدريب VisDrone في متصفحك، استخدم منصة Ultralytics.

بيانات العينة والتعليقات التوضيحية#

يوضح المثال أدناه مشهدًا نموذجيًا من VisDrone: منظور جوي لطريق مزدحم تظهر فيه المشاة والمركبات كأهداف صغيرة ومتراصة بكثافة، ويحجب بعضها بعضًا جزئيًا.

صور جوية ملتقطة بطائرة مسيّرة من مجموعة بيانات VisDrone مع كشف الكائنات

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

إذا استخدمت مجموعة بيانات VisDrone في أبحاثك أو أعمال التطوير، يُرجى الاستشهاد بالورقة التالية:

اقتباس
@ARTICLE{9573394,
  author={Zhu, Pengfei and Wen, Longyin and Du, Dawei and Bian, Xiao and Fan, Heng and Hu, Qinghua and Ling, Haibin},
  journal={IEEE Transactions on Pattern Analysis and Machine Intelligence},
  title={Detection and Tracking Meet Drones Challenge},
  year={2022},
  volume={44},
  number={11},
  pages={7380-7399},
  doi={10.1109/TPAMI.2021.3119563}}

نود توجيه الشكر إلى فريق AISKYEYE في مختبر التعلّم الآلي وتنقيب البيانات بجامعة تيانجين في الصين، لإنشاء مجموعة بيانات VisDrone وصيانتها. لمزيد من المعلومات، تفضل بزيارة مستودع VisDrone على GitHub.

الأسئلة الشائعة#

  • تُستخدم VisDrone لتدريب الكواشف وتقييمها على الصور الملتقطة بالطائرات المسيّرة، حيث تكون الكائنات صغيرة ومتراصة وتُرى من الأعلى. ويجعل الجمع بين المناظير الجوية والمشاهد المزدحمة والظروف المتنوعة منها بيئة اختبار معيارية لمراقبة حركة المرور المعتمدة على الطائرات المسيّرة، وتحليل الحشود، وأبحاث كشف الكائنات الصغيرة.

  • يحتوي إعداد Ultralytics لـVisDrone على 8,629 صورة: 6,471 للتدريب، و548 للتحقق، و1,610 للاختبار (test-dev). وتشترك جميع التقسيمات في الفئات العشر نفسها: pedestrian وpeople وbicycle وcar وvan وtruck وtricycle وawning-tricycle وbus وmotor. راجع بنية مجموعة البيانات للاطلاع على التفصيل الكامل.

  • تُنزل VisDrone تلقائيًا عند التدريب للمرة الأولى باستخدام data="VisDrone.yaml" — ولا يلزم اتخاذ أي خطوات يدوية. يجلب النص ثلاثة أرشيفات (بحجم يقارب 2 غيغابايت) من أصول إصدارات Ultralytics على GitHub، ويحوّل الشروحات إلى تنسيق YOLO. ولا يتضمن ذلك تقسيم test-challenge المحجوب الخاص بالمسابقة.

  • درّب نموذج YOLO26n على VisDrone لمدة 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="VisDrone.yaml", epochs=100, imgsz=640)

    للاطلاع على الإعدادات التفصيلية، راجع صفحة التدريب ونصائح تدريب النموذج.

  • تكون الكائنات في VisDrone صغيرة جدًا مقارنةً بالإطار — وغالبًا لا يتجاوز حجمها بضع عشرات من وحدات البكسل — وتظهر في مجموعات كثيفة محجوبة بدرجة كبيرة، ما يفرض تحديًا على الكواشف المضبوطة على الصور الملتقطة من مستوى الأرض. ويؤدي التدريب والتنبؤ بدقة أعلى (مثل imgsz=1280 مع دفعة أصغر) إلى استعادة الأهداف الصغيرة، بينما يقسم الاستدلال المبلّط باستخدام SAHI الصور الكبيرة بحيث تشغل الكائنات الصغيرة مساحة أكبر من كل نافذة استدلال.

  • يشمل معيار VisDrone الكامل خمس مهام — كشف الكائنات في الصور، وكشف الكائنات في مقاطع الفيديو، وتتبع كائن واحد، وتتبع كائنات متعددة، وعدّ الحشود — عبر 288 مقطع فيديو و10,209 صور ثابتة. ويغطي إعداد Ultralytics VisDrone.yaml مهمة كشف الصور فقط (VisDrone2019-DET)، وينزّل صور التدريب البالغ عددها 6,471، وصور التحقق البالغ عددها 548، وصور الاختبار التطويري البالغ عددها 1,610.

  • استشهد بالورقة "Detection and Tracking Meet Drones Challenge" (IEEE TPAMI، المجلد 44، العدد 11، 2022، DOI 10.1109/TPAMI.2021.3119563)؛ ويتوفر إدخال BibTeX الكامل في قسم الاستشهادات والشكر أعلاه.

التعليقات