Jetson Xavier NX基于YOLOv5+CSI攝像頭實作目標檢測
- 文章目錄
- Jetson Xavier NX基礎環境搭建
- 基礎環境搭建踩坑指南
- 1. root用戶下安裝
- 2. CUDA、Pytorch、Torchvision版本對應
- 3. Matplotlib的安裝
- 4.numpy的安裝(非法指令 (核心已轉儲))
- YOLOv5環境配置與推理測驗
- 下載YOLOv5
- 配置環境
- 推理測驗
- 轉TensorRT及推理測驗
- 下載TensorRT包
- 推理
- Deepstream安裝
- 什么是Deepstream?
- Deepstream安裝
- YOLOv5+CSI攝像頭
文章目錄
本文記錄了一些博主在部署Jetson Xavier NX和配置CSI攝像頭程序中遇到的一些坑,希望能夠幫助到大家避開這些坑或是踩到同樣坑的小伙伴們能夠知道怎么解決,
Jetson Xavier NX基礎環境搭建
首先介紹一下我的環境(均基于Jetpack4.6)
比較簡單的查看方式是通過jtop查看,jtop類似nvidia-smi的功能(Jetson系列沒有nvidia-smi)
(1)安裝jtop
NX預裝的python版本為2.7.17以及python3.6.9,直接終端輸入:
sudo apt-get install python3-pip python3-dev
//接著將pip升級為最新版
python3 -m pip install --upgrade pip #升級pip
(2)Jtop進行記憶體/CPU/GPU監視
sudo pip install jetson-stats
sudo systemctl restart jetson_stats.service
sudo jtop
我的環境如下圖所示:

主要關注jetpack、CUDA、cuDNN、OpenCV、TensorRT的版本
基礎環境搭建踩坑指南
1. root用戶下安裝
以下環境配置最好是在root用戶下進行,因為YOLOv5在推理或者測驗的時候都會在runs/val(或是detect)/下新建一個exp的檔案夾(或者別的名字,可以修改)用來存放結果,而非root用戶的話,會出現權限不夠的問題,不過問題也不大,可以給runs檔案夾增加權限就可以,(博主自己也是配置完了才發現這個問題),
#給檔案夾添加權限
chmod 777 runs
2. CUDA、Pytorch、Torchvision版本對應
我的Jetson Xavier NX是通過Jetpack 4.6燒錄的(燒錄教程會在后續檔案更新),因此默認cuda版本是:10.2,對應的pytorch版本為1.8.0,如果cuda版本和我的不一樣,可以去pytorch官網看一下:
https://pytorch.org/get-started/previous-versions/,
由于Jetson Xavier NX是arm架構,需要下載相對應的torch,然后編譯安裝,附上一個我安裝的torch:torch-1.8.0-cp36-cp36m-linux_aarch64.whl
百度網盤:
鏈接:https://pan.baidu.com/s/1UuTqBxg2uViguP_ruFod7Q
提取碼:f9sz
(1) 安裝pytorch
sudo apt-get install python3-pip libopenblas-base libopenmpi-dev
pip3 install Cython
pip3 install numpy torch-1.8.0-cp36-cp36m-linux_aarch64.whl
如果安裝cython的時候有問題,可以試試:
apt-get install cython3
(2) 安裝torchvision
torchvision與剛剛安裝好的torch一定要一一對應,我整理了一份對照表供大家參考,我安裝的是1.8.0的torch,因此對應的torchvision版本為0.9.0
| torch | torchvision | python |
|---|---|---|
| 1.9.0 | 0.10.0 | >=3.6 |
| 1.8.1 | 0.9.1 | >=3.6 |
| 1.8.0 | 0.9.0 | >=3.6 |
| 1.7.1 | 0.8.2 | >=3.6 |
| 1.7.0 | 0.8.1 | >=3.6 |
| 1.7.0 | 0.8.0 | >=3.6 |
| 1.6.0 | 0.7.0 | >=3.6 |
| 1.5.1 | 0.6.1 | >=3.5 |
| 1.5.0 | 0.6.0 | >=3.5 |
| 1.4.0 | 0.5.0 | ==2.7, >=3.5, <=3.8 |
| 1.3.1 | 0.4.2 | ==2.7, >=3.5, <=3.7 |
| 1.3.0 | 0.4.1 | ==2.7, >=3.5, <=3.7 |
| 1.2.0 | 0.4.0 | ==2.7, >=3.5, <=3.7 |
| 1.1.0 | 0.3.0 | ==2.7, >=3.5, <=3.7 |
| <=1.0.1 | 0.2.2 | ==2.7, >=3.5, <=3 |
百度網盤:鏈接:https://pan.baidu.com/s/1dnXpIkXFRmm15-YAn1kVnA
提取碼:auvg
cd torchvision
export BUILD_VERSION=0.9.0
sudo python setup.py install
(3) 測驗torch和torchvision是否安裝正確
python3
import torch
print(torch.cuda.is_available())
#回傳值若為True,說明cuda和torch版本適配
#如果為False,則需要重新再檢查一下版本對應問題
#同理,如果訓練的時候,發現沒有呼叫到GPU,也可以試試看回傳值是不是True
import torchvision
print(torchvision.__version__)
#回傳torchvision的版本
3. Matplotlib的安裝
如果你直接 pip3 install matplotlib
你將會在一個非常漫長的等待之后,迎來一個報錯,大致意思是缺少Freetype,
因此我們先安裝Freetype,附上Freetype鏈接
鏈接:https://pan.baidu.com/s/1-Yws6RxOTPYK2iSp2LyEXQ
提取碼:jhnf
cd freetype-2.9.1
./configure --without-zlib
make
sudo make install
#安裝zlib1g-dev和libpng-dev,否則matplotlib還是會報錯
sudo apt-get install zlib1g-dev
sudo apt-get install libpng-dev
# 重新安裝matplotlib
pip3 install matplotlib
#漫長的等待....中間有報錯也不要管,等到它完成了就好了
4.numpy的安裝(非法指令 (核心已轉儲))
numpy的坑很有欺騙性,pip3 install很容易就裝好了numpy,然而在實際運行時會報一種錯誤"非法指令 (核心已轉儲)",
此類報錯是因為裝了2個numpy,引起版本沖突!!!
有小伙伴就會好奇,怎么會同時安裝了2個numpy?
原因就是:
Jetson Xavier自帶一個numpy且安裝位置在/usr/lib/python3/dist-packages/,而通過pip3 安裝的numpy安裝在/home/username(這里指本機的名字)/.local/lib/python3.6/site-packages/里面,因此會同時存在兩個版本的numpy,
而在python匯入包的時候即import的時候,import的機制就是搜索sys設定的路徑下是否存在相關包,而這時候sys.path顯示出兩個路徑下都有numpy而且還是不同版本因此產生了沖突,顯示import的路徑的方法是python3 ;import sys ;print(sys.path)即可顯示,
通過pip3只能卸載后安裝的numpy(就是pip安裝的,而刪不掉自帶的)
問題來了:自帶的numpy版本太低,再裝一個高版本的numpy又會引起沖突,該怎么辦?
兩種方式安裝numpy,升級老的或者干掉老的
方式一:在原有的numpy基礎上升級
優點:能用!且對老版本無影響,pip卸載后還是老版本,
缺點:在裝Pillow、OpenCV的時候都有可能會對numpy有"干擾",動不動就覆寫安裝了一個最新的numpy,導致又出現沖突,因此,需要先裝其他包,最后升級numpy,避免影響,
(我選的就是這個方法)
注意:若選擇此方法,先配置YOLOv5的環境,numpy最后再裝!!
注意:若選擇此方法,先配置YOLOv5的環境,numpy最后再裝!!
注意:若選擇此方法,先配置YOLOv5的環境,numpy最后再裝!!
pip install numpy --upgrade
方式二:卸載原有numpy
優點:省心!直接干掉老版本,安裝新版本無所顧慮
缺點:擔心其他庫對numpy的版本的限制
解決步驟: 要洗掉掉位于/usr/lib/python3/dist-packages/的版本為1.13.3的numpy, 并將/home/username(這里指本機的名字)/.local/lib/python3.6/site-packages/版本號為1.19.5的numpy替換成1.19.3版本
(此方式來源于網路,我也沒試過)
YOLOv5環境配置與推理測驗
在上述環境配置的基礎上繼續搭建YOLOv5的環境,
下載YOLOv5
git clone -b v6.0 https://github.com/ultralytics/yolov5.git
配置環境
pip3 install -r requirements -i https://mirror.baidu.com/pypi/sample
這里有個小坑,請大家看一下requirements.txt中torch版本,還有matplotlib,如果torch要求的版本比1.8.0更高,就注釋掉,別覆寫安裝了,matplotlib也要注釋掉,以免有影響,剩下的就是numpy,選擇第一種方式的小伙伴,記得在requirements.txt裝完之后卸載numpy,以免引起沖突,(因為Opencv會默認下載最新的numpy)
等環境配置好后
推理測驗
python3 detect.py
python3 detect.py 第一次運行會下載yolov5s.pt的權重和字體,速度很慢
權重均可以在官網下載:https://github.com/ultralytics/yolov5/releases
可以試試–source=0,SCI攝像頭是呼叫不到的,于是有了下面的步驟
轉TensorRT及推理測驗
下載TensorRT包
git clone https://github.com/wang-xinyu/tensorrtx.git
TensorRT的版本要與YOLOv5要一致
轉TRT主要參考https://github.com/wang-xinyu/tensorrtx/tree/master/yolov5
這里不做贅述了,基本按著步驟來都能成功,沒有坑
推理
cd tensorrtx
cp yolov5/gen_wts.py ~/yolov5
cd ~/yolov5
python3 gen_wts.py yolov5s.pt
cd ~/tensorrtx/yolov5
mkdir build && cd build
mv ~/yolov5/yolov5s.wts ./
/yolov5 -s yolov5s.wts yolov5s.engine s #生成engine檔案需要一段時間,請耐心等待
# 測驗
./yolov5 -d yolov5s.engine ../samples
測驗結果如下,這兩張圖片在檔案夾里可以找到,終端可能不顯示
終端顯示fps,是有提升的

Deepstream安裝
什么是Deepstream?
DeepStream將深度神經網路和其他復雜的處理任務引入到流處理管道中,以實作對視頻和其他傳感器資料的近實時分析,更具體地說,DeepStream是一組模塊化插件,這些插件相連接以形成處理管道,每個插件代表一個功能塊,例如,使用TensorRT進行推理或多流解碼,

Deepstream安裝
正常情況下,deepstream是隨著Jetpack一起安裝了的
可以先檢查一下是不是已經有了
#檢查一下有沒有
cd /opt/nvidia/deepstream
如果沒有,則按如下方式安裝:
https 😕/developer.nvidia.com/deepstream_sdk_v6.0.0_jetsontbz2
注意版本對應,Jetpack和deepstream對應
| Jetpack | Deepstream |
|---|---|
| 4.6 | 6.0 |
| 4.5.1 | 5.1 |
| 4.4.1 | 5.0 |
安裝完成進入官方例程檔案夾
cd /opt/nvidia/deepstream/deepstream-6.0/samples/configs/deepstream-app/
#測驗一下
deepstream-app -c source8_1080p_dec_infer-resnet_tracker_tiled_display_fp16_nano.txt
打開速度很慢,退出也很慢
等不及的話可以 ALT + F1強制退出
YOLOv5+CSI攝像頭
下載包,這個是5.0的,6.0也可以兼容
git clone https://github.com/DanaHan/Yolov5-in-Deepstream-5.0.git
或者也可以試試6.0:
https://github.com/marcoslucianops/DeepStream-Yolo
這個鏈接下有labels.txt,可以下載
cd Yolov5-in-Deepstream-5.0/Deepstream 5.0
把labels.txt放到這個檔案夾下
進入config_infer_primary_yolovV5.txt 進行修改(最好先備份一下)
如果沒有vim,可以通過apt-get install 安裝
vim config_infer_primary_yoloV5.txt

#復制之前生成的引擎檔案到當前目錄
cp ~/tensorrtx/yolov5/build/yolov5s.engine ./
坑點:如果直接make會報錯
#編譯
CUDA_VER=10.2 make -C nvdsinfer_custom_impl_Yolo
生成libnvdsinfer_custom_impl_Yolo.so檔案
修改deepstream_app_config_yoloV5.txt 這個檔案(也是建議先備份)

主要是相機的色調、尺寸以及fps之類的引數
然后測驗
LD_PRELOAD=./libmyplugins.so deepstream-app -c deepstream_app_config_yoloV5.txt
查看結果


到這里就大功告成了!
有任何問題都歡迎一起探討
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/433217.html
標籤:AI
