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

配環(huán)境配不出來?別苦著臉嘛,過來喝一杯吧。
????????如果你是初學(xué)者,請(qǐng)務(wù)必保證所有版本號(hào)和本文的一致!
本文寫于2023年8月,各部分版本號(hào)如下:
Ubuntu20.04
Jetpack5.1.1
Torch2.0.0+nv23.05
Torchvision0.15.1a0+42759b1

1.1 前言
????????前段時(shí)間做無人機(jī)集群目標(biāo)跟蹤的比賽,需要在5臺(tái)英偉達(dá)的jetson NX上都配置yolov8環(huán)境。我們首先配好了CPU版本的torch環(huán)境,雖然配環(huán)境十分輕松,但CPU版本torch的yolov8運(yùn)行幀率只有1~2幀。
????????而在配置GPU版本torch的yolov8環(huán)境的過程非??部溃?jīng)過一番摸索,在5臺(tái)NX上都非常順暢地配置完成了yolov8環(huán)境的配置。故把踩過的坑在此記錄,分享給大家以供交流。
????????另外,我之前對(duì)jetpack,torchvision,pycuda,tensorRT等理解不是很清晰,很多時(shí)候配好了都不知道這東西是用來干啥的。對(duì)此,本文每配一個(gè)東西我也會(huì)說明其概念和作用。
????????本篇教程不會(huì)把需要運(yùn)行的命令一條一條全部列出來,取而代之的是更多的文字描述與原理解讀。我自認(rèn)為邏輯非常清晰,讀者跟隨邏輯完全可以完成安裝,讀者只需要帶點(diǎn)腦子即可。也許很多讀者配環(huán)境的時(shí)候不看任何文字說明,把作者給出的指令逐行復(fù)制了事(我之前就是這樣)。這個(gè)習(xí)慣很不好。作者會(huì)在文字說明中陳述很多細(xì)節(jié),請(qǐng)認(rèn)真讀。
????????注意:如果你需要在NX上安裝ros或ros2,那么不要使用conda?。?!ros與conda的兼容性十分糟糕,親測ros2與conda兼容性更差,甚至連編譯都過不去。請(qǐng)?jiān)贜X原生python環(huán)境下安裝yolov8環(huán)境。
????????觀看本教程之前,最好滿足以下條件:
你的NX已經(jīng)安裝好了ubuntu20.04系統(tǒng)
熟悉一些基礎(chǔ)的linux命令
會(huì)python編程
了解torch的基本概念,在筆記本電腦上能夠完成torch的配環(huán)境工作(但對(duì)于如何在NX上完成環(huán)境配置比較頭疼)
有一個(gè)python3.8環(huán)境,最好是python3.8.10(ubuntu20.04默認(rèn)自帶python3.8)
安裝好了 git,pip等基礎(chǔ)工具
最好有一個(gè)梯子,可以連接到外網(wǎng)。

1.2 安裝Jetpack
????????Jetpack是專供英偉達(dá)的嵌入式計(jì)算平臺(tái)使用的人工智能包。這個(gè)官方定義現(xiàn)在理解起來有點(diǎn)抽象,咱們安裝好之后,大家就知道他是什么了。
????????首先,安裝jtop,這是一個(gè)監(jiān)控CPU,GPU等使用情況的工具。
????????然后,安裝JetPack:
????????安裝完JetPack后,命令行輸入jtop并運(yùn)行,即可看到當(dāng)前電腦的CPU運(yùn)行狀態(tài),按數(shù)字鍵可以切換頁面,切換到INFO頁面,可看到已經(jīng)安裝好的包:

