首页 > 其他分享 >关于Jetson nano (B02)如何部署Yolov8以及一些必要的知识点

关于Jetson nano (B02)如何部署Yolov8以及一些必要的知识点

时间:2024-12-25 20:23:05浏览次数:3  
标签:知识点 nano onnx Yolov8 bashrc Jetpack pip Jetson 安装

一、前言

记录一个简单的安装和部署过程,尽管笔者也是按照教程来的,但奈何参考了很多教程,虽然写的都非常好,但是却很散,因此笔者这里想把这些教程的精华提炼出来,汇总并且写在正文处。还是老规矩,笔者也在学习,如有错误,请在评论区及时指出!感谢!也欢迎评论区一起讨论!

二、正文

0.bashrc

不知道大家有没有发现,一些安装教程总是写着sudo gedit ~/.bashrc,然后也不告诉你为啥这么做,我这里就简单的交代一下。[3]
.bashrc是home目录下的一个shell文件,用于储存用户的个性化设置。在bash每次启动时都会加载.bashrc文件中的内容,并根据内容定制当前bash的配置和环境。

1.类似于?

这就类似于windows的快捷方式,不用每次进入都需要重新输入路径,这就是在bashrc文件修改后能够做到的事情之一。
环境变量就等于一个路径,这个路径由你而定。
如果我们把环境变量比作一个地址簿:
export就像把地址簿中重要的地址标记为“全家可用”,每个人(子进程)都可以查阅。
快捷方式就像给某个地址做一个备忘录,任何人可以通过它找到目标,但备忘录本身不能改变目标的内容。

2.怎么用?

PATH=$PATH:路径
export PATH
export PATH=$PATH:路径

最后再source ~/.bashrc一下,就是让上面你改的这些立即生效。

当然还可以自定义快捷键:
alias yyds="cd home/java/"
或者
alias ikun="conda deactivate"
等等(不小心露出只因脚了)

三、安装

0.clion远程主机(可选择,可不折腾)

