一. 场景说明
我们经常训练好的模型需要部署,有时候算法组和工程组是分开的,这时候就需要我们提供C++的前后处理逻辑,这时怎么调试我们的C++代码呢?
解决方法:把模型推理的结果保存成C++可加载的形式,即可调试C++后处理代码。
二. 一个例子
模型预测的结果是一个两通道的Mat,我们首先把它保存成yaml形式,比如:offset.yaml。
# flow为模型预测的结果debug = Falseif debug:yaml_out = "offset.yaml"fs = cv2.FileStorage(yaml_out, cv2.FILE_STORAGE_WRITE)fs.write("flow", flow)fs.release()if debug:yaml_in = "offset.yaml"fs = cv2.FileStorage(yaml_in, cv2.FILE_STORAGE_READ)flow1 = fs.getNode("flow").mat()fs.release()
用C++加载保存的offset.yaml,以便进行后续C++代码的调试:
#include <opencv2/opencv.hpp>
#include <iostream>int yaml_to_mat(const std::string yaml_in, cv::Mat& flow)
{cv::FileStorage fs(yaml_in, cv::FileStorage::READ);if (!fs.isOpened()) {std::cerr << "Failed to open YAML file." << std::endl;return -1;};fs["flow"] >> flow;fs.release();std::cout << "INFO::" << "read flow success!" << std::endl;return 0;
}
接下来,你就能流畅的写完你的后处理代码,打包交付啦!!!