????????可以發(fā)現(xiàn),當(dāng)前你的NX已經(jīng)安裝好了很多難裝的底層庫:Cuda,cuDNN, TensorRT, OpenCV。這下可能你大致明白了咱們的定義:
Jetpack是英偉達(dá)提供的專門供他自己的嵌入式計(jì)算平臺(tái)使用的人工智能包。
????????這句話是什么意思了,意思就是Jetpack把人工智能開發(fā)常用的底層驅(qū)動(dòng)和庫一股腦給你打包好,你安裝了Jetpack,就把這幾樣?xùn)|西都安裝上去了。
?
????????注意:上圖opencv的版本后有“with CUDA NO”的字樣,說明opencv也有支持GPU加速的版本,但是默認(rèn)安裝的opencv不支持GPU加速(pip也只能安裝cpu版本的opencv)。由于作者的項(xiàng)目不涉及太多的opencv操作,配置GPU版本的opencv對(duì)整體性能影響不大,所以作者沒有深入研究,如果需要安裝支持GPU加速的opencv,需要將原opencv卸載,并通過源碼編譯安裝,在cmake階段指定相應(yīng)cuda配置,即可編譯出支持cuda加速的opencv。讀者可自行百度解決。
?
????????后文不會(huì)再提及cuda,cudnn,opencv的安裝。

1.3 安裝torch
????????torch應(yīng)該不需要介紹了,為了方便,一般大家都把pytorch直接叫做torch,初學(xué)者看見不要覺得奇怪就行。
????????安裝torch,參考官方鏈接,所有命令均參考官網(wǎng)的即可。
Installing PyTorch for Jetson Platform - NVIDIA Docs
https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html
????????官網(wǎng)中需要運(yùn)行的指令都在這個(gè)圖片里,請(qǐng)自行前往官網(wǎng)復(fù)制。再往后的指令就不用管了。
????????注意中間的兩個(gè) “export TOUCH_INSTALL=.......”?只運(yùn)行上面這個(gè)https:// 的就行,仔細(xì)看兩眼英文敘述都能懂。

????????大致流程解讀:
sudo apt安裝一堆依賴庫
export TORCH_INSTALL=……… 聲明下載torch安裝包的網(wǎng)址。
pip安裝指定版本的aiohttp numpy scipy等庫。
export一個(gè)別的什么庫,具體是什么不用管。
pip 安裝 protobuf,這個(gè)照著做就行,沒遇見什么問題。
最后,使用pip安裝torch。其中命令中的$TORCH_INSTALL就是你之前export的那個(gè)。
然后應(yīng)該torch就安裝成功了。

1.4 安裝torchvision
????????torchvision是torch的一部分,可以理解為用torch實(shí)現(xiàn)了一份常用的基礎(chǔ)的網(wǎng)絡(luò)框架和工具類,你拿來就能用,不用自己寫了。每個(gè)版本的torch都會(huì)有自己對(duì)應(yīng)版本的torchvision,一般裝錯(cuò)版本就意味著不好使。torchvision 版本對(duì)應(yīng)關(guān)系如下:

????????通過pip安裝的torchvision只是CPU版本的,版本只顯示0.15.1。這個(gè)是無法調(diào)用jetson底層的cuda加速的。GPU版本的torchvision只能通過編譯進(jìn)行安裝。編譯安裝的torch版本號(hào)顯示為“0.15.1a0+42759b1”(“版本號(hào)+巴拉巴拉一堆數(shù)”),說明你安裝的是支持jetson上的cuda加速的。
????????下載torchvision源碼并構(gòu)建安裝的方法如下:
? ? ????親測NX很可能編譯了一半就內(nèi)存爆了然后卡死,可重復(fù)運(yùn)行安裝腳本,卡死之前的安裝進(jìn)度會(huì)被保留,多運(yùn)行幾次就可以安裝成功了。
????????最后在命令行進(jìn)入python,檢測是否安裝成功:
????????torch.__version__和torchvision.__version__均會(huì)輸出“版本號(hào)+巴拉巴拉一堆數(shù)”,如下圖所示,這就說明你安裝gpu版本的torch和torchvision成功了。如果你是初學(xué)者,請(qǐng)務(wù)必保證所有版本號(hào)和本文的一致。


