Ultralytics YOLO27:

تصدير YOLO26 إلى TensorRT#

قد يتطلب نشر نماذج الرؤية الحاسوبية في بيئات عالية الأداء تنسيقاً يحقق أقصى سرعة وكفاءة. وينطبق ذلك بوجه خاص عند نشر النموذج على وحدات GPU من NVIDIA.

باستخدام تنسيق التصدير TensorRT، يمكنك تحسين نماذج Ultralytics YOLO26 لتوفير استدلال سريع وفعّال على أجهزة NVIDIA. يقدم لك هذا الدليل خطوات سهلة الاتباع لعملية التحويل، ويساعدك على الاستفادة القصوى من تقنية NVIDIA المتقدمة في مشاريع التعلّم العميق.

TensorRT#

NVIDIA TensorRT optimization workflow

إن TensorRT، الذي طورته NVIDIA، حزمة تطوير برمجيات متقدمة (SDK) مصممة لاستدلال التعلّم العميق عالي السرعة. وهي مناسبة تماماً للتطبيقات الآنية مثل اكتشاف الكائنات.

تحسّن مجموعة الأدوات هذه نماذج التعلّم العميق لوحدات GPU من NVIDIA، ما يؤدي إلى عمليات أسرع وأكثر كفاءة. وتخضع نماذج TensorRT للتحسين باستخدام TensorRT، الذي يشمل تقنيات مثل دمج الطبقات، ومعايرة الدقة (INT8 وFP16)، وإدارة ذاكرة الموترات الديناميكية، والضبط التلقائي للنوى. ويتيح تحويل نماذج التعلّم العميق إلى تنسيق TensorRT للمطورين الاستفادة الكاملة من إمكانات وحدات GPU من NVIDIA.

تشتهر TensorRT بتوافقها مع تنسيقات نماذج متعددة، منها TensorFlow وPyTorch وONNX، ما يوفر للمطورين حلاً مرناً لدمج النماذج من أطر عمل مختلفة وتحسينها. وتتيح هذه المرونة نشر النماذج بكفاءة عبر بيئات متنوعة من الأجهزة والبرمجيات.

محركات TensorRT خاصة بالأجهزة وببيئة التشغيل

تنشئ TensorRT محركاً وتضبطه على وحدة GPU المستخدمة في بنائه. أنشئ المحرك بما يتوافق مع بنية وحدة GPU المستهدفة للنشر، وطابق بيئة تشغيل TensorRT/CUDA؛ ولا تتعامل مع ملف .engine على أنه تنسيق نموذج قابل للنقل. وللنشر الطرفي، توفر منصة Ultralytics ثمانية خيارات لأجهزة Jetson المستهدفة، مع توثيق حالة البناء والتحقق الفعلي لكل منها، أو يمكنك التصدير محلياً على الجهاز المستهدف.

الميزات الرئيسية لنماذج TensorRT#

توفر نماذج TensorRT مجموعة من الميزات الرئيسية التي تسهم في كفاءتها وفاعليتها في استدلال التعلّم العميق عالي السرعة:

  • معايرة الدقة: تدعم TensorRT معايرة الدقة، ما يتيح ضبط النماذج بدقة لتلبية متطلبات محددة. ويشمل ذلك دعم تنسيقات الدقة المخفّضة مثل INT8 وFP16، التي يمكنها زيادة سرعة الاستدلال مع الحفاظ على مستويات دقة مقبولة.

  • دمج الطبقات: تشمل عملية التحسين في TensorRT دمج الطبقات، حيث تُدمج طبقات متعددة من الشبكة العصبية في عملية واحدة. ويقلل هذا من العبء الحسابي ويحسّن سرعة الاستدلال عن طريق الحد من الوصول إلى الذاكرة والحسابات.

TensorRT neural network layer fusion optimization

  • إدارة ذاكرة الموترات الديناميكية: تدير TensorRT استخدام ذاكرة الموترات بكفاءة أثناء الاستدلال، ما يقلل العبء على الذاكرة ويحسّن تخصيصها. وينتج عن ذلك استخدام أكثر كفاءة لذاكرة GPU.

  • الضبط التلقائي للنوى: تطبق TensorRT ضبطاً تلقائياً للنوى لاختيار نواة GPU المثلى لكل طبقة من النموذج. ويضمن هذا النهج التكيفي استفادة النموذج استفادة كاملة من القدرة الحسابية لوحدة GPU.

