后处理
功能介绍
一般情况下,获取模型文件时,会带有后处理的代码文件,建议使用和模型训练时一致的后处理流程,从而保证推理结果符合预期。
对于不同的经典模型,MindX SDK封装了不同的后处理函数,可实现不同模型的后处理操作,将模型推理后的数据直接传入后处理接口,得到最终结果,极大地简化了使用过程。
接口调用流程
图1 接口调用流程图
在使用后处理功能时,需要将对应模型后处理的动态链接库文件(.so)在CMakeLists.txt文件中进行链接操作,以YoloV3为例:
target_link_libraries(main mxbase yolov3postprocess ...)
示例代码
基于MindX SDK后处理函数(YoloV3)的示例如下,不可以直接拷贝编译运行,仅供参考:
// 1、初始化 // 步骤1:构造后处理 Init 的输入 std::map<std::string, std::string> postConfig; postConfig.insert(pair<std::string, std::string>("postProcessConfigPath", yoloV3ConfigPath)); // 设置模型后处理配置文件路径 postConfig.insert(pair<std::string, std::string>("labelPath", yoloV3LabelPath)); // 设置标签文件路径 // 步骤2:执行后处理 Init Yolov3PostProcess yolov3PostProcess; yolov3PostProcess.Init(postConfig); // 2、执行后处理 // 步骤1:根据YOLOV3推理结果构建后处理输入tensors std::vector<TensorBase> tensors; for (size_t i = 0; i < yoloV3Outputs.size(); i++) { MemoryData memoryData(yoloV3Outputs[i].GetData(), yoloV3Outputs[i].GetByteSize()); TensorBase tensorBase(memoryData, true, yoloV3Outputs[i].GetShape(), TENSOR_DTYPE_INT32); tensors.push_back(tensorBase); } // 步骤2:创建后处理输出 std::vector<std::vector<ObjectInfo>> objectInfos; // 步骤3:执行后处理 Process yolov3PostProcess.Process(tensors, objectInfos, imagePreProcessInfos);
父主题: 使用API接口方式开发(C++)