ubuntu20.04基于tensorRT和c++跑yolo11

設備

系統:Ubuntu 20.04
顯卡:NVIDIA GeForce RTX 3050
顯卡驅動: Driver Version: 535.183.01 CUDA Version: 12.2

關鍵軟件版本總結

Cmake: 3.28.6
Cuda: 12.2.2
Cudnn: 8.9.7
TensorRT: 10.8.0.43
Python:3.10.16

環境配置步驟

1、安裝高版本cmake

由于用到的tensorRT_yolo工具需要cmake 3.18以上,所以按如下辦法卸載了原有的cmake 3.16,重裝了cmake 3.28.6
https://zhuanlan.zhihu.com/p/519732843
注意按照如上辦法卸載cmake時,會順帶卸載掉你設備上的ros環境,之后需要重裝ros

2、重裝ros

經過上面第一個步驟,原有ros被卸載,重裝一下ros,是否安裝ros和跑tensorRT沒有關系,只是我這邊后面會用到ros,所以裝了,步驟參考:
ros安裝(一鍵最簡安裝,吹爆魚香ROS,請叫我魚吹)

3、多版本切換CUDA

設備的顯卡驅動最高支持cuda 12.2.2,所以選擇該版本使用。
設備上有很多個cuda版本(/usr/local/ 路徑下看),這里需要用到cuda 12.2.2,所以安裝如下方法實現多版本cuda共存,并指定使用cuda 12.2.2:
ubuntu 20.04下多版本cuda&cudnn下載與安裝
安裝之后,除了根據以上鏈接設置cuda軟連接之外,還需要配置下環境變量:
在~/.bashrc文件中添加如下內容

# CUDA enviroment variable
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

4、安裝TensorRT

下載TensorRT: https://developer.nvidia.com/tensorrt/download
我開始選擇了如下兼容cuda 12版本的tensorRT的tar包,如下選項
TensorRT 10.7 GA for Linux x86_64 and CUDA 12.0 to 12.6 TAR Package
但是安裝后發現,使用trtexec工具會報錯:

(py310_yolo) tl@tl-Default-string:~/code/tensorRT_test$ trtexec --version
&&&& RUNNING TensorRT.trtexec [TensorRT v100700] [b23] # trtexec --version
Cuda failure at /_src/samples/common/safeCommon.h:262: unknown error

于是改為下載TensorRT 10.8版本,選擇如下選項:
TensorRT 10.8 GA for Linux x86_64 and CUDA 12.0 to 12.8 TAR Package
解壓:
tar -xvzf TensorRT-10.7.0.23.Linux.x86_64-gnu.cuda-12.6.tar.gz
將解壓后的所有文件剪切到目錄:

sudo mv TensorRT-10.8.0.43 /usr/local

設置環境變量
gedit ~/.bashrc
添加TensorRT環境變量

export PATH=$PATH:/usr/local/TensorRT-10.8.0.43/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/TensorRT-10.8.0.43/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/TensorRT-10.8.0.43/targets/x86_64-linux-gnu/lib

安裝后,其中有個叫trtexec的工具,這個可以用來將.onnx模型轉成TensorRT的序列化.engine模型文件:

(py310_yolo) tl@tl-Default-string:~$ whereis trtexec
trtexec: /usr/local/TensorRT-10.8.0.43/targets/x86_64-linux-gnu/bin/trtexec(py310_yolo) tl@tl-Default-string:~$ trtexec --version
&&&& RUNNING TensorRT.trtexec [TensorRT v100800] [b43] # trtexec --version
[07/09/2025-14:25:23] [I] TF32 is enabled by default. Add --noTF32 flag to further improve accuracy with some performance cost.
=== Model Options ===--onnx=<file>               ONNX model
...

5、安裝python虛擬環境

由于后面的TensorRT_yolo需要用到python虛擬環境,且需要python 3.9以上的版本,我選擇了訓練yolo 11時所用的python 3.10.16,安裝步驟參考:
ubuntu創建指定版本python虛擬環境

