您的位置:首页 >热讯 > 健康 >

Jetson NX配置GPU版本pytorch的yolov8教程

如果你是初学者,请务必保证所有版本号和本文的一致!

本文写于2023年8月,各部分版本号如下:


(资料图)

+

+42759b1

前言

前段时间做无人机集群目标跟踪的比赛,需要在5台英伟达的jetson NX上都配置yolov8环境。我们首先配好了CPU版本的torch环境,虽然配环境十分轻松,但CPU版本torchyolov8运行帧率只有1~2

而在配置GPU版本torch的yolov8环境的过程非常坎坷,但经过一番摸索,在5台NX上都非常顺畅地配置完成了yolov8环境的配置。故把踩过的坑在此记录,分享给大家以供交流。

另外,我之前对jetpack,torchvision,pycuda,tensorRT等理解不是很清晰,很多时候配好了都不知道这东西是用来干啥的。对此,本文每配一个东西我也会说明其概念和作用

本篇教程不会把需要运行的命令一条一条全部列出来,取而代之的是更多的文字描述与原理解读。我自认为逻辑非常清晰,读者跟随逻辑完全可以完成安装,读者只需要带点脑子即可。也许很多读者配环境的时候不看任何文字说明,把作者给出的指令逐行复制了事(我之前就是这样)。这个习惯很不好。作者会在文字说明中陈述很多细节,请认真读。

注意:如果你需要在NX上安装rosros2,那么不要使用conda!!!ros与conda的兼容性十分糟糕,亲测ros2与conda兼容性更差,甚至连编译都过不去。请在NX原生python环境下安装yolov8环境。

观看本教程之前,最好满足以下条件:

你的NX已经安装好了系统

熟悉一些基础的linux命令

会python编程

了解torch的基本概念,在笔记本电脑上能够完成torch的配环境工作(但对于如何在NX上完成环境配置比较头疼)

有一个环境,最好是(默认自带)

安装好了 git,pip等基础工具

最好有一个梯子,可以连接到外网。

安装Jetpack

Jetpack是专供英伟达的嵌入式计算平台使用的人工智能包。这个官方定义现在理解起来有点抽象,咱们安装好之后,大家就知道他是什么了。

首先,安装jtop,这是一个监控CPU,GPU等使用情况的工具。

然后,安装JetPack:

安装完JetPack后,命令行输入jtop并运行,即可看到当前电脑的CPU运行状态,按数字键可以切换页面,切换到INFO页面,可看到已经安装好的包:

可以发现,当前你的NX已经安装好了很多难装的底层库:Cuda,cuDNN, TensorRT, OpenCV。这下可能你大致明白了咱们的定义:

Jetpack是英伟达提供的专门供他自己的嵌入式计算平台使用的人工智能包。

这句话是什么意思了,意思就是Jetpack把人工智能开发常用的底层驱动和库一股脑给你打包好,你安装了Jetpack,就把这几样东西都安装上去了

注意:上图opencv的版本后有“with CUDA NO”的字样,说明opencv也有支持GPU加速的版本,但是默认安装的opencv不支持GPU加速(pip也只能安装cpu版本的opencv)。由于作者的项目不涉及太多的opencv操作,配置GPU版本的opencv对整体性能影响不大,所以作者没有深入研究,如果需要安装支持GPU加速的opencv,需要将原opencv卸载,并通过源码编译安装,在cmake阶段指定相应cuda配置,即可编译出支持cuda加速的opencv。读者可自行百度解决。

后文不会再提及cuda,cudnn,opencv的安装。

安装torch

torch应该不需要介绍了,为了方便,一般大家都把pytorch直接叫做torch,初学者看见不要觉得奇怪就行。

安装torch,参考官方链接,所有命令均参考官网的即可。

Installing PyTorch for Jetson Platform - NVIDIA Docs

/deeplearning/frameworks/install-pytorch-jetson-platform/

官网中需要运行的指令都在这个图片里,请自行前往官网复制。再往后的指令就不用管了。

注意中间的两个 “export TOUCH_INSTALL=.......” 只运行上面这个https:// 的就行,仔细看两眼英文叙述都能懂。

