深度学习

理解和使用深度学习网络

从TensorFlow进口模型,PyTorch ONNX

下面的文章Sivylla Paraskevopoulou高级技术作家和大卫·威林汉产品经理深度学习工具。
如何导入模型中创建TensorFlow™或PyTorch™和转换成MATLAB代码?

首先,记住有不同的选项来处理深度学习模型在MATLAB。
  1. 使用模型中创建与深度学习MATLAB工具箱
  2. 从其他框架转化为MATLAB
  3. Co-executing与MATLAB模型与其他框架
这篇文章主要关注选项2,但是你可以看到这三个选项之间选择使用的好处这种比较表下面,并查看所有可用的模型直接导入MATLAB使用MATLAB深学习模型中心
它将一个模型有多复杂?在许多情况下,这很简单。在其他情况下,可能会有几个额外的步骤之前,成功地将一个第三方模型转化为MATLAB。这个博客的目的是提供指导如何操作这些步骤。
今天我们将介绍:
跟随一步一步在这篇文章中,这里下载代码:https://github.com/matlab-deep-learning/Image-Classification-in-MATLAB-Using-Converted-TensorFlow-Model

进口TensorFlow模型

重要的是要注意,有两个不同版本的TensorFlow模型可以进口:
  • TensorFlow 2.0, SavedModel格式使用
  • TensorFlow 1.0, HDF5格式使用
(TensorFlow 2.0支金宝app持HDF5和SavedModel格式,但建议SavedModel格式。)
在MATLAB将取决于您的工作流TensorFlow版本的模型得救了。

进口使用SavedModel TensorFlow模型格式
当TensorFlow 2.0(2019年9月),可用SavedModel介绍了格式,现在储蓄pretrained模型的首选方法。这是导入该模型格式的代码。
使用tf.keras.applications.resnet_v2.ResNet50V2实例化ResNet50V2模型。
ResNet50V2模型训练图像从ImageNet数据库。从SqueezeNet获得类名,这也是训练ImageNet图像。
squeezeNet = squeezeNet;一会= squeezeNet.Layers . class(结束);
通过使用进口ResNet50V2 SavedModel格式importTensorFlowNetwork函数。
网= importTensorFlowNetwork (“ResNet50V2”,…OutputLayerType =“分类”,…类=类名)
进口TensorFlow模型使用 HDF5 (Keras)格式
通过使用进口ResNet50V2 HDF5格式importKerasNetwork函数。
网= importKerasNetwork (“ResNet50V2.h5”,…OutputLayerType =“分类”,…类=类名)
软件会抛出一个警告Keras版本的导入的模型。每个文档页面的导入和导出功能,有一个限制部分支持TensorFlow或者ONNX™版本。金宝app例如,请参见importTensorFlowNetwork的局限性
提示:即使你可以成功导入ResNet50V2importKerasNetworkimportTensorFlowNetwork,我建议使用importTensorFlowNetwork。原因变得明显时,进口与层不支持更复杂的模型转换成内置MATLAB层,见下一节。金宝app

进口更多的复杂的TensorFlow模型

本节展示如何导入TensorFlow模型PNASNetLargeV4与ResNet50V2,包含一个复杂的特征向量层。这一层不能直接转换成一个内置的MATLAB层,所以你需要一个自定义层。好消息是,MATLAB将为您autogenerate定制层
PNASNetLargeV4模型,Python®中运行这段代码。你可以找到的代码https://tfhub.dev/google/imagenet/pnasnet_large/feature_vector/4
进口tensorflow一样tf进口tensorflow_hub = tf.keras中心模型。顺序([hub.KerasLayer (" https://tfhub.dev/google/imagenet/pnasnet_large/feature_vector/4 ",可训练的= True), tf.keras.layers。密度(1000年,激活= ' softmax '))模型。构建([没有,331、331、3])
PNASNetLargeV4模型训练图像从ImageNet数据库。
导入使用 HDF5 (Keras)格式(不推荐)
进口PNASNetLargeV4时,软件不能一些TensorFlow层转化为等价的内置MATLAB层。
首先,试着导入模型HDF5格式使用importKerasNetwork函数。
网= importKerasNetwork (“PNASNetLargeV4.h5”,…OutputLayerType =“分类”,…类=类名)
建议使用的错误消息importKerasLayers导入网络体系结构。importKerasLayers将进口模型作为层图,一层一层的占位符。您必须手动替换占位符层使用网络预测或再培训网络。你可以换一个占位符与手写的层(层文档的例子:组装网络从Pretrained Keras层)或functionLayer (文档的例子:替换不支持Keras层和功能层金宝app)。

进口使用SavedModel格式(推荐)

或者,您可以使用importTensorFlowNetwork函数。它不同于Keras等价的因为它有独特的功能;它可以autogenerate定制层。在导入期间,importTensorFlowNetwork生成自定义层的TensorFlow层不支持转换成内置MATLAB层。金宝app
网= importTensorFlowNetwork (“PNASNetLargeV4”,…OutputLayerType =“分类”,…类=类名)
提示:快速检查自定义层是为您生成检查导入过程中创建的包。如PNASNetLargeV4,导入函数生成一个大型定制层(kKerasLayer2Layer29666.m):

如果没有SavedModel版本的模型,只是HDF5 ?

在这种情况下,我建议,试图从HDF5 TensorFlow模型转换为模型格式保存。在大多数情况下,这是执行转换的方法从内部TensorFlow:
然而,您可能会遇到一个用例,需要“模型手术”。例如,如果一个不支持的层是用旧版本,你试图金宝app挽救它在新的SavedModel版本中,TensorFlow可能会抛出一个错误说明它不知道如何转换模型。在这种情况下你必须做以下之一:
  1. 手动重新编码层新TensorFlow SavedModel格式将模型导入MATLAB之前。
  2. 旧的模型导入MATLAB使用importKerasLayers。它将创建一个占位符层代替自定义层,该软件不能进口。然后,在MATLAB您手动重新编码层。
这两种选择都需要你写层TensorFlow(选项1)或MATLAB(选项2)。

进口PyTorch模型

目前,深度学习工具箱不支持导入模型直接从PyTorch;金宝app然而,你可以通过ONNX导入模型。

首先,您需要将PyTorch模型ONNX模型格式遵循指令出口模型从PyTorch ONNX。然后,您可以通过使用ONNX模型导入MATLABimportONNXNetwork。在这里,我们向您展示如何导入squeezenet。onnx模型PyTorch模型中你还可以找到动物园。
网= importONNXNetwork (“squeezeNet.onnx”);
importONNXNetwork函数也可以生成自定义层当软件不能ONNX运营商转换成等价的内置MATLAB层。导入shufflenet-9。onnx模型自动生成自定义层。默认情况下,importONNXNetwork返回一个DAGNetwork对象准备用于预测。
网= importONNXNetwork (“shuffleNet - 9. onnx PackageName =“shuffleNet”);
importONNXNetwork保存自定义层包+ shuffleNet,在当前文件夹,类似importTensorFlowNetwork
您还可以导出一个训练有素的深度学习工具箱网络ONNX模型格式使用exportONNXNetwork函数。
exportONNXNetwork(净,“myNet.onnx”)

例子:进口复杂TensorFlow图像分类模型

这个例子展示了如何导入一个pretrained TensorFlow SavedModel格式的模型,并使用进口网络分类图像。TensorFlow模型包含层不支持转换成内置MATLAB层。金宝app软件自动生成自定义层当你进口这些层。

进口Pretrained TensorFlow模型

使用tf.keras.applications.efficientnet_v2.EfficientNetV2L实例化EfficientV2L模型。
EfficientNetV2L模型训练图像从ImageNet数据库。从SqueezeNet获得类名,这也是训练ImageNet图像。
squeezeNet = squeezeNet;一会= squeezeNet.Layers . class(结束);
模型导入TensorFlow EfficientNetV2L SavedModel格式使用importTensorFlowNetwork函数。指定输出层类型的图像分类问题。
网= importTensorFlowNetwork (“EfficientNetV2L”,…OutputLayerType =“分类”,…类=类名);
找到自动生成自定义层。
PackageName = ' + EfficientNetV2L ';s =([什么”。\ ' PackageName]);%’印第安纳州= 0(1、长度(小);i = 1:长度(net.Layers) j = 1:长度(小)如果strcmpi(类(net.Layers(我),(PackageName(2:结束)”。“s.m {j (1: end-2)])印第安纳州(j) =我;端端端显示器(印第安纳州)
印第安纳州= 2
显示器(net.Layers(印第安纳州))
分析了进口网络。
analyzeNetwork(净)

正如所料,进口网络,其中包含自动生成自定义层,显示了网络分析仪没有警告或错误。这意味着进口预测网络已经可以使用了。

阅读和输入图像进行预处理

TensorFlow提供了tf.keras.applications.efficientnet_v2.preprocess_input方法预处理图像EfficientNetV2L模型的输入数据。在这里,我们复制输入预处理通过调整,重新调节,输入图像正常化。
读你想要的图像分类和显示图像的大小。792————1056像素图像和有三个颜色通道(RGB)。
我= imread (“peacock.jpg”);大小(Im)
调整图像的输入规模网络。
InputSize = net.Layers (1) .InputSize;我= imresize (Im, InputSize (1:2));
输入EfficientNetV2L需要进一步的预处理。重新调节图像。标准化图像训练图像减去均值和标准差除以训练图像。找到您应该使用的值,明白了https://github.com/keras-team/keras-applications/blob/master/keras_applications/imagenet_utils.py
ImProcessed =重新调节(Im 0 1);meanIm = (0.485 0.456 0.406);stdIm = (0.229 0.224 0.225);ImProcessed = (ImProcessed-reshape (meanIm [1 1 3]))。/重塑(stdIm [1 1 3]);

使用进口网络分类图像

使用进口网络分类的图像。显示图像的分类标签。
标签=分类(净,Im);imshow (Im)标题(strcat(“预测标签:“字符串(标签)))

您还可以使用导入的网络预测块的深度学习工具箱,在仿真软件对图像进行分类。金宝app例如,看到前面的帖子:将TensorFlow模型引入MATLAB。进口的网络包含自动生成自定义层并不妨碍在仿真软件建模。金宝app

总结

互操作性与深度学习框架,比如TensorFlow PyTorch,使您能够在MATLAB和Simulink做更多。金宝app它给了MATLAB的灵活性,充分利用生态系统和集成开源社区开发的资源。它还使您能够结合工作流程,包括数据预处理、模型调优,压缩模型,模型集成,自动代码生成模型在MATLAB开发。
比较的功能在MATLAB处理深度学习模型
能力 模型创建使用深度学习工具箱 模型转换从其他框架 Co-Execution
在MATLAB集成了前后处理
只需要安装的产品下载188bet金宝搏
金宝app从MATLAB支持调试
推理在MATLAB和Simulink的表现金宝app
可用MATLAB应用实例
不需要重新格式化数据类型转换和数据
覆盖范围为嵌入式代码生成MATLAB编码器,GPU编码器&深度学习HDL工具箱
不需要额外的库的独立部署MATLAB编译器
在一行代码中访问畅销车型
从TensorFlow和PyTorch访问开源模型
大部分支持金宝app
有限的支持金宝app
不支持金宝app

更多关于支持包金宝app

你必须支持包运行深度学习工具金宝app箱的导入和导出功能。如果支持包没有金宝app安装,每个函数提供一个下载链接到对应的包在扩展浏览器的支持。推荐的做法是下载支持包的默认位置的MATLAB版本运行。金宝app你也可以直接从文件交换下载包的支持。金宝app
表:支持包需要金宝app运行导入和导出功能。
金宝app支持包 功能
深度学习工具箱转换器TensorFlow模型 importTensorFlowNetworkimportTensorFlowLayersimportKerasNetworkimportKerasLayers
深度学习工具箱ONNX模型格式转换器 importONNXNetworkimportONNXLayersimportONNXFunctionexportONNXNetwork
表:比较高级特性的三个功能,可以导入深度学习网络。
importTensorFlowNetwork importKerasNetwork importONNXNetwork
金宝app支持TensorFlow ✅* ✅* *
金宝app支持PyTorch
金宝app支持自定义层的自动生成
*目前支持TensorF金宝applow版本2.0 - -2.6(全面测试)。在大多数情况下,模型保存在新TensorFlow版本也可输入的。需要深度学习工具箱转换器TensorFlow模型
2.2金宝app.4 * *支持TensorFlow-Keras版本,有限的支持版本经过2.2.5测试盒框。需要深度学习工具箱转换器TensorFlow模型
每月更新软件的支持包。金宝app这些月度更新包括新的层支持导入和导出,更新TensorFlow和ONNX版本支持,和bu金宝appg修复。主要功能与通用版本发布。




发表与MATLAB®R2020b

|
  • 打印
  • 发送电子邮件

评论

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