基于Simulink的NVIDIA gpu深度学习:心电信号分类
学习如何使用GPU Coder™与Simulink®设计、验证并将您的深度学习应用程序部署到NVIDIA Jetson上®董事会。了解如何使用高级信号处理和深度神经网络对心电信号进行分类。在切换到桌面GPU加速之前,通过在桌面CPU上运行模拟来启动工作流。一旦模拟完成并且结果满足您的要求,在桌面GPU上使用软件在环测试,在Jetson板上使用处理器在环测试,以数值验证生成的CUDA®代码结果与Simulink仿真相符。最后,将完整的应用程序作为优化的CUDA代码部署到Jetson板上。
在这个演示中,我们使用深度学习对心电图数据进行分类,以确定一个人是否患有心律失常或充血性心力衰竭。我们使用预先训练的深度学习网络和Simulink执行分类,然后生成并将完整的应用程序部署到Jetson板上。
本例的工作流包含四个部分。首先,我们将在CPU上运行桌面模拟,然后使用桌面和媒体GPU加速它。然后,我们将通过在桌面GPU上运行软件在环测试来验证生成的代码。我们将更进一步,通过在Jetson板上执行处理器在循环测试来验证生成的目标代码。最后,我们采用一个完整的应用程序,生成CUDA代码并在Jetson AGX Xavier上运行。
让我们快速浏览一下Simulink模型。有多个子系统,所以从左边开始,输入数据是从心律失常、充血性心力衰竭和正常窦性心律的患者获得的心电图数据。心电预处理子系统对输入数据、输出图像和时频表示进行连续小波变换。然后对这些图像进行处理并输入预先训练的网络对心电波形进行分类。
为了使用深度学习网络和Simulink,我们可以使用深度学习库中的块或增强的MATLAB函数块。对于本例,我们使用图像分类器块来表示预先训练的SqueezeNet。心电后处理子系统根据SqueezeNet的预测评分为心电信号寻找标签,输出印有标签和置信度评分的标度图图像。
让我们继续并开始模拟。我们目前正在CPU上运行模拟,我们可以看到SqueezeNet能够对数据进行分类,并显示置信度分数。执行时间约为9.2秒。我们可以使用桌面和视频GPU来加速模拟。在仿真目标端的配置设置中,选中“GPU加速”复选框,将深度学习目标库设置为“cuDNN”。通过这些设置,Simulink将识别并运行Simulink模型的部分内容,包括GPU上的深度学习网络。
让我们继续运行模拟。我们看到了和以前一样的结果,但是速度有了很大的提升。使用GPU的执行时间约为2.6秒,比仅使用CPU快3倍左右。现在我们对模拟结果很满意,让我们开始在硬件上部署算法。
我们可以做的第一步是从数字上验证生成的代码的行为是否与模拟的行为相匹配。为此,我们将运行软件在循环测试。让我们首先将预处理、预训练深度学习网络和后处理部分分组到一个子系统中。这将使运行SIL更容易。
要执行软件在环测试,请转到硬件实现选项卡和配置设置,将硬件板设置为none,并设置设备详细信息以匹配您的主机。在我们的示例中,主机具有64位Intel处理器。要创建包含生成CUDA代码的单元格块,请进入生成设置并启用生成GPU代码复选框。然后导航到代码生成下的验证选项卡,并在高级参数下,将创建块选项设置为SIL。
让我们继续为包含预先训练的网络的子系统生成CUDA代码。构建过程是成功的,并且在模拟期间创建了一个SIL块。SIL块将生成的CUDA代码作为单独的进程在Intel处理器和桌面GPU上运行。现在,让我们
将这个SIL块与以前的Simulink模型合并,该模型带有NVIDIA子系统,以便与桌面模拟进行比较。在使用SIL设置模拟Simulink模型时,我们看到分类结果与桌面模拟相匹配。
在验证了主机CPU和GPU上生成的代码之后,让我们进入下一个步骤,在NVIDIA Jetson板上验证生成器目标代码。要运行处理器在环测试,请转到硬件实现选项卡和配置设置,并将硬件板设置为NVIDIA Jetson。从那里,在目标硬件资源下,指定单板参数,如设备地址,用户名和密码,以便Simulink可以访问它。要创建包含生成的目标CUDA代码的PIL块,导航到代码生成设置下的验证选项卡。在高级参数下,将创建块下拉框设置为PIL。
配置了这些设置之后,让我们构建并部署到Jetson板上。我们可以看到部署过程是成功的,并且创建了一个PIL块。在模拟过程中,PIL块下载并运行目标硬件上的目标代码。现在让我们将这个PIL块与前面的Simulink模型结合起来。在使用PIL块模拟Simulink模型时,我们看到完整的应用程序运行在Jetson上,并且结果与桌面模拟和SIL模式相匹配。
现在我们已经在主机和目标上验证了生成的代码,我们只能将完整的应用程序重新定位到NVIDIA Jetson板上进行独立执行。在生成代码时,我们可以设置GPU CUDA使用NVIDIA的优化库来获得最佳性能。在深度学习网络中,cuDNN和TensorRT都被支持。对于算法的其余部分,将自动使用cuBLAS、cuFFT、cuSOLVER和其他CUDA库。
让我们在示例中使用默认设置。将硬件板设置为NVIDIA Jetson,并将构建配置设置为构建和运行,让我们继续并单击构建、部署和启动按钮。在这里,您可以看到来自诊断查看器的输出,显示我们已经编译了应用程序,并且它正在Jetson Xavier上运行。这里的SDL视频显示来自Jetson板的输出流。我们可以看到,显示的结果与仿真结果相吻合。
快速回顾一下我们在心电信号分类例子中所遵循的工作流程。我们从CPU上的桌面模拟开始,并展示了如何使用桌面GPU加速它。然后,通过执行软件在环测试,我们在桌面CPU和GPU上验证生成的网络代码。我们还运行了处理器在循环测试,以验证在Jetson板上生成的目标代码。最后,我们以独立执行模式将完整的分类应用程序部署到Jetson,并观察输出。
您可以执行类似的工作流程,使用Simulink中的GPU CUDA来验证和部署深度学习应用程序。欲了解更多信息,请查看下面的链接。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。