文章目录
- 前言
- deepstream的安装
- 1、SDKManager
- 2. 命令行安装
- yolov5项目克隆和安装(电脑上完成!)
- 1)安装Anaconda和PyTorch
- 2) 克隆yolov5项目
- 3) 安装所需库
- 4) 下载预训练权重文件
- 5) 安装测试
- 6)训练自己的数据集
- 生成wts文件(在电脑上完成!)
- 1) 克隆tensorrtx
- 2) 生成yolov5s.wts文件
- 生成yolov5s.engine文件(在开发板上完成!)
- 1) 克隆tensorrtx
- 2) 编译tensorrtx/yolov5
- 3) copy文件'yolov5s.wts' 文件到tensorrtx/yolov5/build目录下
- 4) 生成yolov5s.engine
- 使用DeepStream部署yolov5s
- 1)拷贝yolov5 deepstream文件
- 2) 拷贝yolov5.engine
- 3)编译
- 部署测试
- 1)测试视频文件推理
- 2)USB摄像头视频测试
- 3) CSI摄像头视频测试
最近用到deepstream,要将yolov5部署在开发板上,就总结了一下部署方法。
前言
deepstream 的安装网络上有很多教程,这里就简单说一下。我使用的安装方式就是用 NVIDIA 官方的一个软件 SDKManager,这个软件可以重刷系统,也可以在原有系统的前提下刷入相关依赖包,例如:CUDA,tensorr,deepstream等。
deepstream_5">deepstream的安装
1、SDKManager
最推荐的就是使用 SDKManager 刷,但是要注意开发板必须得先进入recovery模式。
这个方法其实很简单,就是无脑下一步
注意一:在选择刷入的东西时,如果你不打算重装系统,必须把Jestson OS取消勾选。
注意二:如果你要更换 jetpack 版本,必须重刷系统。
注意三:在这一步选择手动设置(Manual Setup)
注意四:一定要选个可传输数据的 usb 线,不能是只充电的。要不然和PC端虚拟机连不上。
注意五:所有步骤都在PC端虚拟机上执行,只需要将开发板和PC通过 USB 连上就好。即输入 lsusb
会显示 Nvidia Crop 即可。
2. 命令行安装
1) Install Dependencies
sudo apt install \
libssl1.0.0 \
libgstreamer1.0-0 \
gstreamer1.0-tools \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
libgstrtspserver-1.0-0 \
libjansson4=2.11-1
2) Install the DeepStream SDK
Using the DeepStream tar package
- 下载 DeepStream 5.1 Jetson tar package deepstream_sdk_v5.1.0_jetson.tbz2, 到 Jetson Nano.
- 输入以下命令以提取并安装DeepStream SDK:
sudo tar -xvf deepstream_sdk_v5.1.0_jetson.tbz2 -C /
cd /opt/nvidia/deepstream/deepstream-5.1
sudo ./install.sh
sudo ldconfig
3) DeepStream测试
执行命令
cd /opt/nvidia/deepstream/deepstream-5.1/sources/objectDetector_Yolo
执行编译命令:
CUDA_VER=10.2 make -C nvdsinfer_custom_impl_Yolo
编辑文件prebuild.sh,注释掉除yolov3-tiny的语句
执行:
./prebuild.sh
下载yolov3-tiny.cfg和yolov3-tiny.weights
执行命令
deepstream-app -c deepstream_app_config_yoloV3_tiny.txt
yolov5项目克隆和安装(电脑上完成!)
1)安装Anaconda和PyTorch
安装pytorch1.7以上版本
2) 克隆yolov5项目
克隆项目到本地
git clone https://github.com/ultralytics/yolov5.git
3) 安装所需库
使用清华镜像源:
在yolov5路径下执行:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
注意:simple 不能少, 是 https 而不是 http
4) 下载预训练权重文件
下载yolov5s.pt,yolov5m.pt,yolov5l.pt,yolov5x.pt权重文件,并放置在weights文件夹下
5) 安装测试
测试图片:
在yolov5路径下执行
python detect.py --source ./data/images/ --weights weights/yolov5s.pt --conf 0.4
6)训练自己的数据集
这个网上很多教程,也不算复杂,就不写啦。
生成wts文件(在电脑上完成!)
1) 克隆tensorrtx
git clone https://github.com/wang-xinyu/tensorrtx.git
2) 生成yolov5s.wts文件
// 下载权重文件yolov5s.pt // 将文件tensorrtx/yolov5/gen_wts.py 复制到ultralytics/yolov5 // ensure
python gen_wts.py -w yolov5s.pt -o yolov5s.wts
生成yolov5s.engine文件(在开发板上完成!)
1) 克隆tensorrtx
git clone https://github.com/wang-xinyu/tensorrtx.git
2) 编译tensorrtx/yolov5
mkdir build
cd build
cmake ..
make
注意: by default, yolov5 script generate model with batch size = 1, FP16 mode and s model.
#define USE_FP16 // comment out this if want to use FP32
#define DEVICE 0 // GPU id
#define NMS_THRESH 0.4
#define CONF_THRESH 0.5
#define BATCH_SIZE 1
#define NET s // s m l x
如果你需要改变上述默认参数,可在编译前修改文件 yolov5.cpp
另外,可改变yololayer.h中的参数
static constexpr int CLASS_NUM = 80;
static constexpr int INPUT_H = 608;
static constexpr int INPUT_W = 608;
3) copy文件’yolov5s.wts’ 文件到tensorrtx/yolov5/build目录下
4) 生成yolov5s.engine
// For example yolov5s
sudo ./yolov5 -s yolov5s.wts yolov5s.engine s
sudo ./yolov5 -d yolov5s.engine ../samples
使用DeepStream部署yolov5s
deepstream_168">1)拷贝yolov5 deepstream文件
sudo chmod -R 777 /opt/nvidia/deepstream/deepstream-5.1/sources/
拷贝yolov5 deepstream文件yolov5.zip到/opt/nvidia/deepstream/deepstream-5.1/sources/
然后,解压文件
cd /opt/nvidia/deepstream/deepstream-5.1/sources/
unzip yolov5.zip
2) 拷贝yolov5.engine
cp /home/nano/tensorrtx/yolov5/build/yolov5s.engine
/opt/nvidia/deepstream/deepstream-5.1/sources/yolov5
备注:yolov5 deepstream文件yolov5.zip的来源 https://github.com/marcoslucianops/DeepStream-Yolo 修改了文件夹DeepStream-Yolo/external/yolov5/nvdsinfer_custom_impl_Yolo下的文 yololayer.h 和yololayer.cu使其可以在YOLOv5 V4.0上工作。
3)编译
cd /opt/nvidia/deepstream/deepstream-5.1/sources/yolov5
CUDA_VER=10.2 make -C nvdsinfer_custom_impl_Yolo
注意: 针对自己的数据集
可修改config_infer_primary.txt中的参数
num-detected-classes=80
以及类别名称文件labels.txt
另外,
如要改变NMS_THRESH, 编辑文件nvdsinfer_custom_impl_Yolo/nvdsparsebbox_Yolo.cpp并重新编译
#define kNMS_THRESH 0.45
如要改变CONF_THRESH, 编辑文件config_infer_primary.txt
[class-attrs-all]
pre-cluster-threshold=0.25
部署测试
1)测试视频文件推理
cd /opt/nvidia/deepstream/deepstream-5.1/sources/yolov5
deepstream-app -c deepstream_app_config.txt
2)USB摄像头视频测试
摄像头简单检测指令:
ls /dev/video*
安装v4l-utils工具:
sudo apt install v4l-utils
检测摄像头比较完整信息的指令:
v4l2-ctl --list-devices
摄像头更细致规格的查看指令:
v4l2-ctl --device=/dev/video0 --list-formats-ext
v4l2-ctl --device=/dev/video1 --list-formats-ext
YOLOv5 USB摄像头视频测试命令:
deepstream-app -c source1_usb_dec_infer_yolov5.txt
3) CSI摄像头视频测试
deepstream-app -c source1_csi_dec_infer_yolov5.txt