YOLOv7
已经出来一段时间了,之前一直没有时间去看。最近抽空学习了一下,不禁感慨一下,现在的
YOLO
系列目标检测算法真是卷成麻花了,各种算法层出不穷,让人目不暇接。最重要的是,我感觉自己学不动了......
之前
YOLOX
和
YOLOv6
出来后,我分别写了文章介绍如何使用
TensorRT
的
C++
接口部署这两个模型,并且把代码放在了
gitee
上,感兴趣的可以参考下面的链接:
如何用TensorRT部署YOLOv6
如何用TensorRT部署YOLOX
本文将介绍如何用
TensorRT
的
C++
接口部署
YOLOv7
。
1. 下载
PyTorch
模型
YOLOv7
的
PyTorch
模型可以从
官方GitHub仓库
的
Releases
中下载,目前的版本号为
v0.1
。下面的操作是下载
yolov7.pt
模型:
wget -c https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt
2. 转换为ONNX
模型
下载好PyTorch
格式的模型文件后,可以用官方提供的脚本转换为ONNX
模型:
python export.py --weights ./yolov7.pt --grid --simplify --img-size 640 640
官方的脚本还提供把NMS
操作集成到ONNX
模型中的功能,我个人不太想这么做,感兴趣的读者可以试一下。
上面的操作导出的ONNX
模型已经把后处理操作集成到了模型中,下图红框中的操作就是把模型三个检测头输出的内容经过处理后再汇总到一起作为输出,这样做的好处是可以避免自己去写复杂的后处理代码。
3. 基于TensorRT
部署ONNX
模型
如何使用TensorRT
的C++
接口部署ONNX
模型可以参考我之前给【自动驾驶之心】公众号写的这篇文章:手把手教学!TensorRT部署实战:YOLOv5的ONNX模型部署。
这篇文章以YOLOv5
为例,通过大量的代码一步步讲解如何使用TensorRT
框架部署ONNX
模型,主要目的是希望读者能够通过这篇文章学习到TensorRT
模型部署的基本流程,比如如何准备输入数据、如何调用API
用模型做推理、如何解析模型的输出结果。相信看完这篇文章的读者
已经基本掌握使用TensorRT
部署ONNX
模型的基本方法,并且能做到举一反三自己部署其他模型了,比如YOLOX
、YOLOv6
、YOLOv7
等等。
我就来说一下重点吧,重点就是这篇文章的代码可以直接拿来部署YOLOv7
!
既然这样,本文就不再重复叙述了。如果还没有看这篇文章的话,那就赶紧点击上面的链接查看吧。
用yolov7.onnx
模型测试的几个结果如下:
下面是跑视频的结果:
基于TensorRT部署的YOLOv7模型,来看下效果怎么样
在我的GeForce GTX 1050 Ti
显卡(只支持FP32
)上测试各个模型的耗时如下表所示:
模型 | 输入尺寸 | 耗时 |
---|
yolov7-tiny.onnx | 640x640 | 8 ms |
yolov7.onnx | 640x640 | 66 ms |
yolov7x.onnx | 640x640 | 113 ms |
yolov7-w6.onnx | 640x640 | 56 ms |
yolov7-e6.onnx | 640x640 | 83 ms |
yolov7-d6.onnx | 640x640 | 108 ms |
yolov7-e6e.onnx | 640x640 | 126ms |
换到装了GeForce RTX 3070
显卡(支持FP32
和FP16
)的服务器上去试一下:
模型 | 输入尺寸 | 模型精度 | 耗时 |
---|
yolov7-tiny.onnx | 640x640 | FP32 | 2 ms |
yolov7.onnx | 640x640 | FP32 | 13 ms |
yolov7x.onnx | 640x640 | FP32 | 20 ms |
yolov7-w6.onnx | 640x640 | FP32 | 12 ms |
yolov7-e6.onnx | 640x640 | FP32 | 17 ms |
yolov7-d6.onnx | 640x640 | FP32 | 21 ms |
yolov7-e6e.onnx | 640x640 | FP32 | 25ms |
yolov7-tiny.onnx | 640x640 | FP16 | 1 ms |
yolov7.onnx | 640x640 | FP16 | 6 ms |
yolov7x.onnx | 640x640 | FP16 | 9 ms |
yolov7-w6.onnx | 640x640 | FP16 | 6 ms |
yolov7-e6.onnx | 640x640 | FP16 | 7 ms |
yolov7-d6.onnx | 640x640 | FP16 | 9 ms |
yolov7-e6e.onnx | 640x640 | FP16 | 10ms |
果然在高级显卡上就是跑得快呀,等我有钱了一定要去换个好点的显卡!
没啥好总结的,对于这种优秀的开源工作,我只能用两个字来评价:真香!