YOLO系列推理库封装
都属于轻量化的模型网络,可以支持部署在CPU达到实时运行,从而降低企业模板模型需要GPU的成本开销,基于这个场景,本人基于OpenCV与OpenVINO封装了YOLO系列(YOLOv5、YOLOv8、YOLOv10、YOLO11)模型的对象检测、实例分割、OBB对象检测、姿态评估 C++ 推理功能、导出DLL以后支持C++与C#调用。封装的与支持的常用主流YOLO模型如下:
客户端调用
基于封装好的DLL,导出的接口定义如下:
class YOLOQTingInferAlgo {
public:
virtual void initConfig(std::string onnxpath, float score, int input_w, int input_h, bool gpu) = 0;
virtual void detect(cv::Mat & frame, std::vector<YOLODetBox> &results) = 0;
};
支持基于YOLO系列自定义训练的模型推理部署,然后第三方应用集成与调用,只需要三行代码即可完成。
YOLOv5推理代码片段
std::shared_ptr<YOLOv5SegOpenVINO> detector(new YOLOv5SegOpenVINO());
detector->initConfig("D:/python/yolov5-7.0/yolov5s-seg.onnx", 0.25, 640, 640, false);
detector->detect(frame, results);
推理结果
YOLOv8推理代码片段
std::shared_ptr<YOLOv8OpenVINODetector> detector(new YOLOv8OpenVINODetector());
detector>initConfig("D:/projects/yolov8n.onnx", 0.25, 640, 640, false);
detector->detect(frame, results);
YOLOv10推理代码片段
std::shared_ptr<YOLOv10OpenVINODetector> detector(new YOLOv10OpenVINODetector());
detector->initConfig("D:/projects/yolov10n.onnx", 0.25, 640, 640, false);
detector->detect(frame, results);
YOLOv11 推理代码片段
std::shared_ptr<YOLO11OpenVINODetector> detector(new YOLO11OpenVINODetector());
detector->initConfig("D:/python/my_yolov8_train_demo/yolo11n.onnx", 0.25, 640, 640, false);
detector->detect(frame, results);
运行结果如下:
END
作者:gloomyfish
来源:OpenCV学堂
推荐阅读
- 【翻译】使用PyTorch FSDP最大化训练吞吐量
- CUDA-MODE 课程笔记 第14课,Triton 实践指南
- 【翻译】CUDA-Free Inference for LLMs
- 图解KV Cache:加速大模型推理的幕后功臣
欢迎大家点赞留言,更多Arm技术文章动态请关注极术社区嵌入式AI专栏欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。