本页面使用了机器翻译。
请花 1 分钟时间完成一个翻译质量的调查。
实施在工业自动化 PLC 上部署和集成深度学习网络的工作流程
作者 : Fabian Bause 博士和 Nicolas Camargo Torres,Beckhoff Automation GmbH & Co. KG
“这里描述的工作流程的一个关键优势是它使团队能够通过快速迭代来评估权衡决策。例如,在我们的质量控制应用中,我们用一些分类准确性来换取网络规模和执行时间的减少。”
在工业自动化领域,机器学习具有许多潜在的应用。例如,基于视觉的分类器可以评估成品的质量,在将部件组装到组件之前识别出可能有缺陷的部件,或者对容易出现显著自然变化的水果和蔬菜进行分类。尽管使用传统的计算机视觉技术构建其中一些应用程序可能是可能的,但深度学习等人工智能的出现正在推动视觉检查的自动化。
然而,工程团队在将 AI 模型部署到 PLC 或工况机时经常遇到困难。因此,他们没有将控制和深度学习算法集成到一个系统中,而是使用单独的系统,这会导致更高的延迟以及部署和维护成本。团队遇到的另一个挑战源于所需的不同技能:迄今为止,数据科学和工业控制工作流程的共同点相对较少。
Beckhoff Automation 团队实施了一种新的工作流程,结合了 MATLAB® 工具和 Beckhoff 自动化产品实现低代码设计和 AI 模型训练,并简化这些模型在工业目标上的部署和集成。我们与 MathWorks 工程师合作开发了此工作流程,并在涉及六角螺母目视检查的示例质量控制应用上进行了演示(图 1)。虽然这个简单的应用程序将六角螺母分类为有缺陷或无缺陷,展示了一个简单的用例,但工作流中的步骤可用于加速更为复杂的应用程序的开发和部署。
图 1. 使用 AI 模型来检查六角螺母质量的质量控制应用。
这些步骤是:
- 使用 Deep Learning Toolbox™ 在 MATLAB 中设计、训练和优化深度学习模型 - 或从 PyTorch® 或 TensorFlow™ 等其他机器学习框架导入模型。
- 使用 MATLAB Coder™ 和 TwinCAT Target for MATLAB 从模型创建编译的 TwinCAT® 对象(编译后的 TwinCAT 对象除了深度学习模型之外,还可以包含预处理代码和后处理代码)。
- 在 TwinCAT 3 Engineering 中调用 TwinCAT 对象进行分类或预测。将其与在同一 PLC 上运行的其他功能或组件集成。
除了这些核心步骤之外,我们的演示工作流程还包括两个额外的补充步骤:
- 使用 Simulink® 和 Stateflow® 设计控制算法。使用 Simulink Coder™ 和 TwinCAT 3 Target for Simulink 从该控制模型创建 TwinCAT 对象。
- 使用 MATLAB App 设计工具 设计人机界面 (HMI),使用 TwinCAT 3 Interface for MATLAB and Simulink 在 MATLAB 和 TwinCAT 运行时环境之间交换数据。
使用预训练网络进行迁移学习
收集和准备好用于深度学习应用程序的数据后,工作流程的第一步是训练深度学习模型。利用 MATLAB 和 Deep Learning Toolbox,有多种方法可以实现这一点,包括使用 Deep Network Designer 应用程序从头开始训练网络、将深度学习模型定义为函数并使用自定义训练循环,或者使用新数据重新训练预训练模型(也称为迁移学习)。如果存在少量异常数据,Automated Visual Inspection Library for Computer Vision Toolbox™ 中包含的 FCDD 和 PatchCore 等异常检测方法也是有效的。
对于六角螺母示例应用,我们选择使用迁移学习,重新训练卷积神经网络来对一组六角螺母图像进行分类。具体来说,我们将预训练的 ResNet-18 和 SqueezeNet 网络加载到 MATLAB 中,然后重新训练它们以对六角螺母图像进行分类(图 2)。
图 2. 使用 Deep Learning Toolbox 训练深度学习网络对新图像进行分类。
虽然 ResNet-18 网络具有很高的准确性,但它比 SqueezeNet 网络大一个数量级且速度慢,后者的准确性稍差,但对于当前的使用案例来说仍然足够准确。此外,考虑到 PLC 时间预算为 300 毫秒,我们发现 ResNet-18 无法满足我们的要求,因此我们转向 SqueezeNet。我们通过修剪卷积层的过滤器进一步提高了该网络的性能并减小了其尺寸。这次修剪仅导致准确率下降 7%,但速度却提高了一倍。快速评估不同网络和网络压缩选项的能力对于需要在准确性、速度和大小方面做出权衡决策的团队来说是一个显著的优势。
构建已编译的 TwinCAT 对象并将其集成到 TwinCAT 3 Engineering 中
从 MATLAB 函数(在本例中是调用深度学习模型的函数)创建 TwinCAT 对象是一个两步过程。第一步是使用 MATLAB Coder 为该函数生成 C/C++ 代码。第二步,使用 TwinCAT Target for MATLAB 将生成的代码编译为 TwinCAT 对象。编写脚本来执行这两个步骤可以实现工作流程的这一部分自动化(图 3)。当对深度学习网络进行任何更改时,团队只需重新运行该脚本并立即生成更新的 TwinCAT 对象。
图 3. 生成用于构建 TwinCAT 对象的 C/C++ 代码。
这里值得注意的是,还有另一种途径可以将 MATLAB 中的深度学习网络部署到 Beckhoff PLC。通过这种方法,团队可以从 MATLAB 导出 ONNX 文件,并将该文件加载到 TwinCAT 3 中,然后将其与推理引擎一起使用 (TwinCAT Machine Learning Server) 执行分类或回归任务——甚至可以选择在 GPU 上计算模型。我们的工作流程中的方法(基于 MATLAB Coder 和 TwinCAT Target for MATLAB)相对于其他方法的一个优势是,它可用于包含在 MATLAB 中实现的额外的预处理和后处理功能。采用 ONNX 导出方法,仅部署网络本身。
一旦 TwinCAT 对象被编译,它就可以像任何其他对象一样在 TwinCAT Engineering 中使用。自动化工程师可以将深度学习模型(现在作为 TwinCAT 对象实现)与其他 PLC 代码(包括结构化文本)集成。例如,在我们的示例应用程序中,我们编写了调用编译对象的代码,并将从相机捕获的图像(调整大小并转换为像素矩阵)传递给它。然后,代码处理分类器的输出,其中包括预测结果(六角螺母正常或有缺陷)和反映结果置信度的概率分数(图 4)。
运动控制设计和部署
为了完成我们的示例质量控制应用程序设计,我们需要一个伺服电机控制系统,用于将六角螺母定位在摄像机的视野范围内。虽然我们可以在 TwinCAT 工程中直接实现该控制系统,但我们借此机会使用基于模型的设计,同时针对分类器部署中使用的相同 Beckhoff PLC。我们首先使用 Stateflow 在 Simulink 中对运动控制器进行建模。接下来,在运行仿真以验证设计之后,我们使用 Simulink Coder 从我们的模型生成 C/C++ 代码,然后使用 TwinCAT 3 Target for Simulink 将代码编译为 TwinCAT 对象。然后,我们可以在 TwinCAT 工程中将该对象可视化,并将其与我们设计的其他元素集成(图 5)。
使用 MATLAB App 设计工具和 TwinCAT Interface for MATLAB 进行 HMI 设计
在大多数工业自动化用例中,都会提供 HMI 来使操作员能够监视和控制设备、查看实时数据、接收警报和管理生产流程。为了为我们的示例质量控制应用程序创建 HMI,我们首先使用 MATLAB App 设计工具设计用户界面:。操作员可以通过界面控制六角螺母的运动,以及查看当前位于摄像机下方的六角螺母,查看深度学习网络的结果(包括分类和概率分数),并监控基准,包括分类器的执行时间(图6)。用户界面和 PLC 运行环境之间的所有数据交换均通过 TwinCAT 3 Interface for MATLAB and Simulink 进行,该接口使用自动化设备规范 (ADS) 通信协议。
未来迭代
这里描述的工作流程的一个关键优势是它使团队能够通过快速迭代来评估权衡决策。例如,在我们的质量控制应用程序中,我们用一些分类准确性来换取网络规模和执行时间的减少。如果设计要求仍然需要更低的延迟,我们可以通过修改网络来寻求进一步的改进,或者选择具有更高性能级别的组件和处理器的 PLC。
还可以扩展此工作流程以满足特定的项目要求。其中一个扩展就是使用深度神经网络的分类结果来影响控制系统。虽然我们构建的特定质量控制演示器不需要这样做,但控制系统根据分类结果采取一些立即行动的能力广泛应用于广泛的工业自动化用例,并且对于许多采用此工作流程的团队来说,这将是自然而然的下一步。
2024 年发布