在Nvidia Jetson Xavier AGX 运行Yolov5 并使用TensorRT加速
一、本机环境
Jetpack4.5.1
自带 cuda10.2、TensorRT7.1.3
-
git clone git@github.com:conda-forge/miniforge.git
cd miniforge sh Miniforge-pypy3-4.8.3-4-Linux-aarch64.sh
conda config –set auto_activate_base true // 选择True每次打开终端就会自动进base环境
完成后重启
conda添加清华源
conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config –set show_channel_urls yes创建环境
conda create -n pytorch python=3.6 //重新运行
激活环境
conda activate pytorch
二、前期工作
1、配置cuda环境
烧录Jetpack时已经内置好了cuda,但需要配置环境变量才能调用,需要在终端输入
sudo gedit ~/.bashrc
//在底部添加如下
export PATH=/usr/local/cuda/bin:PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:LD_LIBRARY_PATH
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda
source ~/.bashrc
测试,输入nvcc -V
2、给Jetson更换一个国内的镜像源
//sudo gedit /etc/apt/sources.list
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe
deb http://ports.ubuntu.com/ubuntu-ports/ bionic restricted main universe multiversedeb-src http://ports.ubuntu.com/ubuntu-ports/ bionic restricted main universe multiverse Added by software-properties
deb http://ports.ubuntu.com/ubuntu-ports/ bionic-security universe multiverse main restricted
// 更新
sudo apt-get update
sudo apt-get upgrade
3、依赖
pip
sudo apt-get update
sudo apt-get install python3-pip python3-dev -y
sudo apt-get install build-essential make cmake cmake-curses-gui -y
sudo apt-get install git g++ pkg-config curl -y
sudo apt-get install libatlas-base-dev gfortran libcanberra-gtk-module libcanberra-gtk3-module -y
sudo apt-get install libhdf5-serial-dev hdf5-tools -y
sudo apt-get install nano locate screen -y
所需的依赖
sudo apt-get install libfreetype6-dev -y
sudo apt-get install protobuf-compiler libprotobuf-dev openssl -y
sudo apt-get install libssl-dev libcurl4-openssl-dev -y
sudo apt-get install cython3 -y
安装opencv的系统级依赖和一些编解码的库
sudo apt-get install build-essential -y
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev -y
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff5-dev libdc1394-22-dev -y
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev -y
sudo apt-get install libxvidcore-dev libx264-dev -y
sudo apt-get install libatlas-base-dev gfortran -y
sudo apt-get install ffmpeg -y
4、安装torch+torchvision
当前的jetpack是4.5.1 的所以我下载的版本是torch1.8+torchvision0.9.0
首先我们创建一个conda虚拟环境,此处笔者创建了一个python3.6的虚拟环境并激活
下面提供了两种方式来驱动我的pytorch
依赖
安装一些我们需要的构建依赖项
sudo apt install -y python3-pip python3-venv python3-dev libpython3-dev
sudo apt install -y libopenblas-base
sudo apt install -y gfortran libopenmpi-dev liblapack-dev libatlas-base-dev安装 Cython
pip3 install Cython升级 pip 和其他 python 设置工具
pip3 install --upgrade pip
pip3 install --upgrade protobuf升级数据科学库
pip3 install --upgrade numpy
pip3 install --upgrade pandas升级 matplotlib 到 3.3.4(matplotlib 3.4 需要 python>=3.7)
pip3 install "matplotlib==3.3.4"升级 scipy(可能需要很长时间)
pip3 install --upgrade scipy安装 scikit-image(可能需要很长时间)
pip3 install sklearn scikit-image
①自己在Nvidia官网找到适合的版本下载Torch1.8wheel
下载torch
wget https://nvidia.box.com/shared/static/p57jwntv436lfrd78inwl7iml6p13fzh.whl -O torch-1.8.0-cp36-cp36m-linux_aarch64.whl
进入Wheel所在的目录 通过
pip install torch-1.8.0-cp36-cp36m-linux_aarch64.whll
检查torch是否正确检测到 CUDA 设备
python3 -c 'import torch; print(torch.cuda.is_available())'下载[torch vision 0.9.0](https://github.com/pytorch/vision torchvision) 并进入文件夹执行
sudo apt install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
pip3 install --upgrade pillow
git clone --branch v0.9.0 https://github.com/pytorch/vision torchvision
cd torchvision
export BUILD_VERSION=0.9.0
python3 setup.py install --user
②通过脚本一步到位把torch和torchvision搞定
curl https://raw.githubusercontent.com/cognitivexr/edge-node/main/scripts/setup-xavier.sh | bash |
5、测试
python
import torch
import torchvision
print(torch.cuda.is_available()) # 这一步如果输出True那么就成功了!
quit()
三、YoloV5测试
克隆项目
git clone git@github.com:ultralytics/yolov5.git
确保在pytorch环境进入目录下载项目
pip install -r requirements.txt
python detect.py
四、Tensorrt加速
下载
git clone -b yolov5-v5.0 https://github.com/wang-xinyu/tensorrtx.git
食用步骤
① 把yolov5s.pt放到yolov5工程的weights文件夹下
② 把tensorrtx工程yolov5文件夹下的gen_wts.py复制到yolov5工程下
③ 进入yolov5工程,执行代码,实现:根据.pt文件生成.wts文件
把下载好的YOLO的权重文件,比如说YOLOv5x.pt放到weights文件夹里面。
将tensorrtx的YOLOv5文件夹里面的gen_wts.py复制到第一步下载的YOLOv5文件夹里面
python3 gen_wts.py -w weights/yolov5s.pt
④ 在tensorrtx工程的yolov5文件夹下,新建build文件夹
⑤ 在build文件夹下进入terminal,执行代码,实现:根据.wts文件生成.engine文件
生成yolov5x.wts文件,这一步要先cd进入到YOLOv5的文件夹里面。
⑥生成引擎文件,先cd进入tensorrt文件夹下面的yolov5文件夹新建build,并进入。
⑦把第五步生成的yolov5s.wts 文件复制到build文件夹里面然后进行编译。cmake .. & make
sudo ./yolov5 -s yolov5s.wts yolov5s.engine s
⑧编译完成后,可以进行测试,测试使用的图片是sample 文件夹里面的两张图
sudo ./yolov5 -d yolov6s.engine ../sample
测试:使用摄像头实时检测加速
注意
Jetson出现设备无法挂载
sudo apt-get install exfat-utils
执行“python3 setup.py install”出现了illegal instruction(core dumped)的错误。
gedit ~/.bashrc
将下面这段加到最底部:
export OPENBLAS_CORETYPE=ARMV8
source ~/.bashrc
CMake上找不到CURL
sudo apt-get install curl
sudo apt-get install libssl-dev libcurl4-openssl-dev
使用conda不要翻墙,会报错
ProxyError: Conda cannot proceed due to an error in your proxy configuration. |
使用pytorch查看cuda 和cudnn版本
import torch
print(torch.version)
print(torch.version.cuda)
print(torch.backends.cudnn.version())