Ultralytics YOLO27:

زيادة البيانات باستخدام Ultralytics YOLO#

YOLO data augmentation examples showing original and augmented images for training

مقدمة#

تُعد زيادة البيانات تقنية أساسية في الرؤية الحاسوبية، إذ توسّع مجموعة بيانات التدريب اصطناعيًا من خلال تطبيق تحويلات متنوعة على الصور الموجودة. عند تدريب نماذج التعلّم العميق مثل Ultralytics YOLO، تساعد زيادة البيانات على تحسين متانة النموذج، والحد من فرط التكيّف، وتعزيز التعميم على سيناريوهات العالم الحقيقي.



Watch: How to use Mosaic, MixUp & more Data Augmentations to help Ultralytics YOLO Models generalize better 🚀

أهمية زيادة البيانات#

تخدم زيادة البيانات أغراضًا مهمة متعددة عند تدريب نماذج الرؤية الحاسوبية:

  • توسيع مجموعة البيانات: من خلال إنشاء تنويعات للصور الموجودة، يمكنك زيادة حجم مجموعة بيانات التدريب بفاعلية من دون جمع بيانات جديدة.
  • تحسين التعميم: تتعلم النماذج التعرّف على الكائنات في ظروف متنوعة، ما يجعلها أكثر متانة في التطبيقات الواقعية.
  • الحد من فرط التكيّف: من خلال إدخال التنوع في بيانات التدريب، تقل احتمالية حفظ النماذج لخصائص صور محددة.
  • تحسين الأداء: تحقق النماذج المدرّبة باستخدام زيادة مناسبة للبيانات عادةً من دقة أفضل على مجموعتي التحقق والاختبار.

يوفر تطبيق Ultralytics YOLO مجموعة شاملة من تقنيات زيادة البيانات، تؤدي كل منها أغراضًا محددة وتسهم في أداء النموذج بطرق مختلفة. يستكشف هذا الدليل إعدادات زيادة البيانات أدناه، ويساعدك على فهم متى وكيفية استخدامها بفاعلية في مشاريعك.

أمثلة على الإعدادات#

يمكنك تخصيص كل معلمة باستخدام Python API أو واجهة سطر الأوامر (CLI) أو ملف إعدادات. فيما يلي أمثلة على إعداد زيادة البيانات باستخدام كل أسلوب.

