基于NVIDIA gpu的Simulink深度学习:心电信号分类
学习如何使用GPU Coder™与Simulink®设计、验证并将深度学习应用程序部署到NVIDIA Jetson上®董事会。了解如何使用高级信号处理和深度神经网络对心电信号进行分类。在切换到桌面GPU加速之前,通过在桌面CPU上运行模拟来启动工作流。一旦模拟完成并且结果满足您的要求,在桌面GPU上使用软件在环测试,在Jetson板上使用处理器在环测试,以数值验证生成的CUDA®代码结果与Simulink仿真相匹配。最后,将完整的应用程序作为优化的CUDA代码部署到Jetson板上。
在这个演示中,我们使用深度学习对ECG数据进行分类,以确定一个人是否患有心律失常或充血性心力衰竭。我们使用预先训练好的深度学习网络和Simulink进行分类,然后生成完整的应用程序并将其部署到Jetson板上。
本例的工作流有四个部分。首先,我们将在CPU上运行桌面模拟,然后使用桌面和媒体GPU加速它。然后,我们将通过在桌面GPU上运行软件在循环测试来验证生成的代码。我们将通过在Jetson板上执行处理器在循环测试来进一步验证生成的目标代码。最后,我们采用一个完整的应用程序,生成CUDA代码并在Jetson AGX Xavier上运行。
让我们快速看一下Simulink模型。有多个子系统,所以从左边开始,输入的数据是心律失常、充血性心力衰竭和正常窦性心律患者的心电数据。心电预处理子系统对输入数据、输出图像和时频表示进行连续小波变换。然后对这些图像进行处理并输入到预先训练好的网络中,以对ECG波形进行分类。
为了使用深度学习网络和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块与以前的带有NVIDIA子系统的Simulink模型合并,以便于与桌面模拟进行比较。在用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国家站点没有针对您所在位置的访问进行优化。