模型部署
准备模型
如果训练了自定义模型,或者下载了预训练模型,可以跳过这一步
下载预训练模型
bash scripts/download-yolov5.sh yolov5s # 仅下载单个模型
# bash scripts/download-yolov5.sh # 下载所有模型
zsh scripts/download-yolov5.sh yolov5s # 仅下载单个模型
# zsh scripts/download-yolov5.sh # 下载所有模型
同时,也提供了一些转化好的模型(从 ultralytics/yolov5(v7.0) 的 yolov5 导出),可以直接使用进行部署
bash scripts/download-release.sh
#zsh scripts/download-release.sh # zsh
导出模型
提供一个导出脚本 scripts/train.sh
,复制一份到项目目录下进行自定义修改(推荐)
cp scripts/export-yolov5.sh scripts/export-yolov5.custom.sh
查看脚本 scripts/export-yolov5.custom.sh
,根据项目需求修改参数后执行
bash scripts/export-yolov5.custom.sh
#zsh scripts/export-yolov5.custom.sh # zsh
部署模型
部署模型请单独创建虚拟环境,并根据部署中提到的依赖进行最小化安装,而避免引入过多不必要的包 (例如 pytorch),部署环境均经过测试
ONNX 部署
修改 scripts/variables.custom.sh
文件中 ENV_NAME
如下
# export ENV_NAME="" # -- Uncomment to customize the environment name
export ENV_NAME="deploy-onnx"
export ENV_PATH=$BASE_ENV_PATH/.env/$ENV_NAME
然后执行脚本创建虚拟环境,并激活
bash scripts/create-python-env.sh -e venv
#zsh scripts/create-python-env.sh -e venv # zsh
bash scripts/create-python-env.sh -e conda
#zsh scripts/create-python-env.sh -e conda # zsh
根据上述脚本运行输出激活环境
- [INFO] Run command below to activate the environment:
... # 复制这里出现的激活命令并执行
手动安装依赖
pip install -r requirements/requirements.txt
pip install onnxruntime # CPU 版本
# pip install onnxruntime-gpu # GPU 版本
修改 infer.py
文件,指定模型路径
## ------ ONNX ------
onnx_backend = backends.ONNXBackend
print("-- Available devices:", providers := onnx_backend.SUPPORTED_DEVICES)
detector = onnx_backend(
device=providers, inputs=["images"], outputs=["output0"]
)
然后执行推理脚本
python infer.py --model .cache/yolov5/yolov5s.onnx
OpenVINO 部署
修改 scripts/variables.custom.sh
文件中 ENV_NAME
如下
# export ENV_NAME="" # -- Uncomment to customize the environment name
export ENV_NAME="deploy-ov"
export ENV_PATH=$BASE_ENV_PATH/.env/$ENV_NAME
然后执行脚本创建虚拟环境,并激活
bash scripts/create-python-env.sh -e venv
#zsh scripts/create-python-env.sh -e venv # zsh
bash scripts/create-python-env.sh -e conda
#zsh scripts/create-python-env.sh -e conda # zsh
根据上述脚本运行输出激活环境
- [INFO] Run command below to activate the environment:
... # 复制这里出现的激活命令并执行
手动安装依赖
pip install -r requirements/requirements.txt
pip install openvino-dev
修改 infer.py
文件,指定模型路径
## ------ ONNX ------
ov_backend = backends.OpenVINOBackend
print("-- Available devices:", ov_backend.query_device())
detector = ov_backend(device="AUTO")
detector = ov_backend(device="GPU") # 指定使用 GPU 推理
然后执行推理脚本
python infer.py --model .cache/yolov5/yolov5s_openvino_model/yolov5s.xml
TensorRT 部署
TensorRT 版本间差异较大,需要根据版本进行调整,根据 CUDA 版本下载 TensorRT 和 cuDNN
TensorRT 10.0 部署
「当前」版本组合为 2024.5.31 最新版本
测试环境如下:
- NVIDIA GeForce RTX 4090(24217MiB)*2
- Ubuntu 22.04 (python3.10)
- CUDA 12.1: 虽然「当前」最新 CUDA 为 12.5,但是「当前」的 Pytorch(stable) 仅支持 12.1
- TensorRT 10.0.1: TensorRT 10.0 GA for Linux x86_64 and CUDA 12.0 to 12.4 TAR Package
- 最简化安装如下
如果顺利,使用 pip 安装完成后可以直接运行,大部分情况下可以采用如下办法
pip install pyyaml opencv-python \
tensorrt==10.0.1 \
cuda-python==12.1.0
# pip install nvidia-cudnn-cu12==9.1.1 # 经测试,非必要安装
TensorRT 8.6 部署
当前版本组合为 2023.7.30 最新版本
测试环境如下:
NVIDIA GeForce RTX 4090(24217MiB)*2
Ubuntu 22.04 (python3.10)
CUDA 12.1
TensorRT 8.6: TensorRT 8.6 GA for Linux x86_64 and CUDA 12.0 and 12.1 TAR Package
cuDNN 8.9.7: cuDNN v8.9.7 (December 5th, 2023), for CUDA 12.x (该版本貌似也可以 pip 安装,自行测试)
最简化安装如下
如果顺利,使用 pip 安装完成后可以直接运行,大部分情况下可以采用如下办法
pip install pyyaml opencv-python \
tensorrt==8.6.1 \
cuda-python==12.1.0 \
nvidia-cudnn-cu12==8.9.2.26
- TAR 包安装如下
某些情况下,pip安装会导致安装不完全,需要从官方下载安装包
解压缩 TensorRT 和 cuDNN TAR 包
tar -xvf TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-12.0.tar.gz
tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
向 ~/.bashrc
添加环境变量(确保 CUDA 环境已经配置好),注意 xxx_HOME
的实际路径 :
export CUDNN_HOME=$HOME/program/cudnn-linux-x86_64-8.9.7.29_cuda12-archive
export TENSORRT_HOME=$HOME/program/TensorRT-8.6.1.6
export PATH=$TENSORRT_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDNN_HOME/lib:$TENSORRT_HOME/lib:$LD_LIBRARY_PATH
安装 TensorRT Python 包
# python version 3.10
pip install $TENSORRT_HOME/python/tensorrt-8.6.1-cp310-none-linux_x86_64.whl --force-reinstall
该版本 TensorRT 的推理依赖于 cuda-python
pip install cuda-python==12.1.0
nvidia-cudnn-cu12==8.9.2.26
(Installing cuDNN with Pip) 可以 pip 安装,也可以找到
pip install nvidia-cudnn-cu12==8.9.2.26
TensorRT 推理
在 Yolov5 项目目录下执行
python3 export.py \
--weights $MODEL_PATH \
--data data/coco128.yaml \
--simplify --device 0,1 --include engine
--device
指定 GPU 设备,有多少张卡就写多少张卡,用逗号分隔
修改 infer.py
文件
## -- TensorRT
detector = backends.TensorRTBackend()
执行推理
python infer.py --model .cache/yolov5/yolov5s.engine
推理速度
Tensor 版本 | 模型 | 推理时间(ms) | 设备 |
---|---|---|---|
10.0(.1.6) | yolov5s | 3.26 ~ 3.72 | RTX 4090 (24G) |
10.0(.1.6) | yolov5s | 10.41 ~ 10.7 | RTX 3050 (8G) |
8.6(.1.6) | yolov5s | 3.40 ~ 3.85 | RTX 4090 (24G) |