أمثلة على الإعدادات
import albumentations as A

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Training with custom augmentation parameters
model.train(data="coco8.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)

# Training with every configurable augmentation disabled (disabled values omitted for clarity)
model.train(
    data="coco8.yaml",
    epochs=100,
    hsv_h=0.0,
    hsv_s=0.0,
    hsv_v=0.0,
    translate=0.0,
    scale=0.0,
    fliplr=0.0,
    mosaic=0.0,
    erasing=0.0,
    auto_augment=None,
)

# Training with custom Albumentations transforms (Python API only)
custom_transforms = [
    A.Blur(blur_limit=7, p=0.5),
    A.CLAHE(clip_limit=4.0, p=0.5),
]
model.train(data="coco8.yaml", epochs=100, augmentations=custom_transforms)
لا يؤدي تصفير وسيطات زيادة البيانات إلى تعطيل Albumentations

التحويلات المدرجة في هذه الصفحة هي التحويلات التي تتحكم فيها من خلال وسيطات التدريب. كما يطبّق Ultralytics مجموعة صغيرة من Albumentations — التمويه، والتمويه الوسيط، والتدرج الرمادي، وCLAHE، بمعدل p=0.01 لكل منها — كلما كانت الحزمة albumentations مثبتة، ولا توجد أي وسيطة في default.yaml تعمل على إيقافها. أزل تثبيت الحزمة لإزالتها، أو مرّر قائمتك الخاصة إلى augmentations لاستبدالها.

استخدام ملف إعدادات#

يمكنك تعريف جميع معلمات التدريب، بما في ذلك زيادات البيانات، في ملف إعدادات YAML (مثل train_custom.yaml). لا تكون المعلمة mode مطلوبة إلا عند استخدام CLI. سيتجاوز ملف YAML الجديد هذا الملف الافتراضي الموجود في حزمة ultralytics.

# train_custom.yaml
# 'mode' is required only for CLI usage
mode: train
data: coco8.yaml
model: yolo26n.pt
epochs: 100
hsv_h: 0.03
hsv_s: 0.6
hsv_v: 0.5

ثم ابدأ التدريب باستخدام Python API:

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

# Load a COCO-pretrained YOLO26n model
model = YOLO("yolo26n.pt")

# Train the model with custom configuration
model.train(cfg="train_custom.yaml")

زيادات فضاء الألوان#

ضبط درجة اللون (hsv_h)#

  • النطاق: 0.0 - 1.0
  • الافتراضي: 0.015
  • الاستخدام: يغيّر ألوان الصورة مع الحفاظ على العلاقات بينها. تحدد المعلمة الفائقة hsv_h مقدار الإزاحة، مع اختيار التعديل النهائي عشوائيًا بين -hsv_h وhsv_h. على سبيل المثال، عند استخدام hsv_h=0.3، تُختار الإزاحة عشوائيًا ضمن النطاق من -0.3 إلى 0.3. بالنسبة إلى القيم التي تتجاوز 0.5، تلتف إزاحة درجة اللون حول عجلة الألوان، ولذلك تبدو الزيادات متشابهة بين 0.5 و-0.5.
  • الغرض: مفيد خصوصًا في السيناريوهات الخارجية، حيث يمكن لظروف الإضاءة أن تؤثر بشكل كبير في مظهر الكائن. فعلى سبيل المثال، قد تبدو الموزة أكثر اصفرارًا تحت ضوء الشمس الساطع، لكنها تبدو أكثر خضرة في الداخل.
  • تطبيق Ultralytics: RandomHSV
-0.5-0.250.00.250.5
Hue shift -0.5 augmentationHue shift -0.25 augmentationOriginal image without augmentationHue shift 0.25 augmentationHue shift -0.5 augmentation

ضبط التشبع (hsv_s)#

  • النطاق: 0.0 - 1.0
  • الافتراضي: 0.7
  • الاستخدام: يغيّر شدة الألوان في الصورة. تحدد المعلمة الفائقة hsv_s مقدار الإزاحة، مع اختيار التعديل النهائي عشوائيًا بين -hsv_s وhsv_s. على سبيل المثال، عند استخدام hsv_s=0.7، تُختار الشدة عشوائيًا ضمن النطاق من -0.7 إلى 0.7.
  • الغرض: يساعد النماذج على التعامل مع اختلاف ظروف الطقس وإعدادات الكاميرا. فعلى سبيل المثال، قد تبدو إشارة مرور حمراء زاهية جدًا في يوم مشمس، لكنها قد تبدو باهتة ومُتلاشية في ظروف ضبابية.
  • تطبيق Ultralytics: RandomHSV
-1.0-0.50.00.51.0
Saturation -1.0 grayscale augmentationSaturation -0.5 augmentationOriginal image without augmentationSaturation 0.5 augmentationSaturation 1.0 vivid augmentation

ضبط السطوع (hsv_v)#

  • النطاق: 0.0 - 1.0
  • الافتراضي: 0.4
  • الاستخدام: يغيّر سطوع الصورة. تحدد المعلمة الفائقة hsv_v مقدار الإزاحة، مع اختيار التعديل النهائي عشوائيًا بين -hsv_v وhsv_v. على سبيل المثال، عند استخدام hsv_v=0.4، تُختار الشدة عشوائيًا ضمن النطاق من -0.4 إلى 0.4.
  • الغرض: ضروري لتدريب النماذج التي يتعين عليها العمل في ظروف إضاءة مختلفة. فعلى سبيل المثال، قد تبدو تفاحة حمراء ساطعة تحت ضوء الشمس، لكنها تبدو أكثر قتامة بكثير في الظل.
  • تطبيق Ultralytics: RandomHSV
-1.0-0.50.00.51.0
Brightness -1.0 dark augmentationBrightness -0.5 augmentationOriginal image without augmentationBrightness 0.5 augmentationBrightness 1.0 bright augmentation

التحويلات الهندسية#

الدوران (degrees)#

  • النطاق: من 0.0 إلى 180
  • الافتراضي: 0
  • الاستخدام: يدير الصور عشوائيًا ضمن النطاق المحدد. تحدد المعلمة الفائقة degrees زاوية الدوران، مع اختيار التعديل النهائي عشوائيًا بين -degrees وdegrees. على سبيل المثال، عند استخدام degrees=10.0، يُختار الدوران عشوائيًا ضمن النطاق من -10.0 إلى 10.0.
  • الغرض: حاسم للتطبيقات التي يمكن أن تظهر فيها الكائنات باتجاهات مختلفة. فعلى سبيل المثال، في الصور الجوية الملتقطة بواسطة الطائرات المسيّرة، يمكن أن تكون المركبات موجهة في أي اتجاه، ما يتطلب من النماذج التعرّف على الكائنات بغض النظر عن دورانها.
  • تطبيق Ultralytics: RandomPerspective
-180-900.090180
Rotation -180 degrees augmentationRotation -90 degrees augmentationOriginal image without augmentationRotation 90 degrees augmentationRotation 180 degrees augmentation

الإزاحة (translate)#

  • النطاق: 0.0 - 1.0
  • الافتراضي: 0.1
  • الاستخدام: يزيح الصور أفقيًا وعموديًا بمقدار كسري عشوائي من حجم الصورة. تحدد المعلمة الفائقة translate مقدار الإزاحة، مع اختيار التعديل النهائي عشوائيًا مرتين، مرة لكل محور، ضمن النطاق -translate وtranslate. على سبيل المثال، عند استخدام translate=0.5، تُختار الإزاحة عشوائيًا ضمن النطاق من -0.5 إلى 0.5 على المحور x، وتُختار قيمة عشوائية مستقلة أخرى ضمن النطاق نفسه على المحور y.
  • الغرض: يساعد النماذج على تعلم اكتشاف الكائنات الظاهرة جزئيًا، ويحسّن متانتها تجاه موضع الكائن. فعلى سبيل المثال، في تطبيقات تقييم أضرار المركبات، قد تظهر أجزاء السيارة كاملة أو جزئية في الإطار تبعًا لموضع المصوّر والمسافة، وستعلّم زيادة الإزاحة النموذج التعرّف على هذه السمات بغض النظر عن اكتمالها أو موضعها.
  • تطبيق Ultralytics: RandomPerspective
  • ملاحظة: للتبسيط، تكون الإزاحات المطبقة أدناه متطابقة في كل مرة على محوري x وy. ولا تظهر القيمتان -1.0 و1.0 لأنهما ستزيحان الصورة بالكامل خارج الإطار.
-0.5-0.250.00.250.5
Translation -0.5 shift augmentationTranslation -0.25 shift augmentationOriginal image without augmentationTranslation 0.25 shift augmentationTranslation 0.5 shift augmentation

التحجيم (scale)#

  • النطاق: 0.0 - 1.0 كقيمة عائمة، أو صفّ (min, max) صريح
  • الافتراضي: 0.5
  • الاستخدام: يغيّر حجم الصور بعامل عشوائي ضمن النطاق المحدد. عند استخدام قيمة عائمة، تحدد المعلمة الفائقة scale معامل كسب التحجيم، مع اختيار العامل النهائي عشوائيًا بين 1-scale و1+scale. على سبيل المثال، عند استخدام scale=0.5، يُختار التحجيم عشوائيًا ضمن النطاق من 0.5 إلى 1.5. وعند استخدام صفّ، يحدد scale ذلك النطاق مباشرةً، بحيث يأخذ scale=(0.5, 2.0) عينة للعامل بين 0.5 و2.0.
  • الغرض: يمكّن النماذج من التعامل مع الكائنات الموجودة على مسافات وأحجام مختلفة. فعلى سبيل المثال، في تطبيقات القيادة الذاتية، يمكن أن تظهر المركبات على مسافات متنوعة من الكاميرا، ما يتطلب من النموذج التعرّف عليها بغض النظر عن حجمها.
  • تطبيق Ultralytics: RandomPerspective
  • ملاحظة:
    • لا تظهر القيمة -1.0 لأنها ستجعل الصورة تختفي، بينما تؤدي 1.0 ببساطة إلى تكبير بمقدار 2x.
    • القيم المعروضة في الجدول أدناه هي فروق التحجيم الفعلية، وليست القيم التي تمررها إلى المعلمة الفائقة scale.
    • يُتحقق من صيغة القيمة العائمة ضمن النطاق 0.0 - 1.0، وتؤدي القيمة الخارجة عنه إلى ظهور ValueError. ولأخذ عينة لعامل يتجاوز تكبير 2x، مرّر صيغة الصف (min, max) بدلًا من ذلك.
    • تنطبق صيغة الصف على المهام الهندسية فقط. ويشتق تدريب التصنيف نطاق الاقتصاص الخاص به من القيمة العائمة (من 1.0 - scale إلى 1.0)، لذا يؤدي تمرير صف هناك إلى ظهور TypeError.
-0.5-0.250.00.250.5
Scale 0.5x zoom out augmentationScale 0.75x zoom out augmentationOriginal image without augmentationScale 1.25x zoom in augmentationScale 1.5x zoom in augmentation

الميلان (shear)#

  • النطاق: من -180 إلى +180
  • الافتراضي: 0
  • الاستخدام: يُدخل تحويلًا هندسيًا يشوّه الصورة على طول المحورين x وy، فيزيح أجزاء الصورة بفاعلية في اتجاه واحد مع الحفاظ على الخطوط المتوازية. تحدد المعلمة الفائقة shear زاوية الميلان، مع اختيار التعديل النهائي عشوائيًا بين -shear وshear. على سبيل المثال، عند استخدام shear=10.0، يُختار الميلان عشوائيًا ضمن النطاق من -10 إلى 10 على المحور x، وتُختار قيمة عشوائية مستقلة أخرى ضمن النطاق نفسه على المحور y.
  • الغرض: يساعد النماذج على التعميم على اختلاف زوايا الرؤية الناتج عن الإمالات الطفيفة أو وجهات النظر المائلة. فعلى سبيل المثال، في مراقبة حركة المرور، قد تبدو كائنات مثل السيارات وإشارات الطريق مائلة بسبب وضع الكاميرات غير العمودي. يضمن تطبيق زيادة الميلان أن يتعلم النموذج التعرّف على الكائنات رغم هذه التشوهات المائلة.
  • تطبيق Ultralytics: RandomPerspective
  • ملاحظة:
    • يمكن لقيم shear أن تشوّه الصورة بسرعة، لذا يُوصى بالبدء بقيم صغيرة وزيادتها تدريجيًا.
    • بخلاف تحويلات المنظور، لا يُدخل الميلان عمقًا أو نقاط تلاشي، بل يشوّه شكل الكائنات بتغيير زواياها مع إبقاء الأضلاع المتقابلة متوازية.
-10-50.0510
Shear -10 degrees augmentationShear -5 degrees augmentationOriginal image without augmentationShear 5 degrees augmentationShear 10 degrees augmentation

المنظور (perspective)#

  • النطاق: 0.0 - 0.001
  • الافتراضي: 0
  • الاستخدام: يطبّق تحويل منظور كاملًا على طول المحورين x وy، لمحاكاة كيفية ظهور الكائنات عند رؤيتها من أعماق أو زوايا مختلفة. تحدد المعلمة الفائقة perspective مقدار المنظور، مع اختيار التعديل النهائي عشوائيًا بين -perspective وperspective. على سبيل المثال، عند استخدام perspective=0.001، يُختار المنظور عشوائيًا ضمن النطاق من -0.001 إلى 0.001 على المحور x، وتُختار قيمة عشوائية مستقلة أخرى ضمن النطاق نفسه على المحور y.
  • الغرض: تُعد زيادة المنظور أساسية للتعامل مع التغيرات الكبيرة في وجهة النظر، ولا سيما في السيناريوهات التي تبدو فيها الكائنات مختصرة أو مشوهة بسبب تغيرات المنظور. فعلى سبيل المثال، في اكتشاف الكائنات المعتمد على الطائرات المسيّرة، قد تبدو المباني والطرق والمركبات ممدودة أو منضغطة تبعًا لميلان الطائرة المسيّرة وارتفاعها. ومن خلال تطبيق تحويلات المنظور، تتعلم النماذج التعرّف على الكائنات رغم هذه التشوهات الناتجة عن المنظور، ما يحسّن متانتها في عمليات النشر الواقعية.
  • تطبيق Ultralytics: RandomPerspective
-0.001-0.00050.00.00050.001
Perspective -0.001 transformationPerspective -0.0005 transformationOriginal image without augmentationPerspective 0.0005 transformationPerspective 0.001 transformation

القلب من أعلى إلى أسفل (flipud)#

  • النطاق: 0.0 - 1.0
  • الافتراضي: 0
  • الاستخدام: ينفّذ قلبًا رأسيًا بعكس الصورة على طول المحور y. يعكس هذا التحويل الصورة بأكملها رأسًا على عقب، مع الحفاظ على جميع العلاقات المكانية بين الكائنات. تحدد المعلمة الفائقة flipud احتمال تطبيق التحويل، إذ تضمن القيمة flipud=1.0 قلب جميع الصور، بينما تعطل القيمة flipud=0.0 التحويل بالكامل. على سبيل المثال، عند استخدام flipud=0.5، تكون لكل صورة فرصة بنسبة 50% لقلبها رأسًا على عقب.
  • الغرض: مفيد في السيناريوهات التي يمكن أن تظهر فيها الكائنات مقلوبة رأسًا على عقب. فعلى سبيل المثال، في أنظمة الرؤية الروبوتية، قد تُلتقط الكائنات الموجودة على سيور النقل أو الأذرع الروبوتية وتوضع في اتجاهات مختلفة. يساعد القلب الرأسي النموذج على التعرّف على الكائنات بغض النظر عن وضعها من أعلى إلى أسفل.
  • تطبيق Ultralytics: RandomFlip
flipud متوقفflipud مفعّل
Original image without augmentationVertical flip augmentation enabled

القلب من اليسار إلى اليمين (fliplr)#

  • النطاق: 0.0 - 1.0
  • الافتراضي: 0.5
  • الاستخدام: ينفّذ قلبًا أفقيًا بعكس الصورة على طول المحور x. يبدّل هذا التحويل الجانبين الأيسر والأيمن مع الحفاظ على الاتساق المكاني، ما يساعد النموذج على التعميم على الكائنات التي تظهر باتجاهات معكوسة. تحدد المعلمة الفائقة fliplr احتمال تطبيق التحويل، إذ تضمن القيمة fliplr=1.0 قلب جميع الصور، بينما تعطل القيمة fliplr=0.0 التحويل بالكامل. على سبيل المثال، عند استخدام fliplr=0.5، تكون لكل صورة فرصة بنسبة 50% لقلبها من اليسار إلى اليمين.
  • الغرض: يُستخدم القلب الأفقي على نطاق واسع في اكتشاف الكائنات وتقدير الوضعية والتعرّف على الوجوه لتحسين المتانة تجاه الاختلافات بين اليسار واليمين. فعلى سبيل المثال، في القيادة الذاتية، يمكن أن تظهر المركبات والمشاة على أي من جانبي الطريق، ويساعد القلب الأفقي النموذج على التعرّف عليهم بالفعالية نفسها في كلا الاتجاهين.
  • تطبيق Ultralytics: RandomFlip
fliplr متوقفfliplr مفعّل
Original image without augmentationHorizontal flip augmentation enabled

تبديل قناتي BGR (bgr)#

  • النطاق: 0.0 - 1.0
  • الافتراضي: 0
  • الاستخدام: يبدّل قنوات ألوان الصورة من RGB إلى BGR، فيغيّر ترتيب تمثيل الألوان. تحدد المعلمة الفائقة bgr احتمال تطبيق التحويل، إذ تضمن bgr=1.0 خضوع جميع الصور لتبديل القنوات، بينما تعطل bgr=0.0 هذا التحويل. على سبيل المثال، عند استخدام bgr=0.5، تكون لكل صورة فرصة بنسبة 50% لتحويلها من RGB إلى BGR.
  • الغرض: يزيد المتانة تجاه اختلاف ترتيب قنوات الألوان. فعلى سبيل المثال، عند تدريب نماذج يجب أن تعمل عبر أنظمة كاميرات ومكتبات تصوير متنوعة، حيث قد تُستخدم تنسيقات RGB وBGR بشكل غير متسق، أو عند نشر النماذج في بيئات قد يختلف فيها تنسيق ألوان الإدخال عن بيانات التدريب.
  • تطبيق Ultralytics: Format
bgr متوقفbgr مفعّل
Original image without augmentationBGR channel swap augmentation

Mosaic (mosaic)#

  • النطاق: 0.0 - 1.0
  • الافتراضي: 1
  • الاستخدام: يدمج أربع صور تدريب في صورة واحدة. تحدد المعلمة الفائقة mosaic احتمال تطبيق التحويل، إذ تضمن mosaic=1.0 دمج جميع الصور، بينما تعطل mosaic=0.0 التحويل. على سبيل المثال، عند استخدام mosaic=0.5، تكون لكل صورة فرصة بنسبة 50% لدمجها مع ثلاث صور أخرى.
  • الغرض: فعّال جدًا في تحسين اكتشاف الكائنات الصغيرة وفهم السياق. فعلى سبيل المثال، في مشاريع الحفاظ على الحياة البرية، حيث قد تظهر الحيوانات على مسافات ومقاييس مختلفة، تساعد زيادة Mosaic النموذج على تعلم التعرّف على النوع نفسه عبر أحجام مختلفة وحجب جزئي وسياقات بيئية متنوعة، من خلال إنشاء عينات تدريب متنوعة اصطناعيًا من بيانات محدودة.
  • تطبيق Ultralytics: Mosaic
  • ملاحظة:
    • حتى إذا جعلت زيادة mosaic النموذج أكثر متانة، فقد تجعل عملية التدريب أكثر صعوبة أيضًا.
    • يمكن تعطيل زيادة mosaic قرب نهاية التدريب من خلال ضبط close_mosaic على عدد الحقب المتبقية قبل اكتمال التدريب، عندها ينبغي إيقافها. على سبيل المثال، إذا ضُبط epochs على 200 وضُبط close_mosaic على 20، فسيُعطّل تحويل mosaic بعد 180 حقب. وإذا ضُبط close_mosaic على 0، فستظل زيادة mosaic مفعّلة طوال عملية التدريب.
    • يؤدي إغلاق Mosaic أيضًا إلى تعطيل copy_paste وmixup وcutmix في الحقبة نفسها. تُوقف التحويلات الأربعة معًا، لذا تُدرّب الحقب النهائية من دونها، بينما تستمر كل زيادات البيانات الأخرى — التحويلات الهندسية وHSV والقلب وAlbumentations — في العمل. لاحظ أن copy_paste في وضعه الافتراضي flip يعمل ضمن صورة واحدة بدلًا من دمج عدة صور.
    • يُحدد مركز Mosaic المُنشأ باستخدام قيم عشوائية، وقد يكون داخل الصورة أو خارجها.
    • يضم التطبيق الحالي لزيادة mosaic الصورة الحالية إلى 3 صور أخرى، تُسحب من مخزن مؤقت للصور المحمّلة حديثًا، أو من أي موضع في مجموعة البيانات عند cache='ram'. وفي كلتا الحالتين، تُؤخذ العينات مع الاستبدال، لذا يمكن أن تظهر الصورة نفسها أكثر من مرة في Mosaic واحدة.
mosaic متوقفmosaic مفعّل
Original image without augmentationMosaic 4-image augmentation enabled

Mixup (mixup)#

  • النطاق: 0.0 - 1.0
  • الافتراضي: 0
  • الاستخدام: يمزج صورتين وتسمياتهما باحتمال محدد. تحدد المعلمة الفائقة mixup احتمال تطبيق التحويل، إذ تضمن mixup=1.0 مزج جميع الصور، بينما تعطل mixup=0.0 التحويل. على سبيل المثال، عند استخدام mixup=0.5، تكون لكل صورة فرصة بنسبة 50% لمزجها مع صورة أخرى.
  • الغرض: يحسّن متانة النموذج ويحد من فرط التكيّف. فعلى سبيل المثال، في أنظمة التعرّف على منتجات البيع بالتجزئة، تساعد زيادة Mixup النموذج على تعلم سمات أكثر متانة من خلال مزج صور منتجات مختلفة، وتعليمه تحديد العناصر حتى عندما تكون ظاهرة جزئيًا أو محجوبة بمنتجات أخرى على أرفف المتاجر المزدحمة.
  • تطبيق Ultralytics: Mixup
  • ملاحظة:
    • تُختار نسبة mixup عشوائيًا من توزيع بيتا np.random.beta(32.0, 32.0)، ما يعني أن كل صورة تسهم بنسبة تقارب 50%، مع اختلافات طفيفة.
الصورة الأولى، mixup متوقفالصورة الثانية، mixup متوقفmixup مفعّل
First image for MixUp blendingSecond image for MixUp blendingMixUp blending augmentation enabled

CutMix (cutmix)#

  • النطاق: 0.0 - 1.0
  • الافتراضي: 0
  • الاستخدام: يقتطع منطقة مستطيلة من صورة ويلصقها على صورة أخرى باحتمال محدد. تحدد المعلمة الفائقة cutmix احتمال تطبيق التحويل، إذ تضمن cutmix=1.0 خضوع جميع الصور لهذا التحويل، بينما تعطل cutmix=0.0 التحويل بالكامل. على سبيل المثال، عند استخدام cutmix=0.5، تكون لكل صورة فرصة بنسبة 50% لاستبدال منطقة منها برقعة من صورة أخرى.
  • الغرض: يحسّن أداء النموذج من خلال إنشاء سيناريوهات حجب واقعية مع الحفاظ على سلامة السمات المحلية. فعلى سبيل المثال، في أنظمة القيادة الذاتية، تساعد زيادة CutMix النموذج على تعلم التعرّف على المركبات أو المشاة حتى عند حجبهم جزئيًا بواسطة كائنات أخرى، ما يحسّن دقة الاكتشاف في البيئات الواقعية المعقدة التي تتضمن كائنات متداخلة.
  • تطبيق Ultralytics: CutMix
  • ملاحظة:
    • يُحدد حجم منطقة الاقتطاع وموضعها عشوائيًا عند كل تطبيق.
    • بخلاف Mixup الذي يمزج قيم وحدات البكسل على مستوى الصورة بأكملها، تحافظ زيادة cutmix على شدة وحدات البكسل الأصلية داخل مناطق الاقتطاع، فتحافظ على السمات المحلية.
    • لا تُلصق المنطقة في الصورة الهدف إلا إذا لم تتداخل مع أي مربع إحاطة موجود. إضافةً إلى ذلك، لا تُحفظ إلا مربعات الإحاطة التي تحتفظ بقدر كافٍ من مساحتها الأصلية داخل المنطقة الملصقة.
    • لا يمكن تغيير الحد الأدنى لمساحة مربع الإحاطة هذا باستخدام التطبيق الحالي. وتبلغ قيمته 0.1 (10%) لتسميات الاكتشاف، و0.01 (1%) عندما تتضمن التسميات مقاطع.
الصورة الأولى، cutmix متوقفالصورة الثانية، cutmix متوقفcutmix مفعّل
First image for CutMixSecond image for CutMixCutMix augmentation enabled

زيادات النسخ واللصق#

Copy-Paste (copy_paste)#

  • النطاق: 0.0 - 1.0
  • الافتراضي: 0
  • الاستخدام: يتطلب تسميات مضلعة، لذا يُطبّق على مهام المقاطع وOBB؛ تنسخ هذه الزيادة الكائنات داخل الصور أو بينها، وتتحكم فيها copy_paste_mode. في وضع flip، تمثل copy_paste نسبة الكائنات المؤهلة التي تُنسخ: فإذا احتوت الصورة على ستة كائنات مؤهلة، أُضيفت إليها ثلاث نسخ عند copy_paste=0.5. وفي وضع mixup، تتحكم القيمة نفسها أيضًا في احتمال تشغيل Copy-Paste. ويعطّل copy_paste=0.0 التحويل.
  • الغرض: مفيد خصوصًا لمهام تجزئة الكائنات ولمجموعات الكائنات النادرة. فعلى سبيل المثال، في اكتشاف العيوب الصناعية، حيث تظهر أنواع معينة من العيوب بشكل غير متكرر، يمكن لزيادة Copy-Paste أن تزيد اصطناعيًا من ظهور هذه العيوب النادرة عبر نسخها من صورة إلى أخرى، ما يساعد النموذج على تعلم هذه الحالات قليلة التمثيل بصورة أفضل من دون الحاجة إلى عينات معيبة إضافية.
  • تطبيق Ultralytics: CopyPaste
  • ملاحظة:
    • كما هو موضح في الفيديو أدناه، يمكن استخدام زيادة البيانات copy_paste لنسخ الكائنات من صورة إلى أخرى.
    • بمجرد تحديد كائن لنسخه، تُحسب قيمة IoA الخاصة به مقابل جميع الكائنات الموجودة مسبقًا في الصورة الهدف، بغض النظر عن copy_paste_mode. يُلصق الكائن فقط إذا كانت جميع قيم IoA أقل من 0.3 (30%)؛ ولا يُلصق إذا كانت أي قيمة IoA تساوي 0.3 أو أعلى.
    • لا يمكن تغيير حد IoA في التنفيذ الحالي، وقد تم تعيينه إلى 0.3 افتراضيًا.
copy_paste متوقفتشغيل copy_paste مع copy_paste_mode=flipتصوير عملية copy_paste
Original image without augmentationCopy-paste augmentation enabled

وضع النسخ واللصق (copy_paste_mode)#

  • الخيارات: 'flip'، 'mixup'
  • الافتراضي: 'flip'
  • الاستخدام: يحدد الطريقة المستخدمة لزيادة البيانات عبر النسخ واللصق. عند تعيينه إلى 'flip'، تأتي الكائنات من الصورة نفسها، بينما يتيح 'mixup' نسخ الكائنات من صور مختلفة.
  • الغرض: يتيح مرونة في طريقة دمج الكائنات المنسوخة في الصور الهدف.
  • تطبيق Ultralytics: CopyPaste
  • ملاحظة:
    • مبدأ IoA نفسه في خياري copy_paste_mode، لكن طريقة نسخ الكائنات مختلفة.
    • اعتمادًا على حجم الصورة، قد تُنسخ الكائنات أحيانًا جزئيًا أو بالكامل خارج الإطار.
    • اعتمادًا على جودة ترميزات المضلعات، قد تظهر على الكائنات المنسوخة اختلافات طفيفة في الشكل مقارنةً بالأصلية.
الصورة المرجعيةالصورة المختارة لـ copy_pasteتشغيل copy_paste مع copy_paste_mode=mixup
Second image for MixUp blendingOriginal image without augmentationCopy-paste with MixUp mode

زيادات بيانات خاصة بالتصنيف#

الزيادة التلقائية (auto_augment)#

  • الخيارات: 'randaugment'، 'autoaugment'، 'augmix'، None
  • الافتراضي: 'randaugment'
  • الاستخدام: يطبق سياسات زيادة بيانات آلية للتصنيف. يستخدم الخيار 'randaugment' RandAugment، ويستخدم 'autoaugment' AutoAugment، ويستخدم 'augmix' AugMix. يؤدي تعيينه إلى None إلى تعطيل الزيادة التلقائية.
  • الغرض: يحسّن استراتيجيات زيادة البيانات تلقائيًا لمهام التصنيف. الاختلافات هي التالية:
    • AutoAugment: يطبق هذا الوضع سياسات زيادة بيانات محددة مسبقًا، تم تعلمها من مجموعات بيانات مثل ImageNet وCIFAR10 وSVHN. يمكن للمستخدمين اختيار هذه السياسات الموجودة، لكن لا يمكنهم تدريب سياسات جديدة داخل Torchvision. لاكتشاف استراتيجيات زيادة البيانات المثلى لمجموعات بيانات محددة، ستكون هناك حاجة إلى مكتبات خارجية أو تطبيقات مخصصة. راجع ورقة AutoAugment.
    • RandAugment: يطبق اختيارًا عشوائيًا من التحويلات بمقدار موحد. يقلل هذا النهج الحاجة إلى مرحلة بحث موسعة، مما يجعله أكثر كفاءة حسابيًا، مع الاستمرار في تعزيز متانة النموذج. راجع ورقة RandAugment.
    • AugMix: AugMix هي طريقة لزيادة البيانات تعزز متانة النموذج من خلال إنشاء تنويعات متنوعة للصور عبر توليفات عشوائية من التحويلات البسيطة. راجع ورقة AugMix.
  • تطبيق Ultralytics: classify_augmentations()
  • ملاحظة:
    • بشكل أساسي، يكمن الاختلاف الرئيسي بين الطرق الثلاث في كيفية تعريف سياسات زيادة البيانات وتطبيقها.
    • يمكنك الرجوع إلى هذه المقالة التي تقارن بين الطرق الثلاث بالتفصيل.

المحو العشوائي (erasing)#

  • النطاق: 0.0 - 1.0
  • الافتراضي: 0.4
  • الاستخدام: يمحو عشوائيًا أجزاءً من الصورة أثناء تدريب التصنيف. تحدد المعلمة الفائقة erasing احتمال تطبيق التحويل، حيث يمحو erasing=1.0 منطقةً في كل صورة، بينما يعطل erasing=0.0 التحويل. على سبيل المثال، مع erasing=0.5، يكون لكل صورة احتمال قدره 50% لمحو جزء منها.
  • الغرض: يساعد النماذج على تعلم سمات متينة ويمنع الاعتماد المفرط على مناطق محددة من الصورة. على سبيل المثال، في أنظمة التعرف على الوجوه، يساعد المحو العشوائي النماذج على أن تصبح أكثر متانة تجاه حالات الحجب الجزئي، مثل النظارات الشمسية أو أقنعة الوجه أو الكائنات الأخرى التي قد تغطي سمات الوجه جزئيًا. يحسن ذلك الأداء في العالم الحقيقي من خلال إجبار النموذج على تحديد هوية الأفراد باستخدام خصائص وجه متعددة بدلًا من الاعتماد فقط على السمات المميزة التي قد تكون محجوبة.
  • تطبيق Ultralytics: classify_augmentations()
  • ملاحظة:
    • تأتي زيادة البيانات erasing مع المعلمات الفائقة scale وratio وvalue التي لا يمكن تغييرها باستخدام التنفيذ الحالي. وتبلغ قيمها الافتراضية (0.02, 0.33) و(0.3, 3.3) و0 على التوالي، كما هو موضح في توثيق PyTorch.
erasing متوقفتشغيل erasing (المثال 1)تشغيل erasing (المثال 2)تشغيل erasing (المثال 3)
Original image without augmentationRandom erasing example 1Random erasing example 2Random erasing example 3

ميزات زيادة البيانات المتقدمة#

تحويلات Albumentations المخصصة (augmentations)#

  • النوع: list من تحويلات Albumentations
  • الافتراضي: None
  • الاستخدام: يتيح لك توفير تحويلات Albumentations مخصصة لزيادة البيانات باستخدام واجهة Python البرمجية. تقبل هذه المعلمة قائمةً من كائنات تحويل Albumentations التي ستُطبّق أثناء التدريب بدلًا من تحويلات Albumentations الافتراضية.
  • الغرض: يوفر تحكمًا دقيقًا في استراتيجيات زيادة البيانات من خلال الاستفادة من مكتبة تحويلات Albumentations الواسعة. ويفيد ذلك خصوصًا عند الحاجة إلى زيادات متخصصة تتجاوز خيارات YOLO المضمنة، مثل التشوهات المرنة وتشوهات الشبكة للتصوير الطبي، والتحويلات المضبوطة للمنظورات الجوية العلوية ومنظورات الأقمار الصناعية، وتغييرات الضوضاء والسطوع التي تحاكي ظروف الإضاءة المنخفضة، أو تنويعات القوام الشبيهة بالعيوب للفحص الصناعي.
  • تطبيق Ultralytics: Albumentations
  • ملاحظة:
    • يتطلب إنشاء كائنات التحويل استخدام واجهة Python البرمجية. تعمل Ultralytics على تسلسلها باستخدام A.to_dict() عند حفظ نقطة تحقق، ولذلك تمرر قائمة مسلسلة مسبقًا ذهابًا وإيابًا عبر ملف إعداد YAML أو CLI، وهو ما يتيح لـ resume استعادتها.
    • تحل التحويلات المخصصة محل مجموعة Albumentations الافتراضية بالكامل. وتظل كل زيادة بيانات مهيأة في مواضع أخرى من هذه الصفحة — mosaic وhsv_h وdegrees وغيرها — نشطةً وتُطبّق بشكل مستقل.
    • التحويلات المكانية التي تغيّر هندسة الصور، بما في ذلك التحويلات المتداخلة في A.OneOf أو A.Compose، تنقل مربعات الإحاطة، والمضلعات، والنقاط الرئيسية، وأقنعة العمق أو الدلالية مع الصورة؛ حيث لا يمكن لـ A.RandomGridShuffle الحفاظ على طوبولوجيا المضلعات أو النقاط الرئيسية وتطلق خطأً مع عينات التجزئة، ووضعية الجسم، والمربعات الموجهة (OBB).
    • توفر Albumentations أكثر من 70 تحويلًا؛ ويسردها جميعًا توثيق Albumentations. تؤدي إضافة تحويلات كثيرة، أو تحويلات مكلفة حسابيًا، إلى إبطاء التدريب، لذا ابدأ بمجموعة صغيرة وراقب زمن الحقبة.
    • ينطبق ذلك على مهام detect وsegment وsemantic وdepth وpose وobb. ويُستثنى التصنيف لأنه يستخدم مسار زيادة بيانات منفصلًا.

تحتاج الأمثلة أدناه إلى Albumentations 1.4.22 أو إصدار أحدث، ولذلك تحتاج إلى Python 3.9 أو إصدار أحدث.

مثال على Albumentations مخصصة
import albumentations as A

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Define custom Albumentations transforms
custom_transforms = [
    A.Blur(blur_limit=7, p=0.5),
    A.GaussNoise(std_range=(0.0124, 0.0277), p=0.3),
    A.CLAHE(clip_limit=4.0, p=0.5),
    A.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.5),
    A.HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, p=0.5),
]

