一、系统配置

1.1 Jetpack下载

官方链接:JetPack Archive | NVIDIA Developer

本文安装的版本为5.1.2,点击下载

1.2 系统烧录(SD卡烧录)

所需硬件:SD卡(64G以上)、读卡器、Jetson Xavier NX开发板

软件工具:下载最新版balenaEtcher(老版可能无法识别),本文下载windows版

(官方下载地址:balenaEtcher - Flash OS images to SD cards & USB drives

具体流程

① 格式化SD卡,如果检测不到SD卡可参考以下链接:
【Jetson-Nano】SD卡重新格式化_nano系统sd格式化-CSDN博客

②打开下载好的balenaEtcher,从本地进行烧录,烧录完成后将SD卡插入Jetson中

1.3 安装nomachine对开发板进行远程控制

在windows端分别下载win版本与arm版本的nomachine,将arm版本的下载后使用U盘拽过去

(注:在使用时必须在同一wifi下)

下载链接:Download Free Remote Desktop Access - NoMachine

安装方法参考:Jetson Orin(Ubuntu20.04)安装NoMachine和Jtop_ubuntu20.04 nomachine-CSDN博客

1.4 安装Jtop

对系统进行换源:(如果下载不了可换源)参考:ubuntu 20.04 设置国内镜像源(阿里源、清华源)_ubuntu 20.04 镜像源-CSDN博客

执行如下命令:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3-pip
sudo pip3 install -U jetson-stats

最终输入sudo jtop即可查看系统信息

1.5 安装miniconda并配置torch与torchvision

主要用于导出.onnx权重文件

1.5.1 安装miniconda

1下载miniconda

wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py39_24.9.2-0-Linux-aarch64.sh

2.安装下载好的文件

bash Miniconda3-py39_24.9.2-0-Linux-aarch64.sh 

3.按照提示一步一步安装

①确认安装 ②一些声明 ③指定文件路径

④选择是否更改shell文件,我选择no

④配置conda的环境变量

⑤关闭窗口重新进入,前面显示base即进入conda环境

⑥不想每次进入都激活conda环境则设置

输入:conda config --set auto_activate_base false

⑦进入conda环境 conda activate 

退出conda环境 :conda deactivate

1.5.2  配置GPU版的torch与torchversion

1.5.2.1 在环境变量中添加CUDA

①输入 vim ~/.bashrc

②点击键盘中的 i 进入编辑模式

③根据自己的cuda版本信息在文件末尾处添加环境变量

export PATH=/usr/local/cuda-11.4/bin:$PATH

export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

export CUDA_HOME=/usr/local/cuda-11.4

④按下键盘上esc按键,输入:wq! 保存退出

1.5.2.2 配置GPU版的torch与torchvision

参考链接:NVIDIA JETSON XAVIER NX (四)安装Pytorch和torchvision_jetson xavier nx安装pytorch-CSDN博客

1.5.2.2.1配置基础环境

# 先把能更新的都更新了
sudo apt-get update
sudo apt-get upgrade
# 装上我们需要的环境包
# 最好使用pip3,不然出错了不好排查
sudo apt-get install python3-pip libopenblas-base libopenmpi-dev
pip3 install Cython

sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
 

1.5.2.2.2  yolov8是8.0.238 -对应的torch、torchvision、python版本

纯净版下载链接:GitHub - ultralytics/ultralytics at v8.0.238

由于torch与torchvision向下兼容的特性,选取torch=2.0.0版本与torchvision为0.15(必须对应)

torch=2.0.0所对应的python版本为3.8

torch的下载链接为:PyTorch for Jetson - Jetson & Embedded Systems / Announcements - NVIDIA Developer Forums

torchvision的下载链接为:
PyTorch for Jetson - Jetson & Embedded Systems / Announcements - NVIDIA Developer Forums

github下载历史版本的位置如下图所示:
 

1.5.2.2.3  创建conda

conda activate

conda create --name yolov8 python=3.8 -y

conda activate yolov8

1.5.2.2.4 进入存放torch与torchvision文件夹目录下

输入ls 显示下载的安装包

输入以下指令安装

pip3 install torch-2.0.0+nv23.05-cp38-cp38-linux_aarch64.whl

cd vision-0.15.0-rc1/torchvision/
export BUILD_VERSION=0.15.0

python3 setup.py install  程序报错:ImportError: libopenblas.so.0: cannot open shared object file: No such file or directory

解决方法:

import torch报错ImportError: libopenblas.so.0: cannot open shared object file: No such file or directo-CSDN博客
wget https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/pool/universe/o/openblas/libopenblas-dev_0.3.8+ds-1ubuntu0.20.04.1_arm64.deb

sudo dpkg -i libopenblas-dev_0.3.8+ds-1ubuntu0.20.04.1_arm64.deb

sudo apt clean
sudo apt update
sudo apt install -f

python3 setup.py install 

1.5.2.2.5 检查torch-GPU版本是否安装成功

import torch

# 检查 PyTorch 版本
print(torch.__version__)

# 检查 CUDA 是否可用
print(torch.cuda.is_available())  # 期望输出 True

# 检查当前 GPU 设备数量
print(torch.cuda.device_count())  # 输出可用的 GPU 数量

# 检查当前 GPU 名称
print(torch.cuda.get_device_name(0))  # 例如输出 'NVIDIA GeForce RTX 3090'

1.5.2.2.6检查torchvision是否安装成功

import torch
import torchvision

print("Torch version:", torch.__version__)
print("Torchvision version:", torchvision.__version__)   
print("Is CUDA available:", torch.cuda.is_available())

不报错即安装成功

程序报错:

解决办法:pip3 install numpy

1.6 配置YOLOv8环境

 纯净版下载链接:GitHub - ultralytics/ultralytics at v8.0.238

1.6.1 配置yolov8基础环境

①进入下载好的ultralytics-8.0.238文件中

cd ultralytics-8.0.238

②输入:pip3 install -e .

1.7 windows安装vscode远程连接jetson开发板

参考:Vscode连接Ubuntu!看这一篇就够了!_vscode ubuntu-CSDN博客

①vscode官网下载安装在windows中

②安装Remote - SHH插件

③配置连接的用户名和IP地址

④配置用户名和ip地址

⑤点击连接 → 箭头进行连接

⑥一直连接不上:
 

解决方法:
①因为我的shh是可以使用的,因此我直接添加配置文件路径,无效

②由于我这边一直显示配置 VScode Server, 因此我试了下可否手动配置

在win端:命令啊行输入:code --version获取版本号

在jetson端输入:
mkdir -p ~/.vscode-server/bin/f4a68c1d1943f2a3e3c17e67e7aeb6d04c340d5f

cd ~/.vscode-server/bin/f4a68c1d1943f2a3e3c17e67e7aeb6d04c340d5f

wget https://update.code.visualstudio.com/commit:<commit-id>/server-linux-x64/stable

tar -xzf vscode-server-aarch64.tar.gz --strip-components=1

~/.vscode-server/bin/258e40fedc6cb8edf399a463ce3a9d32e7e1f6f3/bin/code-server --help
输出信息证明安装成功,但还是无效

1.8 Jetson本地安装vscode

①下载链接:update.code.visualstudio.com/1.6.0/linux-deb-arm64/stablehttps://update.code.visualstudio.com/{version}/linux-deb-arm64/stable

想下载其他版本直接将正确的版本号替换{version}部分就能下载

下载说明:1.70以上的版本在Jetson ubuntu 20.04中无法打开,建议先卸载之前安装的vscode,经测试下载 code_1.65.2-1646922911_arm64.deb,比较正常!

        如何卸载:依次输入命令

                        sudo apt remove code

                        sudo apt purge code

                        sudo apt autoremove

                        sudo apt clean

                        sudo dpkg --remove code

②通过dpkg安装命令:进入到所下载到的目录,打开终端输入:sudo dpkg -i deb文件名

在终端输入code 即可打开vscode

③安装python插件

④点击右下角的环境,选择我们刚刚配置好的环境:

⑤编写一个程序测试脚本,检测环境是否正确训练yolov8

⑥点击

程序会自动下载权重

程序报错:

解决方法:
sudo apt-get update
sudo apt-get install curl -y

还是不行,网络问题世界手动下载,地址:https://ultralytics.com/assets/coco8.zip

⑦执行推理脚本

输出:

二、模型部署

具体流程为:配置yolov8环境、导出ONNX文件、导出.trt文件推理

参考:

Jetson Xavier NX 下 yolov8 tensorrt模型部署(Jetpack5.1.2、CUDA11.4、Cudnn8.6.0、Tensorrt8.5.2)_yolov8在jetson上部署-CSDN博客

2.1 下载TensorRT-Alpha源码(基本设置)

下载地址:GitHub - FeiYull/TensorRT-Alpha: 🔥🔥🔥TensorRT for YOLOv8、YOLOv8-Pose、YOLOv8-Seg、YOLOv8-Cls、YOLOv7、YOLOv6、YOLOv5、YOLONAS......🚀🚀🚀CUDA IS ALL YOU NEED.🍎🍎🍎

cd tensorrt-alpha-main/cmake
vim common.cmake

将文件中的第20行的tensorrt路径更换成自己开发板中的路径,一般默认路径为:/usr/src/tensorrt
路径设置如下:

set(TensorRT_ROOT /usr/src/tensorrt)

2.2yolov8环境配置

2.3下载TensorRT-Alpha源码

2.4 pt-onnx-trt

2.4.1环境配置

①安装ONNX

pip3 install onnx==1.12.0

pip install onnxsim==0.4.33

程序报错:

解决方法:
sudo apt update
sudo apt install -y cmake
sudo apt update
sudo apt install -y cmake build-essential python3-dev
pip install --upgrade pip setuptools wheel
还是报错:

重新安装高版本的cmake:
sudo apt remove cmake
cd ~
wget https://github.com/Kitware/CMake/releases/download/v3.25.2/cmake-3.25.2.tar.gz
tar -zxvf cmake-3.25.2.tar.gz
cd cmake-3.25.2

sudo apt update
sudo apt install libssl-dev
./bootstrap
make -j$(nproc)
sudo make install

cmake --version

②下载onnxruntime-GPU

参考:Jetson系列安装onnxruntime-gpu_jetson onnxruntime-CSDN博客

根据我的JetPack版本选择对应的onnxruntime 1.18.0

③进入所在目录

激活conda环境:conda activate yolov8

④输入安装指令进行安装

pip3 install onnxruntime_gpu-1.8.0-cp36-cp36m-linux_aarch64.whl

⑤安装是否安装成功

依次输入:

python 

import onnxruntime

程序报错

ImportError: /lib/aarch64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /home/ljj/miniconda3/envs/yolov8/lib/python3.8/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.so)

