快速入门

您正在查看旧版本的文档。点击页面右上角可切换到最新版本的文档。

本章介绍如何应用Mech-DLK SDK实现Mech-DLK训练的缺陷分割模型的推理。

准备工作

  • 安装 Mech-DLK SDK

  • 将梅卡曼德的加密狗插入电脑。

  • 安装CodeMeter,并确认CodeMeter正在运行,即CodeMeter的图标 installation codemeter icon 显示在系统托盘中。

如已安装Mech-DLK,则不需要重复安装CodeMeter,只需确认CodeMeter正在运行即可。

推理流程

inference flow

函数说明

下面以Mech-DLK导出的缺陷分割模型为例,介绍应用Mech-DLK SDK实现模型推理时使用的函数。

创建输入图像

调用以下函数创建输入图像。

  • C#

  • C++

  • C

MMindImage image = new MMindImage();
image.CreateFromPath("path/to/image.png");
List<MMindImage> images = new List<MMindImage> { image };
mmind::dl::MMindImage image;
image.createFromPath(“path/to/image.png”);
std::vector<mmind::dl::MMindImage> images = {image};
MMindImage input;
createImage("path/to/image.png", &input);

创建推理引擎

调用以下函数创建创建推理引擎。

  • C#

  • C++

  • C

InferEngine inferEngine = new InferEngine();
inferEngine.Create("path/to/xxx.dlkpack", BackendType.GpuDefault, 0);
  • 当部署电脑上配置有英伟达的独立显卡时,你可以将推理后端(即第二个参数)设置为GpuDefaultGpuOptimization

    • 当此参数设置为GpuOptimization时,需要等待1~5分钟的模型优化时间,并且浮点精度FP16只在该模式下生效。

  • 当部署电脑上未配置英伟达的独立显卡时,推理后端只能设置为CPU。

  • 此函数中,第三个参数0为英伟达显卡ID,如果只有一张显卡,填写0即可。当推理后端设置为CPU时,此参数无效。

mmind::dl::MMindInferEngine engine;
engine.create(kPackPath);
// engine.setInferDeviceType(mmind::dl::InferDeviceType::GpuDefault);
// engine.setBatchSize(1);
// engine.setFloatPrecision(mmind::dl::FloatPrecisionType::FP32);
// engine.setDeviceId(0);
engine.load();

C++接口中模型参数可自行设置:

  • 如果不调用setxxx函数,默认情况下BatchSize1FloatPrecisionFP32DeviceId0

  • 如果当前设备具备英伟达的独立显卡,那么InferDeviceTypeGpuDefault;否则,InferDeviceTypeCPU

  • 如需修改推理引擎参数,setxxx函数必须放在load()函数之前。

  • InferDeviceType设置为GpuOptimization时,需要等待1~5分钟的模型优化时间,并且浮点精度FP16只在该模式下生效。

Engine engine;
createPackInferEngine(&engine, "path/to/xxx.dlkpack", GpuDefault, 0);
  • 当部署电脑上配置有英伟达的独立显卡时,你可以将推理后端(即第三个参数)设置为GpuDefaultGpuOptimization

    • 当此参数设置为GpuOptimization时,需要等待1~5分钟的模型优化时间。

  • 当部署电脑上未配置英伟达的独立显卡时,推理后端只能设置为CPU。

  • 此函数中,第四个参数0为英伟达显卡ID,如果只有一张显卡,填写0即可。当推理后端设置为CPU时,此参数无效。

深度学习引擎推理

调用以下函数进行深度学习引擎推理。

  • C#

  • C++

  • C

inferEngine.Infer(images);
engine.infer(images);
infer(&engine, &input, 1);
此函数中,参数1表示推理的图片数量,必须与input中的图片数量相同。

获取缺陷分割结果

调用以下函数得到缺陷分割模型的结果。

  • C#

  • C++

  • C

List<Result> results;
inferEngine.GetResults(out results);
std::vector<mmind::dl::MMindResult> results;
engine.getResults(results);
DefectAndEdgeResult* defectAndEdgeResult = NULL;
unsigned int resultNum = 0;
getDefectSegmentataionResult(&engine, 0, &defectAndEdgeResult, &resultNum);

此函数中,第二个参数0表示深度学习模型推理包中的模型索引。

  • 如果是单模型推理包,该参数只能设置为0;

  • 如果为级联模型推理包,该参数需要根据模型推理包中算法的顺序进行设置。

结果可视化

调用以下函数可视化模型推理结果。

  • C#

  • C++

  • C

inferEngine.ResultVisualization(images);
image.Show("result");
engine.resultVisualization(images);
image.show("Result");
resultVisualization(&engine, &input, 1);
showImage(&input, "result");
此函数中,参数1表示推理的图片数量,必须与input中的图片数量相同。

释放内存

释放内存,防止内存泄漏。

  • C#

  • C++

  • C

inferEngine.Release();
engine.release();
releaseDefectSegmentationResult(&defectAndEdgeResult, resultNum);
releaseImage(&input);
releasePackInferEngine(&engine);

我们重视您的隐私

我们使用 cookie 为您在我们的网站上提供最佳体验。继续使用该网站即表示您同意使用 cookie。如果您拒绝,将使用一个单独的 cookie 来确保您在访问本网站时不会被跟踪或记住。