需要将神经网络部署在dsp中,要求是c/c++语言,因为matlab coder工具箱可以直接将.m文件转化为c/c++语言,所以本文章用以说明使用使用matlab coder将神经网络转化为c/c++的过程。
1 前期准备
1.1 工具包
为了使用matlab coder来生成神经网络的代码,必须提前下载:
- Deep Learning Toolbox™
- MATLAB Coder Interface for Deep Learning Libraries
可以使用 MATLAB Coder 为部署到 Intel® 或 ARM® 处理器的深度学习网络生成 C++ 代码。 生成的代码利用针对目标 CPU 优化的深度学习库。 硬件和软件要求取决于目标平台。还可以使用 MATLAB Coder 为深度学习网络生成通用 C 或 C++ 代码。 此类C或C++代码不依赖于任何第三方库。
1.2 software libraries
Intel Math Kernel Library for Deep Neural Networks (MKL-DNN), v1.4.
PS:注意一定要是1.4版本的。
PPS:CrossChannelNormalizationLayer norm1 is not supported for target library ‘none’,如果不安装mkldnn有些层是不支持的,但是本项目要求不能使用第三方库,所以应该不安装mkldnn这一第三方库。
1.2.1 安装mkldnn库的具体步骤为:
方法一:
- 下载1.4版本的MKL-DNN。下载网址见https://github.com/oneapi-src/oneDNN/releases?q=1.4&expanded=true
- 下载CMAKE,网址见https://cmake.org/download/
注意,下载红框iso文件,zip一直编译失败。
- 直接运行CMake-gui.exe,在"where is the source code"中输入“C:/Program Files/mkl-dnn”,在"where to build the binaries"中输入“C:/Program Files/mkl-dnn/build”,然后点击左下角的Configure按钮,最后点击Generate即可生成。
- PS:在我自己运行时,出现了几点问题,首先点击Configure按钮时,显示没有cmakelist.txt文件,所以我将examples文件夹下的cmakelist.txt复制到了mkl-dnn文件夹下,然后Configure+Generate,此时发现mkl-dnn文件夹下新增了一个lib文件夹,里面多了dnnl.lib和mkldnn.lib两个文件,再matlab转换就成功了。
1.3 c++ compiler
主流编译器是mingw-w64或Microsoft Visual C++ 2022 product family(Community, Professional, and Enterprise editions are supported.),其中mingw-w64的c和c++的编译器分别是gcc和g++,Microsoft Visual的编译器是msv.
PS:在下载VS的时候,the “Desktop development with C++” workload is required for MEX and associated functionality,所有需要勾选和C++、mex有关的安装项。具体见解决方案-CMake error: error in configuration process, project files may be invalid(Windows&VS可参考)
PPS:如果已安装了VS,但matlab mex -setup命令仍找不到编译器
具体见Matlab配置编译器(Matlab2020b+