您的位置:首頁 >熱訊 > 健康 >

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

如果你是初學者,請務必保證所有版本號和本文的一致!

本文寫于2023年8月,各部分版本號如下:


(資料圖)

+

+42759b1

前言

前段時間做無人機集群目標跟蹤的比賽,需要在5臺英偉達的jetson NX上都配置yolov8環(huán)境。我們首先配好了CPU版本的torch環(huán)境,雖然配環(huán)境十分輕松,但CPU版本torchyolov8運行幀率只有1~2

而在配置GPU版本torch的yolov8環(huán)境的過程非常坎坷,但經過一番摸索,在5臺NX上都非常順暢地配置完成了yolov8環(huán)境的配置。故把踩過的坑在此記錄,分享給大家以供交流。

另外,我之前對jetpack,torchvision,pycuda,tensorRT等理解不是很清晰,很多時候配好了都不知道這東西是用來干啥的。對此,本文每配一個東西我也會說明其概念和作用

本篇教程不會把需要運行的命令一條一條全部列出來,取而代之的是更多的文字描述與原理解讀。我自認為邏輯非常清晰,讀者跟隨邏輯完全可以完成安裝,讀者只需要帶點腦子即可。也許很多讀者配環(huán)境的時候不看任何文字說明,把作者給出的指令逐行復制了事(我之前就是這樣)。這個習慣很不好。作者會在文字說明中陳述很多細節(jié),請認真讀。

注意:如果你需要在NX上安裝rosros2,那么不要使用conda!!!ros與conda的兼容性十分糟糕,親測ros2與conda兼容性更差,甚至連編譯都過不去。請在NX原生python環(huán)境下安裝yolov8環(huán)境。

觀看本教程之前,最好滿足以下條件:

你的NX已經安裝好了系統(tǒng)

熟悉一些基礎的linux命令

會python編程

了解torch的基本概念,在筆記本電腦上能夠完成torch的配環(huán)境工作(但對于如何在NX上完成環(huán)境配置比較頭疼)

有一個環(huán)境,最好是(默認自帶)

安裝好了 git,pip等基礎工具

最好有一個梯子,可以連接到外網。

安裝Jetpack

Jetpack是專供英偉達的嵌入式計算平臺使用的人工智能包。這個官方定義現(xiàn)在理解起來有點抽象,咱們安裝好之后,大家就知道他是什么了。

首先,安裝jtop,這是一個監(jiān)控CPU,GPU等使用情況的工具。

然后,安裝JetPack:

安裝完JetPack后,命令行輸入jtop并運行,即可看到當前電腦的CPU運行狀態(tài),按數(shù)字鍵可以切換頁面,切換到INFO頁面,可看到已經安裝好的包:

可以發(fā)現(xiàn),當前你的NX已經安裝好了很多難裝的底層庫:Cuda,cuDNN, TensorRT, OpenCV。這下可能你大致明白了咱們的定義:

Jetpack是英偉達提供的專門供他自己的嵌入式計算平臺使用的人工智能包。

這句話是什么意思了,意思就是Jetpack把人工智能開發(fā)常用的底層驅動和庫一股腦給你打包好,你安裝了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實現(xiàn)了一份常用的基礎的網絡框架和工具類,你拿來就能用,不用自己寫了。每個版本的torch都會有自己對應版本的torchvision,一般裝錯版本就意味著不好使。torchvision 版本對應關系如下:

通過pip安裝的torchvision只是CPU版本的,版本只顯示。這個是無法調用jetson底層的cuda加速的。GPU版本的torchvision只能通過編譯進行安裝。編譯安裝的torch版本號顯示為“+42759b1”(“版本號+巴拉巴拉一堆數(shù)”),說明你安裝的是支持jetson上的cuda加速的。

下載torchvision源碼并構建安裝的方法如下:

親測NX很可能編譯了一半就內存爆了然后卡死,可重復運行安裝腳本,卡死之前的安裝進度會被保留,多運行幾次就可以安裝成功了。

最后在命令行進入python,檢測是否安裝成功:

torch.__version__和torchvision.__version__均會輸出“版本號+巴拉巴拉一堆數(shù)”,如下圖所示,這就說明你安裝gpu版本的torch和torchvision成功了。如果你是初學者,請務必保證所有版本號和本文的一致。

安裝pyCUDA

pyCUDA是一個python庫,讓訪問 NVIDIA 的 CUDA 并行計算API更容易。我的理解是:如果你是初學者,只是使用yolov8做基礎的訓練和預測,是不需要管python如何訪問cuda的,這些東西torch都幫你做好了。而如果你使用torch實現(xiàn)自己的網絡架構,或者需要使用到tensorRT做加速,可能需要用到pyCUDA庫做一些底層的操作。總之,對于初學者,不太需要關心這個庫。本文一并安裝,有備無患。

注:沒梯子的加清華源:【-i /simple

說到tensorRT加速,其運行速度比GPU版本的torch又快了一個數(shù)量級,但是水很深,建議新手不要嘗試。CSDN上的文章寫的亂七八糟的,我研究兩天連個demo都沒跑通,對于新手來說,GPU版本的torch幀率一般已經夠高了(20Hz左右)。

如果有想法,推薦跟著深藍學院的這個教程學上一個月:

/course/624?source=1

安裝yolov8

onnx也是python的一個庫,可以將torch的網絡模型打包成一種通用的網絡模型格式,方便其他神經網絡框架直接調用網絡模型和網絡參數(shù)進行forward前向預測。

ultralytics庫就是yolov8的庫了,ultralytics是發(fā)布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

關鍵詞:

資訊

圖賞