深度学习

理解和使用深度学习网络

将TensorFlow模型引入MATLAB

以下是深度学习工具箱产品经理Shounak Mitra的一篇文章,在这里讨论使用TensorFlow和MATLAB的实用方法。

在释放R2021A中,TensorFlow模型的转换器作为支持TensorFlow 2模型金宝app导入到深度学习工具箱的支持包发布。

在这篇博客中,我们将探索如何使用TensorFlow模型的转换器,通过查看一个示例,我们将从TensorFlow导入一个ResNet50预训练模型到MATLAB,并执行以下操作:

  1. 可视化和分析网络
  2. 生成C / c++ / CUDA代码
  3. 将网络与Simulink集成金宝app

要将在TensorFlow 2中训练过的模型带入MATLAB,可以使用该函数importtensorflownetwork.,可以将模型及其权重导入MATLAB。(注:你也可以用importtensorflowlayers.从TensorFlow导入层)。

导入模型后,您可以使用它使用Simulink的更大系统来使用它进行预测,转移学习,代码生成或集成。金宝app

下面是将模型导入MATLAB后所能做的图示,我们将在本博客的其余部分讨论。

图1:将TensorFlow模型导入MATLAB后的通用工作流

将TensorFlow中的ResNet50模型导入MATLAB,对网络进行可视化分析

图2:TensorFlow界面显示了如何加载ResNet50模型并保存它

图2显示了如何在TensorFlow中访问和保存ResNet50模型。要将网络导入MATLAB,安装上述支持包并使用金宝appimporttensorflownetwork.函数如下。

导入Tensorflow网络输入MATLAB

路径= pwd;load(' classNames .mat') net_ResNet50 = importTensorFlowNetwork('ResNet50','OutputLayerType','classification','Classes',classNames)

图3:使用TensorFlow模型转换器将TensorFlow模型导入MATLAB

类名。mat是一个包含1000个ResNet50可以对图像进行分类的类的文件。这些包括,辣椒,键盘,鼠标,铅笔等。导入器将模型导入为有向无环图网络或包含179层的DAGNetwork,如图所示。接下来,我们将看看我们可以用这个导入的网络做什么。

1.可视化和分析网络

要了解网络,我们将使用深网络设计器应用程序可视化网络架构。加载应用程序,键入deepNetworkDesigner在命令行并从工作区加载网络。一旦导入应用程序,网络看起来像图4a。图层架构包含XIP连接,典型的RESET架构。您可以在此阶段使用此网络来传输学习工作流程。查看此视频以了解如何交互修改深度学习网络进行迁移学习.也可以单击分析应用程序中的按钮(图4B)并调查激活大小,看看网络是否具有错误的张量形状,错位连接等。

图4a: Deep Network Designer应用中的ResNet50架构

图4B:分析导入的网络以获取错误,并在架构中可视化架构中的关键组件 - 在ResET50的情况下跳过的连接。单击以获取较大的视图。

2.生成C / c++ / CUDA代码

我们的客户在导入模型后所采取的最常见的方法之一是生成针对不同硬件平台的代码。

在这个例子中,我们将生成CUDA代码,使用GPU编码器,瞄准cuDNN库只需3个简单的步骤。

步骤1:验证GPU环境

这完全检查了GPU代码生成所需的所有第三方工具。此处显示的输出是代表性的。你的结果可能有所不同。

envcfg = coder.gpuenvconfig('host');envcfg.deeplibtarget ='cudnn';envcfg.deepcodegen = 1;Envcf​​g.quiet = 1;Coder.CheckGpuInstall(Envcf​​g);

图5:验证GPU环境以确保所有必要的库都可用

步骤2:定义入口点函数

resnet50_predict.mentry-point函数接受图像输入,并使用导入的ResNet50模型对图像进行预测。该函数使用一个持久对象mynet加载系列网络对象并重用持久对象用于后续调用的预测。

函数out = resnet50_predict(in)% # codegen持久mynet;if isempty(mynet) mynet = coder.loadDeepLearningNetwork('resnet50.mat','net');结束输入通入= mynet.predict(的);

第3步:运行MEX代码生成

调用入口点函数并生成针对CUDNN库的C ++代码

生成CUDA代码resnet50_predict.m入口点函数,为MEX目标创建GPU代码配置对象,并将目标语言设置为C ++。使用coder.deeplearningconfig函数创建一个CuDNN深度学习配置对象,并将其赋给GPU代码配置对象的DeepLearningConfig属性。运行codegen命令并指定输入大小为[224,224,3]。该值对应ResNet50网络的输入层大小。

