如果你是初學(xué)者,請(qǐng)務(wù)必保證所有版本號(hào)和本文的一致!
本文寫(xiě)于2023年8月,各部分版本號(hào)如下:
(資料圖)
+
+42759b1
前段時(shí)間做無(wú)人機(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)境的過(guò)程非常坎坷,但經(jīng)過(guò)一番摸索,在5臺(tái)NX上都非常順暢地配置完成了yolov8環(huán)境的配置。故把踩過(guò)的坑在此記錄,分享給大家以供交流。
另外,我之前對(duì)jetpack,torchvision,pycuda,tensorRT等理解不是很清晰,很多時(shí)候配好了都不知道這東西是用來(lái)干啥的。對(duì)此,本文每配一個(gè)東西我也會(huì)說(shuō)明其概念和作用。
本篇教程不會(huì)把需要運(yùn)行的命令一條一條全部列出來(lái),取而代之的是更多的文字描述與原理解讀。我自認(rèn)為邏輯非常清晰,讀者跟隨邏輯完全可以完成安裝,讀者只需要帶點(diǎn)腦子即可。也許很多讀者配環(huán)境的時(shí)候不看任何文字說(shuō)明,把作者給出的指令逐行復(fù)制了事(我之前就是這樣)。這個(gè)習(xí)慣很不好。作者會(huì)在文字說(shuō)明中陳述很多細(xì)節(jié),請(qǐng)認(rèn)真讀。
注意:如果你需要在NX上安裝ros或ros2,那么不要使用conda!?。?/strong>ros與conda的兼容性十分糟糕,親測(cè)ros2與conda兼容性更差,甚至連編譯都過(guò)不去。請(qǐng)?jiān)贜X原生python環(huán)境下安裝yolov8環(huán)境。
觀看本教程之前,最好滿(mǎn)足以下條件:
你的NX已經(jīng)安裝好了系統(tǒng)
熟悉一些基礎(chǔ)的linux命令
會(huì)python編程
了解torch的基本概念,在筆記本電腦上能夠完成torch的配環(huán)境工作(但對(duì)于如何在NX上完成環(huán)境配置比較頭疼)
有一個(gè)環(huán)境,最好是(默認(rèn)自帶)
安裝好了 git,pip等基礎(chǔ)工具
最好有一個(gè)梯子,可以連接到外網(wǎng)。
安裝Jetpack
Jetpack是專(zhuān)供英偉達(dá)的嵌入式計(jì)算平臺(tái)使用的人工智能包。這個(gè)官方定義現(xiàn)在理解起來(lái)有點(diǎn)抽象,咱們安裝好之后,大家就知道他是什么了。
首先,安裝jtop,這是一個(gè)監(jiān)控CPU,GPU等使用情況的工具。
然后,安裝JetPack:
安裝完JetPack后,命令行輸入jtop并運(yùn)行,即可看到當(dāng)前電腦的CPU運(yùn)行狀態(tài),按數(shù)字鍵可以切換頁(yè)面,切換到INFO頁(yè)面,可看到已經(jīng)安裝好的包:
可以發(fā)現(xiàn),當(dāng)前你的NX已經(jīng)安裝好了很多難裝的底層庫(kù):Cuda,cuDNN, TensorRT, OpenCV。這下可能你大致明白了咱們的定義:
Jetpack是英偉達(dá)提供的專(zhuān)門(mén)供他自己的嵌入式計(jì)算平臺(tái)使用的人工智能包。
這句話(huà)是什么意思了,意思就是Jetpack把人工智能開(kāi)發(fā)常用的底層驅(qū)動(dòng)和庫(kù)一股腦給你打包好,你安裝了Jetpack,就把這幾樣?xùn)|西都安裝上去了。
注意:上圖opencv的版本后有“with CUDA NO”的字樣,說(shuō)明opencv也有支持GPU加速的版本,但是默認(rèn)安裝的opencv不支持GPU加速(pip也只能安裝cpu版本的opencv)。由于作者的項(xiàng)目不涉及太多的opencv操作,配置GPU版本的opencv對(duì)整體性能影響不大,所以作者沒(méi)有深入研究,如果需要安裝支持GPU加速的opencv,需要將原opencv卸載,并通過(guò)源碼編譯安裝,在cmake階段指定相應(yīng)cuda配置,即可編譯出支持cuda加速的opencv。讀者可自行百度解決。
后文不會(huì)再提及cuda,cudnn,opencv的安裝。
torch應(yīng)該不需要介紹了,為了方便,一般大家都把pytorch直接叫做torch,初學(xué)者看見(jiàn)不要覺(jué)得奇怪就行。
安裝torch,參考官方鏈接,所有命令均參考官網(wǎng)的即可。
Installing PyTorch for Jetson Platform - NVIDIA Docs
/deeplearning/frameworks/install-pytorch-jetson-platform/
官網(wǎng)中需要運(yùn)行的指令都在這個(gè)圖片里,請(qǐng)自行前往官網(wǎng)復(fù)制。再往后的指令就不用管了。
注意中間的兩個(gè) “export TOUCH_INSTALL=.......”?只運(yùn)行上面這個(gè)https:// 的就行,仔細(xì)看兩眼英文敘述都能懂。
大致流程解讀:
sudo apt安裝一堆依賴(lài)庫(kù)
export TORCH_INSTALL=……… 聲明下載torch安裝包的網(wǎng)址。
pip安裝指定版本的aiohttp numpy scipy等庫(kù)。
export一個(gè)別的什么庫(kù),具體是什么不用管。
pip 安裝 protobuf,這個(gè)照著做就行,沒(méi)遇見(jiàn)什么問(wèn)題。
最后,使用pip安裝torch。其中命令中的$TORCH_INSTALL就是你之前export的那個(gè)。
然后應(yīng)該torch就安裝成功了。
torchvision是torch的一部分,可以理解為用torch實(shí)現(xiàn)了一份常用的基礎(chǔ)的網(wǎng)絡(luò)框架和工具類(lèi),你拿來(lái)就能用,不用自己寫(xiě)了。每個(gè)版本的torch都會(huì)有自己對(duì)應(yīng)版本的torchvision,一般裝錯(cuò)版本就意味著不好使。torchvision 版本對(duì)應(yīng)關(guān)系如下:
通過(guò)pip安裝的torchvision只是CPU版本的,版本只顯示。這個(gè)是無(wú)法調(diào)用jetson底層的cuda加速的。GPU版本的torchvision只能通過(guò)編譯進(jìn)行安裝。編譯安裝的torch版本號(hào)顯示為“+42759b1”(“版本號(hào)+巴拉巴拉一堆數(shù)”),說(shuō)明你安裝的是支持jetson上的cuda加速的。
下載torchvision源碼并構(gòu)建安裝的方法如下:
親測(cè)NX很可能編譯了一半就內(nèi)存爆了然后卡死,可重復(fù)運(yùn)行安裝腳本,卡死之前的安裝進(jìn)度會(huì)被保留,多運(yùn)行幾次就可以安裝成功了。
最后在命令行進(jìn)入python,檢測(cè)是否安裝成功:
torch.__version__和torchvision.__version__均會(huì)輸出“版本號(hào)+巴拉巴拉一堆數(shù)”,如下圖所示,這就說(shuō)明你安裝gpu版本的torch和torchvision成功了。如果你是初學(xué)者,請(qǐng)務(wù)必保證所有版本號(hào)和本文的一致。
pyCUDA是一個(gè)python庫(kù),讓訪(fǎng)問(wèn) NVIDIA 的 CUDA 并行計(jì)算API更容易。我的理解是:如果你是初學(xué)者,只是使用yolov8做基礎(chǔ)的訓(xùn)練和預(yù)測(cè),是不需要管python如何訪(fǎng)問(wèn)cuda的,這些東西torch都幫你做好了。而如果你使用torch實(shí)現(xiàn)自己的網(wǎng)絡(luò)架構(gòu),或者需要使用到tensorRT做加速,可能需要用到pyCUDA庫(kù)做一些底層的操作。總之,對(duì)于初學(xué)者,不太需要關(guān)心這個(gè)庫(kù)。本文一并安裝,有備無(wú)患。
注:沒(méi)梯子的加清華源:【
-i /simple】
說(shuō)到tensorRT加速,其運(yùn)行速度比GPU版本的torch又快了一個(gè)數(shù)量級(jí),但是水很深,建議新手不要嘗試。CSDN上的文章寫(xiě)的亂七八糟的,我研究?jī)商爝B個(gè)demo都沒(méi)跑通,對(duì)于新手來(lái)說(shuō),GPU版本的torch幀率一般已經(jīng)夠高了(20Hz左右)。
如果有想法,推薦跟著深藍(lán)學(xué)院的這個(gè)教程學(xué)上一個(gè)月:
/course/624?source=1
onnx也是python的一個(gè)庫(kù),可以將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ù)測(cè)。
ultralytics庫(kù)就是yolov8的庫(kù)了,ultralytics是發(fā)布yolov8的公司的名字。
注:沒(méi)梯子的加清華源:【
-i /simple】
安裝完?ultralytics?之后,pip?會(huì)報(bào)錯(cuò):pandas?和?matplotlib?要求的?numpy?版本過(guò)高,如下圖:
注意,這是個(gè)大坑,如果不處理好numpy版本問(wèn)題,可能即使torch和torchvision的版本完全正確,yolo運(yùn)行還是會(huì)報(bào)錯(cuò)。而解決這個(gè)問(wèn)題之后,一般就好使了。?此時(shí)把他們都卸了即可:
當(dāng)然,如果你有別的需求真的需要用到這兩個(gè)庫(kù),你可以重新裝一下這兩個(gè)庫(kù)的較低版本,具體版本要求可參考github上ultralytics官方倉(cāng)庫(kù)的pip依賴(lài)文件:?
/ultralytics/ultralytics/blob/main/
隨便寫(xiě)了個(gè)代碼測(cè)試一下。
你需要準(zhǔn)備一個(gè)yolov8的模型文件(.pt 文件),點(diǎn)擊以下鏈接下載,下載后和代碼放入同一文件夾下。
/ultralytics/assets/releases/download/
還需要準(zhǔn)備一個(gè)測(cè)試視頻,這個(gè)自己夏姬八準(zhǔn)備一下就行了,也和代碼放入同一文件夾下。
最后這個(gè)文件夾下應(yīng)該有這三個(gè)東西:
Yolo,啟動(dòng)!
親測(cè)在NX上運(yùn)行,網(wǎng)絡(luò)預(yù)測(cè)一幀只需要20~30ms左右,由于USB攝像頭讀取也需要一定的時(shí)間,最終幀率可以達(dá)到10~20Hz,滿(mǎn)足要求,贏!
可惜最后比賽輸了,輸麻了。
——sytnocui 2023/8/3
關(guān)鍵詞:
iphone5s什么時(shí)候出的(iphone5)
來(lái)為大家解答以上問(wèn)題,iphone5s什...
PS官方提醒:打雷記得關(guān)閉游戲機(jī) 拔掉電源線(xiàn)
今日,PlayStation日本客戶(hù)支持賬...
LPR下調(diào)!對(duì)樓市、信貸影響有多大?下半年怎么走?
【大河財(cái)立方記者陳玉靜】6月20日...
創(chuàng)建楓橋式人民法庭丨訴源治理出“新”招“彝族老家”創(chuàng)新“楓”
【來(lái)源:四川高院】喜德縣法院冕山...
蔡屋圍金龍大廈(關(guān)于蔡屋圍金龍大廈簡(jiǎn)述)
,你們好,今天0471房產(chǎn)來(lái)聊聊一篇...
人民日?qǐng)?bào)看青海|海西州冷湖鎮(zhèn):從石油小鎮(zhèn)到天文小鎮(zhèn)
原標(biāo)題:青海省海西州冷湖鎮(zhèn)——從...
雙色球第89期曬票!多張50倍票爭(zhēng)兩億大獎(jiǎng),擁抱生活中的放手之道
今天第一波曬票為大家?guī)?lái)倍投票和...
南京有效發(fā)明專(zhuān)利量突破12.5萬(wàn)件
8月2日,記者從南京市市場(chǎng)監(jiān)管局(...