تعزيز البيانات باستخدام 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="coco.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)
# Training without any augmentations (disabled values omitted for clarity)
model.train(
data="coco.yaml",
epochs=100,
hsv_h=0.0,
hsv_s=0.0,
hsv_v=0.0,
translate=0.0,
scale=0.0,
fliplr=0.0,
mosaic=0.0,
erasing=0.0,
auto_augment=None,
)
# Training with custom Albumentations transforms (Python API only)
custom_transforms = [
A.Blur(blur_limit=7, p=0.5),
A.CLAHE(clip_limit=4.0, p=0.5),
]
model.train(data="coco.yaml", epochs=100, augmentations=custom_transforms)استخدام ملف إعدادات
يمكنك تحديد جميع معلمات التدريب، بما في ذلك التعزيزات، في ملف إعدادات YAML (على سبيل المثال، train_custom.yaml). معلمة mode مطلوبة فقط عند استخدام CLI. سيقوم ملف YAML الجديد هذا بعد ذلك بتجاوز الملف الافتراضي الموجود في حزمة ultralytics.
# train_custom.yaml
# 'mode' is required only for CLI usage
mode: train
data: coco8.yaml
model: yolo26n.pt
epochs: 100
hsv_h: 0.03
hsv_s: 0.6
hsv_v: 0.5ثم ابدأ التدريب باستخدام Python API:
from ultralytics import YOLO
# Load a COCO-pretrained YOLO26n model
model = YOLO("yolo26n.pt")
# Train the model with custom configuration
model.train(cfg="train_custom.yaml")تعزيزات مساحة اللون
ضبط تدرج اللون (hsv_h)
- النطاق:
0.0-1.0 - الافتراضي:
0.015 - الاستخدام: يغير ألوان الصورة مع الحفاظ على علاقاتها. تحدد المعلمة الفائقة
hsv_hمقدار التغيير، مع اختيار الضبط النهائي عشوائياً بين-hsv_hوhsv_h. على سبيل المثال، معhsv_h=0.3، يتم اختيار التغيير عشوائياً ضمن النطاق-0.3إلى0.3. بالنسبة للقيم التي تزيد عن0.5، يلتف تغيير تدرج اللون حول عجلة الألوان، ولهذا السبب تبدو التعزيزات متطابقة بين0.5و-0.5. - الغرض: مفيد بشكل خاص للسيناريوهات الخارجية حيث يمكن لظروف الإضاءة أن تؤثر بشكل كبير على مظهر الكائن. على سبيل المثال، قد تبدو الموزة أكثر اصفراراً تحت ضوء الشمس الساطع ولكن أكثر اخضراراً في الداخل.
- تطبيق Ultralytics: RandomHSV
-0.5 | -0.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 - الافتراضي:
0.5 - الاستخدام: يغير حجم الصور بمعامل عشوائي ضمن النطاق المحدد. تحدد المعلمة الفائقة
scaleمعامل التحجيم، مع اختيار الضبط النهائي عشوائياً بين1-scaleو1+scale. على سبيل المثال، معscale=0.5، يتم اختيار التحجيم عشوائياً ضمن النطاق0.5إلى1.5. - الغرض: يمكن النماذج من التعامل مع الكائنات على مسافات وأحجام مختلفة. على سبيل المثال، في تطبيقات القيادة الذاتية، يمكن أن تظهر المركبات على مسافات مختلفة من الكاميرا، مما يتطلب من النموذج التعرف عليها بغض النظر عن حجمها.
- تطبيق Ultralytics: RandomPerspective
- ملاحظة:
- القيمة
-1.0غير معروضة لأنها ستجعل الصورة تختفي، بينما1.0تؤدي ببساطة إلى تكبير بمقدار 2x. - القيم المعروضة في الجدول أدناه هي تلك المطبقة من خلال المعلمة الفائقة
scale، وليس معامل الحجم النهائي. - إذا كانت
scaleأكبر من1.0، يمكن أن تكون الصورة صغيرة جداً أو مقلوبة، حيث يتم اختيار معامل التحجيم عشوائياً بين1-scaleو1+scale. على سبيل المثال، معscale=3.0، يتم اختيار التحجيم عشوائياً ضمن النطاق-2.0إلى4.0. إذا تم اختيار قيمة سالبة، يتم قلب الصورة.
- القيمة
-0.5 | -0.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 - Usage: Performs a vertical flip by inverting the image along the y-axis. This transformation mirrors the entire image upside-down but preserves all spatial relationships between objects. The flipud hyperparameter defines the probability of applying the transformation, with a value of
flipud=1.0ensuring that all images are flipped and a value offlipud=0.0disabling the transformation entirely. For example, withflipud=0.5, each image has a 50% chance of being flipped upside-down. - الغرض: مفيد للسيناريوهات التي يمكن أن تظهر فيها الكائنات مقلوبة رأساً على عقب. على سبيل المثال، في أنظمة الرؤية الآلية، قد يتم التقاط الكائنات الموجودة على أحزمة النقل أو الأذرع الآلية ووضعها في اتجاهات مختلفة. يساعد القلب الرأسي النموذج على التعرف على الكائنات بغض النظر عن تموضعها العلوي والسفلي.
- تنفيذ Ultralytics: RandomFlip
flipud متوقف | flipud مفعل |
|---|---|
![]() | ![]() |
القلب الأفقي (fliplr)
- النطاق:
0.0-1.0 - الافتراضي:
0.5 - الاستخدام: يقوم بقلب الصورة أفقياً من خلال عكسها على طول المحور x. يقوم هذا التحويل بتبديل الجانبين الأيمن والأيسر مع الحفاظ على الاتساق المكاني، مما يساعد النموذج على التعميم على الكائنات التي تظهر في اتجاهات معكوسة. يحدد المعامل الفائق
fliplrاحتمالية تطبيق التحويل، حيث تضمن القيمةfliplr=1.0قلب جميع الصور، بينما تؤدي القيمةfliplr=0.0إلى تعطيل التحويل بالكامل. على سبيل المثال، معfliplr=0.5يكون لكل صورة فرصة بنسبة 50% لقلبها من اليسار إلى اليمين. - الغرض: يُستخدم القلب الأفقي على نطاق واسع في اكتشاف الكائنات، وتقدير الوضعية، والتعرف على الوجوه لتحسين المتانة ضد الاختلافات بين اليمين واليسار. على سبيل المثال، في القيادة الذاتية، يمكن أن تظهر المركبات والمشاة على أي من جانبي الطريق، ويساعد القلب الأفقي النموذج على التعرف عليهم بنفس الكفاءة في كلا الاتجاهين.
- تنفيذ Ultralytics: RandomFlip
fliplr متوقف | fliplr مفعل |
|---|---|
![]() | ![]() |
تبديل قنوات BGR (bgr)
- النطاق:
0.0-1.0 - الافتراضي:
0 - الاستخدام: يقوم بتبديل قنوات الألوان في الصورة من RGB إلى BGR، مما يغير الترتيب الذي تُمثل به الألوان. يحدد المعامل الفائق
bgrاحتمالية تطبيق التحويل، حيث يضمنbgr=1.0خضوع جميع الصور لتبديل القناة، بينما يؤديbgr=0.0إلى تعطيله. على سبيل المثال، معbgr=0.5يكون لكل صورة فرصة بنسبة 50% ليتم تحويلها من RGB إلى BGR. - الغرض: يزيد من المتانة تجاه ترتيبات قنوات الألوان المختلفة. على سبيل المثال، عند تدريب نماذج يجب أن تعمل عبر أنظمة كاميرات ومكتبات تصوير متنوعة حيث قد تُستخدم تنسيقات RGB و BGR بشكل غير متسق، أو عند نشر النماذج في بيئات قد يختلف فيها تنسيق لون الإدخال عن بيانات التدريب.
- تنفيذ Ultralytics: Format
bgr متوقف | bgr مفعل |
|---|---|
![]() | ![]() |
الفسيفساء (mosaic)
- النطاق:
0.0-1.0 - الافتراضي:
1 - الاستخدام: يدمج أربع صور تدريب في صورة واحدة. يحدد المعامل الفائق
mosaicاحتمالية تطبيق التحويل، حيث يضمنmosaic=1.0دمج جميع الصور، بينما يؤديmosaic=0.0إلى تعطيل التحويل. على سبيل المثال، معmosaic=0.5يكون لكل صورة فرصة بنسبة 50% لدمجها مع ثلاث صور أخرى. - الغرض: فعال للغاية لتحسين اكتشاف الكائنات الصغيرة وفهم السياق. على سبيل المثال، في مشاريع الحفاظ على الحياة البرية حيث قد تظهر الحيوانات على مسافات ومقاييس مختلفة، يساعد تعزيز الفسيفساء النموذج على تعلم التعرف على نفس النوع عبر أحجام مختلفة، وحالات انسداد جزئي، وسياقات بيئية، وذلك من خلال إنشاء عينات تدريب متنوعة صناعياً من بيانات محدودة.
- تنفيذ Ultralytics: Mosaic
- ملاحظة:
- حتى لو جعل تعزيز
mosaicالنموذج أكثر متانة، فإنه يمكن أيضاً أن يجعل عملية التدريب أكثر صعوبة. - يمكن تعطيل تعزيز
mosaicبالقرب من نهاية التدريب عن طريق ضبطclose_mosaicعلى عدد الدورات (epochs) قبل الانتهاء التي يجب إيقافه عندها. على سبيل المثال، إذا تم ضبطepochsعلى200وclose_mosaicعلى20فسيتم تعطيل تعزيزmosaicبعد180دورة. إذا تم ضبطclose_mosaicعلى0فسيتم تمكين تعزيزmosaicطوال عملية التدريب بأكملها. - يتم تحديد مركز الفسيفساء المُنشأة باستخدام قيم عشوائية، ويمكن أن يكون إما داخل الصورة أو خارجها.
- التنفيذ الحالي لتعزيز
mosaicيدمج 4 صور مختارة عشوائياً من مجموعة البيانات. إذا كانت مجموعة البيانات صغيرة، فقد تُستخدم نفس الصورة عدة مرات في نفس الفسيفساء.
- حتى لو جعل تعزيز
mosaic متوقف | mosaic مفعل |
|---|---|
![]() | ![]() |
المزج (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)
- النطاق:
0.0-1.0 - الافتراضي:
0 - الاستخدام: يقص منطقة مستطيلة من صورة ويلصقها فوق صورة أخرى باحتمالية معينة. يحدد المعامل الفائق
cutmixاحتمالية تطبيق التحويل، حيث يضمنcutmix=1.0خضوع جميع الصور لهذا التحويل، بينما يؤديcutmix=0.0إلى تعطيله تماماً. على سبيل المثال، معcutmix=0.5يكون لكل صورة فرصة بنسبة 50% لاستبدال منطقة منها برقعة من صورة أخرى. - Purpose: Enhances model performance by creating realistic occlusion scenarios while maintaining local feature integrity. For example, in autonomous driving systems, cutmix helps the model learn to recognize vehicles or pedestrians even when they're partially occluded by other objects, improving detection accuracy in complex real-world environments with overlapping objects.
- تنفيذ Ultralytics: CutMix
- ملاحظة:
- يتم تحديد حجم وموضع منطقة القص عشوائياً لكل تطبيق.
- Unlike mixup which blends pixel values globally,
cutmixmaintains the original pixel intensities within the cut regions, preserving local features. - يتم لصق منطقة في الصورة المستهدفة فقط إذا كانت لا تتداخل مع أي مربع إحاطة (bounding box) موجود. بالإضافة إلى ذلك، يتم الاحتفاظ فقط بمربعات الإحاطة التي تحتفظ بما لا يقل عن
0.1(10%) من مساحتها الأصلية داخل المنطقة الملصقة. - لا يمكن تغيير حد مساحة مربع الإحاطة الأدنى هذا باستخدام التنفيذ الحالي وهو مضبوط على
0.1افتراضياً.
الصورة الأولى، cutmix متوقف | الصورة الثانية، cutmix متوقف | cutmix مفعل |
|---|---|---|
![]() | ![]() | ![]() |
تعزيزات خاصة بالتجزئة (Segmentation)
النسخ واللصق (copy_paste)
- النطاق:
0.0-1.0 - الافتراضي:
0 - الاستخدام: يعمل فقط لمهام التجزئة، يقوم هذا التعزيز بنسخ الكائنات داخل أو بين الصور بناءً على احتمالية محددة، ويتم التحكم فيه بواسطة
copy_paste_mode. يحدد المعامل الفائقcopy_pasteاحتمالية تطبيق التحويل، حيث يضمنcopy_paste=1.0نسخ جميع الصور، بينما يؤديcopy_paste=0.0إلى تعطيل التحويل. على سبيل المثال، معcopy_paste=0.5يكون لكل صورة فرصة بنسبة 50% ليتم نسخ كائنات إليها من صورة أخرى. - الغرض: مفيد بشكل خاص لمهام تجزئة المثيلات (instance segmentation) وفئات الكائنات النادرة. على سبيل المثال، في اكتشاف العيوب الصناعية حيث تظهر أنواع معينة من العيوب بشكل غير متكرر، يمكن لتعزيز النسخ واللصق زيادة حدوث هذه العيوب النادرة بشكل مصطنع عن طريق نسخها من صورة إلى أخرى، مما يساعد النموذج على تعلم هذه الحالات غير الممثلة بشكل أفضل دون الحاجة إلى عينات معيبة إضافية.
- تنفيذ Ultralytics: CopyPaste
- ملاحظة:
- كما هو موضح في الصورة المتحركة أدناه، يمكن استخدام تعزيز
copy_pasteلنسخ كائنات من صورة إلى أخرى. - بمجرد نسخ كائن، وبغض النظر عن
copy_paste_mode، يتم حساب التقاطع فوق المساحة (IoA) الخاص به مع جميع كائنات الصورة المصدر. إذا كانت جميع قيم IoA أقل من0.3(30%)، يتم لصق الكائن في الصورة المستهدفة. إذا كانت قيمة IoA واحدة فقط فوق0.3، لا يتم لصق الكائن في الصورة المستهدفة. - لا يمكن تغيير حد IoA باستخدام التنفيذ الحالي وهو مضبوط على
0.3افتراضياً.
- كما هو موضح في الصورة المتحركة أدناه، يمكن استخدام تعزيز
copy_paste متوقف | copy_paste مفعل مع copy_paste_mode=flip | تصور عملية copy_paste |
|---|---|---|
![]() | ![]() | ![]() |
وضع النسخ واللصق (copy_paste_mode)
- الخيارات:
'flip','mixup' - الافتراضي:
'flip' - الاستخدام: يحدد الطريقة المستخدمة لتعزيز النسخ واللصق. إذا تم ضبطه على
'flip'، فإن الكائنات تأتي من نفس الصورة، بينما يسمح'mixup'بنسخ الكائنات من صور مختلفة. - الغرض: يسمح بالمرونة في كيفية دمج الكائنات المنسوخة في الصور المستهدفة.
- تنفيذ Ultralytics: CopyPaste
- ملاحظة:
- مبدأ IoA هو نفسه لكلا وضعي
copy_paste_mode، لكن طريقة نسخ الكائنات مختلفة. - اعتماداً على حجم الصورة، قد يتم أحياناً نسخ الكائنات جزئياً أو كلياً خارج الإطار.
- اعتماداً على جودة تعليقات المضلعات (polygon annotations)، قد يكون للكائنات المنسوخة اختلافات طفيفة في الشكل مقارنة بالأصلية.
- مبدأ IoA هو نفسه لكلا وضعي
| الصورة المرجعية | الصورة المختارة لـ copy_paste | copy_paste مفعل مع copy_paste_mode=mixup |
|---|---|---|
![]() | ![]() | ![]() |
تعزيزات خاصة بالتصنيف (Classification)
التعزيز التلقائي (auto_augment)
- الخيارات:
'randaugment','autoaugment','augmix',None - الافتراضي:
'randaugment' - الاستخدام: يطبق سياسات تعزيز آلية للتصنيف. يستخدم الخيار
'randaugment'تقنية RandAugment، ويستخدم'autoaugment'تقنية AutoAugment، ويستخدم'augmix'تقنية AugMix. ضبط القيمة علىNoneيؤدي إلى تعطيل التعزيز الآلي. - الغرض: تحسين استراتيجيات التعزيز تلقائيًا لمهام التصنيف. الاختلافات هي كما يلي:
- AutoAugment: يطبق هذا الوضع سياسات تعزيز محددة مسبقًا تم تعلمها من مجموعات بيانات مثل ImageNet و CIFAR10 و SVHN. يمكن للمستخدمين اختيار هذه السياسات الحالية ولكن لا يمكنهم تدريب سياسات جديدة داخل Torchvision. لاكتشاف استراتيجيات التعزيز المثلى لمجموعات بيانات محددة، ستكون هناك حاجة إلى مكتبات خارجية أو تطبيقات مخصصة. مرجع إلى ورقة AutoAugment.
- RandAugment: يطبق اختيارًا عشوائيًا للتحويلات بمقدار موحد. يقلل هذا النهج من الحاجة إلى مرحلة بحث مكثفة، مما يجعله أكثر كفاءة من الناحية الحسابية مع الاستمرار في تعزيز قوة النموذج. مرجع إلى ورقة RandAugment.
- AugMix: هو طريقة لتعزيز البيانات تعزز قوة النموذج من خلال إنشاء اختلافات متنوعة في الصور عبر مجموعات عشوائية من التحويلات البسيطة. مرجع إلى ورقة AugMix.
- تطبيق Ultralytics: classify_augmentations()
- ملاحظة:
- بشكل أساسي، الاختلاف الرئيسي بين الطرق الثلاث هو الطريقة التي يتم بها تحديد وتطبيق سياسات التعزيز.
- يمكنك الرجوع إلى هذه المقالة التي تقارن الطرق الثلاث بالتفصيل.
المسح العشوائي (erasing)
- النطاق:
0.0-0.9 - الافتراضي:
0.4 - الاستخدام: يقوم بمسح أجزاء من الصورة عشوائيًا أثناء تدريب التصنيف. يحدد المعامل الفائق
erasingاحتمالية تطبيق التحويل، حيث تضمنerasing=0.9مسح جميع الصور تقريبًا، بينما تؤديerasing=0.0إلى تعطيل التحويل. على سبيل المثال، معerasing=0.5، تكون لكل صورة فرصة بنسبة 50% لمسح جزء منها. - الغرض: يساعد النماذج على تعلم ميزات قوية ويمنع الاعتماد المفرط على مناطق محددة من الصورة. على سبيل المثال، في أنظمة التعرف على الوجوه، يساعد المسح العشوائي النماذج على أن تصبح أكثر قوة تجاه الانسدادات الجزئية مثل النظارات الشمسية أو أقنعة الوجه أو الأشياء الأخرى التي قد تغطي ميزات الوجه جزئيًا. هذا يحسن الأداء في العالم الحقيقي من خلال إجبار النموذج على تحديد الأفراد باستخدام خصائص وجه متعددة بدلاً من الاعتماد فقط على ميزات مميزة قد تكون محجوبة.
- تطبيق Ultralytics: classify_augmentations()
- ملاحظة:
- يأتي تعزيز
erasingمع معاملات فائقة هيscaleوratioوvalueالتي لا يمكن تغييرها باستخدام التطبيق الحالي. قيمها الافتراضية هي(0.02, 0.33)و(0.3, 3.3)و0على التوالي، كما هو مذكور في وثائق PyTorch. - تم تعيين الحد الأعلى للمعامل الفائق
erasingعند0.9لتجنب تطبيق التحويل على جميع الصور.
- يأتي تعزيز
إيقاف erasing | تشغيل erasing (مثال 1) | تشغيل erasing (مثال 2) | تشغيل erasing (مثال 3) |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
ميزات التعزيز المتقدمة
تحويلات Albumentations المخصصة (augmentations)
- النوع:
listمن تحويلات Albumentations - الافتراضي:
None - الاستخدام: يسمح لك بتوفير تحويلات Albumentations مخصصة لتعزيز البيانات باستخدام Python API. يقبل هذا المعامل قائمة بكائنات تحويل Albumentations التي سيتم تطبيقها أثناء التدريب بدلاً من تحويلات Albumentations الافتراضية.
- الغرض: يوفر تحكمًا دقيقًا في استراتيجيات تعزيز البيانات من خلال الاستفادة من مكتبة Albumentations الشاملة. يكون هذا مفيدًا بشكل خاص عندما تحتاج إلى تعزيزات متخصصة تتجاوز خيارات YOLO المضمنة، مثل تعديلات الألوان المتقدمة، أو حقن الضوضاء، أو التحويلات الخاصة بالمجال.
- تطبيق Ultralytics: Albumentations
import albumentations as A
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Define custom Albumentations transforms
custom_transforms = [
A.Blur(blur_limit=7, p=0.5),
A.GaussNoise(var_limit=(10.0, 50.0), p=0.3),
A.CLAHE(clip_limit=4.0, p=0.5),
A.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.5),
A.HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, p=0.5),
]
# Train with custom Albumentations transforms
model.train(
data="coco8.yaml",
epochs=100,
augmentations=custom_transforms, # Pass custom transforms
imgsz=640,
)نقاط رئيسية:
- Python API فقط: يتم دعم تحويلات Albumentations المخصصة حاليًا فقط من خلال Python API. لا يمكن تحديدها عبر CLI أو ملفات تكوين YAML.
- استبدال التحويلات الافتراضية: عند توفير تحويلات مخصصة عبر المعامل
augmentations، فإنها تحل محل تحويلات Albumentations الافتراضية تمامًا. تظل تعزيزات YOLO الافتراضية (مثلmosaicوhsv_hوhsv_sوdegreesوما إلى ذلك) نشطة ويتم تطبيقها بشكل مستقل. - التوافق مع مربعات الإحاطة (BBox): كن حذرًا عند استخدام التحويلات المكانية (التحويلات التي تغير هندسة الصورة). يتعامل Ultralytics مع تعديلات مربعات الإحاطة تلقائيًا، ولكن قد تتطلب بعض التحويلات المعقدة تكوينًا إضافيًا.
- مكتبة واسعة: تقدم Albumentations أكثر من 70 تحويلاً مختلفًا. استكشف وثائق Albumentations لاكتشاف جميع الخيارات المتاحة.
- اعتبارات الأداء: إضافة الكثير من التعزيزات أو استخدام تحويلات مكثفة حسابيًا يمكن أن يبطئ التدريب. ابدأ بمجموعة صغيرة وراقب سرعة التدريب.
حالات الاستخدام الشائعة:
- التصوير الطبي: تطبيق تحويلات متخصصة مثل التشوهات المرنة أو تشوهات الشبكة لتعزيز صور الأشعة السينية أو التصوير بالرنين المغناطيسي.
- التصوير الجوي/الأقمار الصناعية: استخدام تحويلات محسنة للمناظير العلوية.
- ظروف الإضاءة المنخفضة: تطبيق تعديلات الضوضاء والسطوع لمحاكاة ظروف الإضاءة الصعبة.
- الفحص الصناعي: إضافة أنماط تشبه العيوب أو اختلافات في النسيج لتطبيقات مراقبة الجودة.
ملاحظات التوافق:
- يتطلب Albumentations الإصدار 1.0.3 أو أعلى.
- متوافق مع جميع مهام الكشف والتجزئة في YOLO.
- لا ينطبق على مهام التصنيف (يستخدم التصنيف مسار تعزيز مختلف).
لمزيد من المعلومات حول Albumentations والتحويلات المتاحة، تفضل بزيارة وثائق Albumentations الرسمية.
الأسئلة الشائعة
هناك الكثير من التعزيزات للاختيار من بينها. كيف أعرف أيها يجب استخدامه؟
يعتمد اختيار التعزيزات الصحيحة على حالة الاستخدام الخاصة بك ومجموعة البيانات. فيما يلي بعض الإرشادات العامة لمساعدتك على اتخاذ القرار:
- في معظم الحالات، تكون الاختلافات الطفيفة في اللون والسطوع مفيدة. القيم الافتراضية لـ
hsv_hوhsv_sوhsv_vهي نقطة بداية قوية. - إذا كانت زاوية رؤية الكاميرا ثابتة ولن تتغير بمجرد نشر النموذج، فمن المحتمل أن تتمكن من تخطي التحويلات الهندسية مثل
rotationأوtranslationأوscaleأوshearأوperspective. ومع ذلك، إذا كانت زاوية الكاميرا قد تتغير، وتحتاج إلى أن يكون النموذج أكثر قوة، فمن الأفضل الاحتفاظ بهذه التعزيزات. - استخدم تعزيز
mosaicفقط إذا كان وجود كائنات محجوبة جزئيًا أو كائنات متعددة لكل صورة مقبولًا ولا يغير قيمة التصنيف. بدلاً من ذلك، يمكنك إبقاءmosaicنشطًا ولكن زيادة قيمةclose_mosaicلتعطيله في وقت مبكر من عملية التدريب.
باختصار: اجعل الأمر بسيطًا. ابدأ بمجموعة صغيرة من التعزيزات وأضف المزيد تدريجيًا حسب الحاجة. الهدف هو تحسين التعميم وقوة النموذج، وليس تعقيد عملية التدريب. تأكد أيضًا من أن التعزيزات التي تطبقها تعكس توزيع البيانات نفسه الذي سيواجهه نموذجك في الإنتاج.
عند بدء التدريب، أرى إشارة albumentations: Blur[...]. هل يعني ذلك أن Ultralytics YOLO يقوم بتشغيل تعزيز إضافي مثل التمويه؟
إذا كانت حزمة albumentations مثبتة، يقوم Ultralytics تلقائيًا بتطبيق مجموعة من تعزيزات الصور الإضافية باستخدامها. يتم التعامل مع هذه التعزيزات داخليًا ولا تتطلب أي تكوين إضافي.
يمكنك العثور على القائمة الكاملة للتحويلات المطبقة في وثائقنا التقنية، وكذلك في دليل تكامل Albumentations. لاحظ أن التعزيزات ذات الاحتمالية p الأكبر من 0 فقط هي النشطة. يتم تطبيق هذه التعزيزات عمدًا بترددات منخفضة لمحاكاة المرئيات الواقعية، مثل التمويه أو تأثيرات التدرج الرمادي.
يمكنك أيضًا توفير تحويلات Albumentations المخصصة الخاصة بك باستخدام Python API. راجع قسم ميزات التعزيز المتقدمة لمزيد من التفاصيل.
عند بدء التدريب، لا أرى أي إشارة إلى albumentations. لماذا؟
تحقق مما إذا كانت حزمة albumentations مثبتة. إذا لم تكن كذلك، يمكنك تثبيتها عن طريق تشغيل pip install albumentations. بمجرد التثبيت، يجب اكتشاف الحزمة واستخدامها تلقائيًا بواسطة Ultralytics.
كيف أقوم بتخصيص تعزيزاتي؟
يمكنك تخصيص التعزيزات عن طريق إنشاء فئة مجموعة بيانات ومدرب مخصصين. على سبيل المثال، يمكنك استبدال تعزيزات التصنيف الافتراضية في Ultralytics بـ torchvision.transforms.Resize من PyTorch أو تحويلات أخرى. راجع مثال التدريب المخصص في وثائق التصنيف للحصول على تفاصيل التنفيذ.
















































