使用 MATLAB Coder 进行深度学习的前提条件
MathWorks 产品
要使用 MATLAB® Coder™ 为深度学习网络生成代码,您还必须安装:
Deep Learning Toolbox™
MATLAB Coder Interface for Deep Learning
生成不使用第三方库的代码
您可以使用 MATLAB Coder 为深度学习网络生成泛型 C 或 C++ 代码。这种 C 或 C++ 代码不依赖于第三方库。有关详细信息,请参阅为深度学习网络生成泛型 C/C++ 代码。
MATLAB Coder 将查找并使用支持的已安装编译器。有关受支持编译器的列表,请参阅 MathWorks® 网站上的支持和兼容的编译器。
可以使用 mex -setup 更改默认编译器。请参阅更改默认编译器。
C++ 编译器必须支持 C++11。
在 Windows® 上,要生成不使用第三方库的泛型 C 或 C++ 代码,请使用 Microsoft® Visual Studio® 或 MinGW® 编译器。
生成使用第三方库的代码
您可以使用 MATLAB Coder 为部署到 Intel® 或 ARM® 处理器的深度学习网络生成 C++ 代码。生成的代码利用针对目标 CPU 进行了优化的深度学习库。硬件和软件要求取决于目标平台。
注意
所需软件库的路径不能包含空格或特殊字符,如括号。在 Windows 操作系统中,仅当启用 8.3 文件名时才允许使用特殊字符和空格。有关 8.3 文件名的详细信息,请参考 Windows 文档。
硬件和软件需求
| Intel CPU | ARM Cortex-A CPU | |
|---|---|---|
| 硬件要求 | 支持 Intel Advanced Vector Extensions 2 (Intel | 支持 |
| 软件库 | Intel Math Kernel Library for Deep Neural Networks (MKL-DNN), v1.4。请参阅 https://github.com/oneapi-src/oneDNN。 不要使用预置库,因为缺失一些必需的文件。请从源代码编译库。请参阅 GitHub® 上的编译库的说明。 有关编译的详细信息,请参阅 MATLAB Answers™ 中的以下帖子:如何编译用于深度学习 C++ 代码生成和部署的 Intel MKL-DNN 库。 使用说明:
| 针对计算机视觉和机器学习的 ARM Compute Library,版本 19.05 和 20.02.1。请参阅 https://developer.arm.com/ip-products/processors/machine-learning/compute-library。 在 不要使用预置库,因为它可能与 ARM 硬件上的编译器不兼容。请从源代码编译库。请在您的主机上或直接在目标硬件上编译库。请参阅 GitHub 上的编译库的说明。 包含库文件(如 有关编译的详细信息,请参阅 MATLAB Answers 中的以下帖子:如何编译用于深度学习 C++ 代码生成和部署的 ARM Compute Library。 要在 ARM 处理器上部署以 8 位整数执行推断计算的生成代码,您必须使用 ARM Compute Library 版本 20.02.1。 |
| 操作系统支持 | Windows、Linux® 和 macOS。 | 仅限 Windows 和 Linux。 |
| 支持的编译器 | MATLAB Coder 将查找并使用支持的已安装编译器。有关受支持编译器的列表,请参阅 MathWorks 网站上的支持和兼容的编译器。 可以使用 C++ 编译器必须支持 C++11。 在 Windows 上,要使用 注意 在 Windows 上,不支持使用 MinGW 编译器生成使用 Intel MKL-DNN 库的 MEX 函数。 | |
| 其他 | 开源计算机视觉库 (OpenCV),基于 ARM Cortex-A 的深度学习示例需要的版本为 v3.1.0。 注意:这些示例需要单独的库,例如 有关详细信息,请参考 OpenCV 文档。 | |
环境变量
MATLAB Coder 使用环境变量来定位为深度学习网络生成代码所需的库。
| 平台 | 变量名称 | 描述 |
|---|---|---|
| Windows | INTEL_MKLDNN | Intel MKL-DNN 库安装的根文件夹的路径。 例如:
|
ARM_COMPUTELIB | ARM 目标硬件上 ARM Compute Library 安装的根文件夹的路径。 例如:
在 ARM 目标硬件上设置 | |
CMSISNN_PATH | ARM 目标硬件上 CMSIS-NN 库安装的根文件夹的路径。 例如:
在 ARM 目标硬件上设置 | |
PATH | Intel MKL-DNN 库文件夹的路径。 例如:
| |
| Linux | LD_LIBRARY_PATH | Intel MKL-DNN 库文件夹的路径。 例如:
|
目标硬件上 ARM Compute Library 文件夹的路径。 例如:
在 ARM 目标硬件上设置 | ||
INTEL_MKLDNN | Intel MKL-DNN 库安装的根文件夹的路径。 例如:
| |
ARM_COMPUTELIB | ARM 目标硬件上 ARM Compute Library 安装的根文件夹的路径。 例如:
在 ARM 目标硬件上设置 | |
CMSISNN_PATH | ARM 目标硬件上 CMSIS-NN 库安装的根文件夹的路径。 例如:
在 ARM 目标硬件上设置 | |
| macOS | INTEL_MKLDNN | Intel MKL-DNN 库安装的根文件夹的路径。 例如:
|
| ARM Cortex-A 目标上基于 UNIX® 的操作系统 | OPENCV_DIR | OpenCV 的编译文件夹的路径。为使用 OpenCV 的深度学习示例安装 OpenCV。 例如:
|
注意
要使用 MATLAB Support Package for Raspberry Pi® Hardware 为 Raspberry Pi 生成代码,您必须以非交互方式设置环境变量。有关说明,请参阅 https://www.mathworks.com/matlabcentral/answers/455591-matlab-coder-how-do-i-setup-the-environment-variables-on-arm-targets-to-point-to-the-arm-compute-li。
注意
要编译和运行使用 OpenCV 的示例,您必须在目标板上安装 OpenCV 库。对于 Linux 上的 OpenCV 安装,请确保库文件的路径和头文件的路径在系统路径上。默认情况下,库文件和头文件分别安装在一个标准位置,如 /usr/local/lib/ 和 /usr/local/include/opencv。
对于目标板上的 OpenCV 安装,请按照上表所述设置 OPENCV_DIR 和 PATH 环境变量。
注意
通过设置控制 OpenMP 线程与物理处理单元绑定的环境变量,也许可以提高为 Intel CPU 生成的代码的性能。例如,在 Linux 平台上,将 KMP_AFFINITY 环境变量设置为 scatter。对于使用 Intel CPU 的其他平台,也许可以设置类似的环境变量来提高生成代码的性能。