
人工智能深度學習計算機視覺【免費下載鏈接】tensorrtxImplementation of popular deep learning networks with TensorRT network definition API項目地址https://gitcode.com/gh_mirrors/te/tensorrtx點擊查看免費下載導讀本文以 yolo11/readme.md 為主體系統(tǒng)講解在 tensorrtx 開源倉庫中如何將 Ultralytics YOLO11n/s/m/l/x 全尺寸部署到 NVIDIA TensorRT-10 平臺覆蓋檢測det、分類cls、分割seg、關鍵點pose、旋轉框obb五大任務的完整鏈路PyTorch 權重轉 .wts → CMake 編譯 → 引擎序列化 → C 推理 → Python API 推理 → INT8 量化校準。讀者按本文操作可得到可復現(xiàn)、可運行的 YOLO11 TensorRT 推理程序并理解其網絡定義與插件實現(xiàn)的底層原理。1. 項目概述YOLO11 在 tensorrtx 中的定位tensorrtx 是一個使用 TensorRT network definition API 手工搭建流行深度學習網絡的倉庫項目描述Implementation of popular deep learning networks with TensorRT network definition API。YOLO11 是其中的一個獨立子項目位于 yolo11/其 readme 明確指出Yolo11 model supports TensorRT-10.與依賴 ONNX 導出的部署方式不同本子項目完全使用 TensorRT C APIINetworkDefinition、addConvolutionNd、addPoolingNd、addPluginV2等逐層重建網絡因此對 TensorRT 版本高度敏感當前實現(xiàn)鎖定 TensorRT 10 系列。1.1 支持矩陣readme 中列出的支持范圍如下任務精度支持API 支持入口程序YOLO11-det 目標檢測FP32 / FP16 / INT8Python / Cyolo11_det.cppYOLO11-cls 圖像分類FP32 / FP16 / INT8Python / Cyolo11_cls.cppYOLO11-seg 實例分割FP32 / FP16 / INT8Python / Cyolo11_seg.cppYOLO11-pose 姿態(tài)估計FP32 / FP16 / INT8Python / Cyolo11_pose.cppYOLO11-obb 旋轉目標檢測FP32 / FP16 / INT8Python / Cyolo11_obb.cpp從源碼結構看五個任務的 C 入口共用 src/ 與 include/ 下的網絡定義代碼model.cpp分別提供buildEngineYolo11Det/Cls/Seg/Pose/Obb五個構建函數(shù)差異集中在檢測頭Head的輸出組織方式上這為一次編譯、多任務復用打下了基礎。1.2 目錄結構yolo11/ ├── CMakeLists.txt # 編譯腳本產出 5 個可執(zhí)行文件 libmyplugins.so ├── gen_wts.py # PyTorch .pt → .wts 權重轉換腳本 ├── yolo11_det.cpp / _cls / _seg / _pose / _obb # C 入口 ├── yolo11_*_trt.py # Python API 推理示例 ├── include/ # 頭文件config.h / block.h / model.h / calibrator.h / preprocess.h / postprocess.h 等 ├── src/ # block.cpp / model.cpp / calibrator.cpp / preprocess.cu / postprocess.cpp / postprocess.cu └── plugin/ # yololayer.cu / yololayer.h檢測頭自定義插件2. 環(huán)境要求readme 給出了作者實測通過的軟件版本組合組件版本CUDA12.9cuDNN9.10.2TensorRT10.10.0.31OpenCV4.8.0ultralytics8.3.238Python3.12需要說明的是這是 readme 作者聲明的工作環(huán)境并非嚴格的下限要求。實際部署時只要 TensorRT 10.x 主版本一致、CUDA/cuDNN 與所用 TensorRT 構建版本匹配即可按相同流程操作。從 CMakeLists.txt 還可以看到兩個部署細節(jié)編譯期默認設置CMAKE_CUDA_ARCHITECTURES 75 80 86 89 90即覆蓋 Turing75、Ampere80/86、Ada Lovelace89、Hopper90等主流架構請按實際 GPU 計算能力修改該列表否則可能編譯出無法在當前顯卡加載的 kernel。構建腳本對 aarch64嵌入式平臺如 Jetson與 x86 分別處理CMAKE_SYSTEM_PROCESSOR MATCHES aarch64時鏈接/usr/local/cuda/targets/aarch64-linux否則鏈接/usr/local/cuda與 TensorRT 安裝目錄。TensorRT 頭文件/庫路徑在腳本中寫死為/workspace/shared/TensorRT-10.10.0.31與本機實際路徑不一致時必須手動修改。3. 核心配置項解析include/config.h所有可調參數(shù)集中在 include/config.hreadme 也明確指出Other configs please check src/config.h。該文件是調整精度、輸入尺寸、類別數(shù)、閾值的唯一入口。3.1 精度控制宏// #define USE_FP32 #define USE_FP16 // #define USE_INT8三個宏三選一注釋掉 FP32、打開 FP16 即默認以半精度構建打開 INT8 則走量化流程見第 8 節(jié)。對應實現(xiàn)中src/model.cpp 在構建引擎時根據宏設置BuilderFlag::kFP16或BuilderFlag::kINT8。3.2 常用配置參數(shù)宏默認值含義kInputTensorName/kOutputTensorNameimages/output輸入/輸出張量名kProtoTensorNameproto分割任務的原型掩碼張量名kNumClass80檢測/分割類別數(shù)COCOkPoseNumClass1姿態(tài)任務類別數(shù)只有 person 一類kNumberOfPoints17姿態(tài)關鍵點數(shù)量kObbNumClass15OBB 旋轉框類別數(shù)kObbNe1OBB 額外輸出參數(shù)個數(shù)角度kBatchSize1批大小kGpuId0使用的 GPU 編號kInputH/kInputW640 / 640檢測、分割、姿態(tài)輸入尺寸kObbInputH/kObbInputW1024 / 1024OBB 輸入尺寸kNmsThresh0.45NMS IoU 閾值kConfThresh0.5置信度閾值kConfThreshKeypoints0.5關鍵點置信度閾值kMaxInputImageSize3000×3000預處理緩存上限kMaxNumOutputBbox1000單圖最大輸出框數(shù)kInputQuantizationFolder./coco_calibINT8 校準圖片目錄kClsNumClass1000分類任務類別數(shù)ImageNetkClsInputH/kClsInputW224 / 224分類任務輸入尺寸需要自定義數(shù)據集例如改為 20 類時只需修改kNumClass并重新構建引擎OBB 與分類任務的輸入尺寸與檢測不同已在配置中獨立控制。4. 權重轉換PyTorch .pt → .wtstensorrtx 的通用約定是先用 Python 腳本把 PyTorch 權重序列化為自定義的.wts文本格式C 側再通過loadWeights見 src/block.cpp按參數(shù)名讀取并構建nvinfer1::Weights。4.1 轉換腳本參數(shù)gen_wts.py 提供三個命令行參數(shù)參數(shù)必填說明-w/--weights是輸入 .pt 權重路徑-o/--output否輸出 .wts 路徑缺省為權重同名文件-t/--type否默認detect任務類型可選detect / cls / seg / pose / obb4.2 轉換原理腳本內部執(zhí)行如下關鍵步驟gen_wts.py第 40-56 行torch.load(pt_file, map_locationcpu)[model].float()加載模型并強制轉為 FP32對detect/seg/pose/obb任務讀取檢測頭錨點model.model[-1].anchors計算anchor_grid anchors * stride后將其從模型中移除delattr因為在 TensorRT 側由插件統(tǒng)一處理錨框遍歷model.state_dict()第一行寫入參數(shù)總個數(shù)之后逐行寫出參數(shù)名 參數(shù)個數(shù)及每個浮點數(shù)的 IEEE-754 單精度十六進制表示struct.pack(f, float(vv)).hex()。.wts是明文文本文件行數(shù)與參數(shù)個數(shù)一一對應C 側 loadWeights 按同一格式解析為std::mapstd::string, Weights。4.3 生成五類權重readme 給出的完整命令流程為以 nano 為例其余尺寸同理# 1. 準備 ultralytics 訓練代碼與預訓練權重下載 ultralytics v8.3.238 源碼包 # 并從官方 Assets 發(fā)布頁分別獲取以下 .pt 文件 # yolo11n.pt 檢測 # yolo11n-cls.pt 分類 # yolo11n-seg.pt 分割 # yolo11n-pose.pt 姿態(tài) # yolo11n-obb.pt 旋轉框 # 2. 將轉換腳本拷貝到 ultralytics 目錄并依次轉換 cp [PATH-TO-TENSORRTX]/yolo11/gen_wts.py . python gen_wts.py -w yolo11n.pt -o yolo11n.wts -t detect python gen_wts.py -w yolo11n-cls.pt -o yolo11n-cls.wts -t cls python gen_wts.py -w yolo11n-seg.pt -o yolo11n-seg.wts -t seg python gen_wts.py -w yolo11n-pose.pt -o yolo11n-pose.wts -t pose python gen_wts.py -w yolo11n-obb.pt -o yolo11n-obb.wts -t obb每個-t類型必須與 .pt 權重自身任務一致否則檢測頭結構對不上后續(xù)構建引擎時會因權重缺失而斷言失敗。轉換后每個任務得到一個.wts文件。5. 編譯構建readme 的構建步驟cd [PATH-TO-TENSORRTX]/yolo11 mkdir build cd build cmake .. make編譯成功后會生成五個可執(zhí)行文件yolo11_det、yolo11_cls、yolo11_seg、yolo11_pose、yolo11_obb動態(tài)庫libmyplugins.so由 plugin/yololayer.cu 編譯而來包含檢測頭自定義插件YoloLayer_TRT供引擎序列化與 Python 推理加載使用。從 CMakeLists.txt 可見myplugins僅鏈接nvinfer與cudart各可執(zhí)行文件再額外鏈接myplugins與 OpenCV。編譯前請確認CUDA 架構列表與實際顯卡匹配TensorRT 頭文件/庫路徑正確腳本默認/workspace/shared/TensorRT-10.10.0.31OpenCV 可被find_package(OpenCV)找到。6. 命令行參數(shù)約定與推理流程五個可執(zhí)行文件遵循統(tǒng)一的-s/-d參數(shù)協(xié)議以 yolo11_det.cpp 中的parse_args第 122-167 行為例./yolo11_det -s [.wts] [.engine] [n/s/m/l/x] # 序列化由 .wts 構建并保存 engine ./yolo11_det -d [.engine] ../images [c/g] # 反序列化加載 engine 并批量推理-s構建引擎并寫入 plan 文件。serialize_engine內部創(chuàng)建IBuilder調用buildEngineYolo11Det后把IHostMemory數(shù)據寫入二進制文件。-d從 plan 文件反序列化引擎逐批讀入圖片執(zhí)行推理結果圖保存在 build 目錄下輸出文件名為_原圖名。[c/g]表示后處理位置c表示在 CPU 上做解碼 NMSbatch_nmsg表示在 GPU 上通過cuda_decodecuda_nms見 src/postprocess.cu完成解碼與 NMS再由batch_process回讀結果。注意g模式當前不支持kBatchSize 1代碼中會直接退出。6.1 子模型 n/s/m/l/x 的網絡超參第五個參數(shù)[n/s/m/l/x]決定網絡寬度與深度。yolo11_det.cpp中硬編碼了與 Ultralytics YOLO11 各尺寸一致的縮放系數(shù)子模型depthgdwidthgwmax_channels內部typen0.500.251024ns0.500.501024sm0.501.00512ml1.001.00512lx1.001.50512x這些系數(shù)在 src/model.cpp 中通過get_width(x, gw, max_channels)通道數(shù)取 8 的倍數(shù)向上取整與get_depth(x, gd)深度四舍五入且結果不小于 1換算成實際網絡層數(shù)/通道數(shù)從而在不改動代碼的情況下復用同一套網絡定義構建不同尺寸的模型。6.2 檢測任務Detectioncp [PATH-TO-ultralytics]/yolo11n.wts . # 構建并序列化 TensorRT 引擎 ./yolo11_det -s yolo11n.wts yolo11n.engine n # 運行推理c CPU 后處理g GPU 后處理 ./yolo11_det -d yolo11n.engine ../images c # 結果保存在 build 目錄推理主循環(huán)yolo11_det.cpp第 225-253 行按kBatchSize分批次cv::imread讀圖經cuda_batch_preprocesssrc/preprocess.cu完成縮放填充到 640×640然后enqueueV3異步推理最后draw_bbox繪制并cv::imwrite輸出。6.3 分類任務Classification分類使用獨立的 224×224 輸入輸出經全局平均池化 全連接model.10見buildEngineYolo11Cls得到 1000 類得分cp [PATH-TO-ultralytics]/yolo11n-cls.wts . # 構建并序列化 TensorRT 引擎 ./yolo11_cls -s yolo11n-cls.wts yolo11n-cls.engine n # 下載 ImageNet 類別標簽文件imagenet_classes.txt wget imagenet_classes.txt 下載地址 -O imagenet_classes.txt # 運行推理 ./yolo11_cls -d yolo11n-cls.engine ../images分類程序讀入標簽文件后在推理結果中按 top-1/top-5 輸出類別名稱與置信度。6.4 分割任務Segmentation分割任務的引擎輸出除了檢測框外還包含 32 維掩碼系數(shù)Detection.mask[32]見 include/types.h推理時與proto特征相乘還原掩碼cp [PATH-TO-ultralytics]/yolo11n-seg.wts . # 構建并序列化 TensorRT 引擎 ./yolo11_seg -s yolo11n-seg.wts yolo11n-seg.engine n # 下載 COCO 類別標簽文件 wget -O coco.txt coco-labels.txt 下載地址 # 運行推理第三個參數(shù) c 為后處理位置第四個參數(shù)為標簽文件 ./yolo11_seg -d yolo11n-seg.engine ../images c coco.txt6.5 姿態(tài)任務Pose姿態(tài)輸出包含 17 個關鍵點的(x, y, conf)三元組配置中kNumberOfPoints 17、kConfThreshKeypoints 0.5cp [PATH-TO-ultralytics]/yolo11n-pose.wts . # 構建并序列化 TensorRT 引擎 ./yolo11_pose -s yolo11n-pose.wts yolo11n-pose.engine n # 運行推理 ./yolo11_pose -d yolo11n-pose.engine ../images6.6 旋轉框任務OBBOBB 是特殊任務輸入尺寸為 1024×1024kObbInputH/W類別數(shù) 15kObbNumClass且Detection結構體帶angle字段用于角度回歸cp [PATH-TO-ultralytics]/yolo11n-obb.wts . # 構建并序列化 TensorRT 引擎 ./yolo11_obb -s yolo11n-obb.wts yolo11n-obb.engine n # 下載示例圖片并放入 images 目錄 wget -O P0015.png P0015.png 下載地址 mv P0015.png ../images # 運行推理 ./yolo11_obb -d yolo11n-obb.engine ../images7. 網絡定義的源碼級原理7.1 基礎算子封裝src/block.cppsrc/block.cpp 用 TensorRT API 手工實現(xiàn)了 YOLO11 的全部基礎模塊convBnSiLU第 74-94 行Conv2d BatchNorm SiLU。其中 BatchNorm 被數(shù)學等價地折疊為IScaleLayeraddBatchNorm2d第 40-72 行將gamma/beta/mean/var融合成 scale/shift 兩個向量避免顯式計算 BN 算子C3K2第 239-275 行對應 YOLO11 主干中的 C3k2 模塊通過addSlice把cv1輸出按通道一分為二一側串聯(lián)多個bottleneck或 C3k再與另一側addConcatenation匯合最后cv2卷積C2PSA第 380-415 行YOLO11 引入的 PSA位置敏感自注意力模塊。從源碼可以推斷其核心是PSABlock第 357-378 行內的Attention第 293-355 行qkv卷積 → reshape 多頭 → 矩陣乘注意力圖 → Softmax → 與v加權 → 疊加可學習的相對位置編碼peDepthwise Conv→proj卷積再串接兩層 FFN每個子層都帶 shortcut 殘差SPPF第 113-136 行三個串聯(lián)的最大池化5×5、stride1、padding2后與原始特征addConcatenation再 1×1 卷積DFL第 138-157 行分布聚焦損失對應的解碼分支將 4×16 的分布通過 Softmax 與 1×1 卷積加權得到 4 個回歸量DWConv第 417-437 行深度可分離卷積conv-setNbGroups(ch)用于 PSA 中的編碼分支。7.2 檢測頭插件plugin/yololayer.cu三個尺度的特征圖經拼接后接入自定義插件YoloLayer_TRTaddYoLoLayerblock.cpp 第 159-218 行。插件通過PluginField傳入combinedInfo數(shù)組包含類別數(shù)、關鍵點數(shù)、輸入尺寸、kMaxNumOutputBbox以及 seg/pose/obb 標志位再配合各尺度網格大小px_arry。插件在 GPU 上一次性完成 anchor 解碼、多尺度合并與閾值過濾輸出統(tǒng)一為[kMaxNumOutputBbox]長度的Detection結構見 include/types.hCPU 后處理只需做最終的 NMS。7.3 尺寸換算與推理緩沖src/model.cpp 中get_width/get_depth負責把 n/s/m/l/x 的 gd/gw 映射為實際通道與深度C 入口則按kOutputSize kMaxNumOutputBbox * sizeof(Detection)/sizeof(float) 1分配輸出緩沖并在運行時通過engine-getTensorShape讀取實際輸出框數(shù)model_bboxesyolo11_det.cpp第 206-207 行。8. INT8 量化readme 給出了 INT8 量化三步流程準備校準圖片可從訓練集隨機挑選 1000 張以上或直接下載作者提供的 COCO 校準集coco_calib解壓到構建目錄將校準圖片目錄放入yolo11/build下路徑必須與kInputQuantizationFolder一致默認./coco_calib開啟量化并重新編譯# 編輯 include/config.h # 注釋 #define USE_FP16取消注釋 #define USE_INT8 makeconfig.h中默認// #define USE_INT8即關閉狀態(tài)打開后 src/model.cpp 會檢查builder-platformHasFastInt8()并斷言設置BuilderFlag::kINT8創(chuàng)建Int8EntropyCalibrator2src/calibrator.cpp按kInputW/kInputH批量讀取coco_calib目錄中的圖片完成熵校準校準表保存為int8calib.table。校準完成后后續(xù)-s序列化生成的 engine 即 INT8 引擎推理流程與 FP16 完全一致。需要強調INT8 引擎對當前輸入尺寸與校準集敏感更換分辨率或類別數(shù)后應重新校準。9. Python API 推理readme 提供可選的第 3 步在 Python 中加載 C 序列化好的 engine 與插件庫進行推理。# 安裝 python-tensorrt、pycuda 等依賴 # 確保 build 目錄中已有 yolo11n.engine 與 libmyplugins.so python yolo11_det_trt.py ./build/yolo11n.engine ./build/libmyplugins.so9.1 常見坑與修復readme 明確記錄了兩個環(huán)境相關 FAQWindows 下pycuda._driver.LogicErrorLinux 下Segmentation fault。修復方式相同在 Python 文件頭部顯式初始化 PyCUDA 運行時import pycuda.autoinit import pycuda.driver as cuda這正是 yolo11_det_trt.py 第 13-14 行的寫法——pycuda.autoinit會在模塊導入時完成 CUDA 上下文初始化pycuda.driver提供顯存與流管理接口。腳本還通過ctypes.CDLL加載libmyplugins.so注冊插件否則反序列化 engine 時找不到YoloLayer_TRT并定義了與 C 一致的CONF_THRESH 0.5、IOU_THRESHOLD 0.4等常量以及YoLo11TRT類封裝預處理、推理與后處理。yolo11_seg_trt.py、yolo11_pose_trt.py、yolo11_obb_trt.py、yolo11_cls_trt.py與檢測腳本結構一致分別按各自任務解析輸出張量分割取proto 32 維掩碼系數(shù)姿態(tài)取 17×3 關鍵點OBB 取角度。10. 總結與注意事項基于 readme 與源碼將 YOLO11 在 tensorrtx 上的部署要點歸納如下版本鎖定網絡使用 TensorRT 10 的顯式 batch API 與enqueueV3接口構建不要混用 TensorRT 7/8 的舊 API 風格權重格式.wts是 tensorrtx 自有的文本權重格式必須與 gen_wts.py 的-t任務參數(shù)嚴格對應配置唯一入口精度、輸入尺寸、類別數(shù)、NMS/置信度閾值、量化目錄等全部在 include/config.h 修改改后需重新make后處理兩種模式cCPU通用且支持多 batchgGPU性能更優(yōu)但當前僅支持單 batchINT8 需要校準量化前務必準備足夠的校準圖片量化后的 engine 在更換輸入分辨率或數(shù)據集后需要重新校準Python 推理必須同時提供 engine 與libmyplugins.so且要顯式import pycuda.autoinit這是 Windows 與 Linux 上常見異常的根因。若需查閱同一部署框架下的其他模型可參見倉庫根目錄 README.md 與其他子項目如 yolov8/、yolov10/、yolov13/的 readme它們遵循相同的.wts→ engine → 推理的整體流程。贊分享人工智能深度學習計算機視覺【免費下載鏈接】tensorrtxImplementation of popular deep learning networks with TensorRT network definition API項目地址https://gitcode.com/gh_mirrors/te/tensorrtx點擊查看免費下載相關推薦tensorrtx 中 YOLOv10 的 TensorRT-10 部署指南從 .pt 權重到 FP32/FP16/INT8 引擎tensorrtx 中 YOLOv10 的 TensorRT 10 部署指南從 .pt 權重到 FP32/FP16/INT8 引擎 導讀 本文基于 tenso人工智能深度學習計算機視覺tensorrtx 中 YOLOv8 的 TensorRT-10 完整部署指南從 .pt 權重到 FP32/FP16/INT8 推理tensorrtx 中 YOLOv8 的 TensorRT 10 完整部署指南從 .pt 權重到 FP32/FP16/INT8 推理 導讀 本文圍繞 tens人工智能深度學習計算機視覺TensorRT 部署 YOLOv3-Tiny 完整指南wts 權重轉換、引擎構建與推理tensorrtx 實戰(zhàn)TensorRT 部署 YOLOv3 Tiny 完整指南wts 權重轉換、引擎構建與推理tensorrtx 實戰(zhàn) YOLOv3 Tiny 是 YOLOv3人工智能深度學習計算機視覺上一篇【親測免費】 若依框架消息彈框提示增強資源文件提升用戶體驗的利器下一篇【MATLAB項目實戰(zhàn)】基于Morlet小波變換的滾動軸承故障特征提取研究精準故障診斷的利器創(chuàng)作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考