实现在主机PC上使用Clion就可以在Jetson上面编程了,类似与你在ubuntu上使用VScode这种。
博客地址:[参考链接]
(https://blog.csdn.net/weixin_74027669/article/details/142391303 "参考链接")
(抱歉又让你跳来跳去了,不过上面文章写的超级详细!)
不过我还是更喜欢在ubuntu上直接用vscode

1.Jetpack镜像烧录

英伟达官方给Jetson开发板系列(Nano, NX, Xavier)配备了一个用于AI开发的集合包Jetpack,包含以下包:

Cuda
cuDNN
OpenCV4
TensorRT
VPI
VisionWorks
Vulkan

所以你不用再傻乎乎的装什么TensorRT了啥的。。。这就是为啥叫你装系统的时候不要执着装Ubuntu新系统了,而是要去官网下载Jetpack了,因为人家把包的封装好了,哈哈哈哈。虽然JetPack也是基于ubuntu系统。。。

并且提供了已装好Jetpack的Ubuntu系统镜像官方Jetpack镜像。不过不同板子的镜像不一定能混用(部分板子架构不同)。

image

烧录后,可以查看Jetpack的版本:

cat /etc/nv_tegra_release

出现信息:

# R32 (Release), REVISION: 6.1

意思是大版本为32, 小版本为4.6.1,即v32.4.6.1,就说明没问题了

2.安装jtop(可跳过,不过尽量安装)

jtop是一个很开门的检测工具,用来查看cuda的型号、tensorRT的版本等,还能实时的看cpu和gpu的使用率等。
首先安装pip

sudo apt install python-pip python3-pip #安装Pip
pip3 install --upgrade pip #这俩哥们是来给pip进行升级的
pip install --upgrade pip

pip换源:请参考这篇博客 为啥换源,不还是原来的下载速度太慢了嘛。。。

安装jtop
sudo -H pip3 install jetson-stats

使用:
sudo jtop

安装成功后的结果是这个样子的:
image

还可以查看版本的信息:
image
Q退出。

也可以 free -h查看内存的使用情况,首先要知道直接从物理内存读写数据比硬盘读写数据要快的多,但是内存是有限的,所以就引出了物理内存和虚拟内存,物理内存是系统硬件提供的内存,是真正的内存,虚拟内存是为了满足物理内存不足时而提出的策略,他是利用磁盘空间虚拟出的逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(swap space)

在这里很方便的就可以看到是否和指定的安装环境是否匹配了。相当开门的开源软件了。
在这里其实可以看到,我已经默认安装完毕了TensorRTOpenCV

image

3..pt转换为ONNX

为了将模型部署到jetson nano当中,我们首先需要将需要转换的模型导出为onnx格式。首先,你需要下载YOLOv8的模型文件: 代码点击此处跳转
由于jetson nano的GPU计算能力较弱,在这里我使用了YOLOv8n模型,并将输入图像的尺寸缩小为原来的四分之一。转换的代码如下所示:(自己随便写个脚本,运行下就ok)

from ultralytics import YOLO
model = YOLO("yolov8n.pt")
model.export(imgsz=320, format='onnx')

这样,我们就得到了onnx格式的YOLOv8模型了。

4.ONNX转换为Engine

在 Jetson Nano 上,我们可以使用 TensorRT 对模型进行加速并部署。由于 TensorRT 对模型的优化与硬件有关,因此需要将 ONNX 模型上传至 Jetson Nano,并通过 trtexec 工具进行模型的转换。以下是模型转换的命令:
trtexec --onnx=<ONNX file> --saveEngine=<output file>
我这边用的方法是:
先切到yolo.onnx所在的目录里面,然后打开控制台:
trtexec --onnx=yolov8n.onnx --saveEngine=yolov8n.engine

通过以上操作,即可将YOLOv8模型转换为jetson nano支持的格式了。

5.导入模型,运行

这里有开源的github代码,带入即可,下面两个图我指定了在哪里进行替换,实在不会的也可以看“写在最后”部分的引用链接的原文章的教程。。
image
image

参考代码下载,里面readme写的很详细了,我这篇博客可以作为一个辅助进行参考
希望多给原作者star!

6. 什么你不会运行??简单交代下Cmake编译的原理

CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库(so(shared object))。因此CMake的编译基本就两个步骤:

1. cmake
2. make

cmake 指向CMakeLists.txt所在的目录,例如cmake … 表示CMakeLists.txt在当前目录的上一级目录。cmake后会生成很多编译的中间文件以及makefile文件,所以一般建议新建一个新的目录,专门用来编译,例如

mkdir build
cd build
cmake ..
make

make根据生成makefile文件,编译程序。
按照下图新建build文件夹
image
然后照我的上文进行编译,最终将生成一个可执行文件
image
控制台运行
./yolov8_tensorrt
文件名称对用CmakeList这个地方
image

下次别再不懂了!

7.Cmakelist文件解释

简略解释以下一些关键地方的指令的含义,这里再网上找了一个例子:

cmake_minimum_required (VERSION 2.8)
project(dome CXX)
 
aux_source_directory(. DIR_SRC)
add_executable (demo ${DIR_SRC})

(1)project中的CXX指的是C++,如果不特别指定,则支持所有语言 ;工程名称中的dome可以自由指定。

(2)aux_source_directory作用是自动搜索指定路径下的全部源文件,指定的路径由关键字提供,且与之前的“.”之间有空格,表示DIR_SRC的上一级目录为指定的搜索路径。

(3)add_executable 中的第一个名字dome是我们编译后生成的可执行文件的名字,可以自由指定,不要求必须与工程同名。

四、写在最后

我按照自己的理解和原始博客没有标注的一些坑进行了我自己的总结和思考。
这篇博客只是一个过程记录以及一些知识点的总结,与其像一些教程直接把结论给你,我更想把结论为什么也给你,不但知道怎么安装的,而且还可以知道为什么这么安装。当然,只是笔者的个人总结,会有很多错误和不恰当之处,希望和读者共勉!

五、参考文献

重点参考这篇大佬的博客:

博文

同时特此鸣谢以下参考博客!

[1].TensorRT下载链接

[2].TensorRT的官网教程

[3].什么是bashrc??

[4].关于Jetson nano系统安装前的一些需要知道的事情

[5].Jetpack的官网版本下载跳转

[6].Onnx转转转

[7].下载完的Vscode怎么总是感觉终端输出字母之间有空格??

[8]. Cmake编译原理

标签:知识点,nano,onnx,Yolov8,bashrc,Jetpack,pip,Jetson,安装
From: https://www.cnblogs.com/myleaf/p/18630804

相关文章

  • spark内存配置,你一定不能忽略的知识点
    前言Spark是一个强大的分布式计算框架,它可以处理大规模数据集,并通过内存缓存来提高计算性能。但如果不正确地配置Spark的内存,可能会导致缓存滥用和性能问题。本文将介绍如何有效地配置Spark的内存设置,以避免缓存滥用和提高性能。一、Spark内存配置在Spark中,内存主要用于两个......
  • Yolov8-pose关键点检测:注意力机制 | 新颖的双注意力块(DAB) | 24.12月最新成果
    ......
  • Python面试手册:基础知识点合集与背记指南
    主要内容概要第1章走进PythonPython是一种高级编程语言,以其简洁明了的语法和强大的功能而闻名。本章将深入探讨Python的基本概念,包括其设计哲学、特点以及与其他编程语言的区别。我们将回顾Python的历史背景,了解其创始人GuidovanRossum如何创造这门语言,并探讨它如何迅......
  • 插入排序知识点汇总:原理、特性与实践
    一、基本原理概念插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。可以类比为人们整理手中的扑克牌,每次拿到一张新牌,就将它插入到已经排好序的牌中的合适位置。算法步骤从第一个元素开始,该元素可以认为已经被排序。......
  • Pandas 知识点全攻略:数据处理与分析的必备指南
    一、Pandas简介定义Pandas是一个开源的、用于数据处理和分析的Python库。它建立在NumPy之上,提供了高效的数据结构和数据分析工具,使得在Python中处理和分析结构化数据变得更加容易。它主要有两个核心数据结构:Series和DataFrame。Series是一种类似于一维数组的数据结构,它可以......
  • 解锁 Matplotlib:完整的知识点梳理与应用示例
    一、基础概念目的:用于创建各种高质量的静态、动态和交互式的可视化图表,如折线图、柱状图、散点图、饼图等多种图形,帮助用户更好地理解和展示数据。架构:它有一个分层的架构,最顶层是脚本层(pyplot),方便快速创建简单的图表;中间层是Artist层,用于对图表的各个组件(如线条、文本、图形等......
  • 详解 NumPy:关键知识点梳理与实践应用指引
    一、NumPy简介NumPy(NumericalPython)是一个功能强大的Python库,主要用于对多维数组(ndarray)进行高效的操作。它是许多其他数据科学和机器学习库(如Scikit-learn、Pandas等)的基础。安装可以使用pipinstallnumpy命令在命令行中安装NumPy。如果使用Anaconda环境,NumPy通常已经预......
  • 你一定知道人工智能必须要掌握的知识点‘’具体‘’有哪些吗?
    数学基础概率论与数理统计:这是人工智能的基石之一。例如贝叶斯定理,它在机器学习的分类算法(如朴素贝叶斯分类器)中有广泛应用。通过已知的先验概率和条件概率来计算后验概率,从而对数据进行分类。像垃圾邮件过滤,根据邮件中出现的词汇(条件概率)和历史垃圾邮件的频率(先验概率)来判断......
  • 浏览器基础知识点(二)
    一、浏览器输入一个URL并enter时,发生了什么?用户在浏览器输入一个URL,并按下enter键时,里面包含了非常多的技术细节。第一,DNS解析:用户输入的URL通常会是一个域名地址,直接通过域名是无法找到服务器的,因为服务器的本质上是一台拥有IP地址的主机。需要通过DNS服务器来解析域名,并获......
  • 【编译原理】编译原理知识点汇总·语法分析器(消除左递归、消除二义性、自顶向下语法分
    ......