خيارات النشر في TensorRT#

قبل الاطلاع على الشيفرة اللازمة لتصدير نماذج YOLO26 إلى تنسيق TensorRT، دعنا نفهم المواضع التي تُستخدم فيها نماذج TensorRT عادةً.

توفر TensorRT عدة خيارات للنشر، ويوازن كل خيار بين سهولة الدمج وتحسين الأداء والمرونة على نحو مختلف:

  • النشر ضمن TensorFlow: تدمج هذه الطريقة TensorRT مع TensorFlow، ما يتيح تشغيل النماذج المحسّنة في بيئة TensorFlow مألوفة. وهي مفيدة للنماذج التي تجمع بين طبقات مدعومة وأخرى غير مدعومة، إذ يستطيع TF-TRT التعامل معها بكفاءة.

NVIDIA TensorRT optimization workflow

  • واجهة برمجة تطبيقات بيئة تشغيل TensorRT المستقلة: توفر تحكماً دقيقاً، وهي مثالية للتطبيقات الحساسة للأداء. وتتميز بتعقيد أكبر، لكنها تتيح تنفيذ عوامل تشغيل غير مدعومة بطريقة مخصصة.

  • خادم الاستدلال NVIDIA Triton: خيار يدعم نماذج من أطر عمل متنوعة. وهو مناسب بوجه خاص للاستدلال السحابي أو الطرفي، ويوفر ميزات مثل التنفيذ المتزامن للنماذج وتحليلها.

المهام المدعومة#

يدعم تصدير TensorRT مهام Ultralytics السبعة كلها. ولا يتوفر التجزؤ الدلالي وتقدير العمق إلا مع YOLO26، وهي العائلة الوحيدة التي تتضمن رأسيْ هاتين المهمتين.

المهمةYOLOv8YOLO11YOLO26
كشف✅✅✅
تجزئة✅✅✅
دلالي❌❌✅
العمق❌❌✅
تصنيف✅✅✅
الوضعية✅✅✅
OBB✅✅✅

تصدير نماذج YOLO26 إلى TensorRT#

يمكنك تحسين كفاءة التنفيذ والأداء بتحويل نماذج YOLO26 إلى تنسيق TensorRT.

التثبيت#

لتثبيت الحزمة المطلوبة، شغّل:

التثبيت
# Install the required package for YOLO26
pip install ultralytics

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

الاستخدام#

قبل التعمق في تعليمات الاستخدام، احرص على الاطلاع على مجموعة نماذج YOLO26 التي تقدمها Ultralytics. سيساعدك ذلك على اختيار النموذج الأنسب لمتطلبات مشروعك.

يدعم تنسيق TensorRT أوضاع التصدير والتنبؤ والتحقق. ويتطلب الاستدلال والتحقق وحدة GPU من NVIDIA. صدّر النموذج، ثم حمّل النموذج المُصدّر لإجراء الاستدلال أو التحقق من دقته.

التصدير
from ultralytics import YOLO

# ⁨تحميل نموذج YOLO26⁩
model = YOLO("yolo26n.pt")

# ⁨صدّر النموذج إلى تنسيق TensorRT⁩
model.export(format="engine")  # ⁨ينشئ 'yolo26n.engine'⁩
التنبؤ
from ultralytics import YOLO

# ⁨تحميل نموذج TensorRT المُصدَّر⁩
model = YOLO("yolo26n.engine")

# ⁨تنفيذ الاستدلال⁩
results = model("https://ultralytics.com/images/bus.jpg")
تحقّق
from ultralytics import YOLO

# ⁨تحميل نموذج TensorRT المُصدَّر⁩
model = YOLO("yolo26n.engine")

# ⁨# التحقق من الدقة على مجموعة بيانات COCO8⁩
metrics = model.val(data="coco8.yaml")

وسيطات التصدير#