6、配置TensorRT-YOLO工具

TensorRT-YOLO編譯安裝,參考如下
快速編譯安裝
若看不明白官方參考,可以無腦按我如下步驟配置
首先,克隆 TensorRT-YOLO 倉庫:

git clone https://github.com/laugh12321/TensorRT-YOLO
cd TensorRT-YOLO

然后使用 CMake,按照以下步驟操作:

pyenv activate py310_yolo    # 激活前面安裝的python 3.10.16虛擬環境,后面要用到python相關的步驟都得在此環境下操作
pip install "pybind11[global]"
cmake -S . -B build -DTRT_PATH=/usr/local/tensorrt -DBUILD_PYTHON=ON
cmake --build build -j$(nproc) --config Release

構建最新版本的 tensorrt_yolo,并安裝:

cd TensorRT-YOLO/python
pip install --upgrade build
python -m build --wheel# 安裝模型導出及推理相關依賴
pip install /home/tl/code/TensorRT-YOLO/python/dist/tensorrt_yolo-6.2.0-py3-none-any.whl[export]

注意以上最后一個步驟跟官方的有點不一樣,用的是安裝包的絕對路徑,以防出錯。
經過第6步,會有個trtyolo工具生成,這個可以用來將python訓練的yolo11.pt模型裝成.onnx模型:

(py310_yolo) tl@tl-Default-string:~$ whereis trtyolo
trtyolo: /home/tl/.pyenv/shims/trtyolo /home/tl/.local/bin/trtyolo

7、獨立使用Detect功能

上面第6步驟安裝好了TensorRT-YOLO工具,可以按照其說明,在該工具工程下使用detect、segment、obb等各種功能,具體參考官方文檔:
在這里插入圖片描述
但是我們寫的算法工程需要獨立于該工具,且只需要用到其中的Detect功能,那么只需從工具如下目錄中,

..//TensorRT-YOLO/examples/detect

拷貝出如下內容,形成單獨的工程即可,圖中紅框為從上面路徑必須拷貝的文件
在這里插入圖片描述

其中,labels.txt改為你自己的所需的類名,CMakeLists.txt針對ubuntu系統做了刪減,CMakeLists.txt內容如下:

