
كيفية استخدام API Tensorrt C ++ لاستدلال تعلم الآلة GPU عالي الأداء.
يدعم النماذج ذات المدخلات المفردة / المتعددة والمخرجات المفردة / المتعددة مع تجميع.
نظرة عامة على المشروع. رمز الفيديو العميق
يبحث هذا المشروع بنشاط عن المشرفين للمساعدة في توجيه نموه وتحسينه. إذا كنت متحمسًا لهذا المشروع وتهتم بالمساهمة ، فأنا أحب أن أسمع منك!
لا تتردد في التواصل عبر LinkedIn لمناقشة كيف يمكنك المشاركة.
قرأت جميع مستندات Nvidia Tensorrt حتى لا تضطر!
يوضح هذا المشروع كيفية استخدام API Tensorrt C ++ لاستدلال GPU عالي الأداء على بيانات الصورة. ويغطي كيفية القيام بما يلي:
تفترض التعليمات التالية أنك تستخدم Ubuntu 20.04 أو 22.04. ستحتاج إلى توفير نموذج ONNX الخاص بك لهذا الرمز النموذج أو يمكنك تنزيل نموذج العينة (انظر قسم التحقق من العقل أدناه).
sudo apt install build-essentialsudo snap install cmake --classicsudo apt install libspdlog-dev libfmt-dev (للتسجيل)build_opencv.sh المتوفر في ./scripts/ .CUDNN_INCLUDE_DIR و CUDNN_LIBRARY في البرنامج النصي.CMakeLists.txt واستبدل TODO بالمسار إلى تثبيت Tensorrt الخاص بك.mkdir buildcd buildcmake ..make -j$(nproc)./run_inference_benchmark --onnx_model ../models/yolov8n.onnx./run_inference_benchmark --trt_model ../models/yolov8n.engine.NVIDIAGeForceRTX3080LaptopGPU.fp16.1.1YOLOv8n من هنا.pip3 install ultralytics أولاً. from ultralytics import YOLO
model = YOLO ( "./yolov8n.pt" )
model . fuse ()
model . info ( verbose = False ) # Print model information
model . export ( format = "onnx" , opset = 12 ) # Export the model to onnx using opset 12yolov8n.onnx ، في دليل ./models/ ../inputs/team.jpg أن ينتج عن متجه الميزة التالية: 3.41113 16.5312 20.8828 29.8984 43.7266 54.9609 62.0625 65.8594 70.0312 72.9531 ...
يمكن أن يؤدي التمكين الدقة int8 إلى زيادة تسريع الاستدلال بتكلفة الحد من الدقة بسبب انخفاض النطاق الديناميكي. بالنسبة لدقة int8 ، يجب على المستخدم توفير بيانات المعايرة التي تمثل البيانات الحقيقية التي سيشاهدها النموذج. ينصح باستخدام صور 1K+ المعايرة. لتمكين الاستدلال int8 مع نموذج فحص العقل yolov8 ، يجب اتخاذ الخطوات التالية:
options.precision = Precision::FP16; إلى options.precision = Precision::INT8; في main.cppoptions.calibrationDataDirectoryPath = ""; يجب تغييرها في main.cpp لتحديد مسار يحتوي على بيانات المعايرة.wget http://images.cocodataset.org/zips/val2017.zipInt8EntropyCalibrator2::getBatch TODO engine.cpp ..calibration . إذا كنت ترغب في تجديد بيانات المعايرة ، فيجب عليك حذف ملف ذاكرة التخزين المؤقت هذا.Options.calibrationBatchSize .يتم تشغيل المعايير على RTX 3050 Ti Laptop GPU ، 11th Gen Intel (R) Core (TM) I9-11900H @ 2.50GHz.
| نموذج | دقة | حجم الدُفعة | وقت الاستنتاج AVG |
|---|---|---|---|
| Yolov8n | FP32 | 1 | 4.732 مللي ثانية |
| Yolov8n | FP16 | 1 | 2.493 مللي ثانية |
| Yolov8n | int8 | 1 | 2.009 مللي ثانية |
| Yolov8x | FP32 | 1 | 76.63 مللي ثانية |
| Yolov8x | FP16 | 1 | 25.08 مللي ثانية |
| Yolov8x | int8 | 1 | 11.62 مللي ثانية |
أتساءل عن كيفية دمج هذه المكتبة في مشروعك؟ أو ربما كيفية قراءة مخرجات نموذج YOLOV8 لاستخراج معلومات ذات معنى؟ إذا كان الأمر كذلك ، تحقق من آخر مشروعي ، هما yolov8-tensorrt-CPP و yolov9-tensorrt-CPP ، والذي يوضح كيفية استخدام API Tensorrt c ++ لتشغيل yolov8/9 (يدعم الكشف عن الكائنات ، والتجزئة الدلالية ، وتقدير تكوين الجسم). أنها تستفيد من هذا المشروع في الواجهة الخلفية!
project-root/
├── include/
│ ├── engine/
│ │ ├── EngineRunInference.inl
│ │ ├── EngineUtilities.inl
│ │ └── EngineBuildLoadNetwork.inl
│ ├── util/...
│ ├── ...
├── src/
| ├── ...
│ ├── engine.cpp
│ ├── engine.h
│ └── main.cpp
├── CMakeLists.txt
└── README.mdinclude/engine . لقد كتبت الكثير من التعليقات في جميع أنحاء الكود والتي يجب أن تجعل من السهل فهم ما يجري.include/engine/EngineRunInference.inl .include/engine/EngineBuildLoadNetwork.inl . يستخدم التطبيق مكتبة spdlog للتسجيل. يمكنك تغيير مستوى السجل عن طريق ضبط Pheasor Variable LOG_LEVEL إلى إحدى القيم التالية: trace ، debug ، info ، warn ، error ، critical ، off .
إذا كانت لديك مشكلات في إنشاء ملف محرك Tensorrt من نموذج ONNX ، ففكر في تعيين LOG_LEVEL البيئة trace التطبيق وإعادة تشغيله. يجب أن يمنحك هذا مزيدًا من المعلومات حول المكان الذي تفشل فيه عملية الإنشاء بالضبط.
إذا كان هذا المشروع مفيدًا لك ، فسأقدر ما إذا كان بإمكانك إعطائه نجمًا. سيشجعني ذلك على ضمان تحديثه وحل المشكلات بسرعة. أقوم أيضًا بعمل استشاري إذا كنت بحاجة إلى مزيد من مساعدة محددة. تواصل معي على LinkedIn.
لويك تيتل | Thomaskleiven | ويسين |
v6.0
v5.0
Engine لاتخاذ معلمة قالب تحدد نوع بيانات إخراج النماذج. يدعم التنفيذ الآن مخرجات Type float و __half و int8_t و int32_t و bool و uint8_t .Options قد تم تعيينها بشكل صحيح لنموذجك (على سبيل المثال ، إذا تم تجميع النموذج الخاص بك لـ FP32 ولكنك تحاول تشغيل استنتاج FP16 ، فسوف يفشل ، وربما بدون خطأ مطوّل).v4.1
v4.0
v3.0
IExecutionContext::enqueueV3() ).driver إلى run_inference_benchmark ، ويجب الآن نقل المسار إلى نموذج ONNX كوسيطة سطر الأوامر.Options.doesSupportDynamicBatchSize إزالته. التنفيذ الآن الأعمدة التلقائية مدعومة بأحجام الدُفعات.Options.maxWorkspaceSize إزالته. maxworkspaceize. لا يقتصر التنفيذ الآن على ذاكرة GPU أثناء إنشاءات النموذج ، مما يسمح للتنفيذ باستخدام أكبر قدر من تجمع الذاكرة المتاح للطبقات المتوسطة.v2.2
v2.1
v2.0
Options.optBatchSizes ، واستبدالها Options.optBatchSize .شكراً لهؤلاء الأشخاص الرائعين (مفتاح الرموز التعبيرية):
يتبع هذا المشروع مواصفات جميع المساهمين. مساهمات من أي نوع ترحيب!