UNeedCryDear / yolov8-opencv-onnxruntime-cpp

yolov8 hub,cpp with onnxruntime and opencv
Apache License 2.0
282 stars 53 forks source link

c++ onnx_cpu视频检测达不到实时性要求(已调整为relsea版本),应该朝什么方向优化? #27

Closed tianlongyang-bot closed 8 months ago

tianlongyang-bot commented 8 months ago

主要是计算model预测所需要的时间 47631F78-0AA8-4ec9-B97B-40FBBE4E34D9 debug版本时间: image release版本时间: image 但是作为1秒30帧的视频,处理一张图片速度要小于30毫秒的,显然没有达到实时性要求,我用python cpu版本预测,时间只需要10毫秒,我应该朝什么方向优化呢

UNeedCryDear commented 8 months ago
  1. python下面你的视频不一定是640x640大小进去检测的,一般会是640x480的数据。如果你确定你的视频是4:3的比例的话,就将onnx导出的时候指定网络宽度设置为640x480(请注意imgs参数格式是[h,w]),或者导出为动态的onnx模型,然后头文件指定参数指定为640x480,这样会快一些。
  2. 其次,vs直接运行的速度还是会差一些,我比较建议你直接去运行release下面的exe文件,然后设置好对应的视频地址和模型,exe应该还能快一些。
  3. 还有优化方向就是用onnxsim精简一下模型,会快一丢丢。
  4. 如果追求极致的速度,提升方向是精简模型,比如将s模型换成n的,网络输入从640x640换成512x512或者极端点换成320x320(这个速度提升是除了调用显卡外最大的)
  5. python下是GPU这个速度,cpu应该是达不到的,你可以看下任务管理器里面运行的时候显存有没有起来。
tianlongyang-bot commented 8 months ago

感谢你的回复,对于5我做了检查,我python使用yolov8自带的模块运行的,的确测试的时候显存起来了,所以速度很快。 其他的方式我也记下来了,不过现在项目上说不用实时也可以,目前优化到40ms就可以咯