تخطي إلى المحتوى

تصدير TensorRT لنماذج YOLO11

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

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

TensorRT

نظرة عامة على TensorRT

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

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

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

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

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

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

  • دمج الطبقات (Layer Fusion): تتضمن عملية تحسين TensorRT دمج الطبقات، حيث يتم دمج طبقات متعددة من شبكة عصبية في عملية واحدة. هذا يقلل من النفقات العامة الحسابية ويحسن سرعة الاستدلال عن طريق تقليل الوصول إلى الذاكرة والحساب.

دمج طبقات TensorRT

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

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

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

قبل أن ننظر إلى التعليمات البرمجية لتصدير نماذج YOLO11 إلى تنسيق TensorRT، دعنا نفهم أين تستخدم نماذج TensorRT عادةً.

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

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

نظرة عامة على TensorRT

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

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

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

يمكنك تحسين كفاءة التنفيذ وتحسين الأداء عن طريق تحويل نماذج YOLO11 إلى تنسيق TensorRT.

التثبيت

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

التثبيت

# Install the required package for YOLO11
pip install ultralytics

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

الاستخدام

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

الاستخدام

from ultralytics import YOLO

# Load the YOLO11 model
model = YOLO("yolo11n.pt")

# Export the model to TensorRT format
model.export(format="engine")  # creates 'yolo11n.engine'

# Load the exported TensorRT model
tensorrt_model = YOLO("yolo11n.engine")

# Run inference
results = tensorrt_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLO11n PyTorch model to TensorRT format
yolo export model=yolo11n.pt format=engine # creates 'yolo11n.engine''

# Run inference with the exported model
yolo predict model=yolo11n.engine source='https://ultralytics.com/images/bus.jpg'

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

الوسيطة النوع افتراضي الوصف
format str 'engine' تنسيق الهدف للنموذج الذي تم تصديره، والذي يحدد التوافق مع بيئات النشر المختلفة.
imgsz int أو tuple 640 حجم الصورة المطلوب لإدخال النموذج. يمكن أن يكون عددًا صحيحًا للصور المربعة أو صفًا. (height, width) لأبعاد محددة.
half bool False يتيح تكميم FP16 (نصف الدقة)، مما يقلل من حجم النموذج وربما يسرع الاستدلال على الأجهزة المدعومة.
int8 bool False يقوم بتنشيط تكميم INT8، مما يزيد من ضغط النموذج وتسريع الاستدلال مع الحد الأدنى من فقدان الدقة، خاصةً للأجهزة الطرفية.
dynamic bool False يسمح بأحجام إدخال ديناميكية، مما يعزز المرونة في التعامل مع أبعاد الصور المتغيرة.
simplify bool True يبسط الرسم البياني للنموذج باستخدام onnxslim، مما قد يحسن الأداء والتوافق.
workspace float أو None None يحدد الحد الأقصى لحجم مساحة العمل في GiB لتحسينات TensorRT، مع موازنة استخدام الذاكرة والأداء؛ استخدم None للتخصيص التلقائي بواسطة TensorRT حتى الحد الأقصى للجهاز.
nms bool False يضيف قمع غير الأقصى (NMS)، وهو ضروري للمعالجة اللاحقة للكشف الدقيقة والفعالة.
batch int 1 يحدد حجم الاستدلال الدفعي لنموذج التصدير أو الحد الأقصى لعدد الصور التي سيعالجها النموذج المصدر في وقت واحد في predict الوضع.
data str 'coco8.yaml' مسار إلى مجموعة البيانات ملف التكوين (افتراضي: coco8.yaml)، وهو ضروري لتحديد الكميات.
fraction float 1.0 يحدد جزء مجموعة البيانات المراد استخدامها لمعايرة القياس الكمي INT8. يسمح بالمعايرة على مجموعة فرعية من مجموعة البيانات الكاملة، وهو أمر مفيد للتجارب أو عندما تكون الموارد محدودة. إذا لم يتم تحديده مع تمكين INT8، فسيتم استخدام مجموعة البيانات الكاملة.
device str None يحدد الجهاز للتصدير: GPU (device=0)، و DLA لـ NVIDIA Jetson (device=dla:0 أو device=dla:1).