cmake_minimum_required(VERSION 3.18)#-------------------------------------------------------------------------------
# 項目基礎配置
#-------------------------------------------------------------------------------
project(detect LANGUAGES CXX CUDA)# 生成編譯數據庫(供clangd等工具使用)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)# 設置 C++ 標準
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)#-------------------------------------------------------------------------------
# 依賴配置
#-------------------------------------------------------------------------------
find_package(OpenCV REQUIRED)# CUDA 配置
find_package(CUDAToolkit REQUIRED)# 允許用戶覆蓋默認的 CUDA 架構
if(NOT DEFINED CMAKE_CUDA_ARCHITECTURES)set(CMAKE_CUDA_ARCHITECTURES "89;86;75;70;61")  # 默認支持架構
endif()# TensorRT 路徑配置
set(TRT_PATH /usr/local/TensorRT-10.8.0.43)
if(NOT TRT_PATH)message(FATAL_ERROR "TensorRT path must be specified with -DTRT_PATH=/path/to/tensorrt")
endif()# 定義 TensorRT 庫的版本選擇
set(TRT_LIB_DIR "${TRT_PATH}/lib")
set(TRT_LIBS nvinfer nvinfer_plugin nvonnxparser)#-------------------------------------------------------------------------------
# 編譯工具鏈配置
#-------------------------------------------------------------------------------
function(set_target_compile_options target)# GCC/Clang 配置# C++編譯選項target_compile_options(${target} PRIVATE$<$<AND:$<CONFIG:Release>,$<COMPILE_LANGUAGE:CXX>>:-O3 -march=native -flto=auto -DNDEBUG>$<$<AND:$<CONFIG:Debug>,$<COMPILE_LANGUAGE:CXX>>:-O0 -g3 -fno-omit-frame-pointer -fno-inline>)# CUDA編譯選項target_compile_options(${target} PRIVATE$<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=-Wno-deprecated-declarations>$<$<AND:$<CONFIG:Release>,$<COMPILE_LANGUAGE:CUDA>>:-O3>$<$<AND:$<CONFIG:Debug>,$<COMPILE_LANGUAGE:CUDA>>:-g -G>)target_link_options(${target} PRIVATE $<$<AND:$<CONFIG:Release>,$<COMPILE_LANGUAGE:CXX>>:-O3 -flto=auto>$<$<AND:$<CONFIG:Debug>,$<COMPILE_LANGUAGE:CXX>>:-g3>)# 跨平臺宏定義target_compile_definitions(${target} PRIVATE$<$<CONFIG:Debug>:DEBUG>$<$<NOT:$<CONFIG:Debug>>:NDEBUG>)
endfunction()#-------------------------------------------------------------------------------
# TensorRT/CUDA 目標配置
#-------------------------------------------------------------------------------
function(configure_cuda_trt_target target)# 包含目錄target_include_directories(${target} PRIVATE${TRT_PATH}/include)# 鏈接目錄target_link_directories(${target} PRIVATE${TRT_LIB_DIR})# 添加鏈接庫target_link_libraries(${target} PRIVATECUDA::cudart${TRT_LIBS})# CUDA 特性set_target_properties(${target} PROPERTIESCUDA_SEPARABLE_COMPILATION ONCUDA_RESOLVE_DEVICE_SYMBOLS ON)
endfunction()#-------------------------------------------------------------------------------
# 可執行文件
#-------------------------------------------------------------------------------
add_executable(detect ${PROJECT_SOURCE_DIR}/src/detect.cpp)
configure_cuda_trt_target(detect)
set_target_compile_options(detect)set(DEPLOY_PATH /home/tl/code/TensorRT-YOLO)# 包含頭文件目錄
target_include_directories(detect PRIVATE${OpenCV_INCLUDE_DIRS}${DEPLOY_PATH}
)# 鏈接庫目錄
target_link_directories(detect PRIVATE${DEPLOY_PATH}/lib
)# 私有鏈接庫
target_link_libraries(detect PRIVATE${OpenCV_LIBS}deploy
)# 模塊配置
set_target_properties(detect PROPERTIESOUTPUT_NAME "detect"RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin"RUNTIME_OUTPUT_DIRECTORY_DEBUG "${PROJECT_SOURCE_DIR}/bin"RUNTIME_OUTPUT_DIRECTORY_RELEASE "${PROJECT_SOURCE_DIR}/bin"
)

上面CMakeLists.txt內容注意設置你的TensorRT-YOLO工具目錄,set(DEPLOY_PATH /home/tl/code/TensorRT-YOLO)
如此編譯你的單獨工程,會自動生成bin目錄,有個名為detect的可執行文件,用此文件即可推理你的圖片了。
推理過程
首先參考官方文檔,生成.engine模型文件:
https://github.com/laugh12321/TensorRT-YOLO/blob/main/examples/detect/README.md
然后到你自己的工程
使用以下命令運行推理:

cd bin
./detect -e ../models/yolo11n.engine -i ../images -o ../output -l ../labels.txt

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/88597.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88597.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88597.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

玖玖NFT數字藏品源碼(源碼下載)

玖玖NFT數字藏品源碼 這套還是很不錯的&#xff0c;前端uniapp&#xff0c;后端FastAdmin&#xff0c;對接匯元支付&#xff0c;富友支付&#xff0c;對接avata鏈&#xff0c;感興趣的自行下載研究 源碼下載&#xff1a;https://download.csdn.net/download/m0_66047725/9133…

【Redis-05】高可用方案-主從哨兵

