【jetson nano】yolov5環境配置tensorrt部署加速

湾仔码农發表於2024-06-02

安裝pytorch

Nano上預裝的Jetpack版本為4.6.1,Python為3.6.9,CUDA環境為10.2。在PyTorch for Jetson中可以下載不同版本的torch,torch<=1.10.0。

1 安裝torch1.8.0

# substitute the link URL and wheel filename from the desired torch version above
wget https://nvidia.box.com/shared/static/p57jwntv436lfrd78inwl7iml6p13fzh.whl -O torch-1.8.0-cp36-cp36m-linux_aarch64.whl
sudo apt-get install python3-pip libopenblas-base libopenmpi-dev libomp-dev
pip3 install 'Cython<3'
pip3 install numpy torch-1.8.0-cp36-cp36m-linux_aarch64.whl

如果安裝numpy時報錯,可以先更新pip

pip3 install --upgrade pip

2 編譯torchvision0.9.0

sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libopenblas-dev libavcodec-dev libavformat-dev libswscale-dev
git clone --branch v0.9.0 https://github.com/pytorch/vision torchvision 
cd torchvision
export BUILD_VERSION=0.9.0  # the torchvision version  
python3 setup.py install --user
cd ../  # attempting to load torchvision from build dir will result in import error

配置yolov5環境

1 下載yolov5-6.0的程式碼及權重yolov5s.pt

由於yolov5的最新版本中要安裝包ultralytics,總是報錯,沒有版本,所以選擇yolov5-6.0。

2 替換清華映象源

建立.pip資料夾

mkdir ~/.pip

使用vim開啟pip.conf配置檔案

vim ~/.pip/pip.conf

修改pip.conf配置檔案

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn
按ESC,然後輸入:wq即可儲存修改

3 安裝包

pip3 install -r requirements.txt

4 執行程式

python3 detect.py

如果出現了killed程式終止,可以關掉一些不用的程式,或者設定交換分割槽

設定交換分割槽

1 安裝Jtop監控執行

執行安裝命令

sudo pip3 install jetson-stats

安裝完成後,終端執行

sudo jtop

2 增加Swap分割槽大小

建立swap檔案

sudo fallocate -l 4G swapfile

鎖定檔案的root許可權,防止普通使用者能夠訪問該檔案,以免造成重大的安全隱患:

sudo chmod 600 swapfile

將檔案標記為交換空間

sudo mkswap swapfile

啟用該交換檔案

sudo swapon swapfile

這時,我們可以透過jtop再次檢視swp增加了4g,Dsk也少了4g空間。


如果我們重新啟動,伺服器不會自動保留swap設定,但是dsk的空間已經減少了,我們可以透過以下指令還原

sudo rm -rf swapfile

我們可以透過將swap檔案新增到/etc/fstab檔案中來永久儲存。備份/etc/fstab檔案以防出錯:

sudo cp /etc/fstab /etc/fstab.bak

將swap檔案資訊新增到/etc/fstab檔案的末尾:

echo 'swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

這樣就保留了swap檔案。

配置cuda10.2環境

vim開啟配置檔案

sudo vim ~/.bashrc

在此檔案中新增以下資訊

export PATH=/usr/local/cuda-10.2/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_ROOT=/usr/local/cuda

更新

source ~/.bashrc

此時使用 “nvcc -V” 命令,就可以看到 cuda 的版本號了。

安裝tensorrtx

下載yolov5權重和tensorrtx

git clone -b v6.0 https://github.com/ultralytics/yolov5.git
git clone https://github.com/wang-xinyu/tensorrtx.git

複製tensorrtx專案中的gen_wts.py到yolov5專案中,利用gen_wts.py生成.wts權重

// clone code according to above #Different versions of yolov5
// download https://github.com/ultralytics/yolov5/releases/download/v6.0/yolov5s.pt
cp {tensorrtx}/yolov5/gen_wts.py {ultralytics}/yolov5
cd {ultralytics}/yolov5
python gen_wts.py -w yolov5s.pt -o yolov5s.wts
// a file 'yolov5s.wts' will be generated.

方法1:使用tensorrt c++推理:build tensorrtx/yolov5然後執行

cd {tensorrtx}/yolov5/
// update CLASS_NUM in yololayer.h if your model is trained on custom dataset
mkdir build
cd build
cp {ultralytics}/yolov5/yolov5s.wts {tensorrtx}/yolov5/build
cmake ..
make
sudo ./yolov5 -s [.wts] [.engine] [n/s/m/l/x/n6/s6/m6/l6/x6 or c/c6 gd gw]  // serialize model to plan file
sudo ./yolov5 -d [.engine] [image folder]  // deserialize and run inference, the images in [image folder] will be processed.
// For example yolov5s
sudo ./yolov5 -s yolov5s.wts yolov5s.engine s
sudo ./yolov5 -d yolov5s.engine ../samples
// For example Custom model with depth_multiple=0.17, width_multiple=0.25 in yolov5.yaml
sudo ./yolov5 -s yolov5_custom.wts yolov5.engine c 0.17 0.25
sudo ./yolov5 -d yolov5.engine ../samples

方法2:使用tensorrt python推理

// install python-tensorrt, pycuda, etc.
// ensure the yolov5s.engine and libmyplugins.so have been built
python yolov5_trt.py

// Another version of python script, which is using CUDA Python instead of pycuda.
python yolov5_trt_cuda_python.py

參考

1. jeston nano 刷機及開發環境搭建(二)

2. 在Pi和Jetson nano上執行深度網路,程式被Killed

相關文章