人工智能

应用机器学习和深度学习

从MATLAB快速研究PyTorch模型

以下文章来自Sivylla ParaskevopoulouMathWorks的产品营销经理Yann r, MathWorks的产品经理。
这篇博文讨论了MATLAB、PyTorch®和TensorFlow™如何一起使用。
深度学习模型通常存在于一个完整的人工智能系统中,这可能涉及准备数据、构建模型、设计运行模型的系统,以及部署到硬件或生产中。MATLAB提供的工具可以帮助您完成AI系统设计的每一步。
你可以得到一个预先训练好的深度学习模型MATLAB深度学习模型枢纽,或来自TensorFlow, PyTorch或ONNX™存储库。我们将在这里展示如何在不离开MATLAB环境的情况下快速比较PyTorch图像分类模型。
图:为了找到正确的PyTorch模型,在现有的工作流中添加了一个额外的步骤
我们的图像分类工作流程包括加载和预处理图像,从PyTorch导入图像分类模型,并使用导入的网络预测图像标签。该工作流在文档示例中给出从PyTorch导入网络并分类图像
让我们假设分类器模型最重要的选择因素是模型的预测速度。的torchvision.models仅图书馆就有12个模型可供选择。为我们的比较测试导入这12个模型是相当麻烦的。我们将在这里向您展示如何从MATLAB调用PyTorch,在多个PyTorch模型上快速运行推理速度测试。
在这篇博文中,我们不会向你展示每一步的所有细节。您可以在这里找到详细的示例从MATLAB调用Python比较PyTorch模型进行图像分类.相反,在这里,我们将专注于探索带有MATLAB协同执行的PyTorch模型的关键要点。

预处理图像

读取要分类的图像。将图像大小调整为网络的输入大小。
imgOriginal = imread("banana.png");InputSize = [224 224 3];img = imresize(imgOriginal,InputSize(1:2));
你必须以与训练数据相同的方式预处理图像。有关更多信息,请参见输入数据预处理
重新缩放图像。然后,通过减去训练图像的均值,除以训练图像的标准差,对图像进行归一化。
imgProcessed = rescale(img,0,1);meanIm = [0.485 0.456 0.406];stdIm = [0.229 0.224 0.225];imgProcessed = (imgProcessed -重塑(meanIm,[1 1 3]))。/重塑(stdIm,[1 1 3]);
从“深度学习工具箱”的维序排列图像数据(HWCN)到PyTorch维度排序(NCHW),H是图像的高度,W是图像的宽度,C是通道数,和N是观测的数量。这是使用PyTorch模型使用图像进行预测的必要步骤(在将其导入MATLAB之前)。
imgForTorch = permute(img,[4 3 1 2]);
有关不同深度学习平台的输入维度数据排序的更多信息,请参见输入尺寸排序
外卖:
  1. 用于预测的数据预处理必须与训练数据预处理相匹配。
  2. 将数据从MATLAB排列到PyTorch维度,以使用带有PyTorch模型的输入数据。

安装Python和库

您的桌面上可能安装了多个版本的Python。例如,一台MacBook预装了Python 2.7版本,这可能不是你想要使用的版本。因此,为您的项目创建一个虚拟环境来控制您正在使用的Python版本和库是一个很好的实践。
下面的命令显示如何在MacBook上设置虚拟环境。如果您使用的是Windows计算机,命令可能略有不同。
进入你的工作文件夹。创建并激活Python虚拟环境env在你的工作文件夹中。
Python3.10 -m venv env source env/bin/activate
为本例安装必要的Python库。检查库的安装版本。
python3 -m PIP显示numpy torch torchvision
作为参考,我们使用了:
  • Python 3.10.8
  • numpy 1.23.4
  • 火炬1.13.0
  • torchvision 1.13.0
为MATLAB设置Python解释器。
pe = pyenv(ExecutionMode="OutOfProcess",Version="./env/bin/python3.10");
现在,您已经准备好从MATLAB调用Python了。
外卖:
  1. 在你的工作文件夹中创建一个Python虚拟环境。
  2. 注意Python和库的版本。

探索PyTorch模型

