如果你是初學者,請務必保證所有版本號和本文的一致!
本文寫于2023年8月,各部分版本號如下:
(資料圖)
+
+42759b1
前段時間做無人機集群目標跟蹤的比賽,需要在5臺英偉達的jetson NX上都配置yolov8環(huán)境。我們首先配好了CPU版本的torch環(huán)境,雖然配環(huán)境十分輕松,但CPU版本torch的yolov8運行幀率只有1~2幀。
而在配置GPU版本torch的yolov8環(huán)境的過程非常坎坷,但經過一番摸索,在5臺NX上都非常順暢地配置完成了yolov8環(huán)境的配置。故把踩過的坑在此記錄,分享給大家以供交流。
另外,我之前對jetpack,torchvision,pycuda,tensorRT等理解不是很清晰,很多時候配好了都不知道這東西是用來干啥的。對此,本文每配一個東西我也會說明其概念和作用。
本篇教程不會把需要運行的命令一條一條全部列出來,取而代之的是更多的文字描述與原理解讀。我自認為邏輯非常清晰,讀者跟隨邏輯完全可以完成安裝,讀者只需要帶點腦子即可。也許很多讀者配環(huán)境的時候不看任何文字說明,把作者給出的指令逐行復制了事(我之前就是這樣)。這個習慣很不好。作者會在文字說明中陳述很多細節(jié),請認真讀。
注意:如果你需要在NX上安裝ros或ros2,那么不要使用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應該不需要介紹了,為了方便,一般大家都把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是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是一個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
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
關鍵詞: