تصدير TensorRT لنماذج YOLO11
قد يتطلب نشر نماذج الرؤية الحاسوبية في بيئات عالية الأداء تنسيقًا يزيد من السرعة والكفاءة. وهذا صحيح بشكل خاص عندما تقوم بنشر النموذج الخاص بك على وحدات معالجة الرسوميات NVIDIA.
باستخدام تنسيق التصدير TensorRT، يمكنك تحسين نماذج Ultralytics YOLO11 الخاصة بك للاستدلال السريع والفعال على أجهزة NVIDIA. سيوفر لك هذا الدليل خطوات سهلة الاتباع لعملية التحويل ويساعدك على تحقيق أقصى استفادة من تقنية NVIDIA المتقدمة في مشاريع التعلم العميق الخاصة بك.
TensorRT
TensorRT، الذي تم تطويره بواسطة NVIDIA، عبارة عن مجموعة تطوير برامج (SDK) متقدمة مصممة للاستدلال عالي السرعة في التعلم العميق. إنها مناسبة تمامًا للتطبيقات في الوقت الفعلي مثل اكتشاف الكائنات.
تعمل هذه المجموعة من الأدوات على تحسين نماذج التعلم العميق لوحدات معالجة الرسوميات NVIDIA وتؤدي إلى عمليات أسرع وأكثر كفاءة. تخضع نماذج TensorRT لتحسين TensorRT، والذي يتضمن تقنيات مثل دمج الطبقات ومعايرة الدقة (INT8 و FP16) وإدارة ذاكرة الموتر الديناميكية والضبط التلقائي للنواة. يتيح تحويل نماذج التعلم العميق إلى تنسيق TensorRT للمطورين إدراك إمكانات وحدات معالجة الرسوميات NVIDIA بالكامل.
تشتهر TensorRT بتوافقها مع تنسيقات النماذج المختلفة، بما في ذلك TensorFlow و PyTorch و ONNX، مما يوفر للمطورين حلاً مرنًا لدمج وتحسين النماذج من الأطر المختلفة. تتيح هذه المرونة نشر النماذج بكفاءة عبر بيئات الأجهزة والبرامج المتنوعة.
الميزات الرئيسية لنماذج TensorRT
تقدم نماذج TensorRT مجموعة من الميزات الرئيسية التي تساهم في كفاءتها وفعاليتها في الاستدلال عالي السرعة للتعلم العميق:
-
معايرة الدقة: يدعم TensorRT معايرة الدقة، مما يسمح بضبط النماذج بدقة لمتطلبات دقة معينة. يتضمن ذلك دعم تنسيقات الدقة المنخفضة مثل INT8 و FP16، والتي يمكن أن تزيد من سرعة الاستدلال مع الحفاظ على مستويات دقة مقبولة.
-
دمج الطبقات (Layer Fusion): تتضمن عملية تحسين TensorRT دمج الطبقات، حيث يتم دمج طبقات متعددة من شبكة عصبية في عملية واحدة. هذا يقلل من النفقات العامة الحسابية ويحسن سرعة الاستدلال عن طريق تقليل الوصول إلى الذاكرة والحساب.
-
إدارة ذاكرة Tensor الديناميكية: تدير TensorRT استخدام ذاكرة tensor بكفاءة أثناء الاستدلال، مما يقلل من حمل الذاكرة ويحسن تخصيص الذاكرة. هذا يؤدي إلى استخدام أكثر كفاءة لذاكرة GPU.
-
الضبط التلقائي للنواة: يطبق TensorRT الضبط التلقائي للنواة لتحديد نواة GPU الأكثر تحسينًا لكل طبقة من طبقات النموذج. يضمن هذا النهج التكيفي أن النموذج يستفيد بشكل كامل من قوة الحوسبة لوحدات معالجة الرسومات.
خيارات النشر في TensorRT
قبل أن ننظر إلى التعليمات البرمجية لتصدير نماذج YOLO11 إلى تنسيق TensorRT، دعنا نفهم أين تستخدم نماذج TensorRT عادةً.
تقدم TensorRT العديد من خيارات النشر، وكل خيار يوازن بين سهولة التكامل وتحسين الأداء والمرونة بشكل مختلف:
- النشر داخل TensorFlow: تدمج هذه الطريقة TensorRT في TensorFlow، مما يسمح بتشغيل النماذج المحسّنة في بيئة TensorFlow مألوفة. إنه مفيد للنماذج التي تحتوي على مزيج من الطبقات المدعومة وغير المدعومة، حيث يمكن لـ TF-TRT التعامل مع هذه الطبقات بكفاءة.
-
واجهة برمجة تطبيقات وقت التشغيل 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")
- عمليات التصدير ذات المحاور الديناميكية، سيتم تمكين هذا بشكل افتراضي عند التصدير باستخدام
int8=True
حتى عند عدم تعيينها بشكل صريح. انظر حجج التصدير للحصول على معلومات إضافية. - يحدد الحد الأقصى لحجم الدُفعة 8 للنموذج المُصدَّر، والذي تتم معايرته باستخدام
batch = 2 * 8
لتجنب أخطاء القياس أثناء المعايرة. - يخصص 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 مع خادم Triton: دليلنا حول كيفية استخدام NVIDIA Triton Inference (TensorRT Inference سابقًا) Server خصيصًا للاستخدام مع نماذج Ultralytics YOLO.
-
نشر الشبكات العصبية العميقة مع NVIDIA TensorRT: تشرح هذه المقالة كيفية استخدام NVIDIA TensorRT لنشر الشبكات العصبية العميقة على منصات النشر المستندة إلى GPU بكفاءة.
-
الذكاء الاصطناعي الشامل لأجهزة الكمبيوتر الشخصية المستندة إلى NVIDIA: نشر NVIDIA TensorRT: تشرح مشاركة المدونة هذه استخدام NVIDIA TensorRT لتحسين ونشر نماذج الذكاء الاصطناعي على أجهزة الكمبيوتر الشخصية المستندة إلى NVIDIA.
-
مستودع GitHub لـ NVIDIA TensorRT:: هذا هو مستودع GitHub الرسمي الذي يحتوي على شفرة المصدر والوثائق الخاصة بـ NVIDIA TensorRT.
ملخص
في هذا الدليل، ركزنا على تحويل نماذج Ultralytics YOLO11 إلى تنسيق نموذج TensorRT الخاص بـ NVIDIA. تعتبر خطوة التحويل هذه ضرورية لتحسين كفاءة وسرعة نماذج YOLO11، مما يجعلها أكثر فعالية ومناسبة لبيئات النشر المتنوعة.
لمزيد من المعلومات حول تفاصيل الاستخدام، ألقِ نظرة على وثائق TensorRT الرسمية.
إذا كنت مهتمًا بمعرفة المزيد حول تكاملات Ultralytics YOLO11 الإضافية، فإن صفحة دليل التكامل الخاصة بنا توفر مجموعة واسعة من الموارد والرؤى الإعلامية.
الأسئلة الشائعة
كيف يمكنني تحويل نماذج YOLO11 إلى تنسيق TensorRT؟
لتحويل نماذج Ultralytics YOLO11 الخاصة بك إلى تنسيق TensorRT للاستدلال الأمثل لوحدة معالجة الرسومات NVIDIA، اتبع الخطوات التالية:
-
تثبيت الحزمة المطلوبة:
pip install ultralytics
-
تصدير نموذج 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) والمعايرة:
-
تصدير باستخدام INT8:
from ultralytics import YOLO model = YOLO("yolov8n.pt") model.export(format="engine", batch=8, workspace=4, int8=True, data="coco.yaml")
-
تشغيل الاستدلال:
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 باستخدام الموارد التالية:
- نشر Ultralytics YOLOv8 مع خادم Triton: إرشادات خطوة بخطوة حول إعداد واستخدام Triton Inference Server.
- توثيق خادم NVIDIA Triton Inference: توثيق NVIDIA الرسمي لخيارات النشر والتكوينات التفصيلية.
ستساعدك هذه الأدلة على دمج نماذج 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 وتقارير تحليل الأداء الخاصة بنا.