تعزيز البيانات باستخدام Ultralytics YOLO#
مقدمة#
يُعد تعزيز البيانات تقنية أساسية في الرؤية الحاسوبية، إذ يوسّع مجموعة بيانات التدريب اصطناعيًا عبر تطبيق تحويلات متنوعة على الصور الموجودة. عند تدريب نماذج التعلّم العميق مثل 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)التحويلات المدرجة في هذه الصفحة هي التحويلات التي تتحكم فيها عبر وسيطات التدريب. يطبّق 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.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ببساطة إلى تكبير بمقدار 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 - الاستخدام: يُدخل تحويلًا هندسيًا يميل بالصورة على المحورين x وy، فيزيح أجزاءً منها فعليًا في اتجاه واحد مع الحفاظ على توازي الخطوط. تحدد المعلمة الفائقة
shearزاوية القصّ، ويُختار التعديل النهائي عشوائيًا بين-shearوshear. على سبيل المثال، عند استخدامshear=10.0، يُختار القصّ عشوائيًا ضمن النطاق من-10إلى10على المحور x، كما تُختار قيمة عشوائية مستقلة أخرى ضمن النطاق نفسه على المحور y. - الغرض: يساعد النماذج على التعميم على اختلاف زوايا الرؤية الناتج عن الميل الطفيف أو المناظير المائلة. ففي مراقبة حركة المرور، مثلًا، قد تظهر أجسام كالسيارات وإشارات الطريق مائلة بسبب عدم وضع الكاميرات بشكل عمودي. يضمن تطبيق تعزيز القصّ المائل أن يتعلم النموذج التعرّف على الأجسام رغم هذه التشوهات الناتجة عن الميل.
- تنفيذ Ultralytics: RandomPerspective
- ملاحظة:
- قد تشوّه قيم
shearالصورة بسرعة، لذا يُنصح بالبدء بقيم صغيرة وزيادتها تدريجيًا. - على عكس تحويلات المنظور، لا يُدخل القصّ المائل عمقًا أو نقاط تلاشي، بل يشوّه شكل الأجسام بتغيير زواياها مع إبقاء الأضلاع المتقابلة متوازية.
- قد تشوّه قيم
-10 | -5 | 0.0 | 5 | 10 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
المنظور (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.0005 | 0.0 | 0.0005 | 0.001 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
القلب عموديًا (flipud)#
- النطاق:
0.0-1.0 - القيمة الافتراضية:
0 - الاستخدام: يقلب الصورة عموديًا بعكسها على المحور y. يعكس هذا التحويل الصورة بأكملها رأسًا على عقب، مع الحفاظ على جميع العلاقات المكانية بين الأجسام. تحدد المعلمة الفائقة flipud احتمال تطبيق التحويل؛ وتضمن القيمة
flipud=1.0قلب جميع الصور، بينما تعطل القيمةflipud=0.0التحويل بالكامل. على سبيل المثال، عند استخدامflipud=0.5، يكون لكل صورة احتمال بنسبة 50% أن تُقلب رأسًا على عقب. - الغرض: مفيد في السيناريوهات التي قد تظهر فيها الأجسام مقلوبة رأسًا على عقب. فعلى سبيل المثال، في أنظمة الرؤية الروبوتية، قد تلتقط الأذرع الروبوتية أجسامًا على أحزمة النقل وتضعها باتجاهات متنوعة. يساعد القلب العمودي النموذج على التعرّف على الأجسام بصرف النظر عن اتجاهها من الأعلى إلى الأسفل.
- تنفيذ 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 |
|---|---|
![]() | ![]() |
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 |
|---|---|
![]() | ![]() |
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 |
|---|---|---|
![]() | ![]() | ![]() |
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)#
- النطاق:
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%)؛ ولا يُلصق إذا بلغت أي قيمة IoA0.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، لكن طريقة نسخ الأجسام تختلف. - قد تُنسخ الأجسام أحيانًا جزئيًا أو بالكامل خارج الإطار، وذلك حسب حجم الصورة.
- قد تختلف أشكال الأجسام المنسوخة قليلًا عن الأشكال الأصلية، وذلك حسب جودة تعليقات المضلعات.
- مبدأ IoA واحد في كلا الخيارين
| الصورة المرجعية | الصورة المختارة لـ copy_paste | copy_paste مفعّل مع copy_paste_mode=mixup |
|---|---|---|
![]() | ![]() | ![]() |
تحويلات خاصة بالتصنيف#
التحويل التلقائي (auto_augment)#
- الخيارات:
'randaugment'،'autoaugment'،'augmix'،None - القيمة الافتراضية:
'randaugment' - الاستخدام: يطبق سياسات تحويل آلية للتصنيف. يستخدم الخيار
'randaugment'RandAugment، ويستخدم'autoaugment'AutoAugment، بينما يستخدم'augmix'AugMix. يؤدي ضبط القيمة علىNoneإلى تعطيل التحويل الآلي. - الغرض: يحسّن استراتيجيات التحويل تلقائيًا لمهام التصنيف. وفيما يلي أوجه الاختلاف:
- AutoAugment: يطبق هذا الوضع سياسات تحويل محددة مسبقًا، جرى تعلّمها من مجموعات بيانات مثل ImageNet وCIFAR10 وSVHN. يمكن للمستخدمين اختيار هذه السياسات الموجودة، لكن لا يمكنهم تدريب سياسات جديدة ضمن Torchvision. وللعثور على استراتيجيات التحويل المثلى لمجموعات بيانات محددة، يلزم استخدام مكتبات خارجية أو تطبيقات مخصصة. يُرجى الرجوع إلى ورقة AutoAugment.
- RandAugment: يطبق مجموعة عشوائية من التحويلات ذات مقادير موحدة. يقلل هذا النهج الحاجة إلى مرحلة بحث موسعة، ما يجعله أكثر كفاءة من الناحية الحسابية مع تعزيز متانة النموذج. يُرجى الرجوع إلى ورقة RandAugment.
- AugMix: AugMix طريقة لزيادة البيانات تعزز متانة النموذج بإنشاء تنويعات متعددة للصور عبر تركيبات عشوائية من تحويلات بسيطة. يُرجى الرجوع إلى ورقة AugMix.
- تنفيذ Ultralytics: classify_augmentations()
- ملاحظة:
- يكمن الاختلاف الرئيسي بين الطرق الثلاث في كيفية تحديد سياسات التحويل وتطبيقها.
- يمكنك الرجوع إلى هذه المقالة التي تقارن الطرق الثلاث بالتفصيل.
المحو العشوائي (erasing)#
- النطاق:
0.0-1.0 - القيمة الافتراضية:
0.4 - الاستخدام: يمحو أجزاءً من الصورة عشوائيًا أثناء تدريب التصنيف. تحدد المعلمة الفائقة
erasingاحتمال تطبيق التحويل، حيث تمحوerasing=1.0منطقة من كل صورة، بينما تعطّلerasing=0.0التحويل. على سبيل المثال، معerasing=0.5، يكون لكل صورة احتمال بنسبة 50% لمحو جزء منها. - الغرض: يساعد النماذج على تعلّم سمات متينة ويمنعها من الاعتماد المفرط على مناطق محددة من الصورة. على سبيل المثال، في أنظمة التعرّف على الوجوه، يساعد المحو العشوائي النماذج على زيادة متانتها في مواجهة حالات الحجب الجزئي، مثل النظارات الشمسية أو الكمامات أو الأجسام الأخرى التي قد تحجب بعض ملامح الوجه. ويحسّن ذلك الأداء في العالم الحقيقي بإجبار النموذج على تحديد هوية الأشخاص باستخدام سمات وجه متعددة بدلًا من الاعتماد حصريًا على سمات مميزة قد تكون محجوبة.
- تنفيذ Ultralytics: classify_augmentations()
- ملاحظة:
- يتضمن تحويل
erasingالمعلمات الفائقةscaleوratioوvalue، التي لا يمكن تغييرها في التنفيذ الحالي. وتبلغ قيمها الافتراضية(0.02, 0.33)و(0.3, 3.3)و0على التوالي، وفقًا لما ورد في توثيق PyTorch.
- يتضمن تحويل
إيقاف erasing | erasing مفعّل (المثال 1) | erasing مفعّل (المثال 2) | erasing مفعّل (المثال 3) |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
ميزات التحويل المتقدمة#
تحويلات 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. ويُستثنى التصنيف لأنه يستخدم مسار تحويل منفصلًا.
- يتطلب إنشاء كائنات التحويل استخدام Python API. تسلسل Ultralytics هذه الكائنات باستخدام
تتطلب الأمثلة أدناه Albumentations 1.4.22 أو إصدارًا أحدث، وبالتالي Python 3.9 أو إصدارًا أحدث.
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 أو بتحويلات أخرى. راجع مثال التدريب المخصص في وثائق التصنيف للاطلاع على تفاصيل التنفيذ.













































