Meet YOLO26: next-gen vision AI.

Link to this sectionكيفية ضبط YOLO الدقيق على مجموعة بيانات مخصصة#

يعمل الضبط الدقيق على تكييف نموذج مدرب مسبقًا للتعرف على فئات جديدة من خلال البدء بأوزان متعلمة بدلاً من التهيئة العشوائية. بدلاً من التدريب من الصفر لمئات الحقب (epochs)، يستفيد الضبط الدقيق من ميزات 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 بنقل الأوزان مع مراعاة الشكل:

  1. نقل العمود الفقري والعنق بالكامل - تستخرج هذه الطبقات ميزات بصرية عامة وتكون أشكالها مستقلة عن عدد الفئات.
  2. إعادة تهيئة رأس الكشف جزئيًا - طبقات مخرجات التصنيف (cv3, one2one_cv3) لها أشكال مرتبطة بعدد الفئات (80 مقابل 5)، لذا لا يمكن نقلها ويتم تهيئتها عشوائيًا. طبقات انحدار الصندوق (cv2, one2one_cv2) في الرأس لها أشكال ثابتة بغض النظر عن عدد الفئات، لذا يتم نقلها بشكل طبيعي.
  3. تنتقل الغالبية العظمى من الأوزان عند تغيير عدد الفئات. على سبيل المثال، يؤدي الضبط الدقيق لـ YOLO26n من COCO (80 فئة) على مجموعة بيانات مكونة من 5 فئات إلى نقل 606 من أصل 708 موتر وزن: فقط طبقات التصنيف المعتمدة على عدد الفئات يتم إعادة تهيئتها، بينما يظل العمود الفقري والعنق وفروع انحدار الصندوق سليمة.

بالنسبة لمجموعات البيانات التي تحتوي على نفس عدد فئات النموذج المدرب مسبقًا (على سبيل المثال، إجراء ضبط دقيق لأوزان مدربة مسبقًا على COCO على مجموعة بيانات أخرى مكونة من 80 فئة)، تنتقل 100% من الأوزان بما في ذلك رأس الكشف.

Link to this sectionمثال أساسي للضبط الدقيق#

