YOLOv4 tensorrt推理 python版【附代码】

简介: 笔记

学了几天的tensorRT,又经过了几天的努力终于实现了YOLOv4 tensorRT推理,这篇文章将把这些成果开源出来,供大家免费使用。


YOLOv4代码我采用的是b站up主Bubbliiiing,相信大家应该都比较熟悉这位大佬。


关于trt的推理部分我是参考了官方YOLOV5 6.2版本。

剪枝以后的模型也可以用tensorrt进行推理【理论是可行的,虽然我还没试】


环境说明


windows10


cuda10.2


cudnn8.2.1


pytorch1.7


tensorrt8.2.5.1


python 3.7


显卡:NVIDIA 1650 4G(比较拉跨)


注:linux下我还没有试,可能有些代码需要改,而且trt的版本也会受影响


注意python版本的在下载完tensorrt后的文件夹中有个python文件夹,然后用pip安装【注意:TRT应该是8.2X以上可以安装python般的,其他的是C++】


其他tensorrt的学习资料可以看我tensorrt专栏。


torch2onnx


改功能的实现在torch2onnx.py中。


你需要修改的地方有:


simplity:是否开启simplity模式


output_path: # 输出onnx路径


num_classes: # 类的数量


ckpt_path: # torch权重路径


input_shape: # 输入网络图像尺寸大小


python torch2onnx.py


转换过程如下:

graph(%images : Float(1:1108992, 3:369664, 608:608, 608:1, requires_grad=0, device=cpu),

     %yolo_head3.1.weight : Float(255:256, 256:1, 1:1, 1:1, requires_grad=1, device=cpu),

     %yolo_head3.1.bias : Float(255:1, requires_grad=1, device=cpu),

     %yolo_head2.1.weight : Float(255:512, 512:1, ...

```


可以通过Netron工具对onnx可视化


onnx2engine


改功能的实现在onnx2trt.py中。


你需要修改的地方有:


onnx_path: # onnx文件路径


engine_path: # 输出engine路径


python onnx2trt.py

生成engine的时间比较长,在我电脑上大概用了10分钟左右,如果用trtexec也可以生成engine,这个构建时间会快很多。


推理功能在predict.py中。


参数说明:

--weights: # 权重路径

--img: # 开启图像预测

--video: # 开启视频预测

--video_path: # 视频路径

--fps: # FPS测试

--onnx: # 开启onnx推理

--engine: # 开启trt预测

--input_shape: # 输入大小,默认608 * 608

--conf: # 置信度阈值

--nms: # NMS阈值


torch推理


图像推理:

python predict.py --weights model_data/yolo4_weights.pth --img --conf 0.5 --nms 0.4


视频推理:

python predict.py --weights model_data/yolo4_weights.pth --video --video_path 0


FPS测试:

python predict.py --weights model_data/yolo4_weights.pth --fps

onnx推理


图像推理:


python predict.py --weights model_data/yolov4.onnx --img --conf 0.5 --nms 0.4

视频推理:


python predict.py --weights model_data/yolov4.onnx --video --video_path 0

FPS测试:


python predict.py --weights model_data/yolov4.onnx --fps


engine推理


图像推理:


python predict.py --weights model_data/yolov4.engine --img --conf 0.5 --nms 0.4

视频推理:


python predict.py --weights model_data/yolov4.engine --video --video_path 0

FPS测试:


python predict.py --weights model_data/yolov4.engine --fps


检测结果:

1.jpeg


代码:


git clone https://github.com/YINYIPENG-EN/YOLOv4_tensorRT_pytorch.git



说明:本项目暂时未添加动态输入


所遇问题:


如果报下面的错误:


一般有这么几种情况:


1.cuda10.2需要打两个补丁(官网就有)


2.如果打了补丁还报错,一种是可能遇到了不支持的算子,一种是内存不够。


我trt8.2x版本中发现如果有包含全连接层的onnx不能转成engine,即便用trrexec强行转也会报这种错误,但如果我把全连接层用卷积层代替就没问题,我不知道更高版本的会不会解决这个问题。

[10/21/2022-18:32:29] [TRT] [E] 2:[ltWrapper.cpp::nvinfer1::rt::CublasLtWrapper::setupHeuristic::334] Error C
ode 2: Internal Error (Assertion cublasStatus == CUBLAS_STATUS_SUCCESS failed. )

刚开始在用trt推理的时候发现准确率极差,但onnx和torch都很正常,于是我将预测代码中的图像处理由PIL度图像方式改为了opencv后有非常大的改善,但出现慢屏的框,于是通过分析onnx和engine推理的ouputs发现engine将yolo 的三个head顺序颠倒了,这个问题不知道为什么,重新调整顺序后就可以正常检测了【不过在测试FPS和map部分我没修改图像处理代码,因为FPS就只是算个model推理时间而已不用管他推理结果好坏,而测试map部分还是建议大家用训练torch模型测试或者你自己修改也可以】


目录
相关文章
|
存储 计算机视觉 异构计算
使用python&C++对bubbliiiing的yolo系列进行opencv.dnn进行推理部署
使用python&C++对bubbliiiing的yolo系列进行opencv.dnn进行推理部署
323 0
|
数据可视化 Python
Python用 PyMC3 贝叶斯推理案例研究:抛硬币和保险索赔发生结果可视化
Python用 PyMC3 贝叶斯推理案例研究:抛硬币和保险索赔发生结果可视化
|
人工智能 知识图谱 Python
python实现知识推理,图可达,pydatalog,kanren,sympy
python实现知识推理,图可达,pydatalog,kanren,sympy
391 0
|
机器学习/深度学习 Python
【Python机器学习】实验06 贝叶斯推理3
【Python机器学习】实验06 贝叶斯推理
185 0
|
机器学习/深度学习 数据可视化 API
Paddle Lite是什么,快速上手Python推理,pdmodel使用
“Paddle Lite 是一组工具,可帮助开发者在移动设备、嵌入式设备和 loT 设备上运行模型,以便实现设备端机器学习。”
|
3月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
300 102
|
3月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
322 104
|
3月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
265 103
|
3月前
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
197 82
|
2月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
184 3

推荐镜像

更多