المعاملالنوعالافتراضيالوصف
formatstr'engine'التنسيق المستهدف للنموذج المُصدَّر، ويحدد مدى توافقه مع بيئات النشر المختلفة.
imgszint أو tuple640حجم الصورة المطلوب كمدخل للنموذج. يمكن تحديده كعدد صحيح للصور المربعة أو كصف (height, width) للأبعاد المحددة.
quantizeint أو strNoneدقة التكميم: 16 (FP16) أو 8 (INT8/PTQ؛ يتطلب بيانات معايرة data/fraction)؛ أما 32/غير المحدد فيعني FP32. وتُصدّر دائماً نقطة تحقق دُرّبت باستخدام quantize=8 بدقة INT8، اعتماداً على النطاقات التي تتضمنها، من دون معايرة. ويحل ذلك محل الخيارين المهملين half/int8.
dynamicboolFalseيتيح أحجام إدخال ديناميكية، ما يعزز المرونة في التعامل مع أبعاد الصور المتغيرة.
simplifyboolTrueيُبسّط مخطط النموذج باستخدام onnxslim، ما قد يحسّن الأداء والتوافق.
opsetintNoneيحدد إصدار opset الخاص بـ ONNX لرسم ONNX الوسيط. وإذا لم يُحدَّد، فسيُستخدم أحدث إصدار مدعوم.
workspacefloat أو NoneNoneيحدد الحد الأقصى لحجم مساحة العمل، بوحدة GiB، لتحسينات TensorRT، بما يوازن بين استخدام الذاكرة والأداء؛ استخدم None كي تخصص TensorRT الذاكرة تلقائياً حتى الحد الأقصى للجهاز.
nmsbool، اختياريNoneاختر المخرجات الأولية (None، الافتراضي)، أو NMS المضمّن (True)، أو الرأس الخالي من NMS (False).
batchint1يحدد حجم الدفعة للاستدلال بنموذج التصدير، أو الحد الأقصى لعدد الصور التي سيعالجها النموذج المُصدّر بالتزامن في وضع predict.
datastrNoneمسار ملف YAML الخاص بـمجموعة البيانات، وهو ضروري للتكميم؛ أما التصنيف فيتطلب دليلاً لمجموعة بيانات أو اسم مجموعة بيانات مضمّنة. إذا حُذف هذا الخيار مع quantize=8، فستختار Ultralytics مجموعة بيانات المعايرة الافتراضية لمهمة النموذج؛ أما نقطة التحقق التي دُرّبت باستخدام quantize=8 فلا تحتاج إلى مجموعة بيانات.
fractionfloat أو int أو list1.0مجموعة فرعية للمعايرة محددة كنسبة أو عدد صور أو نسب/أعداد [train, val, test]. تترك القوائم المكوّنة من عنصرين test كاملة، بينما تتجاوزها 0.
devicestrNoneيحدد الجهاز المستخدم للتصدير: وحدة GPU (device=0)، أو DLA لأجهزة NVIDIA Jetson (device=dla:0 أو device=dla:1).
نصيحة

يرجى التأكد من استخدام وحدة GPU تدعم CUDA عند التصدير إلى TensorRT.

التوافق مع JetPack وDLA

لا يدعم TensorRT 11.2.1 نظام JetPack، بما في ذلك Thor؛ استخدم بيئة تشغيل TensorRT 10.x التي يدعمها إصدار JetPack لديك. وبالنسبة إلى device=dla:0 أو device=dla:1، تحدد NVIDIA الإصدار TensorRT 10.7 على أنه آخر إصدار يتضمن دعم DLA. ولا تدعم الإصدارات TensorRT 11.0 و11.1 و11.2 تقنية DLA.

لمزيد من التفاصيل حول عملية التصدير، تفضّل بزيارة صفحة وثائق Ultralytics حول التصدير.

تصدير TensorRT باستخدام تكميم INT8#