مثال
from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # load pretrained model
model.train(data="custom.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 في الحفاظ على الميزات المدربة مسبقًا
المُحسِّن التلقائي يتجاوز lr0 اليدوي

عند ضبط optimizer=auto، يتم تجاهل قيم lr0 وmomentum. للتحكم في معدل التعلم يدويًا، قم بتعيين المُحسِّن بشكل صريح: optimizer=SGD, lr0=0.005.

Link to this sectionتجميد الطبقات#

يمنع التجميد طبقات معينة من التحديث أثناء التدريب. هذا يسرع التدريب ويقلل من الإفراط في التخصيص عندما تكون مجموعة البيانات صغيرة بالنسبة لسعة النموذج.

يقبل المعامل freeze إما عددًا صحيحًا أو قائمة. العدد الصحيح freeze=10 يجمد أول 10 طبقات (الفهارس 0-9)، والتي تغطي معظم العمود الفقري لـ YOLO26. يمتد العمود الفقري عبر الطبقات 0-10، لذا فإن freeze=10 يترك كتلة C2PSA النهائية (الطبقة 10) قابلة للتدريب؛ استخدم freeze=11 لتجميد العمود الفقري بأكمله. يمكن أن تحتوي القائمة على فهارس طبقات مثل freeze=[0, 3, 5] لتجميد جزئي للعمود الفقري، أو سلاسل نصية لأسماء الوحدات مثل freeze=["23.cv2", "23.one2one_cv2"] للتحكم الدقيق في فروع محددة داخل طبقة (هنا، كلا فرعي انحدار الصندوق لرأس الكشف).

مثال
model.train(data="custom.yaml", epochs=50, freeze=10)

يعتمد عمق التجميد الصحيح على مدى تشابه المجال المستهدف مع البيانات المدربة مسبقًا ومقدار بيانات التدريب المتاحة:

السيناريوالتوصيةالأساس المنطقي
مجموعة بيانات كبيرة، مجال مشابهfreeze=None (افتراضي)بيانات كافية لتكييف جميع الطبقات دون إفراط في التخصيص
مجموعة بيانات صغيرة، مجال مشابهfreeze=10يحافظ على ميزات العمود الفقري، يقلل من المعلمات القابلة للتدريب
مجموعة بيانات صغيرة جدًاfreeze=23يتم تدريب رأس الكشف فقط، مما يقلل من خطر الإفراط في التخصيص
مجال بعيد عن COCOfreeze=Noneقد لا تنتقل ميزات العمود الفقري بشكل جيد وتحتاج إلى إعادة تدريب

يمكن أيضًا التعامل مع عمق التجميد كمعامل تشعبي - تجربة بضع قيم (0، 5، 10) ومقارنة mAP التحقق هو وسيلة عملية للعثور على أفضل إعداد لمجموعة بيانات معينة.

Link to this sectionالمعاملات التشعبية الرئيسية للضبط الدقيق#

يتطلب الضبط الدقيق عمومًا تعديلات أقل على المعاملات التشعبية مقارنة بالتدريب من الصفر. المعاملات الأكثر أهمية هي:

  • epochs: يتقارب الضبط الدقيق بشكل أسرع من التدريب من الصفر. ابدأ بقيمة معتدلة واستخدم patience للإيقاف المبكر عندما تستقر مقاييس التحقق.
  • patience: القيمة الافتراضية 100 مصممة لعمليات التدريب الطويلة. تقليل هذا إلى 10-20 يتجنب إضاعة الوقت في عمليات قد تقاربت بالفعل.
  • warmup_epochs: يعمل الاحماء الافتراضي (3 حقب) على زيادة معدل التعلم تدريجيًا من الصفر، مما يمنع تحديثات التدرج الكبيرة من إتلاف الميزات المدربة مسبقًا في التكرارات المبكرة. يوصى بالاحتفاظ بالافتراضي حتى عند الضبط الدقيق.

للحصول على القائمة الكاملة لمعاملات التدريب، راجع مرجع تكوين التدريب.

Link to this sectionالضبط الدقيق على مرحلتين#

يقسم الضبط الدقيق على مرحلتين التدريب إلى مرحلتين. تعمل المرحلة الأولى على تجميد العمود الفقري وتدريب العنق والرأس فقط، مما يسمح لطبقات الكشف بالتكيف مع الفئات الجديدة دون تعطيل الميزات المدربة مسبقًا. تعمل المرحلة الثانية على إلغاء تجميد جميع الطبقات وتدريب النموذج الكامل بمعدل تعلم أقل لتحسين العمود الفقري للمجال المستهدف.

هذا النهج مفيد بشكل خاص عندما يختلف المجال المستهدف اختلافًا كبيرًا عن COCO (صور طبية، صور جوية، مجهرية)، حيث قد يحتاج العمود الفقري إلى التكيف ولكن تدريب كل شيء في وقت واحد يسبب عدم الاستقرار. للحصول على إلغاء تجميد تلقائي باستخدام نهج قائم على رد النداء، راجع تجميد وإلغاء تجميد العمود الفقري.

الضبط الدقيق على مرحلتين
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=custom.yaml قبل التدريب للتأكد من تحميل الملصقات بشكل صحيح.
  • عتبة ثقة أقل: إذا كانت التنبؤات موجودة ولكن تمت تصفيتها، جرب conf=0.1 أثناء الاستدلال.
  • تحقق من عدد الفئات: تأكد من أن nc في data.yaml يتطابق مع العدد الفعلي للفئات في ملفات الملصقات.

Link to this sectionمقاييس mAP للتحقق تستقر مبكرًا#

  • أضف المزيد من البيانات: يستفيد الضبط الدقيق بشكل كبير من بيانات التدريب الإضافية، خاصة الأمثلة المتنوعة ذات الزوايا والإضاءة والخلفيات المختلفة.
  • تحقق من توازن الفئات: الفئات الممثلة تمثيلاً ناقصًا سيكون لها AP منخفض. استخدم cls_pw لتطبيق ترجيح فئة التردد العكسي (ابدأ بـ cls_pw=0.25 لعدم التوازن المعتدل، وزد إلى 1.0 لعدم التوازن الشديد).
  • تقليل التعزيز: بالنسبة لمجموعات البيانات الصغيرة جدًا، يمكن أن يضر التعزيز الثقيل أكثر مما ينفع. جرب 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 أو أعلى) واستخدام معدل تعلم أقل يساعد في الحفاظ على المعرفة المدربة مسبقًا. راجع يتدهور الأداء على الفئات الأصلية لمزيد من التفاصيل.

المساهمون

التعليقات