# Train with custom Albumentations transforms
model.train(
    data="coco8.yaml",
    epochs=100,
    augmentations=custom_transforms,  # Pass custom transforms
    imgsz=640,
)

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

  • يعتمد اختيار زيادات البيانات المناسبة على حالة الاستخدام ومجموعة البيانات الخاصة بك. إليك بعض الإرشادات العامة التي تساعدك على اتخاذ القرار:

    • في معظم الحالات، تكون الاختلافات الطفيفة في اللون والسطوع مفيدة. وتشكل القيم الافتراضية لـ hsv_h وhsv_s وhsv_v نقطة بداية مناسبة.
    • إذا كانت زاوية رؤية الكاميرا ثابتة ولن تتغير بعد نشر النموذج، فمن المرجح أن تتمكن من تخطي التحويلات الهندسية مثل rotation وtranslation وscale وshear أو perspective. أما إذا كانت زاوية الكاميرا قد تتغير، وكنت تحتاج إلى جعل النموذج أكثر متانة، فمن الأفضل الإبقاء على هذه الزيادات.
    • استخدم زيادة البيانات mosaic فقط إذا كان وجود كائنات محجوبة جزئيًا أو كائنات متعددة في الصورة مقبولًا ولا يغير قيمة التصنيف. وبدلًا من ذلك، يمكنك إبقاء mosaic نشطًا، مع زيادة قيمة close_mosaic لتعطيله في وقت أبكر من عملية التدريب.

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

  • إذا كانت حزمة albumentations مثبتة، فستطبق Ultralytics تلقائيًا مجموعةً من زيادات الصور الإضافية باستخدامها. وتُعالَج هذه الزيادات داخليًا ولا تتطلب إعدادًا إضافيًا.

    يمكنك العثور على القائمة الكاملة للتحويلات المطبقة في التوثيق التقني، وكذلك في دليل تكامل Albumentations. لاحظ أن زيادات البيانات التي يكون احتمالها p أكبر من 0 فقط تكون نشطة. وتُطبّق هذه الزيادات عمدًا بترددات منخفضة لمحاكاة العيوب البصرية في العالم الحقيقي، مثل تأثيرات التمويه أو التدرج الرمادي.

    يمكنك أيضًا توفير تحويلات Albumentations المخصصة الخاصة بك باستخدام واجهة Python البرمجية. راجع قسم ميزات زيادة البيانات المتقدمة لمزيد من التفاصيل.

  • تحقق مما إذا كانت حزمة albumentations مثبتة. وإذا لم تكن مثبتة، فثبّتها:

    pip install albumentations

    بعد تثبيتها، ينبغي أن تكتشف Ultralytics الحزمة وتستخدمها تلقائيًا.

  • يمكنك تخصيص زيادات البيانات من خلال إنشاء فئة مجموعة بيانات ومدرّب مخصصين. على سبيل المثال، يمكنك استبدال زيادات بيانات التصنيف الافتراضية في Ultralytics بـ torchvision.transforms.Resize من PyTorch أو بتحويلات أخرى. راجع مثال التدريب المخصص في توثيق التصنيف للاطلاع على تفاصيل التنفيذ.

التعليقات