项目简介
本项目旨在借助TensorRT对YOLOv5目标检测模型进行部署和优化,利用GPU资源提高目标检测的速度与精度,实现高效的目标检测任务。
项目的主要特性和功能
- 具备模型导出与加载功能,可将YOLOv5模型导出为ONNX格式,并通过TensorRT加载ONNX模型进行推断。
- 支持动态形状输入,能在运行时动态调整输入图像尺寸,适应不同分辨率的输入。
- 集成了TensorRT的BatchNMS插件,用于非极大值抑制,减少手动编写NMS代码的工作量。
- 支持FP16和INT8优化,在提高模型推断速度的同时保持一定的精度。
安装使用步骤
环境准备
- 系统:推荐使用Ubuntu20.04LTS或TensorRT官方Docker镜像。
- 软件版本:TensorRT 7.2.3、截止2021.09.11的Yolov5 develop分支代码、gcc 9.3.0、torch 1.8.2、onnx 1.10.1、onnx - simplifier 0.3.6。
模型训练
复制Yolov5的官方代码,按照教程训练得到pt权重文件。
模型导出
使用models/export.py脚本将YOLOv5的pt模型转换为ONNX模型,示例命令如下:
bash
python models/export.py --weights yolov5s.pt --img-size 640 --batch-size 1 --device 0 --include onnx --inplace --dynamic --simplify --opset-version 11 --img test_img/1.jpg
编译C++代码
复制yolov5_trt代码到本地,进入项目目录并编译:
bash
cd yolov5_trt
mkdir build
cd build
cmake ..
make -j 10
配置YAML
根据项目需求配置YAML文件,指定模型、输入和输出文件路径等,示例配置如下:
yaml
path: "../data/person/"
model:
  onnx: "person.onnx"
  tensorrt: "person.trt"
image:
  input: "person.jpg"
  output: "person_result.jpg"
args:
  n_classes: 1
  names: "person.names"
  channels: 3
  height: 640
  width: 640
  ifdynamic: 1
  min: [1, 3, 640, 640]
  opt: [1, 3, 640, 640]
  max: [1, 3, 640, 640]
build:
  demo: 1
  fp16: 1
  int8: 0
  workspace: 4
nms:
  topK: 512
  keepTopK: 100
  clipBoxes: 0
  iouThreshold: 0.25
  scoreThreshold: 0.45
  isNormalized: false
  output: ["num_detections", "nmsed_boxes", "nmsed_scores", "nmsed_classes"]
运行程序
进入build文件夹,执行生成的可执行文件,并指定YAML配置文件的路径:
bash
./yolov5_trt -c ../data/person/person.yaml
注意事项
- 根据实际环境调整环境准备步骤中的软件版本。
- 根据项目需求调整YAML配置文件中的参数。
- 在模型导出时,根据模型的结构和输入尺寸,调整models/export.py脚本中的参数。
- 使用TensorRT进行模型优化时,注意平衡模型的精度和性能。
- 根据实际情况调整模型推断的批次大小,以获得最佳的推断性能。
下载地址
点击下载 【提取码: 4003】