从torchvision库中获取三个预先训练好的PyTorch模型(VGG、MobileNet v2和MNASNet)。有关每个模型以及如何加载它的更多信息,请参见torchvision.models
控件可以直接从MATLAB中访问Python库py。Python名的前缀。有关如何访问Python库的详细信息,请参见入门:从MATLAB中访问Python模块
Model1 = py.torchvision.models.vgg16(预训练=true);Model2 = py.torchvision.models.mobilenet_v2(预训练=true);Model3 = py.torchvision.models.mnasnet1_0(预训练=true);
将图像转换为一个张量,以便使用PyTorch模型对图像进行分类。
X = py.numpy.asarray(imgForTorch);X_torch = py.torch.from_numpy(X).float();
通过从MATLAB中调用Python来找到最快的PyTorch模型,为每个模型预测多次图像分类标签。我们在所有模型上运行速度测试,但我们在这里只展示如何计算MNASNet模型的平均速度。
N = 30;for i = 1:N tic model3(X_torch);T(i) = toc;结束意味着(T)

Ans = 0.1096

这个简单的测试表明,预测速度最快的模型是MNASNet。通过协同执行,您可以在PyTorch模型上轻松快速地运行不同的测试,以找到最适合您的应用程序和工作流的模型。
要将PyTorch模型导入MATLAB,首先必须跟踪模型并保存它,也可以通过在MATLAB中协同执行Python来完成。在Python解释器中直接从MATLAB执行Python语句pyrun函数。的pyrun函数是MATLAB和Python之间的有状态接口,用于保存两个平台之间的状态。
保存三个模型中最快的PyTorch模型。然后,跟踪模型。有关如何跟踪PyTorch模型的更多信息,请参见Torch文档:跟踪函数
pyrun("import torch;X_rnd = torch.rand(1,3,224,224)") pyrun("traced_model = torch. jet .trace(model3.forward,X_rnd)",model3=model3) pyrun("traced_model.save('traced_mnasnet1_0.pt')")
外卖:
  1. 在不离开MATLAB环境的情况下,通过从MATLAB调用PyTorch(协同执行)在开源模型上运行比较测试。
  2. 控件来访问Python库py。前缀和使用执行Python语句pyrun
  3. 协同执行步骤可以快速添加到MATLAB中已经建立的工作流中。

导入PyTorch网络

导入MNASNet模型importNetworkFromPyTorch函数。
net = importNetworkFromPyTorch(" traced_mnasnet1_1 .pt");
importNetworkFromPyTorch函数是在MATLAB R2022b中介绍的PyTorch模型的深度学习工具箱转换器金宝app支持包。欲了解更多信息,请阅读我们之前的博客文章TensorFlow和PyTorch互操作性的新特性
函数以未初始化的形式导入模型dlnetwork对象。创建一个图像输入层。然后,将图像输入层添加到导入的网络中,并使用addInputLayer函数。
inputLayer = imageInputLayer(InputSize,Normalization="none");net = addInputLayer(net,inputLayer,Initialize=true);
这里展示了一个简单的图像分类。通过将PyTorch或TensorFlow模型转换为MATLAB网络,您可以访问MATLAB支持的构建完整AI系统的所有深度学习工作流。金宝app
有关使用导入模型和协同执行模型的更多信息,请参阅我们之前博客文章中的“在MATLAB中使用深度学习模型的能力比较”表:从TensorFlow, PyTorch和ONNX导入模型(总结部分)。
外卖:
  1. importNetworkFromPyTorch函数可以将图像分类模型导入MATLAB。
  2. 通过将您选择的模型导入MATLAB,您可以将深度学习模型集成到AI系统中。

结论

给出了工作流的每个步骤的关键要点。如果我们必须选择三个关键的结论……
关键外卖:
  1. 协同执行和模型导入是MATLAB工具,使MATLAB和PyTorch能够一起使用。
  2. 联合执行MATLAB和PyTorch可以有效地确定要导入哪个PyTorch模型。
  3. 控件来访问Python库py。前缀和使用执行Python语句pyrun
有关MATLAB、TensorFlow和PyTorch之间协同执行的更多示例,请查看:我们之前关于MATLAB、TensorFlow和PyTorch之间互操作性的博客文章,请查看:




|
  • 打印
  • 发送电子邮件

コメント

コメントを残すには,ここをクリックしてMathWorksアカウントにサインインするか新しいMathWorksアカウントを作成します。