『深度应用』YoloV5 RTX2080Ti TensorRT与PyTorch速度对比
时间:2022-07-23
本文章向大家介绍『深度应用』YoloV5 RTX2080Ti TensorRT与PyTorch速度对比,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.概述
此次实验是为了探究YoloV5在RTX2080Ti平台上使用TensorRT对于模型推理的加速效果,同时也比对一下RTX2080Ti平台上GPU对于i7-8700 CPU的加速。
照例先提出来实验硬件环境:
- 系统:Ubuntu 18.04.3 LTS
- CPU:Intel® Core™ i7-8700 CPU @ 3.20GHz × 12
- GPU:GeForce RTX 2080Ti
- Cuda:10.1
- Pytorch:1.5.0
- TensorRT:7.1.0
2.实验
实验参考代码如下:
PyTorch模型训练与推理代码:
https://github.com/ultralytics/yolov5
TensorRT7模型转换与推理代码:
https://github.com/wang-xinyu/tensorrtx/tree/master/yolov5
1.i7-8700 CPU&PyTorch推理实验
输入尺寸:576x960
CUDA_VISIBLE_DEVICES=-1 python detect.py --weights runs/hm960_945/weights/best.pt --img 960 --conf 0.15 --source data/hels/testimgs/
输出平均耗时:420ms ;GPU占用:0MB
image 1/8 /home/song/code/yolov5/data/hels/testimgs/lADPD26eMep_iEjNBDjNB4A_1920_1080.jpg: 576x960 1 hs, Done. (0.511s)
image 2/8 /home/song/code/yolov5/data/hels/testimgs/lADPD26eMep_iEnNBDjNB4A_1920_1080.jpg: 576x960 1 ns, 1 hs, Done. (0.481s)
image 3/8 /home/song/code/yolov5/data/hels/testimgs/lADPD2eDNKD3Ng7NBDjNB4A_1920_1080.jpg: 576x960 2 ns, 2 hs, Done. (0.416s)
image 4/8 /home/song/code/yolov5/data/hels/testimgs/lADPD2sQs0W5CEfNBDjNB4A_1920_1080.jpg: 576x960 2 ns, Done. (0.422s)
image 5/8 /home/song/code/yolov5/data/hels/testimgs/lADPD3lGrdjbTqnNBDjNB4A_1920_1080.jpg: 576x960 1 hs, Done. (0.441s)
image 6/8 /home/song/code/yolov5/data/hels/testimgs/lADPD3zULH2hzqjNBDjNB4A_1920_1080.jpg: 576x960 1 ns, 2 hs, Done. (0.963s)
image 7/8 /home/song/code/yolov5/data/hels/testimgs/lADPD4PvKccrNg_NBDjNB4A_1920_1080.jpg: 576x960 1 ns, Done. (0.448s)
image 8/8 /home/song/code/yolov5/data/hels/testimgs/lADPD4d8qGv1TqvNBDjNB4A_1920_1080.jpg: 576x960 2 ns, 3 hs, Done. (0.417s)
2.RTX 2080Ti GPU&PyTorch推理实验
输入尺寸:576x960
CUDA_VISIBLE_DEVICES=0 python detect.py --weights runs/hm960_945/weights/best.pt --img 960 --conf 0.15 --source data/hels/testimgs/
输出平均耗时:12ms GPU占用:1000MB
image 1/8 /home/song/code/yolov5/data/hels/testimgs/lADPD26eMep_iEjNBDjNB4A_1920_1080.jpg: 576x960 1 hs, Done. (0.012s)
image 2/8 /home/song/code/yolov5/data/hels/testimgs/lADPD26eMep_iEnNBDjNB4A_1920_1080.jpg: 576x960 1 ns, 1 hs, Done. (0.014s)
image 3/8 /home/song/code/yolov5/data/hels/testimgs/lADPD2eDNKD3Ng7NBDjNB4A_1920_1080.jpg: 576x960 2 ns, 2 hs, Done. (0.015s)
image 4/8 /home/song/code/yolov5/data/hels/testimgs/lADPD2sQs0W5CEfNBDjNB4A_1920_1080.jpg: 576x960 2 ns, Done. (0.011s)
image 5/8 /home/song/code/yolov5/data/hels/testimgs/lADPD3lGrdjbTqnNBDjNB4A_1920_1080.jpg: 576x960 1 hs, Done. (0.011s)
image 6/8 /home/song/code/yolov5/data/hels/testimgs/lADPD3zULH2hzqjNBDjNB4A_1920_1080.jpg: 576x960 1 ns, 2 hs, Done. (0.012s)
image 7/8 /home/song/code/yolov5/data/hels/testimgs/lADPD4PvKccrNg_NBDjNB4A_1920_1080.jpg: 576x960 1 ns, Done. (0.014s)
image 8/8 /home/song/code/yolov5/data/hels/testimgs/lADPD4d8qGv1TqvNBDjNB4A_1920_1080.jpg: 576x960 2 ns, 3 hs, Done. (0.011s)
3.RTX 2080Ti GPU&TensorRT7推理实验
输入尺寸:576x960
./yolov5m -d ../testimgs/
输出平均耗时:6ms GPU占用:700MB
503ms
6ms
6ms
5ms
6ms
6ms
6ms
5ms
3.总结
通过这个对比实验可以发现:
1.RTX2080Ti相较于i7-8700 CPU速度提升非常明显(420ms-->12ms),速度提升了35倍
2.TensorRT7相较于PyTorch在相同环境下也有不错的速度提升(12ms-->6ms),速度提升了1倍的同时,GPU显存占用(1000MB-->700MB)也降低了30%。也能保证推理的精度基本不变(1%的波动,在可接受范围)。
-1.参考
实验参考开源:
YoloV5:https://github.com/ultralytics/yolov5
TensorRTX:https://github.com/wang-xinyu/tensorrtx
- Envoy架构概览(7):断路,全局限速和TLS
- Envoy架构概览(9):访问日志,MongoDB,DynamoDB,Redis
- 【前沿】TensorFlow Pytorch Keras代码实现深度学习大神Hinton NIPS2017 Capsule论文
- Linux 部署ASP.NET SQLite 应用 的坎坷之旅 附demo及源码
- 跨平台:使用OWIN 为WebAPI 宿主
- 如何在UWP中统一处理不同设备间的页面回退逻辑
- new and override
- 初识SignalR~仿QQ即时聊天(群发,单发)(Web,WPF等Demo演示)【上】
- 【翻译】A Next-Generation Smart Contract and Decentralized Application Platform
- asp.net回调javascript
- Oracle9i第2版中的UNT_FILE提高了文件输入/输出(I/O)功能。
- Python 工匠:善用变量来改善代码质量
- sql数据库打包部署安装
- 打包并自动安装sql数据库
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法