当前位置: 首页 > news >正文

YOLOV5_TensorRT_C++部署

1 安装环境和yolov5代码
1.1 安装GPU驱动、CUDA、CUDNN、GPU版Pytorch。
(方法一)到官网下载GPU版Pytorch.
方法二:用docker安装。
(1)安装docker(到官网https://docs.docker.com/engine/install/ubuntu/,按照指令安装) 、
(2)安装nvida-container-tookit、
(3)拉取pytorch镜像进行测试(找nvida中合适的pytorch容器,https://catalog.ngc.nvida.com/containers)。
通过VsCode插件可以容器内部:ms-vscode-remote.remote-containers

       docker imagesdocker run --gpus all -it --name env_pyt_1.12 -v $(pwd):/app nvcr.io/nvida/pytorch:22.03-py3# 如何打开新的终端# 在容器内部检验pytorch是否可用,(以命令行的方式操作docker)pythonimport torchtorch.__version__torch.cuda.is_available()# 进入docker内部,而非命令行操作docker?在vscode中搜素ms-vscode-remote.remote-containers插件,出现Dev Containers ,点击安装,# 菜单栏 查看--> 命令面板--> 在搜索栏输入 Dev Containers:attach to Running Container# 会弹出现在电脑正在运行的docker,选择目标docker,弹出新的窗口。输入远程主机密码,窗口显示远程主机的文件。

1.2 安装yolov5依赖。

git clone https://github.com/ultralytics/yolov5.git  ## 克隆yolov5
cd yolov5
git checkout a80dd66efe0bc7fe3772f259260d5b7278aab42f ## 选择特定版本的yolov5
pip3 install -r reqiurments.txt# 到yolov5官网下载权重,并将权重放在weights文件夹下
## 测试安装是否成功
python detect.py --source ./data/images/ --weights weights/yolov5s.pt --conf-thres 0.4
## 如果运行上述命令报错,‘cv2 has no attrabutes ’,则执行 pip3 install "opencv-python-headless<4.3"

2 yolov5训练自定义数据
2.1 安装labelImg

conda create -n label
conda activate label
pip install labelImg
labelImg

2.2 数据集
–datasets
–data
–images
–train
–vail
–test
–labels
–train
–vail
–test
–yolov5
2.3 创建datasets.yaml,yolov5s.yaml里的类别也需要修改nc:。
2.4 训练

python /train.py --data ./data/mydata.yaml --cfg ./model/myyolov5s.yaml --weights ./weights/yolov5s.pt --batch-size 64 --epoch 600 --workers 0 --name myyolo --project My_project

2.5 可视化wandb/Tensorboard
(方法一)到https://wandb.ai/注册,–>获取密匙key(https://wandb.ai/authorize)–> pip install wandb --> wandb login + key --> 打开网页即可观看。
(方法二) tensorboard --ligdir=./yolov5s
2.6 测试

python detect.py --source ./xx.jpg --weights ./yolo_person_s/s_120/weights/best.pt --conf-thres 0.3
python detect.py --source ./c1.mp4 --weights ./yolo_person_s/s_120/weights/best.pt --conf-thres 0.3

2.7 评估

python val.py ./data/coco_persion.yaml  --weights ./yolo_person_s/s_120/weights/best.pt --batch-size 128

3 yolov5模型倒出ONNX
原始没有修改过的yolov5.onnx

python export.py --weights weights/yolov5s.pt --include onnx --simplify --dynamic 
pip install netron  # 安装netron 
netron  ./weights/yolov5s_person.onnx

删除yolov5的detect部分–> 把bast.pt模型转换成best.onnx --> simplify ONNX --> 用graph surgeon给上一步的到的ONNX添加decoder operator–> 输出ONNX
执行/export.path 批量修改代码

## 将export.path复制到yolov5/文件夹下
cp export.path yolov5/  
cd yolov5/
git am export.path     ## 修改yolov5中export.py的代码

安装导出ONNX的依赖库

pip install seaborn
pip install onnx-graphsurgen
pip install opencv-python==4.5.5.64
pip install onnx-simplifier==0.3.10apt updata
apt install -y libgll-mesa-glx## 执行以上操作后,可以导出新的yolov5.onnx模型
python export.py --weights weights/yolov5s.pt --include onnx --simplify --dynamic 

4 TensorRT部署
用docker容器部署TensorRT

docker run --gpus -it --name env_trt -v $(pwd):/app nvcr.io/nvidia/tensorrt:22.08-py3

4.1 模型构建/tensorrt_cpp/build.cu

4.2 模型推理/tensorrt_cpp/runtime.cu

4.3 运行代码生成yolov5.engine

rm -fr build
# 把处理后的yolov5_person.onnx放到第1节/1.代码/tensorrt_cpp/weights中
cmake -S . -B build   # 配置
cmake --build build/   # 构建
./build/build  ./weights/yolov5_person.onnx   # 生成yolov5.engine,结果为: ./weights/yolov5.engine
./build/runtime  ./weights/yolov5.engine ./media/c3.mp4 # 推理,结果在output文件夹下

4.4 int8量化、预处理、后处理
要把校准图片放入./tensorrt_cpp/media中

ffmpeg -i c3.pm4 sample%04d.png  # 进入media目录,在视频中随机挑选200帧画面做为校准图片
ls *.png | shuf -n 200 > filelist.txt   # 随机挑选200帧画面保存在filelist.txt中
# 量化。参数为权重 media文件夹 文件列表路径
rm -fr build
cmake -S . -B build   # 配置
cmake --build build/   # 构建
./build/build  weights/yolov5s_person.onnx  ./media  ./media/filelist.txt   ##  量化
./build/runtime  ./weights/yolov5.engine ./media/c3.mp4  2 # 推理,结果在output文件夹下,mode=2# 选择mode=1
cmake --build build/   # 构建
./build/runtime  ./weights/yolov5.engine ./media/c3.mp4 1

5 应用 人员闯入、聚众
5.1 RTMP推流演示
模型推理部署在docker或者云端,为了看到模型处理视频画面,用推流工具展示画面
步骤: (1)启动rtsp-simple-sever,开启RTMP服务器。
(2)使用ffmpeg将视频流推送到RTMP服务器中。
(3)通过vlc等客户端读取rtmp://127.0.0.1:1935/live/mystream,即可显示视频流。
ffmpeg推理工具 --> RTMP服务器 -->vlc客户端
RTMP服务器:rtsp-simple-sever/MediaMTX是一个服务器和代理,允许客户发布、读取和代理实时视频和音频流。
ffmpeg推理工具: opencv_ffmpeg_streaming
如果在docker内运行,需要将端口映射出去。

## 为了利用之前的容器(已配置好环境),启动之前的容器,未映射端口
docker run --gpus all -it --name env_trt  -v $(pwd):/app nvcr.io/nvidia/tensorrt:22.08-py3 
# 停止容器
docker stop env_trt
# 创建自定义镜像 ,把env_trt变成env_trt_img
docker commit env_trt env_trt_img
# 重启## 映射端口并启动(注意和主机端口不一样)
# 1935 RTMP端口
# 8554 RTSP端口
docker run --gpus all -it --name env_trt -p 1936:1935 -p 8556:8554 -v $(pwd):/app env_trt_img## 进入DEV container
code /1.opencv_rtmp 
## ffmpeg推理工具 --> 启动RTMP服务器 -->vlc客户端
## 右击 ./1.opencv_rtmp/rtmp_server/rtsp-simple-server ,选择“在集成终端中打开”
./rtsp-simple-server     # 开启RTMP服务器,打开1935 RTMP端口、8554 RTSP端口## 在bash终端执行以下代码,第3节/PC代码/pc/1.opencv_rtmp/main.cpp
rm -fr build/
cmake . -B build   # 配置
cmake --build build/   # 构建
## 推流
./build/opencv_rtmp ./media/c3_1080.mp4 8000000  # parameter: vedio_file,bitrate  
## 显示 在vsCode的终端窗口有端口菜单栏,找出本地地址并复制(假设是“localhost:1935”),打开vlc media player,菜单栏file-->在窗口opensource 的URL填写“rtmp://localhost:1935/live/mystream”
## 重新执行
./build/opencv_rtmp ./media/c3_1080.mp4 8000000
## 桌面弹出窗口,点击“rtmp://localhost:1935/live/mystream”,可以显示检测画面## 在项目中会用主机的端口,
ifconfig  # 检查主机地址,假设是192.168.1.241
## 新打开vlc media player的open source窗口,输入“rtmp://192.168.1.241:1936/live/mystream”

5.2 把yolov5检测结果推流出去

code ./2.yolo_trt_rtmp
## 1  启动RTMP服务器.右击 ./2.yolo_trt_rtmp/rtmp_server/rtsp-simple-server ,选择“在集成终端中打开”
./rtsp-simple-server ## 2 点击bash端口
# 编译
rm -fr build/
cmake . -B build   # 配置
cmake --build build/   # 构建
# 运行程序  TensorRT_YoloV5
./build/runtime  ./weights/yolov5.engine ./media/c3_1080.mp4 2 3000000 
## 3 新打开vlc media player的open source窗口,输入“rtmp://192.168.1.241:1936/live/mystream”

5.3 处理实时视频流 ./2.yolo_trt_rtmp/rtmp_server/start_server.sh # start_server.sh 是把c3_720.mp4 推流到RTSP端口

./start_server.sh   
##  打开vlc media player的open source窗口,输入“rtmp://192.168.1.241:8556/live1.sdp“ # 这个画面是不间断的,可以反复播放。
## 在bash终端运行
./build/runtime  ./weights/yolov5.engine rtsp 2 5000000 
##  打开vlc media player的open source窗口,输入“rtsp://192.168.1.241:8556/live1.sdp“ 

6 应用开发./3.yolo_trt_app
6.1 人员闯入应用开发

code ./3.yolo_trt_app
# 开启RTSP服务器,右击./3.yolo_trt_app/rtmp_server/start_server.sh,选择“在集成终端中打开”
start_server.sh
## 在bash中运行以下代码
./build/runtime  ./weights/yolov5.engine rtsp 2 100 1 8000000 
# 打开vlc media player的open source窗口,输入“rtmp://192.168.1.241:1936/live/mystream“## 分析代码 ./3.yolo_trt_app/task/gather.cpp

6.2 人员聚众应用开发

./build/runtime  ./weights/yolov5.engine rtsp 2 100 1 8000000 
'''
6.3 多线程
'''docker
./build/runtime_thread  ./weights/yolov5.engine rtsp 2 100 1 8000000   # 57frame
http://www.dtcms.com/a/540135.html

相关文章:

  • 海南省住房和城乡建设官方网站网站域名不备案
  • 网络空间引擎
  • VANCHIP射频芯片:智能汽车的“第六感”觉醒
  • C++——二叉搜索树——数据结构进阶——附加超详细解析过程/代码实现
  • 网站页面两侧漂浮的怎样做电商网站前端页面内容编写
  • PCIE学习
  • API Key 管理与计费系统模块(API Gateway 模块)需求文档
  • 2024-2025年技术发展趋势深度分析:AI、前端与后端开发的革新之路
  • vue3 实现贪吃蛇 电脑版01
  • 做网站带后台多少钱东莞做网站 动点官网
  • 郑州做网站建设wordpress数据控查看密码
  • 数据采集-BeautifulSoup库
  • 帝国cms的阅读量增加的api接口示例
  • RDF 实例
  • 面向对象编程:继承从理论到实战
  • 43-基于STM32的医用护理床设计与实现
  • 【经济方向专题会议】第二届经济数据分析与人工智能国际学术会议 (EDAI 2025)
  • Auto CAD二次开发——折线多段线
  • django做的购物网站海口网站建设优化案例
  • 一个密码破解器
  • 如何查看网站的建设者重庆建设部网站官网
  • Ansible 的条件语句与循环详解
  • 生产级 Ansible 部署全流程-nginx示例
  • Ansible Playbook 深度解析:自动化任务编排最佳实践
  • Ansible生产调优与故障排查全攻略
  • 【笔记】Podman Desktop 部署 开源数字人 HeyGem.ai
  • vue-day02
  • 青岛有哪些做网站的公司公司网页制作需要什么哪些材料
  • 建站公司用wordpress如何查看网站的建设方式
  • Leetcode 3727. Maximum Alternating Sum of Squares