من المختبر إلى الإنتاج
ثبّت Ultralytics، وشغّل YOLO26 على صورك، وتحقق من توافق المخرجات مع مواصفاتك، ثم اختر خطوتك التالية.
إن قضاء عشر دقائق مع نموذج مُدرَّب مسبقًا يجيب عن السؤال الذي يحدد خطتك بالكامل: هل يغطي نموذج جاهز فئاتك وكاميرتك بالفعل، أم تحتاج إلى بياناتك الخاصة؟ في هذا الدرس، تثبّت Ultralytics، وتشغّل YOLO26 على صور حقيقية، وتتحقق من النتيجة بمقارنتها بالمواصفات التي كتبتها في الدرس الأول.
عملي
التثبيت#
pip install ultralytics
yolo checksيثبّت السطر الأول حزمة Python ultralytics وأمر yolo، بالإضافة إلى PyTorch إذا لم يكن مثبتًا. يطبع yolo checks إصدارات Python وPyTorch وCUDA، والأجهزة التي ستستخدمها Ultralytics، حتى تتمكن من تأكيد الإعداد قبل تشغيل أي شيء. استخدم بيئة افتراضية جديدة؛ ويتناول دليل البدء السريع إعدادات conda وDocker وGPU.
تُثبّت حزمة ultralytics على Python 3.8 والإصدارات الأحدث، لكن الإصدارات الحالية من PyTorch تحتاج إلى Python 3.10 أو أحدث. إذا كانت بيئتك أقدم، فأنشئ أولًا بيئة افتراضية جديدة باستخدام إصدار حديث من Python.

العَرَض: تعرض yolo checks قيمة CPU على جهاز مزود بوحدة NVIDIA GPU، ويكون الاستدلال بطيئًا. السبب: تثبيت إصدار PyTorch يعمل على CPU فقط — مثل عجلة pip الافتراضية على Windows. الحل: اختر نظام التشغيل ومدير الحزم وإصدار CUDA في محدد PyTorch أعلاه، وشغّل الأمر المعروض، ثم أعد تثبيت ultralytics. على Mac، كما في لقطة الشاشة، يكون الإصدار الافتراضي مناسبًا؛ إذ تعمل Ultralytics على CPU ما لم تمرّر device=mps لاستخدام وحدة Apple GPU.
التنبؤ الأول#
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # ينزّل نموذج nano بحجم ~5 MB عند أول استخدام
results = model("https://ultralytics.com/images/bus.jpg", save=True)
for box in results[0].boxes:
print(model.names[int(box.cls)], round(float(box.conf), 2))يطبع كلاهما ملخصًا من سطر واحد لكل صورة، ويحفظ الصورة المشروحة ضمن runs/detect/predict:
image 1/1 .../bus.jpg: 640x480 4 persons, 1 bus, 19.7ms
Speed: 0.9ms preprocess, 19.7ms inference, 0.4ms postprocess per image at shape (1, 3, 640, 480)
Results saved to runs/detect/predictسطرًا بسطر: أُعيد تحجيم الصورة إلى 640×480 للاستدلال؛ وعثر النموذج على أربعة أشخاص وحافلة؛ واستغرق الاستدلال نحو 20 ms على وحدة CPU في حاسوب محمول. يمثّل السطر Speed أول فحص لزمن الاستجابة؛ قارنه بمعدل الإطارات في سطر الإدخال ضمن مواصفاتك. افتح الصورة المحفوظة: يتضمن كل مربع الفئة والمربع ودرجة الثقة من درس الكشف.
تحقّق من المخرجات بمقارنتها بمواصفاتك#
| السؤال | إذا كانت الإجابة نعم | إذا كانت الإجابة لا |
|---|---|---|
| هل فئاتك ضمن فئات COCO الثمانين التي يعرفها النموذج؟ | أنشئ نموذجًا أوليًا من دون أي تدريب | تحتاج إلى بيانات مصنّفة وضبط دقيق (دليل الضبط الدقيق) |
| هل تقع المربعات التي تتجاوز عتبتك على الكائنات الصحيحة في صورك أنت؟ | المهمة ووجهة النظر متطابقتان | توقّع وجود فجوة في المجال: اجمع بيانات من كاميراتك |
| هل نوع المخرجات هو ما يحتاج إليه سطر القرار لديك؟ | أبقِ على المهمة | بدّل الأوزان: -seg، أو -sem، أو -depth، أو -pose، أو -obb، أو -cls |
| هل السرعة كافية لمعدل الإطارات المطلوب على الأجهزة المستهدفة؟ | تابع | جرّب نموذجًا أصغر أو تنسيق تصدير مُحسّنًا |
للسؤال الأول إجابة محددة: يعرض model.names كل فئة يعرفها النموذج المُدرَّب مسبقًا. في مواصفات الرافعة الشوكية، تُعد person فئةً ضمن COCO، أما forklift فليست كذلك؛ لذا لن تجعل أي عتبة النموذج المُدرَّب مسبقًا يعثر على رافعة شوكية. هذه أكثر نتائج التشغيل الأول شيوعًا؛ إذ يغطي النموذج جزءًا من المواصفات. والخطوة الصحيحة هي إنشاء نموذج أولي لمنطق القرار باستخدام الفئات المتاحة، مع بناء مجموعة بيانات لبقية الفئات.
ما الذي يتغير في الإنتاج#
يواجه النموذج المنشور ظروفًا لم تُعتمد عليها عينات مجموعة بياناته، مثل الكاميرات والفصول والمنتجات والزيّات الجديدة. ومن دون إعادة التدريب، تتراجع الدقة؛ أما إعادة التدريب بانتظام على ما تكشفه بيئة الإنتاج فتُعيدها إلى التحسن:

يسهم كل درس في هذه الدورة في دعم هذه الحلقة: تحدد المواصفات موضع الإخفاق، ويبيّن تدقيق التغطية أين ينبغي البحث، ويجعل مدقق التسميات والإرشادات البيانات الجديدة مفيدة، بينما توضح التقسيمات والمقاييس الصادقة ما إذا كان النموذج الذي أُعيد تدريبه أفضل بالفعل. وتساعد عادتان على إنجاح ذلك منذ اليوم الأول: سجّل عينة من المدخلات والتنبؤات، بما فيها منخفضة الثقة، واحتفظ بمجموعة الاختبار المجمّدة كي تُقارَن النماذج جميعها على الصور نفسها. يتناول الرصد والانحراف مراقبة انحراف البيانات بالتفصيل.
إلى أين تتابع#
| الدورة | الوقت المناسب لأخذها |
|---|---|
| بناء مجموعات بيانات YOLO عالية الأداء | إذا لم تكن فئاتك مدرّبة مسبقًا، أو كانت مشاهدك تختلف عن COCO |
| درّب أول نموذج YOLO لك | إذا كانت لديك مجموعة بيانات مصنّفة وتريد ضبطًا دقيقًا |
| Ultralytics YOLO في الإنتاج | إذا كان لديك نموذج وتحتاج إلى التصدير والتتبع والمراقبة |
| أنشئ باستخدام منصة Ultralytics | إذا أردت البيانات والتصنيف والتدريب والنشر في مكان واحد |
هل تفضّل سير عمل قائمًا على المتصفح؟ تنفّذ منصة Ultralytics الحلقة نفسها — رفع البيانات، والتعليق عليها، والتدريب، والنشر — من دون تثبيت محلي:
عرض الحل
from pathlib import Path
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
# 1. Which classes in your output line does the pretrained model already know?
spec_classes = {"person", "forklift"}
known = set(model.names.values())
print(f"pretrained: {sorted(spec_classes & known)} needs your own data: {sorted(spec_classes - known)}")
# 2. What does it find on your images?
sources = [
"https://ultralytics.com/images/bus.jpg", # replace with your own images
"https://ultralytics.com/images/zidane.jpg",
]
for source, result in zip(sources, model.predict(sources, conf=0.25, save=True, verbose=False)):
names = [result.names[int(c)] for c in result.boxes.cls]
print(f"{Path(source).name}: {len(names)} detections -> {sorted(set(names))}")pretrained: ['person'] needs your own data: ['forklift']
bus.jpg: 5 detections -> ['bus', 'person']
zidane.jpg: 3 detections -> ['person', 'tie']في مواصفات الرافعة الشوكية: الفئة person مشمولة، أما forklift فغير مشمولة. الخطوة التالية: أنشئ الآن نموذجًا أوليًا لقاعدة المنطقة على الأشخاص باستخدام النموذج المُدرَّب مسبقًا، وابدأ دورة بناء مجموعات بيانات YOLO عالية الأداء لجمع صور الرافعات الشوكية من كاميرات المستودع وتصنيفها.