/ ai资讯

Python与MATLAB深度学习工程化实现方式

发布时间:2026-07-15 11:46:02

| 本文作者:MathWorks 中国高级应用工程师 陈宜欣

随着人工智能技术在各行各业中的应用,很多工程团队已经不缺模型。使用 Deep Learning Toolbox 和 MATLAB,可以访问预训练模型并设计各种类型的深度神经网络。但并非所有 AI 工程团队都以 MATLAB 为唯一开发平台。很多团队在 PyTorch / TensorFlow 等基于 Python 的深度学习平台上开发模型,训练很快、指标也不错。但在深度学习项目真正走向工程落地时,团队往往会发现,工程应用需要把模型放进更完整的流程中,与数据处理、系统设计、仿真验证以及嵌入式部署紧密衔接。也正因为如此,Python 深度学习与 MATLAB 的交互不只是“工具互通”,而是帮助团队在模型开发流程与系统级工程流程之间建立衔接。这样既保留 Python 在模型构建上的灵活性,又借助 MATLAB 在完整 AI 工作流与系统级应用上的能力,让模型不仅能训练出来,更能接入仿真、验证和部署链路,进一步推动产品落地。

将 MATLAB 与其他深度学习平台进行结合使用,主要有以下三种实现方式:

方式 1:联合执行(Co-execution)

1) 从 MATLAB 调用 Python

从 MATLAB 调用 Python,可以访问几乎所有基于 Python 的 AI 框架和模型,因此非常适合在 MATLAB/Simulink 中对已有模型进行快速验证和系统级仿真。在实际工程中,很多团队已经在 PyTorch 或 TensorFlow 中完成了模型训练,此时最直接的需求并不是重新实现模型,而是尽快评估模型在系统中的表现,例如对控制系统稳定性、信号处理效果或边界工况下的表现进行验证。

实现方式

在 MATLAB 中,这种调用通常通过 Python Interface 实现,用户可以使用 py. 前缀直接调用 Python 函数或加载模型,从而在 MATLAB 环境中完成推理计算。同时,在 Simulink 中也提供了针对 PyTorch 和 TensorFlow 模型的专用模块,可以在仿真过程中直接调用 Python 模型,使其成为系统模型中的一个功能组件。

首先,需要设置 Python 环境。在新版本 R2026a 中,更新了设置方式,支持使用“外部语言”面板在 MATLAB 中查看、创建和管理 Python 环境。

通过外部语言面板管理Python环境

之后,调用 PyTorch模型。例如,下面这行代码调用了已训练的VGG16模型。

model1= py.torchvision.models.vgg16(pretrained=true);

主要应用场景

从工程角度来看,联合执行的主要价值在于打通Python模型训练环境与 MATLAB/Simulink 系统仿真环境,使已有的 PyTorch 或 TensorFlow 模型能够在不进行结构转换的情况下,快速接入工程系统进行验证。在模型开发初期,这种方式能够避免额外的模型适配工作,使工程团队可以快速关注模型在实际系统中的行为表现,而不是工具链转换问题。

在具体应用中,联合执行通常用于模型验证和系统仿真的早期阶段。例如,可以将不同版本的模型接入同一仿真环境,对比其在系统中的表现;也可以将AI模块与已有控制算法或物理模型结合,进行闭环仿真和整体性能评估。同时,在跨团队协作中,这种方式可以作为 Python 与 MATLAB 流程之间的接口,提高模型复用效率。需要注意的是,由于依赖 Python 运行环境并涉及跨语言调用,联合执行更适合作为验证手段,而不是最终部署方案。

使用注意事项

联合执行的过程中,数据会在 MATLAB 与 Python 之间进行传递。在实际尝试中,需要特别注意数据类型和数据格式的匹配。例如对于图像或序列数据,不同平台的数据维度顺序不同(如 MATLAB 常用 HWC 格式,而 PyTorch 通常使用 CHW 格式)。如果这些细节没有处理好,往往会导致模型推理结果异常或性能问题。

2) 从 Python 调用 MATLAB

除了从 MATLAB 调用 Python,在一些场景下也可以从 Python 调用 MATLAB。例如,在 Python 训练流程中,利用 MATLAB 完成数据生成、信号处理或结果可视化等任务。这种方式通常通过 MATLAB Engine for Python 实现,可以在 Python 脚本中直接调用 MATLAB 函数。

小结