نصيحة

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

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

تصدير TensorRT مع تكميم INT8

يقوم تصدير نماذج Ultralytics YOLO باستخدام TensorRT مع دقة INT8 بتنفيذ تكميم ما بعد التدريب (PTQ). يستخدم TensorRT المعايرة لـ PTQ، والتي تقيس توزيع التنشيطات داخل كل موتر تنشيط حيث يعالج نموذج YOLO الاستدلال على بيانات الإدخال التمثيلية، ثم يستخدم هذا التوزيع لتقدير قيم المقياس لكل موتر. يحتوي كل موتر تنشيط مرشح للتكميم على مقياس مرتبط به يتم استنتاجه بواسطة عملية المعايرة.

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

نصيحة

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

تكوين تصدير INT8

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

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

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

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

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

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

    • تذكر أن معايرة INT8 خاصة بكل جهاز، وقد يؤدي استعارة وحدة معالجة الرسوميات "عالية الجودة" للمعايرة إلى ضعف الأداء عند تشغيل الاستدلال على جهاز آخر.

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

ملاحظة

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

أدت التجارب التي أجرتها NVIDIA إلى التوصية باستخدام ما لا يقل عن 500 صورة معايرة تمثل بيانات النموذج الخاص بك، مع معايرة تحديد الكمية INT8. هذا مجرد دليل إرشادي وليس صعب المتطلبات، و ستحتاج إلى التجربة لتحديد المتطلبات اللازمة لتحقيق أداء جيد لمجموعة البيانات الخاصة بك. نظرًا لأن بيانات المعايرة مطلوبة لمعايرة INT8 باستخدام TensorRT، فتأكد من استخدام data وسيطة عندما int8=True لـ TensorRT والاستخدام. data="my_dataset.yaml"، والذي سيستخدم الصور من التحقق للمعايرة به. عندما لا يتم تمرير أي قيمة لـ data مع التصدير إلى TensorRT مع تحديد كمية INT8، سيكون الإعداد الافتراضي هو استخدام أحد مجموعات بيانات أمثلة "صغيرة" تستند إلى مهمة النموذج بدلاً من إظهار خطأ.

مثال

from ultralytics import YOLO

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

# Load the exported TensorRT INT8 model
model = YOLO("yolov8n.engine", task="detect")

# Run inference
result = model.predict("https://ultralytics.com/images/bus.jpg")
  1. عمليات التصدير ذات المحاور الديناميكية، سيتم تمكين هذا بشكل افتراضي عند التصدير باستخدام int8=True حتى عند عدم تعيينها بشكل صريح. انظر حجج التصدير للحصول على معلومات إضافية.
  2. يحدد الحد الأقصى لحجم الدُفعة 8 للنموذج المُصدَّر، والذي تتم معايرته باستخدام batch = 2 * 8 لتجنب أخطاء القياس أثناء المعايرة.
  3. يخصص 4 جيجابايت من الذاكرة بدلاً من تخصيص الجهاز بأكمله لعملية التحويل.
  4. يستخدم مجموعة بيانات COCO للمعايرة، وتحديدًا الصور المستخدمة في التحقق (إجمالي 5000).
# Export a YOLO11n PyTorch model to TensorRT format with INT8 quantization
yolo export model=yolo11n.pt format=engine batch=8 workspace=4 int8=True data=coco.yaml # creates 'yolov8n.engine''

# Run inference with the exported TensorRT quantized model
yolo predict model=yolov8n.engine source='https://ultralytics.com/images/bus.jpg'
ذاكرة التخزين المؤقت للمعايرة

