
Cara menggunakan TensorRt C ++ API untuk inferensi pembelajaran mesin GPU berkinerja tinggi.
Mendukung model dengan input tunggal / ganda dan output tunggal / ganda dengan batching.
Video Tinjauan Proyek. Kode video penyelaman dalam
Proyek ini secara aktif mencari pengelola untuk membantu memandu pertumbuhan dan peningkatannya. Jika Anda bersemangat tentang proyek ini dan tertarik untuk berkontribusi, saya ingin mendengar dari Anda!
Jangan ragu untuk menghubungi melalui LinkedIn untuk membahas bagaimana Anda bisa terlibat.
Saya membaca semua dokumen NVIDIA Tensorrt sehingga Anda tidak perlu melakukannya!
Proyek ini menunjukkan cara menggunakan API Tensorrt C ++ untuk inferensi GPU kinerja tinggi pada data gambar. Itu mencakup cara melakukan hal berikut:
Instruksi berikut menganggap Anda menggunakan Ubuntu 20.04 atau 22.04. Anda perlu menyediakan model ONNX Anda sendiri untuk kode sampel ini atau Anda dapat mengunduh model sampel (lihat bagian Periksa Sanity di bawah).
sudo apt install build-essentialsudo snap install cmake --classicsudo apt install libspdlog-dev libfmt-dev (untuk logging)build_opencv.sh yang disediakan di ./scripts/ .CUDNN_INCLUDE_DIR dan CUDNN_LIBRARY dalam skrip.CMakeLists.txt dan ganti TODO dengan jalur ke instalasi Tensorrt Anda.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 dari sini.pip3 install ultralytics terlebih dahulu. 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 , di direktori ./models/ ../inputs/team.jpg harus menghasilkan vektor fitur berikut: 3.41113 16.5312 20.8828 29.8984 43.7266 54.9609 62.0625 65.8594 70.0312 72.9531 ...
Mengaktifkan presisi INT8 selanjutnya dapat mempercepat inferensi dengan biaya pengurangan akurasi karena berkurangnya rentang dinamis. Untuk presisi int8, pengguna harus menyediakan data kalibrasi yang mewakili data nyata yang akan dilihat model. Disarankan untuk menggunakan gambar kalibrasi 1K+. Untuk mengaktifkan inferensi int8 dengan model pemeriksaan Sanity YOLOV8, langkah -langkah berikut harus diambil:
options.precision = Precision::FP16; ke options.precision = Precision::INT8; di main.cppoptions.calibrationDataDirectoryPath = ""; harus diubah di main.cpp untuk menentukan jalur yang mengandung data kalibrasi.wget http://images.cocodataset.org/zips/val2017.zipInt8EntropyCalibrator2::getBatch Method in engine.cpp (lihat TODO ) benar untuk model Anda..calibration ekstensi) sehingga pada optimasi model selanjutnya dapat digunakan kembali. Jika Anda ingin meregenerasi data kalibrasi, Anda harus menghapus file cache ini.Options.calibrationBatchSize .Benchmark dijalankan pada RTX 3050 Ti Laptop GPU, 11th Gen Intel (R) Core (TM) I9-11900H @ 2.50GHz.
| Model | Presisi | Ukuran batch | Waktu inferensi rata -rata |
|---|---|---|---|
| yolov8n | FP32 | 1 | 4,732 ms |
| yolov8n | FP16 | 1 | 2.493 ms |
| yolov8n | Int8 | 1 | 2,009 ms |
| yolov8x | FP32 | 1 | 76,63 ms |
| yolov8x | FP16 | 1 | 25.08 ms |
| yolov8x | Int8 | 1 | 11.62 ms |
Ingin tahu bagaimana mengintegrasikan perpustakaan ini ke dalam proyek Anda? Atau mungkin cara membaca output model YOLOV8 untuk mengekstrak informasi yang bermakna? Jika demikian, periksa dua proyek terbaru saya, YOLOV8-TENSORRT-CPP dan YOLOV9-TENSORRT-CPP, yang menunjukkan cara menggunakan Tensorrt C ++ API untuk menjalankan inferensi YOLOV8/9 (mendukung deteksi objek, segmentasi semantik, dan estimasi pose tubuh). Mereka memanfaatkan proyek ini di backend!
project-root/
├── include/
│ ├── engine/
│ │ ├── EngineRunInference.inl
│ │ ├── EngineUtilities.inl
│ │ └── EngineBuildLoadNetwork.inl
│ ├── util/...
│ ├── ...
├── src/
| ├── ...
│ ├── engine.cpp
│ ├── engine.h
│ └── main.cpp
├── CMakeLists.txt
└── README.mdinclude/engine . Saya telah menulis banyak komentar di seluruh kode yang seharusnya memudahkan untuk memahami apa yang sedang terjadi.include/engine/EngineRunInference.inl .include/engine/EngineBuildLoadNetwork.inl . Implementasi menggunakan pustaka spdlog untuk logging. Anda dapat mengubah level log dengan mengatur variabel lingkungan LOG_LEVEL ke salah satu nilai berikut: trace , debug , info , warn , error , critical , off .
Jika Anda memiliki masalah membuat file mesin TensorRT dari model ONNX, pertimbangkan untuk mengatur variabel lingkungan LOG_LEVEL untuk trace dan menjalankan kembali aplikasi. Ini harus memberi Anda lebih banyak informasi tentang di mana tepatnya proses pembangunan gagal.
Jika proyek ini bermanfaat bagi Anda, saya akan sangat menghargai jika Anda bisa memberikannya bintang. Itu akan mendorong saya untuk memastikannya terkini dan memecahkan masalah dengan cepat. Saya juga melakukan pekerjaan konsultasi jika Anda memerlukan bantuan yang lebih spesifik. Terhubung dengan saya di LinkedIn.
Loic Tetrel | Thomaskleiven | Wicyn |
V6.0
V5.0
Engine telah dimodifikasi untuk mengambil parameter template yang menentukan tipe data output model. Implementasinya sekarang mendukung output tipe float , __half , int8_t , int32_t , bool , dan uint8_t .Options telah diatur dengan benar untuk model Anda (misalnya, jika model Anda telah dikompilasi untuk FP32 tetapi Anda mencoba menjalankan inferensi FP16, itu akan gagal, berpotensi tanpa kesalahan verbose).V4.1
V4.0
V3.0
IExecutionContext::enqueueV3() ).driver menjadi run_inference_benchmark dan sekarang harus diteruskan jalur ke model onnx sebagai argumen baris perintah.Options.doesSupportDynamicBatchSize yang Dihapus.doessupportdynamicBatchSize. Implementasi sekarang deteksi otomatis mendukung ukuran batch.Options.maxWorkspaceSize yang Dihapus.MaxWorkspacessize. Implementasi sekarang tidak membatasi memori GPU selama konstruksi model, memungkinkan implementasi untuk menggunakan kumpulan memori sebanyak yang tersedia untuk lapisan perantara.v2.2
V2.1
V2.0
Options.optBatchSizes telah dihapus, diganti dengan Options.optBatchSize .Terima kasih kepada orang -orang yang luar biasa ini (Kunci Emoji):
Proyek ini mengikuti spesifikasi semua-kontributor. Kontribusi apa pun yang baik!