ينفّذ تصدير نماذج Ultralytics YOLO باستخدام TensorRT بدقة INT8 تكميم ما بعد التدريب (PTQ). تستخدم TensorRT المعايرة في PTQ لقياس توزيع التنشيطات داخل كل موتر تنشيط أثناء معالجة نموذج YOLO للاستدلال على بيانات إدخال تمثيلية، ثم تستخدم ذلك التوزيع لتقدير قيم المقياس لكل موتر. ولكل موتر تنشيط مرشح للتكميم مقياس مرتبط به، تحدده عملية المعايرة. أما نقطة التحقق التي ضُبطت بدقة باستخدام quantize=8 عبر التدريب الواعي بالتكميم، فتحمل بالفعل نطاقات INT8 الخاصة بها؛ لذا يستخدمها التصدير ويتجاوز المعايرة.

التكميم في TensorRT 11

أزال TensorRT 11 التكميم الضمني وواجهة IInt8Calibrator. في TensorRT 11 والإصدارات الأحدث، تنفذ Ultralytics تكميم INT8 باستخدام التكميم الصريح عبر NVIDIA ModelOpt، الذي يدرج عقد Q/DQ في مخطط ONNX قبل إنشاء محرك ذي أنواع محددة بصرامة، بينما يُطبّق FP16 بتحويل الدقة المختلطة AutoCast في ModelOpt. تعمل الوسائط quantize=8 وquantize=16 وdata بالطريقة نفسها؛ ويُثبّت ModelOpt تلقائياً عند الاستخدام لأول مرة. أما في TensorRT 7-10، فيُستخدم بدلاً من ذلك المُعاير القديم الموضح أدناه.

عند معالجة الشبكات المكمّمة ضمنياً، تستخدم TensorRT دقة INT8 عند الحاجة لتحسين زمن تنفيذ الطبقة. فإذا كان تنفيذ طبقة ما أسرع بدقة INT8 وكانت مقاييس التكميم معيّنة لمدخلات بياناتها ومخرجاتها، فستُخصّص لتلك الطبقة نواة بدقة INT8؛ وإلا فتختار TensorRT للنواة دقة FP32 أو FP16، وفقاً للخيار الذي يحقق زمناً أسرع لتنفيذ تلك الطبقة.

نصيحة

من الأهمية البالغة استخدام الجهاز نفسه الذي سيُستخدم لنشر أوزان نموذج TensorRT في التصدير بدقة INT8، إذ قد تختلف نتائج المعايرة من جهاز إلى آخر.

إعداد تصدير INT8#

ستؤثر الوسائط المقدمة عند استخدام التصدير لنموذج Ultralytics YOLO تأثيراً كبيراً في أداء النموذج المُصدّر. ويجب أيضاً اختيارها بناءً على موارد الجهاز المتاحة، إلا أن الوسائط الافتراضية يفترض أن تكون مناسبة لمعظم وحدات GPU المنفصلة من NVIDIA بمعمارية Ampere أو أحدث. خوارزمية المعايرة المستخدمة هي "MINMAX_CALIBRATION" عند التصدير إلى GPU، بينما تستخدم عمليات التصدير إلى DLA على أجهزة NVIDIA Jetson الخوارزمية "ENTROPY_CALIBRATION_2". يمكنك قراءة مزيد من التفاصيل حول الخيارات المتاحة في دليل مطوري TensorRT. وجدت اختبارات Ultralytics أن "MINMAX_CALIBRATION" هو الخيار الأفضل للتصدير إلى GPU، وتُحدَّد الخوارزمية تلقائياً بناءً على جهاز التصدير.

  • workspace : يتحكم في حجم تخصيص ذاكرة الجهاز (بوحدة GiB) أثناء تحويل أوزان النموذج.

    • اضبط قيمة workspace وفقاً لاحتياجات المعايرة والموارد المتاحة. قد يؤدي استخدام قيمة أكبر لـworkspace إلى زيادة زمن المعايرة، لكنه يتيح لـTensorRT استكشاف نطاق أوسع من أساليب التحسين، ما قد يعزز أداء النموذج ودقته. وعلى النقيض، يمكن أن تقلل قيمة أصغر لـworkspace زمن المعايرة، لكنها قد تحد من استراتيجيات التحسين، ما يؤثر في جودة النموذج المكمّم.

    • القيمة الافتراضية هي workspace=None، ما يسمح لـTensorRT بتخصيص الذاكرة تلقائياً. وعند إعداد هذه القيمة يدوياً، قد يلزم زيادتها إذا تعطلت المعايرة (أي توقفت من دون تحذير).

    • ستُبلغ TensorRT عن UNSUPPORTED_STATE أثناء التصدير إذا تجاوزت قيمة workspace الذاكرة المتاحة للجهاز؛ وهذا يعني ضرورة خفض قيمة workspace أو ضبطها على None.

    • إذا ضُبط workspace على القيمة القصوى وفشلت المعايرة أو تعطلت، ففكّر في استخدام None للتخصيص التلقائي، أو خفض قيمتي imgsz وbatch لتقليل متطلبات الذاكرة.

    • تذكّر أن معايرة INT8 خاصة بكل جهاز؛ لذا فإن استعارة وحدة GPU «عالية الأداء» للمعايرة قد تؤدي إلى أداء ضعيف عند إجراء الاستدلال على جهاز آخر.

  • batch : الحد الأقصى لحجم الدفعة المستخدم في الاستدلال. مع dynamic=True، يمكن استخدام دفعات أصغر أثناء الاستدلال، لكن الاستدلال لن يقبل دفعات أكبر من الحجم المحدد.

