زيادة البيانات باستخدام Ultralytics YOLO#
مقدمة#
تُعد زيادة البيانات تقنية أساسية في الرؤية الحاسوبية، إذ توسّع مجموعة بيانات التدريب اصطناعيًا من خلال تطبيق تحويلات متنوعة على الصور الموجودة. عند تدريب نماذج التعلّم العميق مثل 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="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 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.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الصورة الحالية إلى 3 صور أخرى، تُسحب من مخزن مؤقت للصور المحمّلة حديثًا، أو من أي موضع في مجموعة البيانات عند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 (copy_paste)#
- النطاق:
0.0-1.0 - الافتراضي:
0 - الاستخدام: يتطلب تسميات مضلعة، لذا يُطبّق على مهام المقاطع وOBB؛ تنسخ هذه الزيادة الكائنات داخل الصور أو بينها، وتتحكم فيها
copy_paste_mode. في وضعflip، تمثلcopy_pasteنسبة الكائنات المؤهلة التي تُنسخ: فإذا احتوت الصورة على ستة كائنات مؤهلة، أُضيفت إليها ثلاث نسخ عندcopy_paste=0.5. وفي وضعmixup، تتحكم القيمة نفسها أيضًا في احتمال تشغيل Copy-Paste. ويعطّلcopy_paste=0.0التحويل. - الغرض: مفيد خصوصًا لمهام تجزئة الكائنات ولمجموعات الكائنات النادرة. فعلى سبيل المثال، في اكتشاف العيوب الصناعية، حيث تظهر أنواع معينة من العيوب بشكل غير متكرر، يمكن لزيادة Copy-Paste أن تزيد اصطناعيًا من ظهور هذه العيوب النادرة عبر نسخها من صورة إلى أخرى، ما يساعد النموذج على تعلم هذه الحالات قليلة التمثيل بصورة أفضل من دون الحاجة إلى عينات معيبة إضافية.
- تطبيق 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)#
- الخيارات:
'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 البرمجية. تقبل هذه المعلمة قائمةً من كائنات تحويل Albumentations التي ستُطبّق أثناء التدريب بدلًا من تحويلات Albumentations الافتراضية.
- الغرض: يوفر تحكمًا دقيقًا في استراتيجيات زيادة البيانات من خلال الاستفادة من مكتبة تحويلات Albumentations الواسعة. ويفيد ذلك خصوصًا عند الحاجة إلى زيادات متخصصة تتجاوز خيارات YOLO المضمنة، مثل التشوهات المرنة وتشوهات الشبكة للتصوير الطبي، والتحويلات المضبوطة للمنظورات الجوية العلوية ومنظورات الأقمار الصناعية، وتغييرات الضوضاء والسطوع التي تحاكي ظروف الإضاءة المنخفضة، أو تنويعات القوام الشبيهة بالعيوب للفحص الصناعي.
- تطبيق Ultralytics: Albumentations
- ملاحظة:
- يتطلب إنشاء كائنات التحويل استخدام واجهة Python البرمجية. تعمل 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 البرمجية. تعمل 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 أو بتحويلات أخرى. راجع مثال التدريب المخصص في توثيق التصنيف للاطلاع على تفاصيل التنفيذ.













































