Yolov5 ONNX Runtime 的 C++部署

一、onnxruntime C++的下载

不要相信某些博客,2022年居然还是写的:

我才疏学浅,试过好几次都没有成功。

不要克隆不要克隆,那么大的项目你克隆到啥时候,人家发布了压缩包版本的好不好。

Yolov5 ONNX Runtime 的 C++部署_第1张图片

 点击latest:

Yolov5 ONNX Runtime 的 C++部署_第2张图片

 看见没有,gpu版本的才几十M!!!!!

如果自己下载源码编译,很大可能会失败。用官方给的include、lib是很香的哦。

二、部署

一个大佬的项目:GitHub - iwanggp/yolov5_onnxruntime_deploy: 使用onnxruntime部署yolov5

这里就不贴代码了,写一写整体的流程:

1、输入图像预处理:

  • BRG2RBG
  • 信封处理(等比例缩放加padding),得到模型输入制定尺寸大小的图像
  • 像素0~255 ----> 0~1
  • HWC --->  CHW

2、onnxruntime推理得到输出

3、对输出进行后处理,每次都是一张图像的输出

  • box的置信度与置信度阈值作比较,通过后获得该图像的所有box的类别、类别概率、位置信息[xmin, ymin, width, height] ;   在yolov5中类别概率=类别概率*置信度
  • NMS处理,消除同类别重叠度大于iou阈值、类别概率小于置信度阈值的box
  • box位置信息映射到输入原图上

4、在输入原图上进行画预测框、打印类别名称和类别概率

三、总结

1、运行总结:

如果你把onnx格式模型路径、类别文件路径、图像路径写对后,可能还是跑不起来,代码中需要修改一下

如果运行出现下面这样的报错:

Yolov5 ONNX Runtime 的 C++部署_第3张图片

 那就直接把模型输入输出的名字写进去:

Yolov5 ONNX Runtime 的 C++部署_第4张图片

2、运行速度

我这次用的是yolov5-6.2版本的yolov5n模型,在C++上用onnxtime部署,用视频大概检测其推理速度,发现onnxruntime比opencv dnn快一些。不过还是没有pytorch python快。

3、项目通用性

另外如果你用的是其他模型,要套这个项目的话,你得知道输出信息,然后进行修改。比如你现在的类别是coco,yolov5的输出是【batch,  box_num, 85】。这里的85是【Xcenter, Ycenter, width, height, 置信度,类别1概率,类别2概率.......类别80概率】。

yolov5NMS处理时候,一个是box重叠度 < iou阈值,另一个是需要是   box的类别该概率*box的置信度   >  置信度阈值

欢迎留言、欢迎交流!!!

参考:

yolov5 onnxruntime部署_Kun Li的博客-CSDN博客

C/C++下的ONNXRUNTIME推理 - 知乎
onnxruntime的c++使用_c++ onnxruntime_chencision的博客-CSDN博客

你可能感兴趣的:(#,目标检测,模型部署,YOLO)