背景介绍
MATLAB广泛应用于物理系统建模、测量测试、系统控制以及深度学习等,在工程实践中具有非常重要的地位,具体如图1所示。调研发现,科研人员能够编写各种matlab代码,通过建模仿真来更好的认识世界。近年来,随着物联网、智能硬件以及生成式AI等技术的发展,我们能否将设备采集的真实数据作为输入,让模拟仿真变得更加的真实(全真互联)。本推文对相关的内容进行归纳汇总,介绍如何将matlab代码部署到设备端,具体如下所示:
程序在设备端的部署
MATLAB属于付费软件,官方为了吸引消费者开放了丰富的Demo程序,提供了从算法设计到模型部署所需的全套开发工具,让设计人员能够在实际工程项目非常方便的使用该软件。其中,matlab在工程中部署的流程框架如图2所示:主要的方式有:1.通过matlab coder将程序转换为C、C++和CUDA®代码,将预测模型集成到嵌入式或边缘设备;2.通过matlab compiler SDK™将预测模型集成到内部开发的企业桌面应用或服务器应用,支持 C、C++、Java 或 Python 等多种语言;3.部署为微服务 API:将模型部署 RESTful API,以通过多种应用和语言进行调用。
环境搭建
所谓工欲善其事必先利其器,我们利用matlab coder将深度学习模型转化为C代码时,需要在电脑端安装必要的环境,主要包含有:
- On Windows®, code generation for deep learning networks with the
codegen function requires MinGW® compiler. - MATLAB Coder Interface for Deep Learning.
- Deep Learning Toolbox™.
使用案例
我们在本实例中,采用save命令将DAGNetwork保存为.mat文件,后续通过coder.loadDeepLearningNetwork()实现模型加载,最后通过classify实现模型预测;整个过程中通过MinGW将AI模型转化为C代码(不依赖第三方库),所用的程序代码如下所示:
save('netTransfer.mat','netTransfer');
模型预测所需的函数:
function [YPred,probs] = yuche(image)%#codegen
persistent mynet;
if isempty(mynet)
mynet = coder.loadDeepLearningNetwork('netTransfer.mat', 'netTransfer');
end
[YPred,probs] = classify(mynet,image);
end
模型预测的实例及程序代码:
clear all;clc;close all;
lujing='C:\Temp\matlab\matlab\AI\face_recognition\MOV_1692_174.jpg';
I=imread(lujing);
image = imresize(I, [227 227]);
[YPred,probs] = yuche(image)
最后的结果如下图4所示: