openvino2022最新版部署深度学习模型步骤

1. 引入openvino以来的头文件

#include 

2. 创建命名空间

using namespace ov;

3. 创建openvino runtime core

ov::Core ie;

4. 加载模型文件

string onnx_path = "***.onnx";
ov::CompiledModel model = ie.compile_model(onnx_path, "AUTO");
ov::InferRequest infer_request = model.create_infer_request();

5. 请求网络输入

ov::Tensor input_tensor = infer_request.get_input_tensor();
ov::Shape input_shape = input_tensor.get_shape();
size_t num_channels = input_shape[1];
size_t w = input_shape[2];
size_t h = input_shape[3];
size_t image_size = h * w;

//读取检测图片并图像预处理
Mat src, blob;
src = cv::imread("D:/images/hist_02.jpg");
cv::resize(src, blob, cv::Size(h, w));
//cv::cvtColor(blob_image, blob_image, cv::COLOR_BGR2RGB);
blob.convertTo(blob, CV_32F, 1.0 / 255);
//blob = blob / 255.0;
cv::subtract(blob, cv::Scalar(0.5, 0.5, 0.5), blob);
cv::divide(blob, cv::Scalar(0.5, 0.5, 0.5), blob);

6. 导入输入数据转成tensor

//NCHW
float* input_data = input_tensor.data<float>();//转成指针格式,由指针指向每个像素
//对像素进行遍历
for (size_t row = 0; row < h; row++)
{
	for (size_t col = 0; col < w; col++)
	{
		for (size_t c = 0; c < num_channels; c++)
		{
			input_data[image_size * c + row * w + col] = blob.at<Vec3f>(row, col)[c];
		}
	}
}

7. 执行推理

infer_request.infer();

8. 获取输出数据

//在这里get_output_tensor应用于只有一个网络输出节点的情况
//get_tensor应用于网络有多个输出节点的情况,这时候get_tensor输入的参数就是输出节点的名字,比如76就是节点的名字。
auto output = infer_request.get_output_tensor();
auto output_age = infer_request.get_tensor("76");
//转成指针类型
float* output_data = output.data<float>();
ov::Shape output_shape = output.get_shape();
size_t rols = output_shape[0];
size_t cols = output_shape[1];
cout << rols << " x " << cols << endl;

9. 接下来就是对输出结果的每个维度值赋予实际的意义就可以了。

你可能感兴趣的:(openvino,深度学习,计算机视觉,神经网络)