解决方法:

(当前窗口生效)
export LD_PRELOAD=$CONDA_PREFIX/lib/libstdc++.so.6

(永久生效)

echo "export LD_PRELOAD=\$CONDA_PREFIX/lib/libstdc++.so.6" >> $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh

再次运行:

2.4.2 导出.onnx文件

yolo export model=best.pt format=onnx opset=12 dynamic=True simplify=True int8=True 
# opset=12 默认值
# dynamic=True 导出维度为dynamic,也就是不确定状态,如不需要,可设为False
# simplify=True 简化模型,建议设为True,开发板性能有限,简化模型很有必要,且能避免后续一些报错发生
# int8=True INT8量化模型,根据需要开启

直接将.pt文件改为.onnx文件即可运行

2.4.3 生成.trt文件

#将上一步导出的onnx文件放在刚才在开发板上git的tensorrt-alpha/data/yolov8文件夹下

cd /tensorrt-alpha/data/yolov8

修改自己的onnx名称

/usr/src/tensorrt/bin/trtexec   --onnx=best.onnx  --saveEngine=best.trt  --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640

最终得到.trt文件
 

2.5 生成可执行文件

2.5.1 源码修改(如果是训练的自己的数据集则进行如下修改)

$ cd tensorrt-alpha/yolov8
$ vim app_yolov8.cpp
#修改第6行的类别名,改成自己训练集的类别名,例如:
initParameters.class_names = utils::dataSets::mask2;
#修改第8行的类别数,改成自己训练集的类别数,例如:
initParameters.num_class = 2;

