深度学习

理解和使用深度学习网络

将张量流模型引入MATLAB

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

在释放R2021a,一个用于TensorFlow模型的转换器作为支持导入TensorFlow 2万博1manbetx模型到深度学习工具箱的支持包发布。

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

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

要将在TensorFlow 2中训练的模型引入MATLAB,可以使用该函数importTensorFlowNetwork,它允许您将模型及其权重导入MATLAB。(注:也可以用importTensorFlowLayers从TensorFlow导入图层)。

一旦您导入模型,您就可以使用它进行预测、迁移学习、代码生成或使用Simulink与更大的系统集成。万博1manbetx

下面是将模型导入MATLAB后可以做什么,我们将在本博客的其余部分讨论。

图1:将TensorFlow模型导入MATLAB后的常见工作流程

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

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

图2显示了如何在TensorFlow中访问和保存ResNet50模型。将网络导入到MATLAB中,安装上述支持包并使用万博1manbetximportTensorFlowNetwork函数如下。

导入张量流网络输入MATLAB

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

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

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

1.可视化和分析网络

为了理解网络,我们将使用Deep network Designer应用程序来可视化网络架构。要加载应用程序,输入deepNetworkDesigner在命令行中,并从工作区加载网络。一旦导入到应用程序中,网络如图4a所示。层架构中包含了跨连接(skip-connections),这是典型的ResNet架构。在这个阶段,您可以使用这个网络进行迁移学习工作流。看看这个视频来学习怎么做交互式地修改用于迁移学习的深度学习网络.你也可以点击分析按钮(图4b),并调查激活大小,看看网络是否存在错误,如不正确的张量形状,错位的连接等。

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

图4b:分析导入的网络中的错误,并可视化架构中的关键组件——在resnet50的情况下跳过的连接。单击查看大图。

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

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

在这个例子中,我们将生成CUDA代码GPU编码器,目标cuDNN库在3个简单步骤。

步骤1:GPU环境验证

这将对GPU代码生成所需的所有第三方工具进行全面检查。这里显示的输出具有代表性。结果可能会有所不同。

envCfg = coder.gpuEnvConfig('主机');envCfg。DeepLibTarget =“cudnn”;envCfg。DeepCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);

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

步骤2:定义入口点功能

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

Function out = resnet50_predict(in)% # codegen持久mynet;如果是空的(mynet) mynet = code . loaddeeplearningnetwork ('resnet50.mat','net');结束输入通过率= mynet.predict(的);

步骤3:运行MEX代码生成

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

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

运行的墨西哥人
cfg = coder.gpuConfig(墨西哥人);cfg。TargetLang =“c++”;cfg。DeepLearningConfig = coder.DeepLearningConfig(“cudnn”);/ /配置CFG的renet50_predict

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

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

在这个例子中,我们的目标是cuDNN库。您也可以针对英特尔和ARM cpu使用MATLAB编码器fpga和soc的使用深度学习HDL工具箱

3.将网络与Simulink集成万博1manbetx

通常,深度学习模型被用作更大系统中的一个组件。万博1manbetxSimulink通过建模被测试的系统和物理工厂来帮助探索广阔的设计空间,在那里您可以使用一个多域环境来模拟系统的所有部分的行为。在本节中,我们将看到从TensorFlow导入的resnet50模型如何集成到Simulink中。万博1manbetx

我们将通过3个简单的步骤将这个模型与Simulink集成。万博1manbetx但首先,将Resnet50模型保存在MATLAB中的目录中。使用保存(“resnet50.mat”、“净”)这样做。

步骤1:打开Simulin万博1manbetxk并访问库浏览器

  • 打开模型(万博1manbetx类型万博1manbetx在命令窗口),并选择“空白模型”

  • 点击图书馆浏览器

步骤2:添加Simulink块万博1manbetx

  • 添加一个图像从文件块计算机视觉的工具箱库,并将“文件名”参数设置为“pepper .png”。这是我们将要使用Simulink中的resnet50模型进行分类的示例图像。万博1manbetx

  • 预处理图像:我们需要添加一些预处理线,以确保网络得到预期的图像。在Simulink中编写MATLAB代码,我们将万博1manbetx使用MATLAB函数块。单击Simulink画布上的任何位置,并从选万博1manbetx项列表中输入,选择MATLAB函数。在MATLAB函数块中,我们将添加几行来翻转图像通道和调整图像的大小。

    Function y = preprocess_img(img) img = flip(img,3);Img = imresize(Img, [224 224]);y = img;结束
  • 添加ResNet50模型:在Simulink库浏览器中导航到Deep Learning Toolbox—> Deep Neural Networks,万博1manbetx并将“Predict”块拖到Simulink模型画布上。

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

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

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

图8

  • 连接块到目前为止。一旦完成,它应该看起来像下面的图。

图9

步骤3:运行模拟

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

图10

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

下面这个例子我们并没有讨论太多关于高速公路的问题但是如果你感兴趣的话,下面是文档示例的链接

图11:系统显示了构建一个更大的系统时一个典型的工厂是什么样子的,其中许多组件相互作用

结论

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

接下来是什么

在下一篇博客中,我们将介绍导入器自动生成操作符自定义层的能力,以及不支持将其转换为MATLAB深度学习工具箱内建层的层。万博1manbetx

我们很乐意看到你们使用TensorFlow模型转换器,并听到你们将TensorFlow模型引入MATLAB的原因。

|
  • 打印
  • 发送电子邮件

评论

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