jetson orin nano+yolov8+tensorrt加速 环境配置

1.烧录系统(不做示范,网上有很多教程)

硬件环境:

jetson orin nano 8G

jetpack:5.1.1

2.安装jetpack(包含CODA和cudnn)

1
2
sudo apt update
sudo apt install nvidia-jetpack

3.安装jtop

1
2
3
sudo apt-get install python3-pip
sudo pip3 install -U pip
sudo pip install -U jetson-stats

4.下载miniforge

下载地址: https://github.com/conda-forge/miniforge

选择Linux aarch64(arm64)版本,运行shell(sh)文件,再两次选择yes完成安装。

1
2
3
4
5
6
7
8
9
10
11
创建虚拟环境
conda create -n yolov8 python=3.8
激活环境
conda activate yolov8
我们将在虚拟环境中安装

-------------------------------------------拓展------------------------------------------
删除环境
conda remove -n yolo --all
查看所有环境
conda info --envs

5.Ultralytics安装

安装Ultralytics、onnx、lapx 以及调整numpy为1.23.1。下载速度慢的可以使用使用清华源。

1
pip install ultralytics onnx lapx numpy==1.23.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

运行指令后pip list发现torch已安装,但是Ultralytics自带的torch版本是不支持GPU,所以我们需要手动安装torch

6.torch、torchvision安装(已打包)

6.0如何判断我们需要的版本

通过jetpack版本判断我们需要的torch版本,再通过torch版本找到对应的torchvision版本

jetpack对应torch: https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048

torch对应torchvision:https://github.com/pytorch/vision

下载torchvision:

1
2
3
4
(whl) :https://download.pytorch.org/whl/torchvision/

(源代码编译):https://github.com/pytorch/vision
点main按钮,选择Tags,找到需要的版本,下载就可以。

我最终选择:torch2.0.0+nv23.05、torchvision0.15.1 (已打包)

6.1安装torch

6.1.1安装系统支持包
1
2
3
sudo apt-get -y update; 

sudo apt-get -y install autoconf bc build-essential g++-8 gcc-8 clang-8 lld-8 gettext-base gfortran-8 iputils-ping libbz2-dev libc++-dev libcgal-dev libffi-dev libfreetype6-dev libhdf5-dev libjpeg-dev liblzma-dev libncurses5-dev libncursesw5-dev libpng-dev libreadline-dev libssl-dev libsqlite3-dev libxml2-dev libxslt-dev locales moreutils openssl python-openssl rsync scons python3-pip libopenblas-dev;

因为国内网络环境原因,失败了就多执行几次。

6.1.2 配置环境变量
1
2
#注意,我们安装的JetPack 5.1.1,所以找对版本对应
export TORCH_INSTALL=https://developer.download.nvidia.cn/compute/redist/jp/v511/pytorch/torch-2.0.0+nv23.05-cp38-cp38-linux_aarch64.whl
6.1.3在线安装(推荐先进行在线安装,实在不行选择本地安装)
1
python3 -m pip install --upgrade pip; python3 -m pip install aiohttp numpy=='1.19.4' scipy=='1.5.3' export "LD_LIBRARY_PATH=/usr/lib/llvm-8/lib:$LD_LIBRARY_PATH"; python3 -m pip install --upgrade protobuf; python3 -m pip install --no-cache $TORCH_INSTALL

报错没关系,多尝试几次,肯定成功

显示successful install .....................

6.1.4本地安装

(1)把打包好的torch拉取到jetson上

(2)cd到拉取目录

pip安装:

1
pip3 install  torch-2***********.whl
6.1.5测试是否安装成功

返回版本号说明成功

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
test_torch.pt

#输入库

import torch

#查看版本

print(torch.__version__)

#查看gpu是否可用

print(torch.cuda.is_available())

#返回设备gpu个数

print(torch.cuda.device_count())

# 查看对应CUDA的版本号

print(torch.backends.cudnn.version())

print(torch.version.cuda)

#退出python

quit()

6.1.6卸载torch(按需执行)
1
pip uninstall torch

6.2安装torchvision

先安装依赖包

1
2
3
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libopenblas-dev libavcodec-dev libavformat-dev libswscale-dev

pip3 install setuptools

(1)把打包好的torchvision拉取到jetson上

(2)cd到拉取目录

6.2.1方式一:whl安装
1
pip3 install torchvision***********.whl
6.2.2方式二:源代码编译
1
2
3
4
5
6
7
8
9
10
11
unzip vision-0.15.1.zip

cd vision-0.15.1

export BUILD_VERSION=0.15.1

export CUDA_HOME=/usr/local/cuda


python3 setup.py install --user
如果失败多尝试几次
6.2.3测试是否安装成功

返回版本号说明成功

1
2
3
import torchvision

print(torchvision.__version__)

7.安装tensorrt

我已经打包好了,拉取到jetson即可

1
pip install tensorrt*********.whl

最后检测环境

1
2
pip list
查看环境是否包含torch、torchvision、tensorrt。

8.安装vscode

直接去vscode官网,点更多版本,下载linux arm64版本的.deb安装包,下载后在当前路径输入命令安装

1
sudo dpkg -i 文件名

vscode配置:

安装python插件,等待加载,自动检测设备的所有python环境,我们选择刚刚创建的yolov8环境,最后运行脚本

9.TensoRT加速

我们在PC训练好的best.pt模型上传到Jetson上,再利用TensorRT将转换为.engine模型。

1
2
3
4
5
6
7
8
9
10
pt2engine.py
from ultralytics import YOLO

# Load a model
model = YOLO('best.pt') # load a custom trained
#/home/nvidia/Desktop/install_text/model/
# Export the model
model.export(format='engine',half=True,simplify=True)

出现requirements报错,直接ctrl+c跳过

推理脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import cv2
from ultralytics import YOLO
from cv2 import getTickCount, getTickFrequency
# 加载 YOLOv8 模型
model = YOLO("best.engine",task='segment')


# 获取摄像头内容,参数 0 表示使用默认的摄像头
cap = cv2.VideoCapture(0)



while cap.isOpened():
loop_start = getTickCount()
success,frame = cap.read() # 读取摄像头的一帧图像

#,imgsz=(736,1280)

if success :
results = model.predict(frame,conf=0.8) # 对当前帧进行目标检测并显示结果
annotated_frame = results[0].plot(boxes=False)#

# 中间放自己的显示程序
loop_time = getTickCount() - loop_start
total_time = loop_time / (getTickFrequency())
FPS = int(1 / total_time)
# 在图像左上角添加FPS文本
fps_text = f"FPS: {FPS:.2f}"
font = cv2.FONT_HERSHEY_SIMPLEX

font_scale = 1
font_thickness = 2
text_color = (0, 255, 0) # 绿色
text_position = (10, 30) # 左上角位置

cv2.putText(annotated_frame, fps_text, text_position, font, font_scale, text_color, font_thickness)
cv2.namedWindow("img",cv2.WINDOW_NORMAL)
cv2.imshow('img', annotated_frame)
# 通过按下 'q' 键退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break

cap.release() # 释放摄像头资源
cv2.destroyAllWindows() # 关闭OpenCV窗口