一. 场景说明
我们经常训练好的模型需要部署,有时候算法组和工程组是分开的,这时候就需要我们提供C++的前后处理逻辑,这时怎么调试我们的C++代码呢?
解决方法:把模型推理的结果保存成C++可加载的形式,即可调试C++后处理代码。
二. 一个例子
模型预测的结果是一个两通道的Mat,我们首先把它保存成yaml形式,比如:offset.yaml。
# flow为模型预测的结果
debug = False
if 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;
}
接下来,你就能流畅的写完你的后处理代码,打包交付啦!!!