大致流程解读:

sudo apt安装一堆依赖库

export TORCH_INSTALL=……… 声明下载torch安装包的网址。

pip安装指定版本的aiohttp numpy scipy等库。

export一个别的什么库,具体是什么不用管。

pip 安装 protobuf,这个照着做就行,没遇见什么问题。

最后,使用pip安装torch。其中命令中的$TORCH_INSTALL就是你之前export的那个。

然后应该torch就安装成功了。

安装torchvision

torchvision是torch的一部分,可以理解为用torch实现了一份常用的基础的网络框架和工具类,你拿来就能用,不用自己写了。每个版本的torch都会有自己对应版本的torchvision,一般装错版本就意味着不好使。torchvision 版本对应关系如下:

通过pip安装的torchvision只是CPU版本的,版本只显示。这个是无法调用jetson底层的cuda加速的。GPU版本的torchvision只能通过编译进行安装。编译安装的torch版本号显示为“+42759b1”(“版本号+巴拉巴拉一堆数”),说明你安装的是支持jetson上的cuda加速的。

下载torchvision源码并构建安装的方法如下:

亲测NX很可能编译了一半就内存爆了然后卡死,可重复运行安装脚本,卡死之前的安装进度会被保留,多运行几次就可以安装成功了。

最后在命令行进入python,检测是否安装成功:

torch.__version__和torchvision.__version__均会输出“版本号+巴拉巴拉一堆数”,如下图所示,这就说明你安装gpu版本的torch和torchvision成功了。如果你是初学者,请务必保证所有版本号和本文的一致。

安装pyCUDA

pyCUDA是一个python库,让访问 NVIDIA 的 CUDA 并行计算API更容易。我的理解是:如果你是初学者,只是使用yolov8做基础的训练和预测,是不需要管python如何访问cuda的,这些东西torch都帮你做好了。而如果你使用torch实现自己的网络架构,或者需要使用到tensorRT做加速,可能需要用到pyCUDA库做一些底层的操作。总之,对于初学者,不太需要关心这个库。本文一并安装,有备无患。

注:没梯子的加清华源:【-i /simple

说到tensorRT加速,其运行速度比GPU版本的torch又快了一个数量级,但是水很深,建议新手不要尝试。CSDN上的文章写的乱七八糟的,我研究两天连个demo都没跑通,对于新手来说,GPU版本的torch帧率一般已经够高了(20Hz左右)。

如果有想法,推荐跟着深蓝学院的这个教程学上一个月:

/course/624?source=1

安装yolov8

onnx也是python的一个库,可以将torch的网络模型打包成一种通用的网络模型格式,方便其他神经网络框架直接调用网络模型和网络参数进行forward前向预测。

ultralytics库就是yolov8的库了,ultralytics是发布yolov8的公司的名字。

注:没梯子的加清华源:【-i /simple

巨坑,重点!!!

安装完 ultralytics 之后,pip 会报错:pandas 和 matplotlib 要求的 numpy 版本过高,如下图:

注意,这是个大坑,如果不处理好numpy版本问题,可能即使torch和torchvision的版本完全正确,yolo运行还是会报错。而解决这个问题之后,一般就好使了。 此时把他们都卸了即可:

当然,如果你有别的需求真的需要用到这两个库,你可以重新装一下这两个库的较低版本,具体版本要求可参考github上ultralytics官方仓库的pip依赖文件: 

/ultralytics/ultralytics/blob/main/

最终测试

随便写了个代码测试一下。

你需要准备一个yolov8的模型文件(.pt 文件),点击以下链接下载,下载后和代码放入同一文件夹下。

/ultralytics/assets/releases/download/

还需要准备一个测试视频,这个自己夏姬八准备一下就行了,也和代码放入同一文件夹下。

最后这个文件夹下应该有这三个东西:

Yolo,启动

亲测在NX上运行,网络预测一帧只需要20~30ms左右,由于USB摄像头读取也需要一定的时间,最终帧率可以达到10~20Hz,满足要求,赢!

可惜最后比赛输了,输麻了。

——sytnocui 2023/8/3

关键词: