Link to this sectionكيفية الضبط الدقيق لنموذج YOLO على مجموعة بيانات مخصصة#
الضبط الدقيق هو عملية تكييف نموذج مدرب مسبقًا للتعرف على فئات جديدة من خلال البدء من الأوزان المكتسبة بدلاً من التهيئة العشوائية. فبدلاً من التدريب من الصفر لمئات الدورات، يستفيد الضبط الدقيق من الميزات المدربة مسبقًا على COCO ويتقارب نحو النتائج على البيانات المخصصة في جزء بسيط من الوقت.
يغطي هذا الدليل الضبط الدقيق لنموذج YOLO26 على مجموعات بيانات مخصصة، بدءًا من الاستخدام الأساسي وصولاً إلى تقنيات متقدمة مثل تجميد الطبقات والتدريب على مرحلتين.
Link to this sectionالضبط الدقيق مقابل التدريب من الصفر#
لقد تعلم النموذج المدرب مسبقًا بالفعل ميزات بصرية عامة - مثل كشف الحواف، والتعرف على القوام، وفهم الأشكال - من ملايين الصور. يعمل التعلم بنقل المعرفة من خلال الضبط الدقيق على إعادة استخدام تلك المعرفة وتعليم النموذج فقط كيفية ظهور الفئات الجديدة، ولهذا السبب يتقارب النموذج بشكل أسرع ويتطلب بيانات أقل. أما التدريب من الصفر فيتجاهل كل ذلك ويجبر النموذج على تعلم كل شيء بدءًا من أنماط مستوى البكسل، مما يتطلب موارد أكبر بكثير.
| الضبط الدقيق | التدريب من الصفر | |
|---|---|---|
| الأوزان الأولية | مدرب مسبقًا على COCO (80 فئة) | تهيئة عشوائية |
| الأمر | YOLO("yolo26n.pt") | YOLO("yolo26n.yaml") |
| التقارب | أسرع - العمود الفقري للنموذج مدرب بالفعل | أبطأ - تتعلم جميع الطبقات من الصفر |
| متطلبات البيانات | أقل - تعوض الميزات المدربة مسبقًا عن نقص البيانات | أعلى - يجب أن يتعلم النموذج جميع الميزات من مجموعة البيانات وحدها |
| متى تستخدم | فئات مخصصة مع صور طبيعية | مجالات مختلفة تمامًا عن COCO (طبية، أقمار صناعية، رادار) |
عند تحميل ملف .pt باستخدام YOLO("yolo26n.pt")، يتم تخزين الأوزان المدربة مسبقًا داخل النموذج. يؤدي استدعاء .train(data="custom.yaml") بعد ذلك إلى نقل جميع الأوزان المتوافقة تلقائيًا إلى بنية النموذج الجديدة، وإعادة تهيئة أي طبقات غير مطابقة (مثل رأس الكشف عندما يختلف عدد الفئات)، وبدء التدريب. لا يلزم تحميل أوزان يدويًا أو معالجة الطبقات أو كتابة كود خاص للتعلم بنقل المعرفة.
Link to this sectionكيف يعمل نقل الأوزان المدربة مسبقًا#
عند إجراء ضبط دقيق لنموذج مدرب مسبقًا على مجموعة بيانات ذات عدد مختلف من الفئات (على سبيل المثال، من 80 فئة في COCO إلى 5 فئات مخصصة)، يقوم Ultralytics بنقل الأوزان مع مراعاة الأشكال:
- نقل كامل للعمود الفقري (Backbone) والعنق (Neck) - هذه الطبقات تستخرج الميزات البصرية العامة وأشكالها مستقلة عن عدد الفئات.
- إعادة تهيئة جزئية لرأس الكشف (Detection head) - طبقات مخرجات التصنيف (
cv3,one2one_cv3) لها أشكال مرتبطة بعدد الفئات (80 مقابل 5)، لذا لا يمكن نقلها ويتم تهيئتها عشوائيًا. أما طبقات تراجع الصندوق (cv2,one2one_cv2) في الرأس فلها أشكال ثابتة بغض النظر عن عدد الفئات، لذا يتم نقلها بشكل طبيعي. - تنتقل الغالبية العظمى من الأوزان عند تغيير عدد الفئات. فقط الطبقات الخاصة بالتصنيف في رأس الكشف هي التي يتم إعادة تهيئتها، بينما تظل فروع العمود الفقري والعنق وفروع تراجع الصندوق سليمة.
بالنسبة لمجموعات البيانات التي تحتوي على نفس عدد فئات النموذج المدرب مسبقًا (على سبيل المثال، الضبط الدقيق لأوزان مدربة على COCO على مجموعة بيانات أخرى تحتوي على 80 فئة)، يتم نقل 100% من الأوزان بما في ذلك رأس الكشف.
Link to this sectionمثال أساسي للضبط الدقيق#
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # load pretrained model
model.train(data="path/to/data.yaml", epochs=50, imgsz=640)Link to this sectionاختيار حجم النموذج#
النماذج الأكبر لديها سعة أكبر ولكن أيضًا المزيد من المعاملات للتحديث، مما قد يزيد من خطر الإفراط في التجهيز (overfitting) عندما تكون بيانات التدريب محدودة. البدء بنموذج أصغر (YOLO26n أو YOLO26s) والتوسع فقط إذا استقرت مقاييس التحقق هو نهج عملي. يعتمد حجم النموذج الأمثل على تعقيد المهمة، وعدد الفئات، وتنوع مجموعة البيانات، والأجهزة المتاحة للنشر. راجع صفحة نموذج YOLO26 الكاملة لمعرفة الأحجام المتاحة ومعايير الأداء.
Link to this sectionاختيار المُحسِّن ومعدل التعلم#
يحدد إعداد optimizer=auto الافتراضي المُحسِّن ومعدل التعلم بناءً على العدد الإجمالي لتكرارات التدريب:
- أقل من 10,000 تكرار (مجموعات بيانات صغيرة أو عدد قليل من الدورات): AdamW مع معدل تعلم منخفض ومحسوب تلقائيًا
- أكثر من 10,000 تكرار (مجموعات بيانات كبيرة): MuSGD (مُحسِّن هجين Muon+SGD) مع lr=0.01
بالنسبة لمعظم مهام الضبط الدقيق، يعمل الإعداد الافتراضي بشكل جيد دون أي ضبط يدوي. فكر في ضبط المُحسِّن صراحةً عندما:
- يكون التدريب غير مستقر (قفزات في الخسارة أو تباعد): جرب
optimizer=AdamW, lr0=0.001لتقارب أكثر استقرارًا - إجراء ضبط دقيق لنموذج كبير على مجموعة بيانات صغيرة: معدل تعلم أقل مثل
lr0=0.001يساعد في الحفاظ على الميزات المدربة مسبقًا
عند تعيين optimizer=auto، يتم تجاهل قيم lr0 و momentum. للتحكم في معدل التعلم يدويًا، قم بتعيين المُحسِّن صراحةً: optimizer=SGD, lr0=0.005.
Link to this sectionتجميد الطبقات#
يمنع التجميد طبقات معينة من التحديث أثناء التدريب. هذا يسرع التدريب ويقلل من الإفراط في التجهيز عندما تكون مجموعة البيانات صغيرة بالنسبة لسعة النموذج.
يقبل معامل freeze إما رقمًا صحيحًا أو قائمة. الرقم الصحيح freeze=10 يجمد الطبقات العشر الأولى (من 0 إلى 9، وهو ما يتوافق مع العمود الفقري في YOLO26). يمكن أن تحتوي القائمة على فهارس طبقات مثل freeze=[0, 3, 5] لتجميد جزئي للعمود الفقري، أو سلاسل نصية لأسماء الوحدات مثل freeze=["23.cv2"] للتحكم الدقيق في فروع معينة داخل طبقة واحدة.
model.train(data="custom.yaml", epochs=50, freeze=10)يعتمد عمق التجميد المناسب على مدى تشابه النطاق المستهدف مع البيانات المدربة مسبقًا ومقدار بيانات التدريب المتاحة:
| السيناريو | التوصية | المنطق |
|---|---|---|
| مجموعة بيانات كبيرة، نطاق مشابه | freeze=None (الافتراضي) | بيانات كافية لتكييف جميع الطبقات دون إفراط في التجهيز |
| مجموعة بيانات صغيرة، نطاق مشابه | freeze=10 | يحافظ على ميزات العمود الفقري، يقلل المعاملات القابلة للتدريب |
| مجموعة بيانات صغيرة جدًا | freeze=23 | يتم تدريب رأس الكشف فقط، مما يقلل من مخاطر الإفراط في التجهيز |
| نطاق بعيد جدًا عن COCO | freeze=None | قد لا تنتقل ميزات العمود الفقري بشكل جيد وتحتاج إلى إعادة تدريب |
يمكن أيضًا التعامل مع عمق التجميد كمعامل فائق - تجربة بضع قيم (0، 5، 10) ومقارنة مقياس mAP للتحقق هو وسيلة عملية للعثور على أفضل إعداد لمجموعة بيانات معينة.
Link to this sectionالمعاملات الفائقة الرئيسية للضبط الدقيق#
يتطلب الضبط الدقيق بشكل عام تعديلات أقل في المعاملات الفائقة مقارنة بالتدريب من الصفر. المعاملات الأكثر أهمية هي:
epochs: يتقارب الضبط الدقيق بشكل أسرع من التدريب من الصفر. ابدأ بقيمة معتدلة واستخدمpatienceللتوقف المبكر عندما تستقر مقاييس التحقق.patience: القيمة الافتراضية 100 مصممة لعمليات التدريب الطويلة. تقليل هذا إلى 10-20 يتجنب إضاعة الوقت في عمليات تقاربت بالفعل.warmup_epochs: الإحماء الافتراضي (3 دورات) يزيد من معدل التعلم تدريجيًا من الصفر، مما يمنع تحديثات التدرج الكبيرة من إتلاف الميزات المدربة مسبقًا في التكرارات المبكرة. يوصى بالحفاظ على الإعداد الافتراضي حتى عند الضبط الدقيق.
للحصول على القائمة الكاملة لمعاملات التدريب، راجع مرجع تكوين التدريب.
Link to this sectionالضبط الدقيق على مرحلتين#
يقسم الضبط الدقيق على مرحلتين التدريب إلى مرحلتين. تجمد المرحلة الأولى العمود الفقري وتدرب العنق والرأس فقط، مما يسمح لطبقات الكشف بالتكيف مع الفئات الجديدة دون تعطيل الميزات المدربة مسبقًا. المرحلة الثانية تفك تجميد جميع الطبقات وتدرب النموذج الكامل بمعدل تعلم أقل لتحسين العمود الفقري للنطاق المستهدف.
هذا النهج مفيد بشكل خاص عندما يختلف النطاق المستهدف بشكل كبير عن COCO (صور طبية، صور جوية، مجهرية)، حيث قد يحتاج العمود الفقري إلى التكيف ولكن التدريب على كل شيء دفعة واحدة يسبب عدم الاستقرار. لإلغاء التجميد التلقائي باستخدام نهج يعتمد على الاستدعاءات (callbacks)، راجع تجميد وإلغاء تجميد العمود الفقري.
from ultralytics import YOLO
# Stage 1: freeze backbone, train head and neck
model = YOLO("yolo26n.pt")
model.train(data="custom.yaml", epochs=20, freeze=10, name="stage1", exist_ok=True)
# Stage 2: unfreeze all, fine-tune with lower lr
model = YOLO("runs/detect/stage1/weights/best.pt")
model.train(data="custom.yaml", epochs=30, lr0=0.001, name="stage2", exist_ok=True)Link to this sectionالمزالق الشائعة#
Link to this sectionالنموذج لا ينتج أي تنبؤات#
- بيانات تدريب غير كافية: التدريب بعدد قليل جدًا من العينات هو السبب الأكثر شيوعًا - لا يمكن للنموذج التعلم أو التعميم من بيانات قليلة جدًا. تأكد من وجود ما يكفي من الأمثلة المتنوعة لكل فئة قبل التحقيق في أسباب أخرى.
- تحقق من مسارات مجموعة البيانات: المسارات غير الصحيحة في
data.yamlتنتج صفر ملصقات بصمت. قم بتشغيلyolo detect val model=yolo26n.pt data=your_data.yamlقبل التدريب للتأكد من تحميل الملصقات بشكل صحيح. - عتبة ثقة أقل: إذا كانت التنبؤات موجودة ولكن تمت تصفيتها، جرب
conf=0.1أثناء الاستدلال. - تحقق من عدد الفئات: تأكد من أن
ncفيdata.yamlتطابق العدد الفعلي للفئات في ملفات الملصقات.
Link to this sectionاستقرار مقياس mAP للتحقق مبكرًا#
- أضف المزيد من البيانات: يستفيد الضبط الدقيق بشكل كبير من بيانات التدريب الإضافية، خاصة الأمثلة المتنوعة ذات الزوايا والإضاءة والخلفيات المختلفة.
- تحقق من توازن الفئات: الفئات الممثلة تمثيلاً ناقصًا سيكون لها AP منخفض. استخدم
cls_pwلتطبيق ترجيح الفئات بتردد عكسي (ابدأ بـcls_pw=0.25لعدم التوازن المعتدل، وزد إلى1.0لعدم التوازن الشديد). - تقليل التوسيع (Augmentation): بالنسبة لمجموعات البيانات الصغيرة جدًا، يمكن أن يضر التوسيع المكثف أكثر مما ينفع. جرب
mosaic=0.5أوmosaic=0.0. - زيادة الدقة: بالنسبة لمجموعات البيانات ذات الأشياء الصغيرة، جرب
imgsz=1280للحفاظ على التفاصيل.
Link to this sectionانخفاض الأداء على الفئات الأصلية بعد الضبط الدقيق#
هذا معروف باسم النسيان الكارثي - يفقد النموذج المعرفة المكتسبة سابقًا عند الضبط الدقيق حصريًا على بيانات جديدة. النسيان لا يمكن تجنبه إلى حد كبير دون تضمين صور مجموعة البيانات الأصلية جنبًا إلى جنب مع البيانات الجديدة. للتخفيف من ذلك:
- دمج مجموعات البيانات: قم بتضمين أمثلة من الفئات الأصلية جنبًا إلى جنب مع الفئات الجديدة أثناء الضبط الدقيق. هذه هي الطريقة الموثوقة الوحيدة لمنع النسيان.
- تجميد العمود الفقري والعنق: تجميد كل من العمود الفقري والعنق بحيث يتم تدريب رأس الكشف فقط يساعد في عمليات الضبط الدقيق القصيرة بمعدل تعلم منخفض جدًا.
- التدريب لدورات أقل: كلما زاد وقت تدريب النموذج على البيانات الجديدة حصريًا، زاد النسيان.
Link to this sectionالأسئلة الشائعة#
Link to this sectionكم عدد الصور التي أحتاجها للضبط الدقيق لـ YOLO؟#
لا يوجد حد أدنى ثابت - تعتمد النتائج على تعقيد المهمة، وعدد الفئات، ومدى تشابه النطاق مع COCO. الصور الأكثر تنوعًا (إضاءة، زوايا، خلفيات مختلفة) أكثر أهمية من الكمية الخام. ابدأ بما لديك وتوسع إذا كانت مقاييس التحقق غير كافية.
Link to this sectionكيف أقوم بالضبط الدقيق لـ YOLO26 على مجموعة بيانات مخصصة؟#
قم بتحميل ملف .pt مدرب مسبقًا واستدعِ .train() مع مسار إلى ملف data.yaml مخصص. يتعامل Ultralytics تلقائيًا مع نقل الأوزان، وإعادة تهيئة رأس الكشف، واختيار المُحسِّن. راجع قسم الضبط الدقيق الأساسي للحصول على مثال الكود الكامل.
Link to this sectionلماذا لا يكتشف نموذج YOLO الذي قمت بضبطه بدقة أي شيء؟#
الأسباب الأكثر شيوعًا هي المسارات غير الصحيحة في data.yaml (التي تنتج صفر ملصقات بصمت)، أو عدم التطابق بين nc في YAML وملفات الملصقات الفعلية، أو عتبة ثقة مرتفعة جدًا. راجع المزالق الشائعة للحصول على قائمة مراجعة كاملة لاستكشاف الأخطاء وإصلاحها.
Link to this sectionأي طبقات YOLO يجب أن أجمدها للضبط الدقيق؟#
يعتمد ذلك على حجم مجموعة البيانات وتشابه النطاق. بالنسبة لمجموعات البيانات الصغيرة ذات النطاق المشابه لـ COCO، فإن تجميد العمود الفقري (freeze=10) يمنع الإفراط في التجهيز. بالنسبة للنطاقات البعيدة جدًا عن COCO، فإن ترك جميع الطبقات غير مجمدة (freeze=None) يسمح للعمود الفقري بالتكيف. راجع تجميد الطبقات للحصول على توصيات مفصلة.
Link to this sectionكيف أمنع النسيان الكارثي عند الضبط الدقيق لـ YOLO على فئات جديدة؟#
قم بتضمين أمثلة من الفئات الأصلية في بيانات التدريب جنبًا إلى جنب مع الفئات الجديدة. إذا لم يكن ذلك ممكنًا، فإن تجميد المزيد من الطبقات (freeze=10 أو أعلى) واستخدام معدل تعلم أقل يساعد في الحفاظ على المعرفة المدربة مسبقًا. راجع انخفاض الأداء على الفئات الأصلية لمزيد من التفاصيل.