OpenVINO2022.1 C++在ubuntu20.04部署yolov5-6.x

OpenVINO2022.1 C++在ubuntu20.04部署yolov5-6.x

  • 模型转换路线:
    • 1. 准备工作
    • 2. pt --> onnx
    • 3. onnx --> IR(.xml, .bin)
    • 4. IR(.xml, .bin) --> OpenVINO runtime(C++)
    • 附录

模型转换路线:

在这里插入图片描述

pt --> onnx -->.xml,.bin --> OpenVINO runtime(C++)

1. 准备工作

  • Github下载yolov5工程
  • 安装依赖库,如pytorch,pip install -r requirements.txt
  • 训练得到pt模型

2. pt --> onnx

  1. 官网装openvino-dev[onnx]:Intel® Distribution of OpenVINO™ Toolkit
  2. 使用yolov5工程中的模型转换模块将pt模型转换为onnx模型:
    python export.py --data xxx.yaml --weights xxx.pt --img xxx(size) --batch 1

3. onnx --> IR(.xml, .bin)

  1. 用Model Optimizer将onnx模型转换为Intermediate Representation (IR),包含.xml和.bin文件,转换过程的其他参数参考Converting an ONNX Model.
    mo --input_model xxx.onnx
    在这里插入图片描述

4. IR(.xml, .bin) --> OpenVINO runtime(C++)

  1. 为了用C++跑模型,首先安装OpenVINO runtime,配置环境(安装),添加source,官方安装步骤:Install and Configure Intel® Distribution of OpenVINO™ Toolkit for Linux¶

  2. 编写C++程序,写CmakeList.txt,用cmake编译:
    OpenVINO2022.1 C++在ubuntu20.04部署yolov5-6.x_第1张图片

附录

  1. main.cpp
  • 头文件
#include     //OpenVINO >=2022.1
  • 创建OpenVINO Core:
ov::Core core;
ov::CompiledModel compiled_model = core.compile_model("xxx.xml", "AUTO");
ov::InferRequest infer_request = compiled_model.create_infer_request(); 
  • 获取输入、输出节点Tensor:
Tensor input_image_tensor = infer_request.get_tensor("images");
Tensor output_tensor = infer_request.get_tensor("output");
  • 读入图片,将Mat图像转换为Tensor,然后让openvino runtime推理,获取推理结果并解析:
cv::Mat img = cv::imread(xxx.jpg);
fill_tensor_data_image(input_image_tensor, in_img);
infer_request.infer();
cv::Mat det_output(out_rows, out_cols, CV_32F, (float*)infer_output_tensor.data());
  • NMS
vector<int> indexes;
cv::dnn::NMSBoxes(boxes, confidences, 0.25, 0.45, indexes);

你可能感兴趣的:(c/c++,c++,python,深度学习)