ملاحظة

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

قادَت تجارب NVIDIA إلى التوصية باستخدام 500 صورة معايرة على الأقل، تمثل بيانات نموذجك، عند معايرة التكميم INT8. وهذه إرشادات وليست شرطاً صارماً، وستحتاج إلى اختبار ما يلزم لتحقيق أداء جيد مع مجموعة بياناتك. وبما أن بيانات المعايرة مطلوبة لمعايرة INT8 باستخدام TensorRT، احرص على استخدام الوسيطة data عند تصدير نقطة تحقق لم تُدرّب باستخدام quantize=8 (تكميم ما بعد التدريب) عند ضبط quantize=8 على TensorRT، واستخدم data="my_dataset.yaml" للاستعانة بصور التحقق في المعايرة. وتتجاوز نقطة التحقق التي دُرّبت باستخدام quantize=8 المعايرة؛ لذا احذف الوسيطة data عند استخدامها. وإذا لم تُمرّر قيمة لـdata عند التصدير إلى TensorRT مع تكميم INT8، فستُستخدم افتراضياً إحدى مجموعات البيانات النموذجية «الصغيرة» وفقاً لمهمة النموذج بدلاً من إظهار خطأ.

مثال
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.export(
    format="engine",
    dynamic=True,  # (1)!
    batch=8,  # (2)!
    workspace=4,  # (3)!
    quantize=8,
    data="coco.yaml",  # (4)!
)

# ⁨تحميل نموذج TensorRT INT8 المُصدّر⁩
model = YOLO("yolo26n.engine", task="detect")

# ⁨تنفيذ الاستدلال⁩
result = model.predict("https://ultralytics.com/images/bus.jpg")
  1. يُصدّر النموذج بمحاور ديناميكية، ويقبل أحجام إدخال من 32 بكسلاً حتى ضعف قيمة التصدير imgsz؛ وتظل dynamic مساوية لـFalse ما لم تُضبط صراحةً. راجع وسائط التصدير لمزيد من المعلومات.
  2. يضبط الحد الأقصى لحجم الدفعة على 8 للنموذج المُصدّر ولمعايرة INT8.
  3. يخصص 4 GiB من الذاكرة بدلاً من تخصيص كامل ذاكرة الجهاز لعملية التحويل.
  4. يستخدم مجموعة بيانات COCO للمعايرة، وتحديداً الصور المستخدمة في التحقق (إجماليها 5,000 صورة).

مزايا استخدام YOLO مع TensorRT INT8#

  • تقليل حجم النموذج: يمكن أن يؤدي التكميم من FP32 إلى INT8 إلى تقليل حجم النموذج بمقدار 4 أضعاف (على القرص أو في الذاكرة)، ما يسرّع التنزيل ويقلل متطلبات التخزين وبصمة الذاكرة عند نشر النموذج.

  • استهلاك أقل للطاقة: يمكن أن تستهلك العمليات ذات الدقة المنخفضة لنماذج YOLO المُصدَّرة بصيغة INT8 طاقة أقل مقارنةً بنماذج FP32، ولا سيما على الأجهزة التي تعمل بالبطارية.

  • تحسين سرعات الاستدلال: يعمل TensorRT على تحسين النموذج ليتوافق مع الأجهزة المستهدفة، ما قد يؤدي إلى تسريع الاستدلال على وحدات GPU والأجهزة المضمنة والمسرّعات.

