رؤية YOLO 2026:

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

YOLO data augmentation examples showing original and augmented images for training

مقدمة#

Data augmentation هي تقنية بالغة الأهمية في الرؤية الحاسوبية تعمل على توسيع مجموعة بيانات التدريب الخاصة بك اصطناعياً من خلال تطبيق تحويلات مختلفة على الصور الموجودة. عند تدريب نماذج التعلم العميق مثل Ultralytics YOLO، تساعد زيادة البيانات في تحسين متانة النموذج، وتقليل فرط التخصيص (overfitting)، وتعزيز التعميم على سيناريوهات العالم الحقيقي.



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

لماذا يعد تعزيز البيانات مهماً#

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

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

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

تكوينات نموذجية#

يمكنك تخصيص كل معلمة باستخدام واجهة برمجة تطبيقات Python، أو واجهة سطر الأوامر (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:

مثال على التدريب
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 ببساطة إلى تقريب (Zoom) بمقدار الضعف (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
  • الاستخدام: يدخل تحويلاً هندسياً يشوه الصورة على كل من المحور س والمحور ص، مما يؤدي بفعالية إلى إزاحة أجزاء من الصورة في اتجاه واحد مع الحفاظ على الخطوط المتوازية. يحدد المعلمة الفائقة shear زاوية القص، حيث يتم اختيار التعديل النهائي عشوائياً بين -shear و shear. على سبيل المثال، مع shear=10.0، يتم اختيار القص عشوائياً ضمن النطاق من -10 إلى 10 على المحور س، ويتم اختيار قيمة عشوائية مستقلة أخرى ضمن نفس النطاق على المحور ص.
  • الغرض: يساعد النماذج على التعميم على التنويعات في زوايا العرض الناتجة عن الميل الطفيف أو وجهات النظر المائلة. على سبيل المثال، في مراقبة حركة المرور، قد تظهر كائنات مثل السيارات وإشارات المرور مائلة بسبب وضعيات الكاميرا غير العمودية. يضمن تطبيق تعزيز القص أن النموذج يتعلم التعرف على الكائنات على الرغم من هذه التشوهات المائلة.
  • تنفيذ 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
  • الاستخدام: يطبق تحويل منظوري كامل على كل من المحور س والمحور ص، محاكاةً لكيفية ظهور الكائنات عند رؤيتها من أعماق أو زوايا مختلفة. يحدد المعلمة الفائقة perspective مقدار المنظور، حيث يتم اختيار التعديل النهائي عشوائياً بين -perspective و perspective. على سبيل المثال، مع perspective=0.001، يتم اختيار المنظور عشوائياً ضمن النطاق من -0.001 إلى 0.001 على المحور س، ويتم اختيار قيمة عشوائية مستقلة أخرى ضمن نفس النطاق على المحور ص.
  • الغرض: يُعد تعزيز المنظور أمراً بالغ الأهمية للتعامل مع تغيرات زوايا الرؤية المتطرفة، خاصة في السيناريوهات التي تظهر فيها الكائنات قصيرة أو مشوهة بسبب تحولات المنظور. على سبيل المثال، في اكتشاف الكائنات بواسطة الطائرات بدون طيار، يمكن أن تظهر المباني والطرق والمركبات ممدودة أو مضغوطة اعتماداً على ميل الطائرة وارتفاعها. من خلال تطبيق تحويلات المنظور، تتعلم النماذج التعرف على الكائنات على الرغم من هذه التشوهات الناتجة عن المنظور، مما يحسن من متانتها في عمليات النشر في العالم الحقيقي.
  • تنفيذ 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
  • الاستخدام: يجري انعكاساً رأسياً عن طريق قلب الصورة على المحور ص. يعكس هذا التحويل الصورة بأكملها رأساً على عقب ولكنه يحافظ على جميع العلاقات المكانية بين الكائنات. يحدد المعلمة الفائقة لقلب الصورة (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
  • الاستخدام: يجري انعكاساً أفقيّاً عن طريق عكس الصورة على طول المحور س. يقوم هذا التحويل بتبديل الجانبين الأيمن والأيسر مع الحفاظ على الاتساق المكاني، مما يساعد النموذج على التعميم على الكائنات التي تظهر في اتجاهات معكوسة. يحدد المعلمة الفائقة 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% لكل صورة لكي يتم دمجها مع ثلاث صور أخرى.
  • الغرض: فعال للغاية لتحسين اكتشاف الكائنات الصغيرة وفهم السياق. على سبيل المثال، في مشاريع الحفاظ على الحياة البرية حيث قد تظهر الحيوانات على مسافات ومقاييس مختلفة، يساعد تعزيز الفسيفساء النموذج على تعلم التعرف على نفس النوع عبر أحجام مختلفة، وحالات انسداد جزئي، وسياقات بيئية متنوعة من خلال إنشاء عينات تدريب متنوعة بشكل مصطنع من بيانات محدودة.
  • تنفيذ Ultralytics: Mosaic
  • ملاحظة:
    • حتى لو كانت زيادة mosaic تجعل النموذج أكثر متانة، فإنها يمكن أن تجعل عملية التدريب أكثر صعوبة أيضاً.
    • يمكن تعطيل زيادة mosaic بالقرب من نهاية التدريب عن طريق تعيين close_mosaic لعدد العصور (epochs) السابقة للاكتمال التي يجب إيقافها عندها. على سبيل المثال، إذا تم تعيين epochs إلى 200 وتم تعيين close_mosaic إلى 20، سيتم تعطيل زيادة mosaic بعد 180 من العصور. إذا تم تعيين close_mosaic إلى 0، فسيتم تمكين زيادة mosaic طوال عملية التدريب بأكملها.
    • إغلاق الموزاييك يعطل أيضاً copy_paste، وmixup، وcutmix في نفس الحقبة. يتم إيقاف الأربعة معاً، بحيث تُدرب الحقب النهائية بدونها بينما يستمر كل تعزيز بيانات آخر — التحويلات الهندسية، وHSV، والانعكاسات، وAlbumentations — في العمل. لاحظ أن copy_paste في وضعها الافتراضي flip تعمل داخل صورة واحدة بدلاً من دمج عدة صور.
    • يتم تحديد مركز الفسيفساء التي يتم إنشاؤها باستخدام قيم عشوائية، ويمكن أن يكون إما داخل الصورة أو خارجها.
    • يجمع التنفيذ الحالي لتعزيز البيانات mosaic الصورة الحالية مع 3 صور أخرى، مسحوبة من مخزن مؤقت للصور المحملة مؤخراً، أو من أي مكان في مجموعة البيانات عندما تكون cache='ram'. في كلتا الحالتين يتم أخذ عينات منها مع الاستبدال، بحيث يمكن أن تظهر نفس الصورة أكثر من مرة في موزاييك واحد.
إيقاف 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% لكل صورة لكي يتم خلطها مع صورة أخرى.
  • الغرض: يحسن متانة النموذج ويقلل من الإفراط في التخصيص (overfitting). على سبيل المثال، في أنظمة التعرف على منتجات التجزئة، يساعد الخلط النموذج على تعلم ميزات أكثر متانة من خلال مزج صور لمنتجات مختلفة، مما يعلمه تحديد العناصر حتى عندما تكون مرئية جزئياً أو محجوبة بمنتجات أخرى على أرفف المتاجر المزدحمة.
  • تنفيذ 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
  • الاستخدام: يتطلب تسميات مضلعة، لذا فهو ينطبق على مهام التجزئة (segment) و OBB؛ تقوم عملية زيادة البيانات هذه بنسخ الكائنات داخل الصور أو فيما بينها، ويتم التحكم في ذلك بواسطة copy_paste_mode. في وضع flip، تكون copy_paste هي نسبة الكائنات المؤهلة التي يتم نسخها: صورة تحتوي على ستة كائنات مؤهلة تحصل على ثلاث نسخ عند القيمة copy_paste=0.5. في وضع mixup، تتحكم القيمة نفسها أيضاً في احتمالية تشغيل النسخ واللصق. يعمل copy_paste=0.0 على تعطيل التحويل.
  • الغرض: مفيد بشكل خاص لمهام تجزئة المثيل وفئات الكائنات النادرة. على سبيل المثال، في الكشف عن العيوب الصناعية حيث تظهر أنواع معينة من العيوب بشكل غير متكرر، يمكن لتعزيز النسخ واللصق زيادة حدوث هذه العيوب النادرة بشكل مصطنع عن طريق نسخها من صورة إلى أخرى، مما يساعد النموذج على تعلم هذه الحالات غير الممثلة بشكل أفضل دون الحاجة إلى عينات معيبة إضافية.
  • تنفيذ 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 (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

تعزيزات خاصة بالتصنيف (Classification)#

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

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

المسح العشوائي Random Erasing (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 (API). تقبل هذه المعلمة قائمة بكائنات تحويل Albumentations التي سيتم تطبيقها أثناء التدريب بدلاً من تحويلات Albumentations الافتراضية.
  • الغرض: يوفر تحكماً دقيقاً في استراتيجيات تعزيز البيانات من خلال الاستفادة من مكتبة Albumentations الواسعة للتحويلات. يكون هذا مفيداً بشكل خاص عندما تحتاج إلى تعزيزات متخصصة تتجاوز خيارات YOLO المضمنة، مثل التشوهات المرنة وتشوهات الشبكة للتصوير الطبي، والتحويلات المخصصة لمنظورات التصوير الجوي والفضائي العلوي، وتغيرات الضوضاء والسطوع التي تحاكي ظروف الإضاءة المنخفضة، أو تنوعات الملمس الشبيهة بالعيوب للفحص الصناعي.
  • تنفيذ Ultralytics: Albumentations
  • ملاحظة:
    • يتطلب بناء كائنات التحويل واجهة برمجة تطبيقات Python (Python API). تقوم Ultralytics بتسلسلها باستخدام A.to_dict() عند حفظ نقطة تحقق، لذا فإن القائمة المسلسلة مسبقاً تمر ذهاباً وإياباً عبر ملف تكوين YAML أو واجهة سطر الأوامر (CLI)، وهو ما يتيح لـ resume استعادتها.
    • تحل التحويلات المخصصة محل مجموعة Albumentations الافتراضية بالكامل. يظل كل تعزيز تم تكوينه في أي مكان آخر في هذه الصفحة — mosaic، وhsv_h، وdegrees، والبقية — نشطاً ويتم تطبيقه بشكل مستقل.
    • كن حذراً مع التحويلات المكانية التي تغير هندسة الصورة. تقوم Ultralytics بتعديل المربعات المحيطة تلقائياً، ولكن بعض التحويلات المعقدة قد تتطلب تكويناً إضافياً.
    • تقدم 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 أو تحويلات أخرى. راجع custom training example في وثائق التصنيف لمعرفة تفاصيل التنفيذ.

التعليقات