一、前言

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

二、正文

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镜像。不过不同板子的镜像不一定能混用(部分板子架构不同)。

烧录后,可以查看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

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

还可以查看版本的信息:



Q退出。

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

在这里很方便的就可以看到是否和指定的安装环境是否匹配了。相当开门的开源软件了。

在这里其实可以看到,我已经默认安装完毕了TensorRTOpenCV

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代码,带入即可,下面两个图我指定了在哪里进行替换,实在不会的也可以看“写在最后”部分的引用链接的原文章的教程。。



参考代码下载,里面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文件夹



然后照我的上文进行编译,最终将生成一个可执行文件



控制台运行

./yolov8_tensorrt

文件名称对用CmakeList这个地方

下次别再不懂了!

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编译原理

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

  1. Jetson Nano Developer Kit

    The Jetson Nano Developer Kit is an AI computer for learning and for making. ​ 一个推理框架,用于部署模型到嵌入式设备. ...

  2. jetson nano开发使用的基础详细分享

    前言: 最近拿到一块jetson nano 2GB版本的板子,折腾了一下,从烧录镜像.修改配件等,准备一篇开箱基础文章给大家介绍一下这块AI开发板. 作者:良知犹存 转载授权以及围观:欢迎关注微信公众 ...

  3. Jetson Nano系列教程3:GPIO

    摘要: JetsonTX1,TX2,AGXXavier和Nano开发板包含一个40引脚的GPIO头,类似于Raspberry PI中的40引脚头.这些GPO可以通过JetsonGPIOLibrary包 ...

  4. Jetson Nano 系列教程2:串口调试接口登录Jetson Nano

    连接Jetson Nano可以有多种方法,这里我们一一介绍一下.开始本章节前,请先参考上一章,烧写好镜像 直接连接 所谓直接连接,就是将Jetson Nano当做主机,连接HDMI屏幕,连接键盘和鼠标 ...

  5. Jetson Nano系列教程1:烧写系统镜像

    下载镜像 NVIDIA官方为Jetson Nano Developer Kit (后面统称为Jetson Nano了)提供了SD卡版本的系统镜像,并且根据JetPack版本不断得在更新.所以你可以直接 ...

  6. Jetson Nano系列教程0:初识Jetson Nano

    关于Jetson Nano Developer Kit Jetson nano搭载四核Cortex-A57 MPCore 处理器,采用128 核 Maxwell™  GPU.支持JetPack SDK ...

  7. Darknet YOLOv3 on Jetson Nano

    推荐比较好的博客:https://ai4sig.org/2019/06/jetson-nano-darknet-yolov3/ 用的AlexeyAB的版本,并且给出了yolov3和tiny的效果对比. ...

  8. jetson nano 安装 snowboy 遇到的问题及处理

    Snowboy 是 KITT.AI 开发的一个高度可定制的热词检测引擎,当笔者的 jetson nano 加上话筒后,就立马尝试安装,但在安装过程中却发生了错误,所以把处理方式记录了下来以作备忘. 首 ...

  9. [Jetson Nano]Jetson Nano快速入门

    NVIDIAJetsonNano开发套件是适用于制造商,学习者和开发人员的小型AI计算机.相比Jetson其他系列的开发板,官方报价只要99美金,可谓是相当有性价比.本文如何是一个快速入门的教程,主要 ...

  10. 1、Jetson Nano 远程桌面XP问题

    jeston nano上网 方法3(最简单的方法) 最简单的方法真的特简单,用USB数据线连接主板的USB接口以及手机,打开手机的USB共享即可,若要使用静态IP,可在主板上修改配置文件,接口一般为u ...

随机推荐

  1. 谈一谈你对vue指令的理解

    vue指令的本质是给 html 标签新增一些属性 : vue的指令可以分为 3 中类型 : 1. 用于渲染数据的指令,比如 v-for ,v-if ,v-show : 2. 用来交互的指令 ,v-on ...

  2. python中队列deque的使用

    队列,堆栈是程序开发中常用的两种数据存储模型.python中队列怎么运用呢?以下内容介绍了队列的使用和队列的函数. from collections import deque q = deque() ...

  3. KubeSphere 3.1.0 GA:混合多云走向边缘,让应用无处不在

    2021 年 4 月 29 日,KubeSphere 开源社区激动地向大家宣布,KubeSphere 3.1.0 正式发布!为了帮助企业最大化资源利用效率,KubeSphere 打造了一个以 Kube ...

  4. 在 KubeSphere 中使用 Rook 构建云原生存储环境

    Rook 介绍 Rook 是一个开源的云原生存储编排器,为各种存储解决方案提供平台.框架和支持,以便与云原生环境进行原生集成. Rook 将分布式存储系统转变为自管理.自扩展.自修复的存储服务.它使存 ...

  5. 云原生周刊 | 在 Grafana 中显示 K8s Service 之间的依赖关系

    开源项目推荐 Caretta 这个项目可以在 Grafana 监控面板中显示 K8s Service 之间的依赖关系.底层使用的是 eBPF,对应用无侵入. busuanzi 这是一个基于 Golan ...

  6. 一文彻底弄懂MySQL的优化

    在企业级 Web 开发中,MySQL 优化是至关重要的,它直接影响系统的响应速度.可扩展性和整体性能.下面从不同角度,列出详细的 MySQL 优化技巧,涵盖查询优化.索引设计.表结构设计.配置调整等方 ...

  7. AI Undetect是什么?

    标题:AI UNDETECT:超越AI检测的反检测神器 在数字时代,人工智能的飞速发展已经渗透到我们生活的各个领域,包括教育.科技.网络内容制作等.越来越多的人依赖AI来生成各种内容,从学术作业.论文 ...

  8. Clickhouse SQL语法

    Insert 基本与标准 SQL(MySQL)基本一致 (1)标准 insert into [table_name] values(-),(-.) (2)从表到表的插入 insert into [ta ...

  9. 一款.NET开源的屏幕实时翻译工具

    前言 今天大姚给大家推荐一款.NET开源的屏幕实时翻译工具:Translumo. 工具介绍 Translumo是一个.NET开源的高级屏幕翻译工具,能够实时检测和翻译选定区域内的文本(如字幕).Tra ...

  10. games101_Homework7

    实现完整的 Path Tracing 算法 需要修改这一个函数: • castRay(const Ray ray, int depth)in Scene.cpp: 在其中实现 Path Tracing ...