تعزيز البيانات باستخدام 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="coco.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)

# Training without any augmentations (disabled values omitted for clarity)
model.train(
    data="coco.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="coco.yaml", epochs=100, augmentations=custom_transforms)

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

يمكنك تحديد جميع معلمات التدريب، بما في ذلك التعزيزات، في ملف إعدادات 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
  • الافتراضي: 0.5
  • الاستخدام: يغير حجم الصور بمعامل عشوائي ضمن النطاق المحدد. تحدد المعلمة الفائقة scale معامل التحجيم، مع اختيار الضبط النهائي عشوائياً بين 1-scale و 1+scale. على سبيل المثال، مع scale=0.5، يتم اختيار التحجيم عشوائياً ضمن النطاق 0.5 إلى 1.5.
  • الغرض: يمكن النماذج من التعامل مع الكائنات على مسافات وأحجام مختلفة. على سبيل المثال، في تطبيقات القيادة الذاتية، يمكن أن تظهر المركبات على مسافات مختلفة من الكاميرا، مما يتطلب من النموذج التعرف عليها بغض النظر عن حجمها.
  • تطبيق Ultralytics: RandomPerspective
  • ملاحظة:
    • القيمة -1.0 غير معروضة لأنها ستجعل الصورة تختفي، بينما 1.0 تؤدي ببساطة إلى تكبير بمقدار 2x.
    • القيم المعروضة في الجدول أدناه هي تلك المطبقة من خلال المعلمة الفائقة scale، وليس معامل الحجم النهائي.
    • إذا كانت scale أكبر من 1.0، يمكن أن تكون الصورة صغيرة جداً أو مقلوبة، حيث يتم اختيار معامل التحجيم عشوائياً بين 1-scale و 1+scale. على سبيل المثال، مع scale=3.0، يتم اختيار التحجيم عشوائياً ضمن النطاق -2.0 إلى 4.0. إذا تم اختيار قيمة سالبة، يتم قلب الصورة.
-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
تحويل المنظور -0.001تحويل المنظور -0.0005Original image without augmentationتحويل المنظور 0.0005تحويل المنظور 0.001

القلب الرأسي (flipud)

  • النطاق: 0.0 - 1.0
  • الافتراضي: 0
  • Usage: Performs a vertical flip by inverting the image along the y-axis. This transformation mirrors the entire image upside-down but preserves all spatial relationships between objects. The flipud hyperparameter defines the probability of applying the transformation, with a value of flipud=1.0 ensuring that all images are flipped and a value of flipud=0.0 disabling the transformation entirely. For example, with flipud=0.5, each image has a 50% chance of being flipped upside-down.
  • الغرض: مفيد للسيناريوهات التي يمكن أن تظهر فيها الكائنات مقلوبة رأساً على عقب. على سبيل المثال، في أنظمة الرؤية الآلية، قد يتم التقاط الكائنات الموجودة على أحزمة النقل أو الأذرع الآلية ووضعها في اتجاهات مختلفة. يساعد القلب الرأسي النموذج على التعرف على الكائنات بغض النظر عن تموضعها العلوي والسفلي.
  • تنفيذ Ultralytics: RandomFlip
flipud متوقفflipud مفعل
الصورة الأصلية بدون تعزيزتعزيز القلب الرأسي مفعل

القلب الأفقي (fliplr)

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

تبديل قنوات 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 مفعل
الصورة الأصلية بدون تعزيزتعزيز تبديل قنوات BGR

الفسيفساء (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 طوال عملية التدريب بأكملها.
    • يتم تحديد مركز الفسيفساء المُنشأة باستخدام قيم عشوائية، ويمكن أن يكون إما داخل الصورة أو خارجها.
    • التنفيذ الحالي لتعزيز mosaic يدمج 4 صور مختارة عشوائياً من مجموعة البيانات. إذا كانت مجموعة البيانات صغيرة، فقد تُستخدم نفس الصورة عدة مرات في نفس الفسيفساء.
mosaic متوقفmosaic مفعل
الصورة الأصلية بدون تعزيزتعزيز الفسيفساء بـ 4 صور مفعل

المزج (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 مفعل
الصورة الأولى لمزج MixUpالصورة الثانية لمزج MixUpتعزيز مزج MixUp مفعل

القص والدمج (cutmix)

  • النطاق: 0.0 - 1.0
  • الافتراضي: 0
  • الاستخدام: يقص منطقة مستطيلة من صورة ويلصقها فوق صورة أخرى باحتمالية معينة. يحدد المعامل الفائق cutmix احتمالية تطبيق التحويل، حيث يضمن cutmix=1.0 خضوع جميع الصور لهذا التحويل، بينما يؤدي cutmix=0.0 إلى تعطيله تماماً. على سبيل المثال، مع cutmix=0.5 يكون لكل صورة فرصة بنسبة 50% لاستبدال منطقة منها برقعة من صورة أخرى.
  • Purpose: Enhances model performance by creating realistic occlusion scenarios while maintaining local feature integrity. For example, in autonomous driving systems, cutmix helps the model learn to recognize vehicles or pedestrians even when they're partially occluded by other objects, improving detection accuracy in complex real-world environments with overlapping objects.
  • تنفيذ Ultralytics: CutMix
  • ملاحظة:
    • يتم تحديد حجم وموضع منطقة القص عشوائياً لكل تطبيق.
    • Unlike mixup which blends pixel values globally, cutmix maintains the original pixel intensities within the cut regions, preserving local features.
    • يتم لصق منطقة في الصورة المستهدفة فقط إذا كانت لا تتداخل مع أي مربع إحاطة (bounding box) موجود. بالإضافة إلى ذلك، يتم الاحتفاظ فقط بمربعات الإحاطة التي تحتفظ بما لا يقل عن 0.1 (10%) من مساحتها الأصلية داخل المنطقة الملصقة.
    • لا يمكن تغيير حد مساحة مربع الإحاطة الأدنى هذا باستخدام التنفيذ الحالي وهو مضبوط على 0.1 افتراضياً.
الصورة الأولى، cutmix متوقفالصورة الثانية، cutmix متوقفcutmix مفعل
الصورة الأولى لـ CutMixالصورة الثانية لـ CutMixتعزيز CutMix مفعل

تعزيزات خاصة بالتجزئة (Segmentation)

النسخ واللصق (copy_paste)

  • النطاق: 0.0 - 1.0
  • الافتراضي: 0
  • الاستخدام: يعمل فقط لمهام التجزئة، يقوم هذا التعزيز بنسخ الكائنات داخل أو بين الصور بناءً على احتمالية محددة، ويتم التحكم فيه بواسطة copy_paste_mode. يحدد المعامل الفائق copy_paste احتمالية تطبيق التحويل، حيث يضمن copy_paste=1.0 نسخ جميع الصور، بينما يؤدي copy_paste=0.0 إلى تعطيل التحويل. على سبيل المثال، مع copy_paste=0.5 يكون لكل صورة فرصة بنسبة 50% ليتم نسخ كائنات إليها من صورة أخرى.
  • الغرض: مفيد بشكل خاص لمهام تجزئة المثيلات (instance segmentation) وفئات الكائنات النادرة. على سبيل المثال، في اكتشاف العيوب الصناعية حيث تظهر أنواع معينة من العيوب بشكل غير متكرر، يمكن لتعزيز النسخ واللصق زيادة حدوث هذه العيوب النادرة بشكل مصطنع عن طريق نسخها من صورة إلى أخرى، مما يساعد النموذج على تعلم هذه الحالات غير الممثلة بشكل أفضل دون الحاجة إلى عينات معيبة إضافية.
  • تنفيذ Ultralytics: CopyPaste
  • ملاحظة:
    • كما هو موضح في الصورة المتحركة أدناه، يمكن استخدام تعزيز copy_paste لنسخ كائنات من صورة إلى أخرى.
    • بمجرد نسخ كائن، وبغض النظر عن copy_paste_mode، يتم حساب التقاطع فوق المساحة (IoA) الخاص به مع جميع كائنات الصورة المصدر. إذا كانت جميع قيم IoA أقل من 0.3 (30%)، يتم لصق الكائن في الصورة المستهدفة. إذا كانت قيمة IoA واحدة فقط فوق 0.3، لا يتم لصق الكائن في الصورة المستهدفة.
    • لا يمكن تغيير حد IoA باستخدام التنفيذ الحالي وهو مضبوط على 0.3 افتراضياً.
copy_paste متوقفcopy_paste مفعل مع copy_paste_mode=flipتصور عملية copy_paste
الصورة الأصلية بدون تعزيزتعزيز النسخ واللصق مفعلعرض توضيحي متحرك لتعزيز النسخ واللصق

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

  • الخيارات: 'flip', 'mixup'
  • الافتراضي: 'flip'
  • الاستخدام: يحدد الطريقة المستخدمة لتعزيز النسخ واللصق. إذا تم ضبطه على 'flip'، فإن الكائنات تأتي من نفس الصورة، بينما يسمح 'mixup' بنسخ الكائنات من صور مختلفة.
  • الغرض: يسمح بالمرونة في كيفية دمج الكائنات المنسوخة في الصور المستهدفة.
  • تنفيذ Ultralytics: CopyPaste
  • ملاحظة:
    • مبدأ IoA هو نفسه لكلا وضعي copy_paste_mode، لكن طريقة نسخ الكائنات مختلفة.
    • اعتماداً على حجم الصورة، قد يتم أحياناً نسخ الكائنات جزئياً أو كلياً خارج الإطار.
    • اعتماداً على جودة تعليقات المضلعات (polygon annotations)، قد يكون للكائنات المنسوخة اختلافات طفيفة في الشكل مقارنة بالأصلية.
الصورة المرجعيةالصورة المختارة لـ copy_pastecopy_paste مفعل مع copy_paste_mode=mixup
الصورة الثانية لمزج MixUpالصورة الأصلية بدون تعزيزالنسخ واللصق مع وضع MixUp

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

التعزيز التلقائي (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()
  • ملاحظة:
    • بشكل أساسي، الاختلاف الرئيسي بين الطرق الثلاث هو الطريقة التي يتم بها تحديد وتطبيق سياسات التعزيز.
    • يمكنك الرجوع إلى هذه المقالة التي تقارن الطرق الثلاث بالتفصيل.

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

  • النطاق: 0.0 - 0.9
  • الافتراضي: 0.4
  • الاستخدام: يقوم بمسح أجزاء من الصورة عشوائيًا أثناء تدريب التصنيف. يحدد المعامل الفائق erasing احتمالية تطبيق التحويل، حيث تضمن erasing=0.9 مسح جميع الصور تقريبًا، بينما تؤدي 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 عند 0.9 لتجنب تطبيق التحويل على جميع الصور.
إيقاف erasingتشغيل erasing (مثال 1)تشغيل erasing (مثال 2)تشغيل erasing (مثال 3)
الصورة الأصلية بدون تعزيزمثال المسح العشوائي 1مثال المسح العشوائي 2مثال المسح العشوائي 3

ميزات التعزيز المتقدمة

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

  • النوع: list من تحويلات Albumentations
  • الافتراضي: None
  • الاستخدام: يسمح لك بتوفير تحويلات Albumentations مخصصة لتعزيز البيانات باستخدام Python API. يقبل هذا المعامل قائمة بكائنات تحويل Albumentations التي سيتم تطبيقها أثناء التدريب بدلاً من تحويلات Albumentations الافتراضية.
  • الغرض: يوفر تحكمًا دقيقًا في استراتيجيات تعزيز البيانات من خلال الاستفادة من مكتبة Albumentations الشاملة. يكون هذا مفيدًا بشكل خاص عندما تحتاج إلى تعزيزات متخصصة تتجاوز خيارات YOLO المضمنة، مثل تعديلات الألوان المتقدمة، أو حقن الضوضاء، أو التحويلات الخاصة بالمجال.
  • تطبيق Ultralytics: Albumentations
مثال على 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(var_limit=(10.0, 50.0), 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,
)

نقاط رئيسية:

  • Python API فقط: يتم دعم تحويلات Albumentations المخصصة حاليًا فقط من خلال Python API. لا يمكن تحديدها عبر CLI أو ملفات تكوين YAML.
  • استبدال التحويلات الافتراضية: عند توفير تحويلات مخصصة عبر المعامل augmentations، فإنها تحل محل تحويلات Albumentations الافتراضية تمامًا. تظل تعزيزات YOLO الافتراضية (مثل mosaic و hsv_h و hsv_s و degrees وما إلى ذلك) نشطة ويتم تطبيقها بشكل مستقل.
  • التوافق مع مربعات الإحاطة (BBox): كن حذرًا عند استخدام التحويلات المكانية (التحويلات التي تغير هندسة الصورة). يتعامل Ultralytics مع تعديلات مربعات الإحاطة تلقائيًا، ولكن قد تتطلب بعض التحويلات المعقدة تكوينًا إضافيًا.
  • مكتبة واسعة: تقدم Albumentations أكثر من 70 تحويلاً مختلفًا. استكشف وثائق Albumentations لاكتشاف جميع الخيارات المتاحة.
  • اعتبارات الأداء: إضافة الكثير من التعزيزات أو استخدام تحويلات مكثفة حسابيًا يمكن أن يبطئ التدريب. ابدأ بمجموعة صغيرة وراقب سرعة التدريب.

حالات الاستخدام الشائعة:

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

ملاحظات التوافق:

  • يتطلب Albumentations الإصدار 1.0.3 أو أعلى.
  • متوافق مع جميع مهام الكشف والتجزئة في YOLO.
  • لا ينطبق على مهام التصنيف (يستخدم التصنيف مسار تعزيز مختلف).

لمزيد من المعلومات حول Albumentations والتحويلات المتاحة، تفضل بزيارة وثائق Albumentations الرسمية.

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

هناك الكثير من التعزيزات للاختيار من بينها. كيف أعرف أيها يجب استخدامه؟

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

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

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

عند بدء التدريب، أرى إشارة albumentations: Blur[...]. هل يعني ذلك أن Ultralytics YOLO يقوم بتشغيل تعزيز إضافي مثل التمويه؟

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

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

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

عند بدء التدريب، لا أرى أي إشارة إلى albumentations. لماذا؟

تحقق مما إذا كانت حزمة albumentations مثبتة. إذا لم تكن كذلك، يمكنك تثبيتها عن طريق تشغيل pip install albumentations. بمجرد التثبيت، يجب اكتشاف الحزمة واستخدامها تلقائيًا بواسطة Ultralytics.

كيف أقوم بتخصيص تعزيزاتي؟

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

التعليقات