jetson nano環(huán)境配置+yolov5部署+tensorRT加速模型
斷斷續(xù)續(xù)地前后花了一個多星期配置環(huán)境以及部署模型,期間也報了無數(shù)錯誤,參考了很多文檔,求助了身邊的朋友,因此盡可能詳細的記錄一下這個過程。
致謝
此處感謝Xnhyacinth在配置過程中對我的幫助哈哈哈??( ?’ '?)??
主機和jetson nano環(huán)境
我主機上的環(huán)境是python3.9,cuda11.6
jetson nano環(huán)境jetpack4.6,cuda10.2,python3.6(conda)
jetson系統(tǒng)開機燒錄、系統(tǒng)設置、換源
先熟悉各個接口及其功能,具體可參考NVIDIA官方文檔(見下文)先組裝好買來的風扇,準備好無線網(wǎng)卡,我用的是即插即用的usb版本的無線網(wǎng)卡,JD上有賣,組裝時發(fā)現(xiàn)jetson nano開發(fā)板上有一個跳線帽,那里默認是沒有短接的,這樣的話只能連接電腦電源,必須先把跳線帽短接才能連接直流電源。
NVIDIA jetson nano官網(wǎng)
剛開始的燒錄,sd卡格式化以及相關工作都是對照這個來的,基本沒什么問題。完成之后就可以得到一個Ubuntu18.04的系統(tǒng),然后如果有無線網(wǎng)卡可以直接連接WiFi,我后面一般都是通過xshell連接開發(fā)板,直接在主機操作,除了需要查看圖片或者視頻的時候才接屏幕。
這個階段我還部分參考了以下文檔,在此做一個記錄不贅述了。
Nvidia Jetson Nano介紹與使用指南
Jetson Nano 從入門到實戰(zhàn)(案例:Opencv配置、人臉檢測、二維碼檢測)這篇文章我主要參考了2.4.1到2.4.3的部分,配置了一些系統(tǒng)環(huán)境并換源,因為不換源下載東西速度可能比較慢,具體如何換源的網(wǎng)上資料很多,可以自行查閱。
python環(huán)境配置
剛開始我沒有用虛擬環(huán)境,自帶的環(huán)境里是python2.7,先下載3.6,又在環(huán)境里裝了torch,花了好幾天所有環(huán)境全部裝完到最后跑yolov5的時候還是報錯,然后請教了其他人,讓我安裝conda的虛擬環(huán)境,于是從頭再來,重新裝conda環(huán)境。前面的坑我就不說了,我們直接安裝conda環(huán)境。建議卡在這里的也可以直接使用conda環(huán)境,確實方便很多。
conda環(huán)境
安裝conda環(huán)境前我們要一直意識到一個問題,jetson nano是aarch64架構的,因此Jetson Nano開發(fā)板無法成功安裝Anaconda。下載所有環(huán)境配置或者網(wǎng)上搜攻略都要加上jetson nano或者arm64位架構。conda環(huán)境同樣如此,miniconda和anconda都不支持jetson nano,我們需要下載archiconda(Archiconda是用于64位ARM平臺的Conda發(fā)行版),命令和使用方式和前兩者都一樣,所以也很方便。下載地址如下。
下載地址
安裝完成之后按照在Windows系統(tǒng)上一樣創(chuàng)建環(huán)境,(可以搜索如何用conda創(chuàng)建環(huán)境,我這里裝的是python3.6)創(chuàng)建完成后激活環(huán)境(我給環(huán)境取名為yolov5)
#激活環(huán)境
conda activate yolov5
然后我們需要先安裝很多包,很多很多。。我參考的是下面這個鏈接。建議這篇文章的第七步之前都可以按照作者寫的走一遍,特別是下載一些包和cmake那段,一條一條命令復制過去安裝,不然后面安裝環(huán)境的時候會發(fā)現(xiàn)很多包下載不成功。
Jetson Nano部署YOLOv5與Tensorrtx加速——(自己走一遍全過程記錄)
yolov5環(huán)境
然后接下來可以直接把你的yolo代碼傳到開發(fā)板上(我用的xftp),也可以先用官方的代碼測試一下,先把環(huán)境跑一遍。我這里是先用官方代碼跑了一遍再放的自己的代碼。
先在jetson nano上安裝一個git,然后直接
git clone https://github.com/ultralytics/yolov5.git
應該默認的是v7.0,反正是測試無關緊要。git下來之后,cd到y(tǒng)olov5主目錄下,直接
pip install -r requirements.txt
應該有一部分下載不成功,先別著急,可以試著看看里面有哪些包需要安裝,一個一個安裝,盡量選低一些版本,實在不行手動下載安裝包到本地然后安裝,有找不到的包可以去pypi.org搜索下載,注意選擇歷史版本,然后選合適的python版本和系統(tǒng)版本,關鍵詞“l(fā)inux”“cp36”“arrch64”。
matplotlib和opencv-python
我當時遇到的情況是有兩個包安裝不上,耽擱了一天,一個是matplotlib,一個是opencv-python。第二個包我甚至參考了很多網(wǎng)上的編譯安裝opencv的教程,用c++編譯安裝的方式折騰了很久,實際上不需要,只要參考Jetson Nano部署YOLOv5與Tensorrtx加速——(自己走一遍全過程記錄)并把作者的那些環(huán)境配置安裝完之后就解決了。
全部環(huán)境安裝完成之后直接命令行切到主目錄然后輸入python detect.py
執(zhí)行,如果下載速度很慢可以提前去yolov5官方倉庫把yolov5s.pt下載到主目錄,沒有報錯就會在run/detect/exp
目錄下生成兩張圖片,這就成功了。
tensorRT加速
tensorRT本質上就是把模型壓縮,變得更快,因為jetson nano算力不夠所以需要加速。官方倉庫在這里我參考的倉庫里面的README.md
文檔,按照他的指令轉化成wts以及engine格式的模型文件。
另外還包括以下幾篇文章的tensor加速部分。但是以下文章的該部分僅供參考,要確保自己的yolo以及各項版本和你下載的tensorRT一致(實際上很有可能不一致,也就是說即使生成了engine文件也用不了)。
Jetson nano上部署自己的Yolov5模型(TensorRT加速)onnx模型轉engine文件
Jetson Nano部署YOLOv5與Tensorrtx加速——(自己走一遍全過程記錄)
之所以說僅供參考是因為
1. 里面的部分內容與實際情況不一致
比如修改訓練好的模型數(shù)量,默認是80我們不需要修改,但如果是自己訓練的模型就需要修改,修改地址并非他們所說的tensorrtx/yolov5/yololayer.h
,而是應該參考官方文檔README里面的這樣一句話:
cd [PATH-TO-TENSORRTX]/yolov5/
# Update kNumClass in src/config.h if your model is trained on custom dataset
上面的注釋中提到了如果要修改分類數(shù)量應該在src/config.h
文件中更新kNumClass
變量
但是還是有可能報錯,TensorRT生成engine文件異常([TRT] Network::addScale::434, condition: shift.count > 0 ?)(這是可能出現(xiàn)的問題之一,我還遇到了其他的錯誤,比如生成了engine文件卻不能適配等),如果用下面的方法就不會出現(xiàn)這個問題。
2. 其實并不需要用上述方法,如果你是跑yolo模型
實際上yolov5主目錄里有export.py
,可以直接調用tensorRT包實現(xiàn)把模型從xx.pt到xx.engine的轉換,非常方便,不需要其他操作。并且jetson nano有自帶的tensorRT包,我們只需要和我們的conda環(huán)境里的包的安裝目錄建立軟連接即可。具體方法見下節(jié)
Jetson Nano的conda 虛擬環(huán)境中使用TensorRT
建立軟鏈接
TensorRT的系統(tǒng)安裝路徑為:/usr/lib/python3.6/dist-packages/tensorrt/
(這個是大家都一樣不變的)
執(zhí)行以下命令,建立虛擬環(huán)境(自己的虛擬環(huán)境)對應的軟鏈接(注意自己的archiconda的安裝目錄,這是本人目錄僅供參考/home/alen123/archiconda3/envs/yolov5/lib/python3.6/site-packages
)
sudo ln -s /usr/lib/python3.6/dist-packages/tensorrt* /home/alen123/archiconda3/envs/yolov5/lib/python3.6/site-packages
查看版本
>>> python
>>> import tensorrt
>>> tensorrt.__version__
運行export.py和detect.py
完成上步工作之后,tensorRT已經(jīng)作為一個包可以直接調用了,然后直接在終端執(zhí)行以下代碼:
python export.py --weights yolov5.pt --include engine -- device 0
可能會報錯,告訴你部分包未安裝,這時候別著急安裝,先cat requirements.txt
,查找對應的包,以onnx
為例,找到requirements.txt
里面onnx對應的版本,直接在命令行下載文件要求的最低版本,默認應該是被注釋掉了,在Export里面,我的是
# onnx>=1.9.0 # ONNX export
所以直接
pip install onnx==1.9.0
其他包同樣如此。
重新執(zhí)行
python export.py --weights yolov5.pt --include engine -- device 0
會生成一個engine文件。如果想要在開發(fā)板上跑時有更快的速度可以加--half
,降低精度的,同時可以顯著提高速度,我跑自己的模型時沒用tensorRT加速速度是>100ms每幀。加速后,但加--half
前速度大約是50ms每幀,加了--half
之后是30ms每幀。
python export.py --weights yolov5.pt --include engine --half -- device 0
然后就會生成一個xx.engine文件,再執(zhí)行detect.py,可以在文件里改,如果懶得改也可以直接命令行改模型:
python detect.py --weights yolov5.engine
這樣就大功告成了,如果換成自己訓練好的模型也是一樣的,注意模型名字,數(shù)據(jù)路徑什么的變化。
其他錯誤
其實一遍下來還有很多其他瑣碎的錯誤,但有些在調試過程中解決了就沒有全記錄下來,接下來想到可能會慢慢補充。
KeyError: ‘names’
File "detect.py", line 368, in <module>
main(opt)
File "detect.py", line 262, in main
run(**vars(opt))
File "/home/alen123/archiconda3/envs/yolov5/lib/python3.6/site-packages/torch/autograd/grad_mode.py", line 27, in decorate_context
return func(*args, **kwargs)
File "detect.py", line 98, in run
model = DetectMultiBackend(weights, device=device, dnn=dnn, data=data, fp16=half)
File "/home/alen123/yolov5-7.0/models/common.py", line 500, in __init__
names = yaml_load(data)['names'] if data else {i: f'class{i}' for i in range(999)}
KeyError: 'names'
在跑自己的模型時遇到的,原因是數(shù)據(jù)的yaml文件里面沒有模型類別名字,在自己訓練的模型的yaml文件最后加上即可。我的模型只有開關兩類,所以我要加上下面的內容。
names:
0: open
1: closed
總結
花了3個小時寫的,內容有點倉促,可能會慢慢補充,大家可以和我交流,如有錯誤之處懇請指正。總得來說在業(yè)界jetson nano的配置和使用都比較完善,資料也比較齊全,所以費點時間都可以在網(wǎng)上找到,謹以此文做一個備份和記錄供大家參考。
其他可能有用的參考文章
Nvidia Jetson nano 安裝Archiconda、gpu版torch、踩坑記錄
win10 yolov5轉換Tensorrt的engine模型全流程安裝運行解讀(使用TRT的PythonApi)文章來源:http://www.zghlxwxcb.cn/news/detail-410941.html
圖片展示
文章來源地址http://www.zghlxwxcb.cn/news/detail-410941.html
到了這里,關于【jetson nano】jetson nano環(huán)境配置+yolov5部署+tensorRT加速模型的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!