从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]);有关不同深度学习平台的输入维度数据排序的更多信息,请参见输入尺寸排序.
外卖:
|
安装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
pe = pyenv(ExecutionMode="OutOfProcess",Version="./env/bin/python3.10");现在,您已经准备好从MATLAB调用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')")
外卖:
|
导入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导入模型(总结部分)。
外卖:
|
结论
给出了工作流的每个步骤的关键要点。如果我们必须选择三个关键的结论……关键外卖:
|
- カテゴリ:
- 深度学习
コメント
コメントを残すには,ここをクリックしてMathWorksアカウントにサインインするか新しいMathWorksアカウントを作成します。