MATLAB ユーザーコミュニティー

MATLAB & Simulink ユーザーコミュニティー向け日本語ブログ

PyTorch モデルを MATLAB で活用するライブタスク

※この投稿は 2025 年 3 月 4 日にArtificial Intelligence へ 投稿されたものの抄訳です。

 

Python® ベースの AI モデルを MATLAB および Simulink のワークフロー内で活用しやくするよう機能を拡張してきました。いまでは PyTorch® や TensorFlow™ モデル、または任意の Python コードを MATLAB から直接呼び出すことができます。例えば、Python ベースのモデルを比較して、その精度とパフォーマンスを評価し、MATLAB で構築した AI ワークフローの一部として活用することも容易です。

このブログ記事では、ライブスクリプトで Python コードを実行するタスクを使用して、PyTorch モデルを画像分類に利用する方法を紹介します。

Python環境のセットアップ

MATLAB から Python コードを実行するには、まず Python 環境をセットアップする必要があります。その後、MATLAB 用に Python インタープリターを設定します。

pe = pyenv(ExecutionMode="OutOfProcess",Version="env\Scripts\python.exe");

 

画像の読み込みと処理

入力画像を読み込みます。ネットワークの入力サイズに画像をリサイズします。

imgOriginal = imread("peppers.png");

imageHWSize = 224;
img = imresize(imgOriginal,[imageHWSize imageHWSize]);

画像をリスケールします。次に、トレーニング画像の平均を引き、トレーニング画像の標準偏差で割ることで画像を正規化します。詳細については、「Input Data Preprocessing」を参照してください。

img = rescale(img,0,1);

meanIm = [0.485 0.456 0.406];
stdIm = [0.229 0.224 0.225];
img = (img - reshape(meanIm,[1 1 3]))./reshape(stdIm,[1 1 3]);

画像データを Deep Learning Toolbox の次元順序(HWCN)から PyTorch の次元順序(NCHW)に変換します。ここで、H は画像の高さ、W は画像の幅、C はチャネル数、N は観測数を表します。

imgForTorch = permute(img,[4 3 1 2]);

 

PyTorch モデルで画像を分類

PyTorch モデルを使用して画像を分類するために必要なコードは以下の通りです。必要なライブラリをインポートし、convnext_small モデルをロードし、モデルを使用して推論を行います。

import numpy as np
import torch as torch
import torchvision as vision

model = vision.models.convnext_small(weights="DEFAULT");

# Convert the image to tensor.
X = np.array(imgForTorch);
X_torch = torch.from_numpy(X).float();

#Classify image.
torch.manual_seed(0);
y_val = model(X_torch);
predicted = torch.argmax(y_val);

predicted = torch.argmax(y_val);

以下の GIF 動画に示されているように、ライブスクリプトに「Run Python Code」タスクを挿入し、上記の Python コードをタスクに入力して実行します。タスクが返す特定の出力変数を選択することができます。この場合、最も高い確率を持つクラスのインデックスである変数「predicted」を選択しました。

Insert and run an Run Python Code task in live script to predict with a PyTorch model

 

分類結果の表示

クラス名を指定します。ImageNet 画像でトレーニングされた squeezenet からクラス名を取得します。

squeezeNet = squeezenet;
ClassNames = squeezeNet.Layers(end).Classes;

予測からラベルを取得します。Python はゼロベースのインデックスであることをお忘れなく!

label = ClassNames(double(predicted.tolist)+1);

分類結果を表示します。

imshow(imgOriginal); 
title(label,FontSize=16)

画像は PyTorch モデルによって正しく分類されました。

Want to keep exploring how to integrate MATLAB with PyTorch for your AI workflows?
Pocket Guide: MATLAB with Python for Artificial Intelligence
|
  • print

Comments

To leave a comment, please click here to sign in to your MathWorks Account or create a new one.

Loading...
Go to top of page