#修改用到的头文件及函数
$ cd tensorrt-alpha/untils
$ vim untils.h

#修改untils.h文件中的第37行,换成自己的类别,如:
const std::vector<std::string> mask2 = {"non-mask", "mask"};
#在untils.h文件的第80行之后,添加自己的类别颜色,如:
const std::vector<cv::Scalar> color2{
            cv::Scalar(148, 80, 189),cv::Scalar(105, 52, 238)
        };

#修改untils.cpp文件  
$ vim untils.cpp

#修改untils.cpp文件中的show函数,在第144行后添加自己类别对应的代码,如:
if (classNames.size() == 2) // mask2
{
    color = Colors::color2[box.label];
}
#修改untils.cpp文件中的save函数,在第198行后添加自己类别对应的代码,如:
if (classNames.size() == 2) // mask2
{
    color = Colors::color2[box.label];
}


2.5.2 编译生成可执行文件

$ cd tensorrt-alpha/yolov8
$ mkdir build
$ cd build
$ cmake ..
$ make -j10
 

在进行make -j10时程序会报错

/usr/bin/ld: libyolov8.so: undefined reference to `sample::splitToStringVec(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/app_yolov8.dir/build.make:161:app_yolov8] 错误 1
make[1]: *** [CMakeFiles/Makefile2:78:CMakeFiles/app_yolov8.dir/all] 错误 2
make: *** [Makefile:84:all] 错误 2

这是由于tensorrt版本过高导致,tensorrt8.4版本可能不会出现以上错误。
我板子上使用的是tensorrt8.5.2,这个版本tensorrt下的sampleOptions.cpp文件中未定义splitToStringVec函数会出现以上错误。所以需要进行以下修改sampleUtils.h

cd /usr/src/tensorrt/samples/common
sudo vim sampleUtils.h

在第77行可以看到关于splitToStringVec函数的一个声明,但并未定义,所以将它注释掉,如下所示:

// std::vector<std::string> splitToStringVec(std::string const& option, char separator);

之后保存退出(Esc + shift: + wq),打开sampleOptions.cpp文件,将splitToStringVec函数的定义添加在这

$ sudo vim sampleOptions.cpp

#在文件的38行,也就是namespace中添加如下代码

std::vector<std::string> splitToStringVec(const std::string& option, char separator)
{
    std::vector<std::string> options;

    for (size_t start = 0; start < option.length();)
    {
        size_t separatorIndex = option.find(separator, start);
        if (separatorIndex == std::string::npos)
        {
            separatorIndex = option.length();
        }
        options.emplace_back(option.substr(start, separatorIndex - start));
        start = separatorIndex + 1;
    }

    return options;
}

之后保存退出,在tensorrt-alpha/yolov8/build文件下再一次执行make -j10命令,即可编译成功

$ ./app_yolov8  --model=../../data/yolov8/best.trt --size=640 --batch_size=1  --img=../../data/bus.jpg   --show

$ ./app_yolov8  --model=../../data/yolov8/best.trt --size=640 --batch_size=1  --video=../../data/people.mp4   --show  --savePath=../


                        
原文链接:https://blog.csdn.net/ayxc_ve/article/details/134174176

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