Jetson NX配置GPU:PyTorch YOLOv8安装指南

配环境配不出来?别苦着脸嘛,过来喝一杯吧。

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

本文写于20238月,各部分版本号如下:

  • Ubuntu20.04
  • Jetpack5.1.1
  • Torch2.0.0+nv23.05
  • Torchvision0.15.1a0+42759b1

cut-off

1.1 前言

        前段时间做无人机集群目标跟踪的比赛,需要在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环境。

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

  1. 你的NX已经安装好了ubuntu20.04系统
  2. 熟悉一些基础的linux命令
  3. 会python编程
  4. 了解torch的基本概念,在笔记本电脑上能够完成torch的配环境工作(但对于如何在NX上完成环境配置比较头疼)
  5. 有一个python3.8环境,最好是python3.8.10(ubuntu20.04默认自带python3.8)
  6. 安装好了 git,pip等基础工具
  7. 最好有一个梯子,可以连接到外网。

cut-off

1.2 安装Jetpack

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

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

sudo pip install jetson-stats

        然后,安装JetPack:

sudo apt install nvidia-jetpack

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

jtop运行后的INFO界面

        可以发现,当前你的NX已经安装好了很多难装的底层库:CudacuDNN 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。读者可自行百度解决。

 

        后文不会再提及cudacudnnopencv的安装。

cut-off

1.3 安装torch

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

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

Installing PyTorch for Jetson Platform - NVIDIA Docs

https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html

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

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

英伟达官网在NX上安装pytorch的步骤

        大致流程解读:

  1. sudo apt安装一堆依赖库
  2. export TORCH_INSTALL=……… 声明下载torch安装包的网址。
  3. pip安装指定版本的aiohttp numpy scipy等库。
  4. export一个别的什么库,具体是什么不用管。
  5. pip 安装 protobuf,这个照着做就行,没遇见什么问题。
  6. 最后,使用pip安装torch。其中命令中的$TORCH_INSTALL就是你之前export的那个。
  7. 然后应该torch就安装成功了。

cut-off

1.4 安装torchvision

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

torch与torchvision的版本对应关系

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

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

git clone --branch v0.15.1 https://github.com/pytorch/vision torchvision
cd torchvision
python3 setup.py install --user

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

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

import torch
import torchvision
torch.__version__
torchvision.__version__
torch.cuda.is_available()

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

在命令行中检测torch和torchvision安装情况(拍屏带师)

cut-off

1.5 安装pyCUDA

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

pip3 install Cython
pip3 install pycuda --user
注:没梯子的加清华源:【

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

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

https://www.shenlanxueyuan.com/course/624?source=1

cut-off

1.6 安装yolov8

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

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

pip install onnx==1.4.1
pip install ultralytics
注:没梯子的加清华源:【

cut-off

1.7 巨坑,重点!!!

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

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

pip uninstall pandas
pip uninstall matplotlib

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

https://github.com/ultralytics/ultralytics/blob/main/requirements.txt

yolov8官方仓库的requirements.txt中对这两个库的版本要求

1.8 最终测试

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

import cv2
from ultralytics import YOLO

# 导入 YOLOv8 模型
model = YOLO('【你自己的模型文件的路径】')

# 打开视频文件
video_path = "【你自己的测试视频的路径】"
cap = cv2.VideoCapture(video_path)

while cap.isOpened():

    success, frame = cap.read()
    if success:
        results = model(frame)
        annotated_frame = results[0].plot()
        cv2.imshow("YOLOv8 Inference", annotated_frame)
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        break

cap.release()
cv2.destroyAllWindows()

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

https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt

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

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

需要放在同一文件夹下的三个文件

cut-off

Yolo,启动

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

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

——sytnocui 2023/8/3

 

cut-off

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空