前言
查看Jetson nx 的JetPack 版本和 CUDA、cuDNN、OPENCV、TensorRT版本
- 安装pip3、jtop
sudo apt-get update
sudo apt-get install python3-pip python3-dev -y
sudo -H pip3 install jetson-stats
sudo jtop
- 换国内源
sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vim /etc/apt/sources.list
#清华源
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main universe restricted
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main universe restricted
sudo apt-get update
一、配置Deepstream SDK
Deepstream SDK 版本配置需要根据自己 Jetson 设备安装的 JetPack 版本来对应安装,我的 Jetson NX 安装的 JetPack 版本为 4.5 ,所以我安装的 Deepstrean SDK 为5.0,下图为 Deepstream SDK 版本和 JetPack 版本的对应关系。
1.安装 Deepstream 5.0
1.1 系统内命令安装 Deepstream 5.0
- 下载对应的 DeepStream SDK NVIDIA DeepStream SDK on Jetson (Archived)链接
- 参考官方安装教程链接 Install Jetson SDK components
- 输入以下命令以安装必备程序包:
sudo apt install \
libssl1.1 \
libgstreamer1.0-0 \
gstreamer1.0-tools \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
libgstreamer-plugins-base1.0-dev \
libgstrtspserver-1.0-0 \
libjansson4 \
libyaml-cpp-dev
- 安装Deepstream 5.0
sudo tar -xvf deepstream_sdk_5.0_jetson.tbz2 -C /
cd /opt/nvidia/deepstream/deepstream-5.0
sudo ./install.sh
sudo ldconfig
- 安装 librdkafka
git clone https://github.com/edenhill/librdkafka.git
cd librdkafka
git reset --hard 7101c2310341ab3f4675fc565f64f0967e135a6a
./configure
make
sudo make install
将生成的库复制到Deepstream目录下:
sudo mkdir -p /opt/nvidia/deepstream/deepstream-5.0/lib
sudo cp /usr/local/lib/librdkafka* /opt/nvidia/deepstream/deepstream-5.0/lib
1.2 SDK Manager安装 Deepstream 5.0
注明:JetPack 4.5 为较低 Jetson 系统版本,需要把SDK Manager安装在Ubuntu16.04或Ubuntu18.04系统上
- 下载 NVIDIA SDK Manager Download NVIDIA SDK Manager ,得到安装包 sdkmanager_1.9.0-10816_amd64.deb
sudo apt install ./sdkmanager_1.9.0-10816_amd64.deb
sdkmanager
SDK Manager 官方使用说明 NVIDIA SDK MANAGER
- 打开SDK Manager ,根绝 JetPack 版本选择 Deepstream
2.验证 Deepstream 5.0
- 查看安装版本
deepstream-app --version-all
进入目录/opt/nvidia/deepstream/deepstream-5.0/samples
进行功能验证
sudo deepstream-app -c <path_to_config_file>
二、配置YOLOv5环境
1.配置需要的库
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
sudo apt-get install gfortran -y
sudo apt-get install libjpeg-dev -y
sudo apt-get install libopenmpi2 -y
sudo apt-get install libopenblas-dev -y
sudo apt-get install libjpeg-dev zlib1g-dev -y
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
2.安装 torch
- 需要根据 Jetson 设备的 JetPack 版本来确定安装的 torch 版本 ,根绝需求我安装的是torch-1.80 官方下载链接
- CSDN下载链接 torch-1.8.0-cp36-cp36m-linux-aarch64.whl
- 在torch-1.80包目录下输入命令安装
pip3 install numpy torch-1.8.0-cp36-cp36m-linux_aarch64.whl
3.安装 torchvision
- 安装对应版本的 torchvision ,pytorch/vision 链接
下图为版本对应关系
注:若安装时出现 IIIegal instruction 错误,可在 ~/.bashrc 添加 export OPENBLAS_CORETYPE = ARMV8
输入指令
git clone --branch v0.9.0 https://github.com/pytorch/vision torchvision
cd torchvision
export BUILD_VERSION=0.9.0
sudo python3 setup.py install
- 安装完之后进行验证:
python3
import torch
torch.__version__
import torchvision
torchvision.__version__
quit()
4.配置 YOLOv5环境
4.1 更换 pip 为国内源
mkdir ~/.pip
sudo gedit ~/.pip/pip.conf
改为清华源,将下面内容输入到 pip.conf
里面,然后保存退出
[global]
index-url=https://pypi.tuna.tsinghua.edu.cn/simple/
[install]
trusted-host=https://pypi.tuna.tsinghua.edu.cn
4.2 下载 Yolov5 源码,安装需要的包
由于不同版本的Yolov5网络架构不同,所以 Yolov5 和 tensorrtx 也有对应版本,我下载 Yolov5-5.0 的版本 Yolov5-5.0链接
python3 -m pip install --upgrade pip
pip3 install wheel
unzip yolov5-5.0.zip
cd yolov5-5.0
pip3 install -r requirements.txt //安装 yolov5-5.0所需要的支持包,这个方法可能会失败
//若安装支持包失败,可以在直接进行推理执行命令
python3 detect.py
//报故缺什么安装什么即可,例如 pip3 install matplotlib==3.2.2 ,具体安装版本可参考yolov5-5.0目录下requirements.txt
4.3 下载yolov5s.pt
因为weights目录下的 download_weights.sh
脚本和上一步 python3 detect.py
推理下载的都是最新版的 pt 文件,这里需要是 5.0 版本的 pt 文件,下载链接 yolov5/releases/tag/v5.0链接 , 下拉到最底部,下载 pt 文件
将下载的 yolov5s.pt 复制 yolov5-5.0 文件夹下,在 yolov5-5.0/model/common.py 源码里添加 SPPF 的类,将下面的源码复制 common.py 里
import warnings
class SPPF(nn.Module):
# Spatial Pyramid Pooling - Fast (SPPF) layer for YOLOv5 by Glenn Jocher
def __init__(self, c1, c2, k=5): # equivalent to SPP(k=(5, 9, 13))
super().__init__()
c_ = c1 // 2 # hidden channels
self.cv1 = Conv(c1, c_, 1, 1)
self.cv2 = Conv(c_ * 4, c2, 1, 1)
self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k // 2)
def forward(self, x):
x = self.cv1(x)
with warnings.catch_warnings():
warnings.simplefilter('ignore') # suppress torch 1.9.0 max_pool2d() warning
y1 = self.m(x)
y2 = self.m(y1)
return self.cv2(torch.cat([x, y1, y2, self.m(y2)], 1))
4.4 测试图片目标检测识别
cd yolov5-5.0
python3 detect.py --source data/images/bus.jpg --weights ./yolov5s.pt
4.5 测试 RTSP 推拉流目标检测识别
window主机进行 RTSP 推流视频文件,Jetson nx 进行拉流图像解析
cd yolov5-5.0
python3 detect.py --source 'rtsp://192.168.1.123:8554/video' --weights ./yolov5s.pt
4.6 测试 USB 摄像头目标检测识别
修改 utils/datasets.py
源码,将以下内容屏蔽掉
cd yolov5-5.0
python3 detect.py --source 0 --weights ./yolov5s.pt
5.TensorRT加速推理
5.1 下载 TensorRT
unzip tensorrtx-yolov5-v5.0.zip
5.2 将 .pt 文件转换成 .wts 文件
cp tensorrtx-yolov5-v5.0/yolov5/gen_wts.py ../../yolov5-5.0 //将TensorRT目录下的gen_wts.py复制到yolov5目录下
cd ../../yolov5-5.0
python3 gen_wts.py -w yolov5s.pt -o yolov5s.wts //生成wts文件,-w 为你的*.pt文件,-o 为转换生成的文件名称
5.3 生成 .engine 文件并进行推理检测
cd ../tensorrtx-yolov5-v5.0/yolov5
mkdir build && cd build
cp ../../../yolov5-5.0/yolov5s.wts ./ //将yolov5目录下生成的wts文件复制到TensorRT的build目录下
cmake .. //编译
make -j8 //生成yolov5执行文件
sudo ./yolov5 -s yolov5s.wts yolov5s.engine s //生成engine文件,生成的wts文件用的是yolov5s.pt,所以结尾我用的s
sudo ./yolov5 -d yolov5s.engine ../samples //测试一下,测试结果就在build目录下
三、Deepstream-5.0 && Yolov5-5.0 && Tensorrt 目标识别检测
1.下载Yolov5-in-Deepstream-5.0 并配置环境
下载链接 Yolov5-in-Deepstream-5.0,或者命令下载
git clone https://github.com/DanaHan/Yolov5-in-Deepstream-5.0.git
1.1 编译 Deepstream 的custom-lib库
更改 Makefile, 我直接
make
编译libnvdsinfer_custom_impl_Yolo.so
库文件时一直失败,后来发现目录Yolov5-in-Deepstream-5.0/Deepstream 5.0/nvdsinfer_custom_impl_Yolo/
下的yolo.cpp
和yoloPlugins.cpp
其实用不到,可以直接屏蔽到,就可以编译成功
cd Yolov5-in-Deepstream-5.0/Deepstream 5.0/nvdsinfer_custom_impl_Yolo
make
1.2 加载 Yolov5 环境
将 TensorRT 加速推理步骤生成的 .engine 和 libmyplugins.so 和 Jetson 设备 安装的 Deepstream 源码类别里YOLO目录下的标签集 labels.txt 复制到 Yolov5-in-Deepstream-5.0/Deepstream 5.0/
目录下
配置 config_infer_primary_yolov5.txt
文件,确保引擎文件和库文件名称和路径正确
2.验证
可通过修改 deepstream_app_config_yoloV5.txt
来配置图像源,是否打开 Tracker
,是否调用 GPU 加速
2.1 验证本地文件目标检测识别
cd Yolov5-in-Deepstream-5.0/Deepstream 5.0/
LD_PRELOAD=./libmyplugins.so deepstream-app -c deepstream_app_config_yoloV5.txt
2.1 验证 USB 摄像头目标检测识别
cd Yolov5-in-Deepstream-5.0/Deepstream 5.0/
LD_PRELOAD=./libmyplugins.so deepstream-app -c deepstream_app_config_yoloV5.txt
2.1 验证 RTSP 目标检测识别
cd Yolov5-in-Deepstream-5.0/Deepstream 5.0/
LD_PRELOAD=./libmyplugins.so deepstream-app -c deepstream_app_config_yoloV5.txt
文章出处登录后可见!