سيقوم TensorRT بإنشاء معايرة .cache والذي يمكن إعادة استخدامه لتسريع تصدير أوزان النموذج المستقبلية باستخدام نفس البيانات، ولكن هذا قد يؤدي إلى معايرة ضعيفة عندما تكون البيانات مختلفة اختلافًا كبيرًا أو إذا كانت batch يتم تغيير القيمة بشكل كبير. في هذه الظروف، .cache يجب إعادة تسميته ونقله إلى دليل مختلف أو حذفه بالكامل.

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

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

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

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

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

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

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

  • انخفاض في مقاييس التقييم: استخدام دقة أقل سيعني ذلك mAP, Precision, Recall أو أي مقياس آخر يستخدم لتقييم أداء النموذج من المرجح أن تكون أسوأ إلى حد ما. انظر قسم نتائج الأداء لمقارنة الاختلافات في 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

الدقة اختبار التقييم المتوسط
(بالمللي ثانية)
الحد الأدنى | الحد الأقصى
(بالمللي ثانية)
mAPval
50(B)
mAPval
50-95(B)
batch الحجم
(بالبكسل)
FP32 توقع 0.52 0.51 | 0.56 8 640
FP32 COCOval 0.52 0.52 0.37 1 640
FP16 توقع 0.34 0.34 | 0.41 8 640
FP16 COCOval 0.33 0.52 0.37 1 640
INT8 توقع 0.28 0.27 | 0.31 8 640
INT8 COCOval 0.29 0.47 0.33 1 640

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

ملاحظة

أوقات الاستدلال المعروضة لـ mean, min (الأسرع)، و max (الأبطأ) لكل اختبار باستخدام الأوزان المدربة مسبقًا yolov8n-seg.engine

الدقة اختبار التقييم المتوسط
(بالمللي ثانية)
الحد الأدنى | الحد الأقصى
(بالمللي ثانية)
mAPval
50(B)
mAPval
50-95(B)
mAPval
50(M)
mAPval
50-95(M)
batch الحجم
(بالبكسل)
FP32 توقع 0.62 0.61 | 0.68 8 640
FP32 COCOval 0.63 0.52 0.36 0.49 0.31 1 640
FP16 توقع 0.40 0.39 | 0.44 8 640
FP16 COCOval 0.43 0.52 0.36 0.49 0.30 1 640
INT8 توقع 0.34 0.33 | 0.37 8 640
INT8 COCOval 0.36 0.46 0.32 0.43 0.27 1 640

راجع وثائق التصنيف للحصول على أمثلة حول كيفية استخدام هذه النماذج المدربة على ImageNet، والتي تتضمن 1000 فئة مُدرَّبة مسبقًا.

ملاحظة

أوقات الاستدلال المعروضة لـ mean, min (الأسرع)، و max (الأبطأ) لكل اختبار باستخدام الأوزان المدربة مسبقًا yolov8n-cls.engine

الدقة اختبار التقييم المتوسط
(بالمللي ثانية)
الحد الأدنى | الحد الأقصى
(بالمللي ثانية)
الأفضل (top-1) أفضل 5 (top-5) batch الحجم
(بالبكسل)
FP32 توقع 0.26 0.25 | 0.28 8 640
FP32 ImageNetval 0.26 0.35 0.61 1 640
FP16 توقع 0.18 0.17 | 0.19 8 640
FP16 ImageNetval 0.18 0.35 0.61 1 640
INT8 توقع 0.16 0.15 | 0.57 8 640
INT8 ImageNetval 0.15 0.32 0.59 1 640

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

ملاحظة

أوقات الاستدلال المعروضة لـ mean, min (الأسرع)، و max (الأبطأ) لكل اختبار باستخدام الأوزان المدربة مسبقًا yolov8n-pose.engine

الدقة اختبار التقييم المتوسط
(بالمللي ثانية)
الحد الأدنى | الحد الأقصى
(بالمللي ثانية)
mAPval
50(B)
mAPval
50-95(B)
mAPval
50(P)
mAPval
50-95(P)
batch الحجم
(بالبكسل)
FP32 توقع 0.54 0.53 | 0.58 8 640
FP32 COCOval 0.55 0.91 0.69 0.80 0.51 1 640
FP16 توقع 0.37 0.35 | 0.41 8 640
FP16 COCOval 0.36 0.91 0.69 0.80 0.51 1 640
INT8 توقع 0.29 0.28 | 0.33 8 640
INT8 COCOval 0.30 0.90 0.68 0.78 0.47 1 640