总体来看,联合执行的主要价值在于“快速接入”和“系统验证”。它特别适用于模型开发的早期阶段,例如快速验证模型效果、对比多个模型版本,或者在Simulink中进行系统级闭环仿真。但需要注意的是,这种方式依赖Python运行环境,且运行过程中存在跨语言调用开销,因此并不适用于最终的嵌入式部署或产品交付。

方式 2:模型导入

MATLAB 支持与 PyTorch 等平台进行模型导入和导出,本文主要讨论其中的模型导入。当模型已经在 PyTorch 或 TensorFlow 中训练完成,并且需要进一步集成到工程系统时,仅通过联合执行进行调用往往是不够的。在这一阶段,更常见的需求是对模型进行结构分析、优化、重新训练、或者与现有系统模型进行深度集成。这时就需要通过模型导入的方式,将 Python 模型转换为 MATLAB 中的网络对象。

实现方式

模型准备:在导入模型之前,首先需要在 Python 侧对模型进行准备。对于 PyTorch 模型,通常需要将模型导出为可解析的格式。例如,使用 ExportedProgram格式可以完整描述模型的计算图结构、输入输出规格以及网络参数,更加稳定也更有利于后续的导入和代码生成流程。对于 TensorFlow 模型,则通常需要将模型保存为 SavedModel 格式。

命令导入模型:模型准备完成后,可以在 MATLAB 中通过一系列导入函数将其转换为 MATLAB 网络对象。例如,对于 PyTorch 模型,可以使用 importNetworkFromPyTorch 函数,并指定输入尺寸信息,从而为网络自动生成输入层结构。对于 ONNX 或 TensorFlow 模型,也可以使用对应的导入接口实现类似转换。例如,可以将在 PyTorch中训练的用于电池 SOC 预测的 LSTM 模型导入到 MATLAB 中:

PT_InputSize= [151];
net= importNetworkFromPyTorch(fullfile('models','battery_soc_traced_model.pt'),'PyTorchInputSizes',PT_InputSize);
pt_Network= expandLayers(net);

通过 app 导入模型:除了命令行方式,MATLAB 还提供了 Deep Network Designer 这一图形化工具,可以以交互方式导入模型。该工具会引导用户设置输入尺寸,并在导入过程中生成报告,提示可能存在的问题,例如不支持的算子或结构不匹配。这对于复杂模型或初次导入的场景尤为重要。

打开 Deep Network Designer

选择 From Pytorch 并选择相应的模型文件

导入后的模型

主要应用场景

模型导入后的最大变化是:不再依赖原始训练环境,可以在MATLAB中直接对模型进行操作。例如,可以通过可视化工具查看网络结构,通过训练接口进行迁移学习或微调,或者结合其他工具箱对模型进行性能分析与验证。

更进一步,在工程场景中,模型压缩往往是不可避免的步骤。导入后的模型可以进行剪枝、量化等优化操作,以降低模型的计算复杂度和内存占用。这些优化对于后续部署到嵌入式设备或实时系统中尤为关键。

此外,导入后的模型可以直接集成到 Simulink 中,与控制算法、信号处理模块或系统模型进行协同仿真,从而在统一的环境中完成模型验证。这种方式显著提高了工程开发的一致性和可复现性。

使用注意事项

需要注意的是,模型导入并不意味着所有模型都可以无缝转换。模型中使用的算子或结构必须被 MATLAB 工具链支持,否则可能需要在 Python 侧进行调整,例如修改网络结构或通过 ONNX 作为中间格式进行转换。因此,在实际工程中,模型导入通常是一个“迭代过程”,需要在模型设计和工程约束之间取得平衡。

小结

总体而言,模型导入的主要价值在于“工程化管理”。它使得模型不再依赖原始训练环境,而是成为可以被统一管理、分析和优化的工程组件,为后续部署打下基础。

方式 3:直接代码生成

与“先导入为 MATLAB 网络对象,再分析/优化/部署”的路径不同,直接代码生成强调的是:以外部模型文件为输入,直接进入代码生成与部署流程,从而缩短从训练模型到部署代码之间的链路。

无论在开发过程中使用的平台是 MATLAB 还是 PyTorch/TensorFlow,在模型已经完成训练和优化之后,最终的目标往往是将其部署到实际硬件平台上,例如嵌入式处理器、GPU 或 FPGA 设备。在这种情况下,仅仅能够在 MATLAB 或 Simulink 中运行模型是远远不够的,还需要生成高效、可移植的代码。这正是直接代码生成所解决的问题。

