Ultralytics YOLO27:
Get Started

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

YOLO data augmentation examples showing original and augmented images for training

مقدمة#

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



شاهد: كيفية استخدام Mosaic وMixUp والمزيد من تقنيات زيادة البيانات لمساعدة نماذج Ultralytics YOLO على التعميم بصورة أفضل 🚀

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

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

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

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

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

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

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

from ultralytics import YOLO

# ⁨تحميل نموذج⁩
model = YOLO("yolo26n.pt")

# ⁨التدريب باستخدام معلمات تعزيز مخصصة⁩
model.train(data="coco8.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)

# ⁨التدريب مع تعطيل جميع إعدادات التعزيز القابلة للتهيئة (حُذفت القيم المعطلة للإيجاز)⁩
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,
)

# ⁨التدريب باستخدام تحويلات Albumentations مخصصة (باستخدام Python API فقط)⁩
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

# ⁨تحميل نموذج YOLO26n مدرب مسبقًا على COCO⁩
model = YOLO("yolo26n.pt")

# ⁨درّب النموذج باستخدام إعدادات مخصصة⁩
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 الصورة الحالية مع ثلاث صور أخرى، تُسحب من مخزن مؤقت للصور المحمّلة مؤخرًا، أو من أي موضع في مجموعة البيانات عند 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)#

  • النطاق: 0.0 - 1.0
  • القيمة الافتراضية: 0
  • الاستخدام: يتطلب تسميات المضلعات، لذا يُطبَّق على مهام التقسيم و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_pastecopy_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_pastecopy_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.
إيقاف erasingerasing مفعّل (المثال 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 API. تسلسل 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

# ⁨تحميل نموذج⁩
model = YOLO("yolo26n.pt")

# ⁨تعريف تحويلات Albumentations مخصصة⁩
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),
]

# ⁨التدريب باستخدام تحويلات Albumentations مخصصة⁩
model.train(
    data="coco8.yaml",
    epochs=100,
    augmentations=custom_transforms,  # ⁨تمرير تحويلات مخصصة⁩
    imgsz=640,
)

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

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

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

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

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

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

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

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

    pip install albumentations

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

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

التعليقات