راجع مستندات الكشف الموجه للحصول على أمثلة حول كيفية استخدام هذه النماذج المدربة على DOTAv1، والتي تتضمن 15 فئة مدربة مسبقًا.

ملاحظة

أوقات الاستدلال المعروضة لـ mean, min (الأسرع)، و max (الأبطأ) لكل اختبار باستخدام الأوزان المدربة مسبقًا yolov8n-obb.engine

الدقة اختبار التقييم المتوسط
(بالمللي ثانية)
الحد الأدنى | الحد الأقصى
(بالمللي ثانية)
mAPval
50(B)
mAPval
50-95(B)
batch الحجم
(بالبكسل)
FP32 توقع 0.52 0.51 | 0.59 8 640
FP32 DOTAv1val 0.76 0.50 0.36 1 640
FP16 توقع 0.34 0.33 | 0.42 8 640
FP16 DOTAv1val 0.59 0.50 0.36 1 640
INT8 توقع 0.29 0.28 | 0.33 8 640
INT8 DOTAv1val 0.32 0.45 0.32 1 640

وحدات معالجة الرسومات الاستهلاكية

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

تم الاختبار باستخدام Windows 10.0.19045، python 3.10.9, ultralytics==8.2.4, tensorrt==10.0.0b6

ملاحظة

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

الدقة اختبار التقييم المتوسط
(بالمللي ثانية)
الحد الأدنى | الحد الأقصى
(بالمللي ثانية)
mAPval
50(B)
mAPval
50-95(B)
batch الحجم
(بالبكسل)
FP32 توقع 1.06 0.75 | 1.88 8 640
FP32 COCOval 1.37 0.52 0.37 1 640
FP16 توقع 0.62 0.75 | 1.13 8 640
FP16 COCOval 0.85 0.52 0.37 1 640
INT8 توقع 0.52 0.38 | 1.00 8 640
INT8 COCOval 0.74 0.47 0.33 1 640

تم الاختبار باستخدام Windows 10.0.22631، python 3.11.9, ultralytics==8.2.4, tensorrt==10.0.1

ملاحظة

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

الدقة اختبار التقييم المتوسط
(بالمللي ثانية)
الحد الأدنى | الحد الأقصى
(بالمللي ثانية)
mAPval
50(B)
mAPval
50-95(B)
batch الحجم
(بالبكسل)
FP32 توقع 1.76 1.69 | 1.87 8 640
FP32 COCOval 1.94 0.52 0.37 1 640
FP16 توقع 0.86 0.75 | 1.00 8 640
FP16 COCOval 1.43 0.52 0.37 1 640
INT8 توقع 0.80 0.75 | 1.00 8 640
INT8 COCOval 1.35 0.47 0.33 1 640

تم الاختبار باستخدام Pop!_OS 22.04 LTS، python 3.10.12, ultralytics==8.2.4, tensorrt==8.6.1.post1

ملاحظة

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

الدقة اختبار التقييم المتوسط
(بالمللي ثانية)
الحد الأدنى | الحد الأقصى
(بالمللي ثانية)
mAPval
50(B)
mAPval
50-95(B)
batch الحجم
(بالبكسل)
FP32 توقع 2.84 2.84 | 2.85 8 640
FP32 COCOval 2.94 0.52 0.37 1 640
FP16 توقع 1.09 1.09 | 1.10 8 640
FP16 COCOval 1.20 0.52 0.37 1 640
INT8 توقع 0.75 0.74 | 0.75 8 640
INT8 COCOval 0.76 0.47 0.33 1 640

الأجهزة المدمجة

