模型导出与输入输出
YOLO11模型导出ONNX脚本如下:
from ultralytics import YOLO
"""Test exporting the YOLO model to ONNX format."""
f = YOLO("yolo11n.pt").export(format="onnx", opset=11, dynamic=False)
如果不指明opset=11或者12,默认opset=10导出的模型推理时候会非常的慢。指定opset=11以后,导出的模型结构如下:
输入与输出格式解释如下:
输入支持格式为:1x3x640x640
输出格式为1x84x8400
输出格式8400是指输出得预测框数目,84分别是
cx cy w h coco的分类得分 - 80
C++推理
OpenVINO2023 C++ 推理,加载模型
ov::CompiledModel compiled_model = ie.compile_model(onnxpath, "CPU");
this->infer_request = compiled_model.create_infer_request();
CPU上运行结果如下:
把ONNX格式模型通过下面的命令行转换为IR文件
import openvino as ov
ov_model = ov.convert_model("D:/python/my_yolov8_train_demo/yolo11n.onnx")ov.save_model(ov_model, "yolo11.xml")
一样可以完成 C++ 推理演示
最后我已经把C++代码 封装成一个单独的类,直接通过客户端,三行代码实现YOLO11对象检测模型部署推理。调用的代码如下:
#include <yolo11_det_openvino.h>
#include <iostream>
#include <fstream>
std::string label_map = "D:/python/my_yolov8_train_demo/classes.txt";
int main(int argc, char** argv) {
std::vector<std::string> classNames;
std::ifstream fp(label_map);
std::string name;
while (!fp.eof()) {
getline(fp, name);
if (name.length()) {
classNames.push_back(name);
}
}
fp.close();
std::shared_ptr<YOLO11OpenVINODetector> detector(new YOLO11OpenVINODetector());
detector>initConfig("D:/python/my_yolov8_train_demo/yolo11.xml", 0.25);
cv::VideoCapture capture("D:/bird_test/play_scoers.mp4"); cv::Mat frame;
std::vector<YOLODetBox> results;
while (true) {
bool ret = capture.read(frame);
if (frame.empty()) {
break;
}
detector->detect(frame, results);
for (YOLODetBox dr : results) {
cv::Rect box = dr.box;
cv::putText(frame, classNames[dr.classId], cv::Point(box.tl().x, box.tl().y - 10), cv::FONT_HERSHEY_SIMPLEX, .5, cv::Scalar(0, 0, 0));
}
cv::imshow("YOLO11对象检测 + OpenVINO2023", frame);
char c = cv::waitKey(1);
if (c == 27) { // ESC 退出
break;
}
// reset for next frame
results.clear();
}
return 0;
}
对比YOLOv5跟YOLOv8同等的模型,速度还是非常快。唯一不是很满意的就是感觉对小目标检测能力好像没有YOLOv5跟YOLOv8那么厉害,只是个人感觉。
作者:gloomyfish
来源:OpenCV学堂
推荐阅读
- 【翻译】FlexAttetion 基于Triton打造灵活度拉满的Attention
- FMRFT 融合Mamba和 DETR 用于查询时间序列交叉鱼跟踪 !
- 【翻译】torch.compile 的详细示例解析教程
- CUDA-MODE 课程笔记 第13课:Ring Attention
欢迎大家点赞留言,更多Arm技术文章动态请关注极术社区嵌入式AI专栏欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。