Jetson nano (4GB版本)跑yolov8n(TensorRT 加速)网络

news2024/9/29 16:41:55

大家好,我是王硕,项目原因需要在Jetson nano平台上跑yolov8s ,需要使用TensorRt加速,看了网上的教程,写的太差了,资料零零散散的,故详细介绍一下步骤。

如果想使用jetson Nano平台部署yolov8,并用TensorRT加速,需要以下环境要求:

JetPack 4.6 (烧进系统的默认自带的,不用管)
Python3.8   (需要自己编译)
Cuda 10.2   (烧进系统的默认自带的,不用管)
torch 1.11.0-cp38-GPU (python3.8下的pytorch GPU版本;本文提供)
TensorRT 8.2 (需要自己编译)

废话不多说,按照以下步骤走,就能行。

1.下载python源码并编译

$ sudo apt install zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev libbz2-dev
$ cd ~/
$ mkdir build-python-3.8.1 & cd build-python-3.8.1/
$ wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tar.xz
$ tar xvf Python-3.8.1.tar.xz
$ ../Python-3.8.1/configure --enable-optimizations
$ make -j8
$ sudo -H make altinstall
$ cd ../

等待编译完成(大概5分钟)

2.编译Cmake源码,因为自带的cmake版本太低了,需要手动编译高版本。

$ cd ~/
$ mkdir cmake & cd cmake
$ sudo apt-get install -y protobuf-compiler libprotobuf-dev openssl libssl-dev libcurl4-openssl-dev
$ wget https://github.com/Kitware/CMake/releases/download/v3.13.5/cmake-3.13.5.tar.gz
$ tar xvf cmake-3.13.5.tar.gz
$ cd cmake-3.13.5/
$ ./bootstrap --system-curl
$ make -j8
$ echo 'export PATH='${PWD}'/bin/:$PATH' >> ~/.bashrc
$ source ~/.bashrc
$ cd ../
$reboot  #可以省略此步骤,主要是让环境变量生效,保险起见,重启一下吧

3.准备编译TensorRT  (重点!!!,容易出错)

jetson nano自带的tensorrt是基于python3.6版本,太老了,没办法用,故重新编译python3.8环境下的TensorRT。

$ cd ~/build-python-3.8.1/
$ mkdir python3.8
$ mkdir python3.8/include
$ wget https://launchpad.net/ubuntu/+source/python3.8/3.8.0-3~18.04/+build/17998540/+files/libpython3.8-dev_3.8.0-3~18.04_arm64.deb
 #网络卡的话,可手动下载。