运行的墨西哥人
cfg = coder.gpuConfig(墨西哥人);cfg。TargetLang =“c++”;cfg。DeepLearningConfig = coder.DeepLearningConfig(“cudnn”);Codegen -config CFG resnet50_predict -args {ones(224,224,3)} -report

GPU Coder创建一个代码生成报告,提供了一个接口来检查原始的MATLAB代码和生成的CUDA代码。该报告还提供了一个方便的交互式代码跟踪工具,以映射MATLAB代码和CUDA。图6显示了运行中的工具的屏幕截图。

图6:生成代码生成的报告。点击查看详细信息。

在这个例子中,我们针对了CUDNN库。您还可以使用Intel和ARM CPU使用MATLAB编码器和FPGA和SOC使用深度学习HDL工具箱

3.将网络与Simulink集成金宝app

通常,深度学习模型被用作更大系统中的一个组件。金宝appSimulink通过对被测系统和物理工厂进行建模,帮助探索广泛的设计领域,在物理工厂中,您可以使用一个多域环境来模拟系统的所有部分的行为。在本节中,我们将看到如何将从TensorFlow导入的resnet50模型集成到Simulink中。金宝app

我们将在3个简单的步骤中将此模型与Simulink集成。金宝app但首先,将Reset50模型保存在Matlab的目录中。用保存('resnet50.mat','net')这样做。

步骤1:打开Simulin金宝appk和Access Library浏览器

  • 打开模型(金宝app类型金宝app(在命令窗口中),然后选择“Blank Model”

  • 单击库浏览器

第2步:添加Simulink块金宝app

  • 添加一个图像从文件块计算机视觉的工具箱库,并将文件名参数设置为pepper .png。这是我们将要在Simulink中使用resnet50模型进行分类的样本图像。金宝app

  • 预处理图像:我们需要添加几条预处理线,以确保网络按预期获取图像。要在Simulink中编写MATLAB代码,我们金宝app将使用MATLAB功能块。单击Simulink Canvas上的任意位金宝app置,然后从选项列表中输入,选择MATLAB函数。在MATLAB函数块中,我们将添加几行来翻转图像通道和调整图像大小。

    Function y = preprocess_img(img) img = flip(img,3);Img = imresize(Img, [224 224]);y = img;结束
  • 添加ResNet50型号:导航到深度学习工具箱——>深度神经网络在Simulink库浏览器中,并将“预测”块拖到Simulink模型画布上。金宝app

    双击预测块,将打开块参数对话框中选择“Network from MAT-file”选项网络下拉菜单如图所示。导航到保存了resnet50模型的位置并打开它。点击好的一旦你完成了。

图7:内置深层学习块可用于预测和分类

  • 添加一个输出来预测分数:接下来,单击Simulink画布上的任何位置并键入金宝app输出并选择第一个选项

图8

  • 连接块你所创造的。完成后,应该如下图所示。

图9

步骤3:运行模拟

一旦模拟成功运行,您绝对应该测试模拟输出是否正确地预测了甜椒图像。下面是模拟输出到图像上的预测。

图10

这是一个简单的例子,演示了您如何使用Simulink集成简单模型,但更大的系统更复杂。金宝app让我们使用自动驾驶汽车使用的算法之后的车道的示例。有许多组件使此应用程序成功:对象检测,传感器融合,加速度控制,制动,以及相当多的更多(见图11)。深度学习算法代表了更大系统的一个(但非常重要的)组件。它用于检测车道和汽车,深度学习系统需要在较大的系统内工作。下面是这样一个系统的图形表示,该系统执行高速公路车道。在图11中,只有“视觉检测器”是深度学习网络,系统中的其余部分执行其他任务,如控制和传感器融合。

我们没有过多讨论高速公路车道的例子但是如果你感兴趣的话,下面是文档示例的链接

图11:系统显示了一个典型的工厂是如何构建一个更大的系统的,其中许多组件彼此交互

结论

在这个博客中,我们学习了如何在AI生态系统中与TensorFlow和MATLAB合作,使用TensorFlow模型的转换器。我们看到了可以增强TensorFlow工作流的方法,通过转换器将TensorFlow训练过的模型引入MATLAB,并分析、可视化、模拟和生成网络代码。

接下来是什么

在下一篇博客中,我们将研究导入器为操作符和不支持转换为MATLAB深度学习工具箱的层自动生成自定义层的能力。金宝app

我们很乐意看到您使用Tensorflow Model转换器,并听到您的原因是从Tensorflow到Matlab中的模型。

|
  • 打印
  • 发送电子邮件

注释

请点击留下评论这里登录到你的MathWorks帐户或创建一个新的。