ملاحظة حول سرعات الاستدلال

من المتوقع أن تستغرق أولى مرات الاستدلال باستخدام نموذج مُصدَّر إلى TensorRT INT8 وقتًا أطول من المعتاد في المعالجة المسبقة والاستدلال و/أو المعالجة اللاحقة. وقد يحدث ذلك أيضًا عند تغيير imgsz أثناء الاستدلال، لا سيما عندما لا يكون imgsz مطابقًا لما حُدّد أثناء التصدير (يُضبط imgsz الخاص بالتصدير على ملف تعريف TensorRT "optimal"، أي الأمثل).

عيوب استخدام YOLO مع TensorRT INT8#

  • انخفاض مقاييس التقييم: تعني الدقة الأقل أن mAP أو Precision أو Recall أو أي مقياس آخر يُستخدم لتقييم أداء النموذج قد يكون أسوأ بعض الشيء. تُحافَظ على دقة طبقات Sigmoid الأعلى للحفاظ على معايرة الدرجات، لكن INT8 قد يغيّر قيم الثقة؛ لذا اختر عتبة التشغيل من منحنى F1 الخاص بنموذج INT8 نفسه. راجع قسم نتائج الأداء لمقارنة الاختلافات في mAP50 وmAP50-95 عند التصدير باستخدام INT8 على عينة صغيرة من أجهزة مختلفة.

  • زيادة وقت التطوير: قد يستغرق العثور على إعدادات "مثلى" لمعايرة INT8 لمجموعة البيانات والجهاز وقتًا طويلًا من الاختبارات.

  • الاعتماد على العتاد: قد تعتمد المعايرة ومكاسب الأداء بدرجة كبيرة على العتاد، كما أن أوزان النموذج أقل قابلية للنقل.

أداء تصدير Ultralytics YOLO إلى TensorRT#

NVIDIA A100#

الأداء

اختُبر باستخدام Ubuntu 22.04.3 LTS وpython 3.10.12 وultralytics==8.2.4 وtensorrt==8.6.1.post1

راجع وثائق الكشف للاطلاع على أمثلة استخدام هذه النماذج المدرّبة على COCO، والتي تتضمن 80 فئة مدرّبة مسبقًا.

ملاحظة

أوقات الاستدلال المعروضة هي mean (الأسرع) وmin وmax (الأبطأ) لكل اختبار باستخدام الأوزان المدرَّبة مسبقًا yolov8n.engine

الدقةاختبار التقييمالمتوسط
(مللي ثانية)
الحد الأدنى | الحد الأقصى
(مللي ثانية)
mAPالتحقق
50(B)
mAPالتحقق
50-95(B)
batchالحجم
(بكسل)
FP32التنبؤ0.520.51 | 0.568640
FP32COCOالتحقق0.520.520.371640
FP16التنبؤ0.340.34 | 0.418640
FP16COCOالتحقق0.330.520.371640
INT8التنبؤ0.280.27 | 0.318640
INT8COCOالتحقق0.290.470.331640

وحدات GPU الاستهلاكية#

أداء الكشف (COCO)

اختُبر باستخدام Windows 10.0.19045 وpython 3.10.9 وultralytics==8.2.4 وtensorrt==10.0.0b6

ملاحظة

أوقات الاستدلال المعروضة هي mean (الأسرع) وmin وmax (الأبطأ) لكل اختبار باستخدام الأوزان المدرَّبة مسبقًا yolov8n.engine

الدقةاختبار التقييمالمتوسط
(مللي ثانية)
الحد الأدنى | الحد الأقصى
(مللي ثانية)
mAPالتحقق
50(B)
mAPالتحقق
50-95(B)
batchالحجم
(بكسل)
FP32التنبؤ1.060.75 | 1.888640
FP32COCOالتحقق1.370.520.371640
FP16التنبؤ0.620.75 | 1.138640
FP16COCOالتحقق0.850.520.371640
INT8التنبؤ0.520.38 | 1.008640
INT8COCOالتحقق0.740.470.331640