$ ar x libpython3.8-dev_3.8.0-3~18.04_arm64.deb
$ tar -xvf data.tar.xz
#这个./usr 哈,一定要带./usr,当前路径下的usr文件夹。当前路径下的usr文件夹,当前路径下的usr文件夹
$ cp ./usr/include/aarch64-linux-gnu/python3.8/pyconfig.h  Python-3.8.1/Include/    
$ mkdir python3.8
$ mkdir python3.8/include
$ cp -r Python-3.8.1/Include/* python3.8/include/

到目前为止的目录结构,下面开始克隆pybind11,生成动态库 :

$ cd ~/
$ mkdir external & cd external 
$ cp -r ../python_source_3_8/python3.8   ./
$ git clone https://github.com/pybind/pybind11.git
$ git clone -b release/8.2 https://github.com/NVIDIA/TensorRT.git
$ cd TensorRT
$ git submodule update --init --recursive
$ cd python/
$ sudo ./build.sh

接下来会出现各种错误,首先出现的错误就是找不到nvcc编译器,输入以下代码解决

export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_ROOT=/usr/local/cuda

在输入nvcc  --version,如果出现以下信息,说明成功

解决完此错误,继续执行以下命令:

sudo ./build.sh

执行完成后,会报各种错误,同时在当前吗目录生成Makefile,截图如下,文件中包含Makefile

生成Makefile后,继续执行以下命令:

sudo make -j8

会出现以下错误,找不到cub/cub.cuh头文件:

编辑Tensor目录下的CmakeList.txt文件

$ vim ~/external/TensorRT/CMakeLists.txt #编辑Cmake

#把第101行代码
if(NOT CUB_ROOT_DIR)
  if (CUDA_VERSION VERSION_LESS 11.0)
    set(CUB_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/cub CACHE STRING "directory of 
    CUB installation")
  endif()
endif()

 改成:

if(NOT CUB_ROOT_DIR)
  if (CUDA_VERSION VERSION_LESS 11.0)
    set(CUB_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/cub CACHE STRING "directory of CUB installation")
  endif()
endif()
#强制生效CUB_ROOT_DIR变量
set(CUB_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/cub CACHE STRING "directory of CUB installation")

修改~/TensorRT/python/.build.sh文件,如下所示:

#python版本 
PYTHON_MAJOR_VERSION=${PYTHON_MAJOR_VERSION:-3}
PYTHON_MINOR_VERSION=${PYTHON_MINOR_VERSION:-8}

#架构
TARGET=${TARGET:-aarch64}
#ROOT_PATH为TensorRT根目录
ROOT_PATH=${TRT_OSSPATH:-/home/nwd/external/TensorRT}
#external目录路径
EXT_PATH=${EXT_PATH:-/home/nwd/external}

WHEEL_OUTPUT_DIR=${ROOT_PATH}/python/build

mkdir -p ${WHEEL_OUTPUT_DIR}
pushd ${WHEEL_OUTPUT_DIR}

# Generate tensorrt.so
echo $(ls ${ROOT_PATH}/python/include)
cmake .. -DCMAKE_BUILD_TYPE=Release \
         -DTARGET=${TARGET} \
         -DPYTHON_MAJOR_VERSION=${PYTHON_MAJOR_VERSION} \
         -DPYTHON_MINOR_VERSION=${PYTHON_MINOR_VERSION} \
         -DEXT_PATH=${EXT_PATH} \
         -DCUDA_INCLUDE_DIRS=/usr/local/cuda/include \
         -DTENSORRT_ROOT=${ROOT_PATH} \
         -DTENSORRT_BUILD=${ROOT_PATH}/build/ \
         -DCMAKE_CUDA_COMPILER=/usr/local/cuda-10.2/bin/nvcc


make -j

# Generate wheel
TRT_MAJOR=$(awk '/^\#define NV_TENSORRT_MAJOR/ {print $3}' ${ROOT_PATH}/include/NvInferVersion.h)
TRT_MINOR=$(awk '/^\#define NV_TENSORRT_MINOR/ {print $3}' ${ROOT_PATH}/include/NvInferVersion.h)
TRT_PATCH=$(awk '/^\#define NV_TENSORRT_PATCH/ {print $3}' ${ROOT_PATH}/include/NvInferVersion.h)
TRT_BUILD=$(awk '/^\#define NV_TENSORRT_BUILD/ {print $3}' ${ROOT_PATH}/include/NvInferVersion.h)
TRT_VERSION=${TRT_MAJOR}.${TRT_MINOR}.${TRT_PATCH}.${TRT_BUILD}
TRT_MAJMINPATCH=${TRT_MAJOR}.${TRT_MINOR}.${TRT_PATCH}

echo "Generating python ${PYTHON_MAJOR_VERSION}.${PYTHON_MINOR_VERSION} bindings for TensorRT ${TRT_VERSION}"

expand_vars_cp () {
    test -f ${1} || (echo "ERROR: File: ${1} does not exist!" && exit 1); \
    sed -e "s|\#\#TENSORRT_VERSION\#\#|${TRT_VERSION}|g" \
        -e "s|\#\#TENSORRT_MAJMINPATCH\#\#|${TRT_MAJMINPATCH}|g" \
        ${1} > ${2}
}

pushd ${ROOT_PATH}/python/packaging
for dir in $(find . -type d); do mkdir -p ${WHEEL_OUTPUT_DIR}/$dir; done
for file in $(find . -type f); do expand_vars_cp $file ${WHEEL_OUTPUT_DIR}/${file}; done
popd
python3 setup.py -q bdist_wheel --python-tag=cp${PYTHON_MAJOR_VERSION}${PYTHON_MINOR_VERSION} --plat-name=linux_${TARGET}

popd

修改完成后,重新编译。编译完成会在build目录生成tensorrt.so文件,如下图:

 

如果没有生成tensorrt.so文件,说明pybind11路径设置有问题,或架构设置不是aarch64,仔细检查一下,如果你不想自己编译,也可以下载我编译好的TensorRT。

安装TensorRt,这里有一个坑,不能直接使用命令安装Tensorrt,需要手动安装,否则会报错,手动安装也非常简单,

a. 首先查看pip的位置:

$ pip --version

结果:

pip 22.3.1 from /home/nwd/archiconda3/envs/yolov8s/lib/python3.8/site-packages/pip (python 3.8)

其中/home/nwd/archiconda3/envs/yolov8s/lib/python3.8/site-packages/ 为包路径,开始手动复制TensorRT包到路径下:

$ sudo cp -r tensorrt /home/nwd/archiconda3/envs/yolov8s/lib/python3.8/site-packages/

测试安装的TensorRT

#直接打开python解释器,导入Tensorrt的包。并打印版本信息
$ python3.8
>>> import tensorrt
>>> print(tensorrt.__version__)
运行结果:
    “8.2.3.0”

4.部署yolov8

在部署yolov8之前,因为yolov8要求python3.8及以上的python版本,需要安装专门为JetsonNano平台下,python3.8编译GPU驱动版本的pyorch,需要从pytorch源码编译,有想自己编译的可参考如下链接:

https://i7y.org/en/pytorch-build-on-jetson-nano/

编译大概需要13个小时,因此本文使用编译好的pytorch文件,这个包会在文章末尾下载(百度云盘),输入以下命令直接安装:

$ pip3.8 install  torch-1.11.0a0+gitbc2c6ed-cp38-cp38-linux_aarch64.whl 
$ pip3.8 install   torchvision-0.12.0a0+9b5a3fe-cp38-cp38-linux_aarch64.whl 

到此为止我们安装了:tensorRT 8.2.3.0 、pytorch 1.11.0  、torchvision 0.12.0。

开始安装yolov8,很简单,输入如下命令:

$ pip install ultralytics
$ pip install onnx
$ pip uninstalll numpy  #numpy需要换成指定版本,故卸载重装其他版本
$ pip install numpy==1.23.2
$ pip install onnxslim

安装完成,就可以测试了,新建python脚本,并输入以下测试代码:

from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO("yolov8s.pt")

# Export the model to TensorRT format
model.export(format="engine")  # creates 'yolov8n.engine'

# Load the exported TensorRT model

tensorrt_model = YOLO("yolov8s.engine")

# Run inference
#这里的图片路径换成自己想要识别的
results = tensorrt_model("/home/nwd/yolov8/YOLOv8-TensorRT/data/bus.jpg")

print(results)

运行发现报错,找不到onnxruntime_gpu的错误

 因此,我们继续安装onnxruntime的GPU版本,这个包主要是来把.pt文件转成onnx文件。

这个包,官方为我们编译好了,( Jetson Nano的JetPack 版本默认是4.6 !!!) ,别下载错了。。下载链接(文章末尾百度云也提供了)。

https://elinux.org/Jetson_Zoo#ONNX_Runtime

下载完成后。直接安装

$ pip install onnxruntime_gpu-1.7.0-cp38-cp38-linux_aarch64.whl  

    到此为止,在进行测试,发现就可以运行了。强调,因为跑模型需要大量内存,可以关闭jetson nano的图形界面,为了省此内存,参考这位同志的教程:

Jetson Nano 关闭开启图形界面减少内存占用_jetson nano 关闭图形界面-CSDN博客

 如果要跑yolov8s,就不用关闭图形界面。推理流程依赖关系

模型转换关系:yolov8s.pt ----->yolov8s.onnx----->yolov8s.engine
推理:TensorRT加载yolov8s.engine权重文件进行加速。

主要难度是编译TensorRT,如果编译不成功,不会生成Tensort.so动态库文件。只要编译成功就会在build/tensorRT文件夹中找到Tensort.so文件。

文中涉及的资源:通过网盘分享的文件:yolov8
链接: https://pan.baidu.com/s/1-d3jEkHK-ts-LvsU3fyUjw 提取码: ws66

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2177313.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Selenium与数据库结合:数据爬取与存储的技术实践

目录 一、Selenium与数据库结合的基础概念 1.1 Selenium简介 1.2 数据库简介 1.3 Selenium与数据库结合的优势 二、Selenium爬取数据的基本步骤 2.1 环境准备 2.2 编写爬虫代码 2.3 数据提取 2.4 异常处理 三、数据存储到数据库 3.1 数据库连接 3.2 数据存储 3.3 …

windows10录屏工具,四款新手必备软件!

今天要和大家聊的是-——win10的录屏工具。在Win10电脑上,那些让我们爱不释手的录屏神器有很多,不管是哪个行业的人,录屏软件简直是日常工作的得力助手,比如说对于程序员来说,不管是分享代码教程、记录bug复现&#xf…

RKLLM部署

RKLLM 写在前面:建议去阅读官方提供的RKLLM doc,本文基于官方的RKLLM doc制作而成(没有将flask相关内容添加进来),仅仅添加了完整流程的执行过程截图和在做这以流程过程中遇到的问题 RKLLM可以帮助用户快速将人工智能…

【vite】搭建完整项目流程、项目配置

文章目录 完整项目源码项目技术栈:项目地址: 一、创建项目二、安装scss三、安装路由router四、项目配置 参考文章:vite搭建完整项目 完整项目源码 觉得创建太麻烦就直接从github克隆吧,https://github.com/fruge365/vite-common…

金智维KRPA之Excel自动化

Excel自动化操作概述 Excel自动化主要用于帮助各种类型的企业用户实现Excel数据处理自动化,Excel自动化是可以从单元格、列、行或范围中读取数据,向其他电子表格或工作簿写入数据等活动。 通过相关命令,还可以对数据进行排序、进行格式…

开发者如何自主绑定和解除小程序和公众号长期/短期运营者微信号?

开发者如何自主绑定和解除小程序和公众号长期/短期运营者微信号? 1、什么是长期/短期运营者微信号? 为了让更多人管理公众号更方便与安全,每个公众号可由管理员添加绑定5个长期运营者微信号、20个短期运营者微信号,运营者微信号…

【sw2024】solidworks2024双击setup.exe无反应管理员运行也没反应解决方法

第一步 官网下载xxclean,打开xxclean最新版本,登录。官网xxclean.com或者自己浏览器搜。 第二步 点击扩展功能,点击 运行sw2024安装程序无反应 右边的开始 第三步 进度百分之百之后去双击setup就有界面了。

Tusi.Art:AI模型,comfyui工作流,一键同款!

前言 Tusi.Art:AI模型分享与在线运行平台的革命性体验 在当今迅速发展的AI绘图领域,模型的分享与应用变得尤为重要。Tusi.Art 就是这样一个平台,为用户提供了分享和在线运行 AI 模型的便捷服务。不仅如此,平台还具备强大的功能&…

现代易货交易:重塑价值交换的新趋势与未来展望“

在当今社会,随着经济的快速发展,一种新兴的交易方式——现代易货交易,正逐渐受到市场的青睐。这种模式不仅对传统的物品交换方式进行了现代化的改进,而且体现了对物品价值的重新评估和交换方法的创新。那么,什么是现代…

2. 将GitHub上的开源项目导入(clone)到(Linux)服务器上——深度学习·科研实践·从0到1

目录 1. 在github上搜项目 (以OpenOcc为例) 2. 转移到码云Gitee上 3. 进入Linux服务器终端 (jupyter lab) 4. 常用Linux命令 5. 进入对应文件夹中导入项目(代码) 注意:系统盘和数据盘 1. 在github上搜项目 (以OpenOcc为例) 把链接复制下…

无锡卓瓷X哲讯智能科技,SAP项目正式启动!

在数字化浪潮的推动下,高精密陶瓷行业的领军企业—无锡卓瓷科技有限公司,携手哲讯智能科技有限公司近期启动SAP&BI项目,以打造行业领先的数字化管理平台。这一战略举措标志着无锡卓瓷在数字化转型的道路上迈出了坚实的一步。 无锡卓瓷—…

LORA DASH -一种更高效的微调方式

LORA DASH -一种更高效的微调方式 概述 大型语言模型(LLMs)通过在大规模数据集上的预训练,能够捕捉和学习丰富的语言特征和模式。目前,尽管预训练模型在诸多任务上取得了显著的成果,但它们在特定任务上的表现仍有提升…

STM32 时钟树(基于 STM32F407)

目录 一、概述二、时钟树框图1、时钟源2、锁相环3、系统时钟4、时钟信号输出 MCO 三、时钟配置1、修改主频1.1 配置 HSE_VALUE1.2 调用 SystemInit 函数 2、STM32F4 时钟使能和配置 一、概述 STM32 内部也是由多种多样的电路模块组合在一起实现的。当一个电路越复杂&#xff0…

如何解决Google AdSense 无效流量?一文教你提高AdSense点击率

Google AdSense 点击率低得可怜?广告收入少得可怜?想知道怎么才能让 AdSense 收入飙升吗?如果你正遭受无效流量的困扰,或者你正愁着怎么提高点击率,那么这篇文章就是你的救星!快和我一起往下看吧~ 一、什么…

「接口自动化测试」高频面试题!

一、json和字典的区别? json就是一个文本、字符串;有固定的格式,格式长的像python字典和列表的组合;以key-value的键值对形式来保存数据,结构清晰,。可以说是目前互联网项目开发中最常用的一种数据交互格式…

[数据集][目标检测]猪数据集VOC-2856张

数据集格式:Pascal VOC格式(不包含分割的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):2856 标注数量(xml文件个数):2856 标注类别数:1 标注类别名称:["pig"] 每个类别标注的框数&#xff1a…

【YOLO目标检测输电线路异物数据集】共4516张、已标注txt格式、有训练好的yolov5的模型

目录 说明图片示例 说明 数据集格式:YOLO格式 图片数量:4516 标注数量(txt文件个数):4516 标注类别数:4 标注类别名称:nest、kite、balloon、trash 数据集下载:输电线路异物数据集 图片示例 数据集…

华为OD机试 - 箱子之字形摆放(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷D卷A卷B卷C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加…

【CodeGlance Pro】Idea升级2024.3代码地图不能使用:“不兼容: 需要 IDE 内部版本 233.*或更低版本”

今天升级了一下idea的版本,原本是idea2023,升级之后发现CodeGlance Pro提示:不兼容: 需要 IDE 内部版本 233.*或更低版本。代码地图不能使用,对于已经习惯了这个工具的开发者而言十分难受。在网上搜了很多也没有找到平替插件。后面…

HTML5实现好看的唐朝服饰网站模板源码2

文章目录 1.设计来源1.1 网站首页1.2 唐装演变1.3 唐装配色1.4 唐装花纹1.5 唐装文化 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址:https://blog.csdn.ne…