تعزيز البيانات باستخدام Ultralytics YOLO#
مقدمة#
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)التحويلات المدرجة في هذه الصفحة هي تلك التي يتحكم فيها من خلال معاملات التدريب. تطبق 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.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
ضبط التشبع (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.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
ضبط السطوع (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.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
التحويلات الهندسية#
التدوير (degrees)#
- النطاق: من
0.0إلى180 - القيمة الافتراضية:
0 - الاستخدام: يدور الصور عشوائياً ضمن النطاق المحدد. يحدد المعلمة الفائقة
degreesزاوية التدوير، حيث يتم اختيار التعديل النهائي عشوائياً بين-degreesوdegrees. على سبيل المثال، معdegrees=10.0، يتم اختيار التدوير عشوائياً ضمن النطاق من-10.0إلى10.0. - الغرض: ضروري للتطبيقات التي يمكن أن تظهر فيها الكائنات باتجاهات مختلفة. على سبيل المثال، في صور الطائرات بدون طيار (الدرونز)، يمكن أن تكون المركبات موجهة في أي اتجاه، مما يتطلب من النماذج التعرف على الكائنات بغض النظر عن دورانها.
- تنفيذ Ultralytics: RandomPerspective
-180 | -90 | 0.0 | 90 | 180 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
الإزاحة المكانية (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.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
التحجيم (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.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
القص الهيكلي (shear)#
- النطاق: من
-180إلى+180 - القيمة الافتراضية:
0 - الاستخدام: يدخل تحويلاً هندسياً يشوه الصورة على كل من المحور س والمحور ص، مما يؤدي بفعالية إلى إزاحة أجزاء من الصورة في اتجاه واحد مع الحفاظ على الخطوط المتوازية. يحدد المعلمة الفائقة
shearزاوية القص، حيث يتم اختيار التعديل النهائي عشوائياً بين-shearوshear. على سبيل المثال، معshear=10.0، يتم اختيار القص عشوائياً ضمن النطاق من-10إلى10على المحور س، ويتم اختيار قيمة عشوائية مستقلة أخرى ضمن نفس النطاق على المحور ص. - الغرض: يساعد النماذج على التعميم على التنويعات في زوايا العرض الناتجة عن الميل الطفيف أو وجهات النظر المائلة. على سبيل المثال، في مراقبة حركة المرور، قد تظهر كائنات مثل السيارات وإشارات المرور مائلة بسبب وضعيات الكاميرا غير العمودية. يضمن تطبيق تعزيز القص أن النموذج يتعلم التعرف على الكائنات على الرغم من هذه التشوهات المائلة.
- تنفيذ Ultralytics: RandomPerspective
- ملاحظة:
- يمكن لقيم
shearتشويه الصورة بسرعة، لذا يُنصح بالبدء بقيم صغرى وزيادتها تدريجياً. - على عكس تحويلات المنظور، لا يقدم القص عمقاً أو نقاط تلاشي بل يشوه شكل الكائنات عن طريق تغيير زواياها مع الحفاظ على الجوانب المتقابلة متوازية.
- يمكن لقيم
-10 | -5 | 0.0 | 5 | 10 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
المنظور (perspective)#
- النطاق:
0.0-0.001 - القيمة الافتراضية:
0 - الاستخدام: يطبق تحويل منظوري كامل على كل من المحور س والمحور ص، محاكاةً لكيفية ظهور الكائنات عند رؤيتها من أعماق أو زوايا مختلفة. يحدد المعلمة الفائقة
perspectiveمقدار المنظور، حيث يتم اختيار التعديل النهائي عشوائياً بين-perspectiveوperspective. على سبيل المثال، معperspective=0.001، يتم اختيار المنظور عشوائياً ضمن النطاق من-0.001إلى0.001على المحور س، ويتم اختيار قيمة عشوائية مستقلة أخرى ضمن نفس النطاق على المحور ص. - الغرض: يُعد تعزيز المنظور أمراً بالغ الأهمية للتعامل مع تغيرات زوايا الرؤية المتطرفة، خاصة في السيناريوهات التي تظهر فيها الكائنات قصيرة أو مشوهة بسبب تحولات المنظور. على سبيل المثال، في اكتشاف الكائنات بواسطة الطائرات بدون طيار، يمكن أن تظهر المباني والطرق والمركبات ممدودة أو مضغوطة اعتماداً على ميل الطائرة وارتفاعها. من خلال تطبيق تحويلات المنظور، تتعلم النماذج التعرف على الكائنات على الرغم من هذه التشوهات الناتجة عن المنظور، مما يحسن من متانتها في عمليات النشر في العالم الحقيقي.
- تنفيذ Ultralytics: RandomPerspective
-0.001 | -0.0005 | 0.0 | 0.0005 | 0.001 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
العكس الرأسي (أعلى-أسفل) (flipud)#
- النطاق:
0.0-1.0 - القيمة الافتراضية:
0 - الاستخدام: يجري انعكاساً رأسياً عن طريق قلب الصورة على المحور ص. يعكس هذا التحويل الصورة بأكملها رأساً على عقب ولكنه يحافظ على جميع العلاقات المكانية بين الكائنات. يحدد المعلمة الفائقة لقلب الصورة (flipud) احتمال تطبيق التحويل، حيث تضمن القيمة
flipud=1.0عكس جميع الصور، بينما تعطل القيمةflipud=0.0التحويل تماماً. على سبيل المثال، معflipud=0.5، تكون لكل صورة فرصة بنسبة 50% لكي يتم قلبها رأساً على عقب. - الغرض: مفيد للسيناريوهات التي يمكن أن تظهر فيها الكائنات رأساً على عقب. على سبيل المثال، في أنظمة الرؤية الروبوتية، قد يتم التقاط الكائنات الموجودة على أحزمة النقل أو الأذرع الروبوتية ووضعها في اتجاهات مختلفة. يساعد القلب الرأسي النموذج على التعرف على الكائنات بغض النظر عن تموضعها من الأعلى للأسفل.
- تنفيذ Ultralytics: RandomFlip
إيقاف flipud | تشغيل flipud |
|---|---|
![]() | ![]() |
العكس الأفقي (يسار-يمين) (fliplr)#
- النطاق:
0.0-1.0 - القيمة الافتراضية:
0.5 - الاستخدام: يجري انعكاساً أفقيّاً عن طريق عكس الصورة على طول المحور س. يقوم هذا التحويل بتبديل الجانبين الأيمن والأيسر مع الحفاظ على الاتساق المكاني، مما يساعد النموذج على التعميم على الكائنات التي تظهر في اتجاهات معكوسة. يحدد المعلمة الفائقة
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 |
|---|---|
![]() | ![]() |
الفسيفساء 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 |
|---|---|
![]() | ![]() |
الخلط 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 |
|---|---|---|
![]() | ![]() | ![]() |
القص والدمج 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 |
|---|---|---|
![]() | ![]() | ![]() |
عمليات زيادة البيانات بالنسخ واللصق#
النسخ واللصق 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 |
|---|---|---|
![]() | ![]() |
وضع النسخ واللصق Copy-Paste Mode (copy_paste_mode)#
- الخيارات:
'flip'،'mixup' - القيمة الافتراضية:
'flip' - الاستخدام: يحدد الطريقة المستخدمة لزيادة النسخ واللصق. إذا تم ضبطه على
'flip'، تأتي الكائنات من نفس الصورة، بينما يسمح'mixup'بنسخ الكائنات من صور مختلفة. - الغرض: يسمح بالمرونة في كيفية دمج الكائنات المنسوخة في الصور الهدف.
- تنفيذ Ultralytics: CopyPaste
- ملاحظة:
- مبدأ تقاطع منطقة الاحتواء (IoA) هو نفسه لكلا خياري
copy_paste_mode، ولكن طريقة نسخ الكائنات تختلف. - اعتماداً على حجم الصورة، قد يتم أحياناً نسخ الكائنات جزئياً أو كلياً خارج الإطار.
- اعتماداً على جودة التعليقات التوضيحية للمضلعات، قد يكون للكائنات المنسوخة اختلافات طفيفة في الشكل مقارنة بالأصول.
- مبدأ تقاطع منطقة الاحتواء (IoA) هو نفسه لكلا خياري
| الصورة المرجعية | الصورة المختارة لـ copy_paste | تشغيل copy_paste مع copy_paste_mode=mixup |
|---|---|---|
![]() | ![]() | ![]() |
تعزيزات خاصة بالتصنيف (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) |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
ميزات التعزيز المتقدمة#
تحويلات 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. يتم استثناء التصنيف، لأنه يستخدم خط أنابيب تعزيز بيانات منفصل.
- يتطلب بناء كائنات التحويل واجهة برمجة تطبيقات Python (Python API). تقوم Ultralytics بتسلسلها باستخدام
تحتاج الأمثلة أدناه إلى مكتبة Albumentations بالإصدار 1.4.22 أو أحدث، وبالتالي تتطلب Python 3.9 أو أحدث.
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 في وثائق التصنيف لمعرفة تفاصيل التنفيذ.













