1 概述 高可用&#xff08;High Availability&#xff09;指系統在部分節點故障時仍能持續提供服務的能力。Redis 作為核心緩存組件&#xff0c;主流的高可用方案有主從復制、哨兵模式、集群模式三種。本文介紹主從復制、哨兵模式兩種高可用方案。 2 主從復制 通過 “一主多從”…

焊接機器人智能節氣裝置

工業焊接作為現代制造業的重要組成部分&#xff0c;廣泛應用于汽車、航空航天、建筑、船舶等多個領域。隨著自動化技術的快速發展&#xff0c;焊接機器人已成為提升焊接效率和質量的關鍵裝備。在傳統焊接及部分自動化焊接過程中&#xff0c;氣體流失問題仍然普遍存在&#xff0…

【6.1.0 漫畫數據庫技術選型】

漫畫數據庫技術選型 &#x1f3af; 學習目標&#xff1a;掌握架構師核心技能——數據庫技術選型&#xff0c;針對不同業務場景選擇最合適的數據庫方案 &#x1f3db;? 第一章&#xff1a;關系型數據庫對比選型 &#x1f914; MySQL vs PostgreSQL vs TiDB 想象數據庫就像不同…

CVE-2022-4262/CVE-2022-3038

CVE-2022-4262&#xff08;Linux內核UAF漏洞&#xff09;漏洞原理CVE-2022-4262是Linux內核中RDS&#xff08;Reliable Datagram Sockets&#xff09;協議實現的一個UAF&#xff08;Use-After-Free&#xff0c;釋放后使用&#xff09;漏洞。具體來說&#xff1a;在rds_rdma_ext…

[Token]Token merging for Vision Generation

Token Compression for Vision Domain_Generation 文章目錄Image GenerationToken Merging for Fast Stable Diffusion, CVPRW 2023.Token Fusion: Bridging the Gap between Token Pruning and Token Merging, WACV 2024ToDo: Token Downsampling for Efficient Generation of…

React封裝過哪些組件-下拉選擇器和彈窗表單

背景&#xff08;S - Situation&#xff09;&#xff1a;在某活動管理系統中&#xff0c;前端頁面需要支持用戶選擇“要配置的當前活動”&#xff0c;并提供「新增」「編輯」功能&#xff0c;操作內容包括填寫活動名稱、ID、版本號等字段。原始實現邏輯分散、復用性差&#xff…

多租戶架構下的多線程處理實踐指南

在現代 SaaS 系統中&#xff0c;多租戶架構&#xff08;Multi-Tenant Architecture&#xff09;已成為主流。然而&#xff0c;隨著系統性能要求的提升和業務復雜度的增加&#xff0c;多線程成為不可避免的技術手段。但在多租戶環境下使用多線程&#xff0c;容易引發數據錯亂、租…

MyBatis插件機制揭秘:從攔截器開發到分頁插件實戰

一、攔截器體系架構解析 1.1 責任鏈模式在MyBatis中的實現 MyBatis通過動態代理技術構建攔截器鏈&#xff0c;每個插件相當于一個切面&#xff1a; // 攔截器鏈構建過程 public class InterceptorChain {private final List<Interceptor> interceptors new ArrayList<…

百度文心一言開源ERNIE-4.5深度測評報告:技術架構解讀與性能對比

目錄一、技術架構解讀1.1、ERNIE 4.5 系列模型概覽1.2、模型架構解讀1.2.1、異構MoE&#xff08;Heterogeneous MoE&#xff09;1.2.2、視覺編碼器&#xff08;Vision Encoder&#xff09;1.2.3、適配器&#xff08;Adapter&#xff09;1.2.4、多模態位置嵌入&#xff08;Multi…

Matplotlib 模塊入門

Python 中有個非常實用的可視化庫 ——Matplotlib。數據可視化是數據分析中不可或缺的環節&#xff0c;而 Matplotlib 作為 Python 的 2D 繪圖庫&#xff0c;能幫助我們生成高質量的圖表&#xff0c;讓數據更直觀、更有說服力。接下來&#xff0c;我們將從 Matplotlib 的概述、…