الأجهزة المضمنة#

أداء الكشف (COCO)

اختُبر باستخدام JetPack 6.0 (L4T 36.3) وUbuntu 22.04.4 LTS وpython 3.10.12 وultralytics==8.2.16 وtensorrt==10.0.1

ملاحظة

أوقات الاستدلال المعروضة هي mean (الأسرع) وmin وmax (الأبطأ) لكل اختبار باستخدام الأوزان المدرَّبة مسبقًا yolov8n.engine

الدقةاختبار التقييمالمتوسط
(مللي ثانية)
الحد الأدنى | الحد الأقصى
(مللي ثانية)
mAPالتحقق
50(B)
mAPالتحقق
50-95(B)
batchالحجم
(بكسل)
FP32التنبؤ6.116.10 | 6.298640
FP32COCOالتحقق6.170.520.371640
FP16التنبؤ3.183.18 | 3.208640
FP16COCOالتحقق3.190.520.371640
INT8التنبؤ2.302.29 | 2.358640
INT8COCOالتحقق2.320.460.321640
معلومات

راجع دليل البدء السريع لاستخدام Ultralytics YOLO على NVIDIA Jetson لمعرفة المزيد عن الإعداد والتهيئة.

معلومات

راجع دليل البدء السريع لاستخدام Ultralytics YOLO على NVIDIA DGX Spark لمعرفة المزيد عن الإعداد والتهيئة.

أساليب التقييم#

وسّع الأقسام أدناه لمعرفة كيفية تصدير هذه النماذج واختبارها.

إعدادات التصدير

راجع وضع التصدير لمعرفة تفاصيل وسيطات إعداد التصدير.

from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# TensorRT FP32
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2)

# TensorRT FP16
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, quantize=16)

# ⁨TensorRT INT8 مع `data` للمعايرة (أي COCO أو ImageNet أو DOTAv1 لمهمة النموذج المناسبة)⁩
out = model.export(
    format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, quantize=8, data="coco8.yaml"
)
حلقة التنبؤ

راجع وضع التنبؤ لمزيد من المعلومات.

import cv2

from ultralytics import YOLO

model = YOLO("yolo26n.engine")
img = cv2.imread("path/to/image.jpg")

for _ in range(100):
    result = model.predict(
        [img] * 8,  # batch=8 of the same image
        verbose=False,
        device="cuda",
    )
إعداد التحقق

راجع وضع val لمعرفة المزيد عن وسيطات إعداد التحقق.

from ultralytics import YOLO

model = YOLO("yolo26n.engine")
results = model.val(
    data="data.yaml",  # ⁨COCO أو ImageNet أو DOTAv1 لمهمة النموذج المناسبة⁩
    batch=1,
    imgsz=640,
    verbose=False,
    device="cuda",
)

نشر نماذج YOLO26 المُصدَّرة إلى TensorRT#

بعد تصدير نماذج Ultralytics YOLO26 بنجاح إلى تنسيق TensorRT، تصبح جاهزًا لنشرها. للاطلاع على تعليمات مفصلة حول نشر نماذج TensorRT في إعدادات مختلفة، راجع الموارد التالية:

الملخص#

ركزنا في هذا الدليل على تحويل نماذج Ultralytics YOLO26 إلى تنسيق نماذج NVIDIA TensorRT. وتُعد خطوة التحويل هذه أساسية لتحسين كفاءة نماذج YOLO26 وسرعتها، ما يجعلها أكثر فاعلية وملاءمة لبيئات النشر المتنوعة.

لمزيد من المعلومات حول تفاصيل الاستخدام، راجع الوثائق الرسمية لـ TensorRT.

إذا كنت ترغب في معرفة المزيد عن تكاملات Ultralytics YOLO26 الإضافية، فستجد في صفحة دليل التكامل مجموعة واسعة من الموارد المفيدة والرؤى.