أداء الكشف (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

الدقة اختبار التقييم المتوسط
(بالمللي ثانية)
الحد الأدنى | الحد الأقصى
(بالمللي ثانية)
mAPval
50(B)
mAPval
50-95(B)
batch الحجم
(بالبكسل)
FP32 توقع 6.11 6.10 | 6.29 8 640
FP32 COCOval 6.17 0.52 0.37 1 640
FP16 توقع 3.18 3.18 | 3.20 8 640
FP16 COCOval 3.19 0.52 0.37 1 640
INT8 توقع 2.30 2.29 | 2.35 8 640
INT8 COCOval 2.32 0.46 0.32 1 640

معلومات

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

طرق التقييم

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

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

انظر وضع التصدير للحصول على تفاصيل حول وسائط إعدادات التصدير.

from ultralytics import YOLO

model = YOLO("yolov8n.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, half=True)

# TensorRT INT8 with calibration `data` (i.e. COCO, ImageNet, or DOTAv1 for appropriate model task)
out = model.export(
    format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, int8=True, data="coco8.yaml"
)
حلقة التوقع

انظر وضع التوقع للحصول على معلومات إضافية.

import cv2

from ultralytics import YOLO

model = YOLO("yolov8n.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("yolov8n.engine")
results = model.val(
    data="data.yaml",  # COCO, ImageNet, or DOTAv1 for appropriate model task
    batch=1,
    imgsz=640,
    verbose=False,
    device="cuda",
)

نشر نماذج YOLO11 TensorRT المصدرة

بعد نجاح تصدير نماذج Ultralytics YOLO11 الخاصة بك إلى تنسيق TensorRT، أنت الآن جاهز لنشرها. للحصول على إرشادات متعمقة حول نشر نماذج TensorRT الخاصة بك في إعدادات مختلفة، ألق نظرة على الموارد التالية:

ملخص

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

لمزيد من المعلومات حول تفاصيل الاستخدام، ألقِ نظرة على وثائق TensorRT الرسمية.

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

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

كيف يمكنني تحويل نماذج YOLO11 إلى تنسيق TensorRT؟

لتحويل نماذج Ultralytics YOLO11 الخاصة بك إلى تنسيق TensorRT للاستدلال الأمثل لوحدة معالجة الرسومات NVIDIA، اتبع الخطوات التالية:

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

    pip install ultralytics
    
  2. تصدير نموذج YOLO11 الخاص بك:

    from ultralytics import YOLO
    
    model = YOLO("yolo11n.pt")
    model.export(format="engine")  # creates 'yolo11n.engine'
    
    # Run inference
    model = YOLO("yolo11n.engine")
    results = model("https://ultralytics.com/images/bus.jpg")
    

لمزيد من التفاصيل، قم بزيارة دليل تثبيت YOLO11 و وثائق التصدير.

ما هي فوائد استخدام TensorRT لنماذج YOLO11؟

يوفر استخدام TensorRT لتحسين نماذج YOLO11 العديد من المزايا:

  • سرعة استدلال أسرع: تعمل TensorRT على تحسين طبقات النموذج وتستخدم معايرة الدقة (INT8 و FP16) لتسريع الاستدلال دون التضحية بالدقة بشكل كبير.
  • كفاءة الذاكرة: يدير TensorRT ذاكرة tensor ديناميكيًا، مما يقلل النفقات العامة ويحسن استخدام ذاكرة GPU.
  • دمج الطبقات (Layer Fusion): يجمع بين طبقات متعددة في عمليات واحدة، مما يقلل من التعقيد الحسابي.
  • الضبط التلقائي للنواة (Kernel Auto-Tuning): يختار تلقائيًا نوى GPU مُحسّنة لكل طبقة نموذج، مما يضمن أقصى أداء.

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

هل يمكنني استخدام تكميم INT8 مع TensorRT لنماذج YOLO11؟

نعم، يمكنك تصدير نماذج YOLO11 باستخدام TensorRT مع تحديد كمية INT8. تتضمن هذه العملية تحديد الكمية بعد التدريب (PTQ) والمعايرة:

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

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

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

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

كيف يمكنني نشر نماذج YOLO11 TensorRT على خادم NVIDIA Triton Inference؟

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

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

ما هي التحسينات في الأداء التي لوحظت مع نماذج YOLOv8 المصدرة إلى TensorRT؟

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

  • NVIDIA A100:

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

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

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

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



📅 أُنشئ منذ سنة واحدة ✏️ تم التحديث منذ 23 يومًا

تعليقات