LeetCode 3169.無需開會的工作日:排序+一次遍歷——不需要正難則反,因為正著根本不難

【LetMeFly】3169.無需開會的工作日&#xff1a;排序一次遍歷——不需要正難則反&#xff0c;因為正著根本不難 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/count-days-without-meetings/ 給你一個正整數 days&#xff0c;表示員工可工作的總天數&#xff08;從第…

VUE3 el-table 主子表 顯示

在Vue 3中&#xff0c;實現主子表&#xff08;主從表&#xff09;的顯示通常涉及到兩個組件&#xff1a;一個是主表&#xff08;Master Table&#xff09;&#xff0c;另一個是子表&#xff08;Detail Table&#xff09;。我們可以使用el-table組件來實現這一功能。這里&#x…

張量數值計算

一.前言前面我們介紹了一下pytorch還有張量的創建&#xff0c;而本章節我們就來介紹一下張量的計算&#xff0c;類型轉換以及操作&#xff0c;這個是十分重要的&#xff0c;我們的學習目標是&#xff1a;掌握張量基本運算、掌握阿達瑪積、點積運算 掌握PyTorch指定運算設備。Py…

部署項目頻繁掉線-----Java 進程在云服務器內存不足被 OOM Killer 頻繁殺死-----如何解決?

一、查詢系統日志grep -i "java" /var/log/messages執行這條命令&#xff0c;檢查系統日志里是否有 Java 進程被 OOM Killer 殺死的記錄。日志中反復出現以下內容&#xff1a;Out of memory: Killed process 3679325 (java) total-vm:2947000kB, anon-rss:406604kB..…

【保姆級教程】基于anji-plus-captcha實現行為驗證碼(滑動拼圖+點選文字),前后端完整代碼奉上!

前言 驗證碼作為Web應用的第一道安全防線&#xff0c;其重要性不言而喻。但你是否還在為以下問題煩惱&#xff1a; 傳統字符驗證碼用戶體驗差&#xff0c;識別率低&#xff1f;驗證碼安全性不足&#xff0c;輕易被爬蟲破解&#xff1f;前后端對接繁瑣&#xff0c;集成效率低&…

HTML-八股

1、DOM和BOM DOM是表示HTML或者XML文檔的標準的對象模型&#xff0c;將文檔中每個組件&#xff08;元素、屬性等&#xff09;都作為一個對象&#xff0c;使用JS來操作這個對象&#xff0c;從而動態改變頁面內容&#xff0c;結合等。 DOM是以樹型結構組織文檔內容&#xff0c;樹…

ADI的EV-21569-SOM核心板和主板轉接卡的鏈接說明

ADI提供給客戶很多DSP的核心板&#xff0c;比如EV-21569-SOM&#xff0c;EV-21593-SOM&#xff0c;EV-SC594-SOM等&#xff0c;非常多&#xff0c;但是沒有底板&#xff0c;光一個核心板怎么用呢&#xff1f;于是我就在想&#xff0c;我的21569評估板就有通用底板&#xff0c;能…

基于 Redisson 實現分布式系統下的接口限流

在高并發場景下&#xff0c;接口限流是保障系統穩定性的重要手段。常見的限流算法有漏桶算法、令牌桶算法等&#xff0c;而單機模式的限流方案在分布式集群環境下往往失效。本文將介紹如何利用 Redisson 結合 Redis 實現分布式環境下的接口限流&#xff0c;確保集群中所有節點的…

ubuntu播放rosbag包(可鼠標交互)

1 前言 眾所周知&#xff0c;ubuntu中播放bag包最主要的工具是rviz&#xff0c;然而rviz有一個無法忍受的缺陷就是不支持鼠標回滾&#xff0c;并且顯示的時間的ros時間&#xff0c;不是世界時間&#xff0c;因此在遇到相關bug時不能與對應的世界時間對應。基于以上&#xff0c…