1.5 安裝pyCUDA
????????pyCUDA是一個(gè)python庫,讓訪問 NVIDIA 的 CUDA 并行計(jì)算API更容易。我的理解是:如果你是初學(xué)者,只是使用yolov8做基礎(chǔ)的訓(xùn)練和預(yù)測,是不需要管python如何訪問cuda的,這些東西torch都幫你做好了。而如果你使用torch實(shí)現(xiàn)自己的網(wǎng)絡(luò)架構(gòu),或者需要使用到tensorRT做加速,可能需要用到pyCUDA庫做一些底層的操作??傊瑢?duì)于初學(xué)者,不太需要關(guān)心這個(gè)庫。本文一并安裝,有備無患。
注:沒梯子的加清華源:【
-i https://pypi.tuna.tsinghua.edu.cn/simple
】
????????說到tensorRT加速,其運(yùn)行速度比GPU版本的torch又快了一個(gè)數(shù)量級(jí),但是水很深,建議新手不要嘗試。CSDN上的文章寫的亂七八糟的,我研究兩天連個(gè)demo都沒跑通,對(duì)于新手來說,GPU版本的torch幀率一般已經(jīng)夠高了(20Hz左右)。
如果有想法,推薦跟著深藍(lán)學(xué)院的這個(gè)教程學(xué)上一個(gè)月:
https://www.shenlanxueyuan.com/course/624?source=1

1.6 安裝yolov8
????????onnx也是python的一個(gè)庫,可以將torch的網(wǎng)絡(luò)模型打包成一種通用的網(wǎng)絡(luò)模型格式,方便其他神經(jīng)網(wǎng)絡(luò)框架直接調(diào)用網(wǎng)絡(luò)模型和網(wǎng)絡(luò)參數(shù)進(jìn)行forward前向預(yù)測。
????????ultralytics庫就是yolov8的庫了,ultralytics是發(fā)布yolov8的公司的名字。
注:沒梯子的加清華源:【
-i https://pypi.tuna.tsinghua.edu.cn/simple
】

1.7 巨坑,重點(diǎn)?。?!
????????安裝完?ultralytics?之后,pip?會(huì)報(bào)錯(cuò):pandas?和?matplotlib?要求的?numpy?版本過高,如下圖:

???????注意,這是個(gè)大坑,如果不處理好numpy版本問題,可能即使torch和torchvision的版本完全正確,yolo運(yùn)行還是會(huì)報(bào)錯(cuò)。而解決這個(gè)問題之后,一般就好使了。?此時(shí)把他們都卸了即可:
? ? ? ? 當(dāng)然,如果你有別的需求真的需要用到這兩個(gè)庫,你可以重新裝一下這兩個(gè)庫的較低版本,具體版本要求可參考github上ultralytics官方倉庫的pip依賴文件:?
https://github.com/ultralytics/ultralytics/blob/main/requirements.txt

1.8 最終測試
????????隨便寫了個(gè)代碼測試一下。
????????你需要準(zhǔn)備一個(gè)yolov8的模型文件(.pt 文件),點(diǎn)擊以下鏈接下載,下載后和代碼放入同一文件夾下。
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt
????????還需要準(zhǔn)備一個(gè)測試視頻,這個(gè)自己夏姬八準(zhǔn)備一下就行了,也和代碼放入同一文件夾下。
????????最后這個(gè)文件夾下應(yīng)該有這三個(gè)東西:


Yolo,啟動(dòng)!

????????親測在NX上運(yùn)行,網(wǎng)絡(luò)預(yù)測一幀只需要20~30ms左右,由于USB攝像頭讀取也需要一定的時(shí)間,最終幀率可以達(dá)到10~20Hz,滿足要求,贏!
????????可惜最后比賽輸了,輸麻了。
——sytnocui 2023/8/3
?