在最新版本 R2026a 的 MATLAB 中,可以直接从 PyTorch 导出的模型(如ExportedProgram)或 LiteRT 模型出发,在 MATLAB 和 Simulink 中完成代码生成,而不再必须经过模型导入为 MATLAB 网络对象的中间步骤。这种方式显著缩短了从模型到部署的路径,使得 Python 训练得到的模型可以更快速地进入工程交付流程。

直接代码生成所需的支持包

实现方式

在 PyTorch 侧,首先需要使用 torch.export 将训练完成的模型导出为 ExportedProgram。这种表示形式能够保留模型的计算图和输入输出规格,更适合作为后续代码生成的输入。

在 MATLAB 侧,可以使用 loadPyTorchExportedProgram 或 loadLiteRTModel 加载外部模型,并在 MATLAB 环境中执行推理与功能验证。完成模型接入后,再结合 MATLAB Coder、GPU Coder 或 Embedded Coder 生成面向目标平台的 C/C 或 CUDA 代码。这些生成的代码可以在目标硬件上独立运行,从而满足嵌入式系统对稳定性和可控性的要求。

在 Simulink 侧,这些外部模型也可以被接入到系统模型中,并与控制逻辑、信号处理或物理系统一起进行整体代码生成。例如,可以将用于电池 SOC 预测的 LiteRT LSTM 模型集成到 Simulink 中:

参考链接:https://ww2.mathworks.cn/help/coder/ug/integrate-and-generate-code-for-battery-state-of-charge-in-simulink-using-liteRT-block.html

主要应用场景

与联合执行相比,直接代码生成的一个重要特点是数据不再在MATLAB和Python之间来回传递,而是直接在生成的代码中完成计算。这避免了跨语言调用带来的性能开销,也减少了系统复杂性。

此外,MATLAB/Simulink提供了一整套工程验证能力,例如软件在环(SIL)和处理器在环(PIL),可以在代码生成后验证生成代码在目标平台上的行为是否与仿真一致。这对于确保系统可靠性和满足行业规范具有重要意义。

使用注意事项

需要强调的是,直接代码生成对模型结构有一定要求。例如,模型中不能包含动态控制流或不支持的算子,否则可能影响代码生成过程。因此,在模型设计阶段就需要考虑部署约束,或者在代码生成前对模型进行适当调整。

小结

总体来看,直接代码生成的主要价值在于“部署交付”。它将深度学习模型从软件原型转变为可以集成到产品中的实际代码,支撑后续产品化实现。

方式对比

联合执行和模型导入都可以让我们在 MATLAB 中与 PyTorch/TensorFlow 平台开发的模型进行互操作,而直接代码生成侧重于部署。以下是三种方式的对比:

总结

在实际工程中,联合执行、模型导入和直接代码生成是三种面向不同工程需求的实现方式。不同团队往往根据自身的开发目标、工具链选择以及模型特点,采用其中一种作为主要方式。

联合执行更适合在已有 Python 模型基础上快速完成系统验证,通常被用于算法评估或跨环境协同;模型导入则强调工程一致性,使模型能够纳入统一的工具链中进行分析、优化和集成;而直接代码生成则面向最终部署需求,将模型转化为可在目标硬件上运行的高效代码。

在具体项目中,选择哪种方式通常取决于多个因素,例如模型是否需要频繁迭代、团队主要使用的开发平台、是否涉及系统级仿真,以及最终是否需要部署到资源受限的硬件上。因此,这三种方式更像是相互补充的技术选项,而不是固定的三选一。

从整体上来看,通过 MATLAB 与 Python 的协同,可以为不同工程阶段和不同团队角色提供灵活的集成方式,使模型既能够保持原有开发效率,又能够顺利融入系统并支撑工程落地。

关于作者

陈宜欣,MathWorks中国

MathWorks 中国高级应用工程师,专注于数据分析、机器/深度学习和信号处理。帝国理工学院通信与信号处理专业硕士。加入 MathWorks 之前曾就职于华为,从事运动、生物信号处理和机器学习算法研发。

  • matlab matlab 关注

    关注

    190

    文章

    3038

    浏览量

    240442

免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。

如有疑问请发送邮件至:bangqikeconnect@gmail.com