الأسئلة الشائعة#

  • لتحويل نماذج Ultralytics YOLO26 إلى تنسيق TensorRT من أجل استدلال مُحسّن على وحدات NVIDIA GPU، اتبع الخطوات التالية:

    1. ثبّت الحزمة المطلوبة:

      pip install ultralytics
    2. صدّر نموذج YOLO26:

      from ultralytics import YOLO
      
      model = YOLO("yolo26n.pt")
      model.export(format="engine")  # ⁨ينشئ 'yolo26n.engine'⁩
      
      # ⁨تنفيذ الاستدلال⁩
      model = YOLO("yolo26n.engine")
      results = model("https://ultralytics.com/images/bus.jpg")

    لمزيد من التفاصيل، راجع دليل تثبيت YOLO26 ووثائق التصدير.

  • يوفر استخدام TensorRT لتحسين نماذج YOLO26 عدة فوائد:

    • استدلال أسرع: يحسّن TensorRT طبقات النموذج ويستخدم معايرة الدقة (INT8 وFP16) لتسريع الاستدلال من دون التضحية بالدقة بدرجة كبيرة.
    • كفاءة الذاكرة: يدير TensorRT ذاكرة الموترات ديناميكيًا، ما يقلل الحمل الزائد ويحسن الاستفادة من ذاكرة GPU.
    • دمج الطبقات: يدمج طبقات متعددة في عمليات مفردة، ما يقلل التعقيد الحسابي.
    • الضبط التلقائي للنوى: يختار تلقائيًا نوى GPU المحسّنة لكل طبقة في النموذج، لضمان تحقيق أقصى أداء.

    لمعرفة المزيد، اطّلع على وثائق TensorRT الرسمية من NVIDIA ونظرتنا المتعمقة إلى TensorRT.

  • نعم، يمكنك تصدير نماذج YOLO26 باستخدام TensorRT مع تكميم INT8. تتضمن هذه العملية التكميم بعد التدريب (PTQ) والمعايرة، إلا إذا كانت نقطة التحقق قد دُرّبت باستخدام quantize=8 (التدريب المُراعي للتكميم)، ففي هذه الحالة تُصدَّر النطاقات التي تحملها نقطة التحقق من دون معايرة:

    1. التصدير باستخدام INT8:

      from ultralytics import YOLO
      
      model = YOLO("yolo26n.pt")
      model.export(format="engine", batch=8, workspace=4, quantize=8, data="coco.yaml")
    2. تشغيل الاستدلال:

      from ultralytics import YOLO
      
      model = YOLO("yolo26n.engine", task="detect")
      result = model.predict("https://ultralytics.com/images/bus.jpg")

    لمزيد من التفاصيل، راجع قسم تصدير TensorRT باستخدام تكميم INT8.

  • يمكن نشر نماذج YOLO26 TensorRT على NVIDIA Triton Inference Server بالاستعانة بالموارد التالية:

    ستساعدك هذه الأدلة على دمج نماذج YOLO26 بكفاءة في بيئات نشر متنوعة.

  • قد تختلف تحسينات الأداء باستخدام TensorRT بحسب النموذج والعتاد المستخدم. فيما يلي معايير أداء نموذجية قِيست باستخدام YOLOv8n، وتوضح المكاسب النسبية لكل دقة:

    • NVIDIA A100:

      • استدلال FP32: ~0.52 مللي ثانية / صورة
      • استدلال FP16: ~0.34 مللي ثانية / صورة
      • استدلال INT8: ~0.28 مللي ثانية / صورة
      • انخفاض طفيف في mAP عند استخدام دقة INT8، يقابله تحسن ملحوظ في السرعة.
    • وحدات GPU الاستهلاكية (مثل RTX 3080):

      • استدلال FP32: ~1.06 مللي ثانية / صورة
      • استدلال FP16: ~0.62 مللي ثانية / صورة
      • استدلال INT8: ~0.52 مللي ثانية / صورة

    يمكن العثور على معايير أداء مفصلة لتكوينات العتاد المختلفة في قسم الأداء.

    للاطلاع على معلومات أشمل حول أداء TensorRT، راجع وثائق Ultralytics وتقارير تحليل الأداء الخاصة بنا.

التعليقات