Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

importONNXNetwork

事前学習済みの ONNX ネットワークのインポート

説明

net = importONNXNetwork(modelfile) は、ファイル modelfile から事前学習済みの ONNX™ (Open Neural Network Exchange) ネットワークをインポートします。この関数は、ネットワーク netDAGNetwork オブジェクトまたは dlnetwork オブジェクトとして返します。

importONNXNetwork には、Deep Learning Toolbox™ Converter for ONNX Model Format サポート パッケージが必要です。このサポート パッケージがインストールされていない場合、importONNXNetwork によってダウンロード用リンクが表示されます。

メモ

既定では、ソフトウェアが ONNX 演算子をそれと等価な組み込みの MATLAB® 層に変換できないときに、importONNXNetwork がカスタム層の生成を試みます。ソフトウェアによる変換がサポートされている演算子の一覧については、組み込みの MATLAB 層への変換がサポートされている ONNX 演算子を参照してください。

importONNXNetwork は、生成されたカスタム層をパッケージ +modelfile に保存します。

importONNXNetwork は、組み込みの MATLAB 層への変換がサポートされていない各 ONNX 演算子のカスタム層を自動生成しません。サポートされていない層の処理方法の詳細については、代替機能を参照してください。

net = importONNXNetwork(modelfile,Name=Value) は、1 つ以上の名前と値の引数で指定された追加オプションを使用して、事前学習済みの ONNX ネットワークをインポートします。たとえば、OutputLayerType="classification" はネットワークを DAGNetwork オブジェクトとしてインポートしますが、その際、インポートされたネットワーク アーキテクチャの最初の出力分岐の末尾に分類出力層が追加されます。

すべて折りたたむ

Deep Learning Toolbox Converter for ONNX Model Format サポート パッケージをダウンロードしてインストールします。

コマンド ラインで importONNXNetwork と入力します。

importONNXNetwork

Deep Learning Toolbox Converter for ONNX Model Format がインストールされていない場合、必要なサポート パッケージへのリンクがこの関数によってアドオン エクスプローラーに表示されます。サポート パッケージをインストールするには、リンクをクリックして、[インストール] をクリックします。コマンド ラインでモデル ファイル "simplenet.onnx" からネットワークをインポートして、インストールが正常に終了していることを確認します。サポート パッケージがインストールされている場合、この関数は DAGNetwork オブジェクトを返します。

modelfile = "simplenet.onnx";
net = importONNXNetwork(modelfile)
net = 
  DAGNetwork with properties:

         Layers: [9×1 nnet.cnn.layer.Layer]
    Connections: [8×2 table]
     InputNames: {'imageinput'}
    OutputNames: {'ClassificationLayer_softmax1002'}

ネットワーク アーキテクチャをプロットします。

plot(net)

事前学習済みの ONNX ネットワークを DAGNetwork オブジェクトとしてインポートし、インポートしたネットワークを使用してイメージを分類します。

squeezenet畳み込みニューラル ネットワークの ONNX モデルを生成します。

squeezeNet = squeezenet;
exportONNXNetwork(squeezeNet,"squeezeNet.onnx");

クラス名を指定します。

ClassNames = squeezeNet.Layers(end).Classes;

事前学習済みの squeezeNet.onnx モデルをインポートし、クラスを指定します。既定では、importONNXNetwork はネットワークを DAGNetwork オブジェクトとしてインポートします。

net = importONNXNetwork("squeezeNet.onnx",Classes=ClassNames)
net = 
  DAGNetwork with properties:

         Layers: [70×1 nnet.cnn.layer.Layer]
    Connections: [77×2 table]
     InputNames: {'data'}
    OutputNames: {'ClassificationLayer_prob'}

インポートしたネットワークを解析します。

analyzeNetwork(net)

分類するイメージを読み取り、そのイメージのサイズを表示します。このイメージは 384 x 512 ピクセルで 3 つのカラー チャネル (RGB) があります。

I = imread("peppers.png");
size(I)
ans = 1×3

   384   512     3

イメージのサイズをネットワークの入力サイズに変更します。イメージを表示します。

I = imresize(I,[227 227]);
imshow(I)

インポートしたネットワークを使用してイメージを分類します。

label = classify(net,I)
label = categorical
     bell pepper 

事前学習済みの ONNX ネットワークを dlnetwork オブジェクトとしてインポートし、インポートしたネットワークを使用してイメージを分類します。

squeezenet畳み込みニューラル ネットワークの ONNX モデルを生成します。

squeezeNet = squeezenet;
exportONNXNetwork(squeezeNet,"squeezeNet.onnx");

クラス名を指定します。

ClassNames = squeezeNet.Layers(end).Classes;

事前学習済みの squeezeNet.onnx モデルを dlnetwork オブジェクトとしてインポートします。

net = importONNXNetwork("squeezeNet.onnx",TargetNetwork="dlnetwork")
net = 
  dlnetwork with properties:

         Layers: [70×1 nnet.cnn.layer.Layer]
    Connections: [77×2 table]
     Learnables: [52×3 table]
          State: [0×3 table]
     InputNames: {'data'}
    OutputNames: {'probOutput'}
    Initialized: 1

分類するイメージを読み取り、そのイメージのサイズを表示します。このイメージは 384 x 512 ピクセルで 3 つのカラー チャネル (RGB) があります。

I = imread("peppers.png");
size(I)
ans = 1×3

   384   512     3

イメージのサイズをネットワークの入力サイズに変更します。イメージを表示します。

I = imresize(I,[227 227]);
imshow(I)

イメージを dlarray に変換します。イメージを次元 "SSCB" (spatial、spatial、channel、batch) で書式設定します。この場合、バッチ サイズは 1 であるため、バッチ サイズを省略できます ("SSC")。

I_dlarray = dlarray(single(I),"SSCB");

サンプル イメージを分類し、予測されたラベルを見つけます。

prob = predict(net,I_dlarray);
[~,label] = max(prob);

分類結果を表示します。

ClassNames(label)
ans = categorical
     bell pepper 

事前学習済みの ONNX ネットワークを DAGNetwork オブジェクトとしてインポートし、インポートしたネットワークを使用してイメージを分類します。インポートしたネットワークには、組み込みの MATLAB 層への変換がサポートされていない ONNX 演算子が含まれています。これらの演算子をインポートすると、カスタム層がソフトウェアによって自動生成されます。

この例では、補助関数 findCustomLayers を使用します。この関数のコードを見るには、補助関数を参照してください。

ONNX Model Zoo の演算子セット 9 と共にインポートするモデル ファイルを、shufflenet として指定します。shufflenet は、ImageNet データベースの 100 万枚を超えるイメージで学習させた畳み込みニューラル ネットワークです。結果として、このネットワークは広範囲のイメージに対する豊富な特徴表現を学習しています。このネットワークは、イメージを 1000 個のオブジェクト カテゴリ (キーボード、マウス、鉛筆、多くの動物など) に分類できます。

modelfile = "shufflenet-9.onnx";

同じく ImageNet データベースのイメージで学習させたsqueezenetから、クラス名をインポートします。

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

shufflenet をインポートします。既定では、importONNXNetwork はネットワークを DAGNetwork オブジェクトとしてインポートします。インポートしたネットワークに、組み込みの MATLAB 層への変換がサポートされていない ONNX 演算子が含まれている場合、importONNXNetwork は、これらの演算子の代わりにカスタム層を自動生成できます。importONNXNetwork は、生成した各カスタム層を、現在のフォルダー内のパッケージ +shufflenet_9 に個別の .m ファイルとして保存します。名前と値の引数 PackageName を使用して、パッケージ名を指定します。

net = importONNXNetwork(modelfile,...
    Classes=ClassNames,PackageName="shufflenet_9")
net = 
  DAGNetwork with properties:

         Layers: [173×1 nnet.cnn.layer.Layer]
    Connections: [188×2 table]
     InputNames: {'gpu_0_data_0'}
    OutputNames: {'ClassificationLayer_gpu_0_softmax_1'}

補助関数 findCustomLayers を使用して、自動生成されたカスタム層のインデックスを見つけ、このカスタム層を表示します。

ind = findCustomLayers(net.Layers,'+shufflenet_9');
net.Layers(ind)
ans = 
  16×1 Layer array with layers:

     1   'Reshape_To_ReshapeLayer1004'   shufflenet_9.Reshape_To_ReshapeLayer1004   shufflenet_9.Reshape_To_ReshapeLayer1004
     2   'Reshape_To_ReshapeLayer1009'   shufflenet_9.Reshape_To_ReshapeLayer1009   shufflenet_9.Reshape_To_ReshapeLayer1009
     3   'Reshape_To_ReshapeLayer1014'   shufflenet_9.Reshape_To_ReshapeLayer1014   shufflenet_9.Reshape_To_ReshapeLayer1014
     4   'Reshape_To_ReshapeLayer1019'   shufflenet_9.Reshape_To_ReshapeLayer1019   shufflenet_9.Reshape_To_ReshapeLayer1019
     5   'Reshape_To_ReshapeLayer1024'   shufflenet_9.Reshape_To_ReshapeLayer1024   shufflenet_9.Reshape_To_ReshapeLayer1024
     6   'Reshape_To_ReshapeLayer1029'   shufflenet_9.Reshape_To_ReshapeLayer1029   shufflenet_9.Reshape_To_ReshapeLayer1029
     7   'Reshape_To_ReshapeLayer1034'   shufflenet_9.Reshape_To_ReshapeLayer1034   shufflenet_9.Reshape_To_ReshapeLayer1034
     8   'Reshape_To_ReshapeLayer1039'   shufflenet_9.Reshape_To_ReshapeLayer1039   shufflenet_9.Reshape_To_ReshapeLayer1039
     9   'Reshape_To_ReshapeLayer1044'   shufflenet_9.Reshape_To_ReshapeLayer1044   shufflenet_9.Reshape_To_ReshapeLayer1044
    10   'Reshape_To_ReshapeLayer1049'   shufflenet_9.Reshape_To_ReshapeLayer1049   shufflenet_9.Reshape_To_ReshapeLayer1049
    11   'Reshape_To_ReshapeLayer1054'   shufflenet_9.Reshape_To_ReshapeLayer1054   shufflenet_9.Reshape_To_ReshapeLayer1054
    12   'Reshape_To_ReshapeLayer1059'   shufflenet_9.Reshape_To_ReshapeLayer1059   shufflenet_9.Reshape_To_ReshapeLayer1059
    13   'Reshape_To_ReshapeLayer1064'   shufflenet_9.Reshape_To_ReshapeLayer1064   shufflenet_9.Reshape_To_ReshapeLayer1064
    14   'Reshape_To_ReshapeLayer1069'   shufflenet_9.Reshape_To_ReshapeLayer1069   shufflenet_9.Reshape_To_ReshapeLayer1069
    15   'Reshape_To_ReshapeLayer1074'   shufflenet_9.Reshape_To_ReshapeLayer1074   shufflenet_9.Reshape_To_ReshapeLayer1074
    16   'Reshape_To_ReshapeLayer1079'   shufflenet_9.Reshape_To_ReshapeLayer1079   shufflenet_9.Reshape_To_ReshapeLayer1079

分類するイメージを読み取り、そのイメージのサイズを表示します。このイメージは 792 x 1056 ピクセルで、3 つのカラー チャネル (RGB) があります。

I = imread("peacock.jpg");
size(I)
ans = 1×3

         792        1056           3

イメージのサイズをネットワークの入力サイズに変更します。イメージを表示します。

I = imresize(I,[224 224]);
imshow(I)

shufflenet への入力をさらに前処理する必要があります (詳細については、ONNX Model Zoo の ShuffleNet を参照してください)。イメージを再スケーリングします。学習イメージの平均を減算し、学習イメージの標準偏差で除算して、イメージを正規化します。

I = rescale(I,0,1);

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

imshow(I)

インポートしたネットワークを使用してイメージを分類します。

label = classify(net,I)
label = categorical
     peacock 

補助関数

この節では、この例で使用されている補助関数 findCustomLayers のコードを示します。findCustomLayers は、importONNXNetwork によって自動生成されたカスタム層の indices を返します。

function indices = findCustomLayers(layers,PackageName)

s = what(['.\' PackageName]);

indices = zeros(1,length(s.m));
for i = 1:length(layers)
    for j = 1:length(s.m)
        if strcmpi(class(layers(i)),[PackageName(2:end) '.' s.m{j}(1:end-2)])
            indices(j) = i;
        end
    end
end

end

複数の出力をもつ ONNX ネットワークを DAGNetwork オブジェクトとしてインポートします。

ONNX モデル ファイルを指定し、事前学習済みの ONNX モデルをインポートします。既定では、importONNXNetwork はネットワークを DAGNetwork オブジェクトとしてインポートします。

modelfile = "digitsMIMO.onnx";
net = importONNXNetwork(modelfile)
net = 
  DAGNetwork with properties:

         Layers: [19×1 nnet.cnn.layer.Layer]
    Connections: [19×2 table]
     InputNames: {'input'}
    OutputNames: {'ClassificationLayer_sm_1'  'RegressionLayer_fc_1_Flatten'}

このネットワークには 2 つの出力層があります。1 つは数字を分類する分類層 (ClassificationLayer_sm_1)、1 つは数字の予測角度の平均二乗誤差を計算する回帰層 (RegressionLayer_fc_1_Flatten) です。ネットワーク アーキテクチャをプロットします。

plot(net)
title('digitsMIMO Network Architecture')

インポートしたネットワークを使用して予測を行うには、関数predictを使用し、ReturnCategorical オプションを true に設定します。

入力引数

すべて折りたたむ

ネットワークを含む ONNX モデル ファイルの名前。文字ベクトルまたは string スカラーとして指定します。ファイルは、現在のフォルダーまたは MATLAB パス上のフォルダーに含まれていなければならず、そうでなければこのファイルの絶対パスまたは相対パスを含めなければなりません。

例: "cifarResNet.onnx"

名前と値の引数

例: importONNXNetwork(modelfile,TargetNetwork="dagnetwork",GenerateCustomLayers=true,PackageName="CustomLayers") は、modelfile 内のネットワークを DAGNetwork オブジェクトとしてインポートし、自動生成したカスタム層を現在のフォルダー内のパッケージ +CustomLayers に保存します。

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

カスタム層の生成オプション。数値または logical 1 (true) または logical 0 (false) として指定します。GenerateCustomLayerstrue に設定した場合、ソフトウェアが ONNX 演算子をそれと等価な組み込みの MATLAB 層に変換できないときに、importONNXNetwork がカスタム層の生成を試みます。importONNXNetwork は、生成した各カスタム層を、+PackageName で個別の .m ファイルとして保存します。カスタム層を表示または編集するには、関連する .m ファイルを開きます。カスタム層の詳細については、深層学習のカスタム層を参照してください。

例: GenerateCustomLayers=false

importONNXNetwork がカスタム層を保存するパッケージの名前。文字ベクトルまたは string スカラーとして指定します。importONNXNetwork は、カスタム層のパッケージ +PackageName を現在のフォルダーに保存します。PackageName を指定しない場合、importONNXNetwork は、カスタム層を現在のフォルダー内の +modelfile という名前のパッケージに保存します。パッケージの詳細については、パッケージによる名前空間の作成を参照してください。

例: PackageName="shufflenet_9"

例: PackageName="CustomLayers"

Deep Learning Toolbox ネットワークのターゲット タイプ。"dagnetwork" または "dlnetwork" として指定します。関数 importONNXNetwork は、ネットワーク netDAGNetwork オブジェクトまたは dlnetwork オブジェクトとしてインポートします。

  • ネットワークを DAGNetwork オブジェクトとしてインポートする場合、ONNX モデルによって指定された入力層と出力層か、名前と値の引数 InputDataFormatsOutputDataFormats、または OutputLayerType を使用して指定した入力層と出力層を net に含めなければなりません。

  • ネットワークを dlnetwork オブジェクトとしてインポートする場合、importONNXNetwork によって net の各出力分岐の末尾に CustomOutputLayer が追加され、場合によっては入力分岐の先頭に CustomInputLayer が追加されます。入力のデータ形式または入力のイメージ サイズが不明の場合は、この関数により CustomInputLayer が追加されます。これらの層のデータ形式に関するネットワーク固有の情報については、CustomInputLayer オブジェクトおよび CustomOutputLayer オブジェクトのプロパティを参照してください。Deep Learning Toolbox の入出力データ形式を解釈する方法の詳細については、ONNX 入出力テンソルから組み込みの MATLAB 層への変換を参照してください。

例: TargetNetwork="dlnetwork"

ネットワーク入力のデータ形式。文字ベクトル、string スカラー、または string 配列として指定します。importONNXNetwork は、入力データ形式を ONNX ファイルから解釈しようと試みます。importONNXNetwork が入力データ形式を導出できない場合、名前と値の引数 InputDataFormats が役に立ちます。

InputDataFomats には、ONNX 入力テンソルの順にデータ形式を設定します。たとえば、InputDataFormats"BSSC" として指定した場合、インポートされたネットワークは 1 つの imageInputLayer 入力をもちます。importONNXNetwork が ONNX 入力テンソルのデータ形式を解釈する方法、およびさまざまな Deep Learning Toolbox 入力層について InputDataFormats を指定する方法の詳細については、ONNX 入出力テンソルから組み込みの MATLAB 層への変換を参照してください。

空のデータ形式 ([] または "") を指定した場合、importONNXNetwork は入力データ形式を自動的に解釈します。

例: InputDataFormats='BSSC'

例: InputDataFormats="BSSC"

例: InputDataFormats=["BCSS","","BC"]

例: InputDataFormats={'BCSS',[],'BC'}

データ型: char | string | cell

ネットワーク出力のデータ形式。文字ベクトル、string スカラー、または string 配列として指定します。importONNXNetwork は、出力データ形式を ONNX ファイルから解釈しようと試みます。importONNXNetwork が出力データ形式を導出できない場合、名前と値の引数 OutputDataFormats が役に立ちます。

OutputDataFormats には、ONNX 出力テンソルの順にデータ形式を設定します。たとえば、OutputDataFormats"BC" として指定した場合、インポートされたネットワークは 1 つの classificationLayer 出力をもちます。importONNXNetwork が ONNX 出力テンソルのデータ形式を解釈する方法、およびさまざまな Deep Learning Toolbox 出力層について OutputDataFormats を指定する方法の詳細については、ONNX 入出力テンソルから組み込みの MATLAB 層への変換を参照してください。

空のデータ形式 ([] または "") を指定した場合、importONNXNetwork は出力データ形式を自動的に解釈します。

例: OutputDataFormats='BC'

例: OutputDataFormats="BC"

例: OutputDataFormats=["BCSS","","BC"]

例: OutputDataFormats={'BCSS',[],'BC'}

データ型: char | string | cell

最初のネットワーク入力の入力イメージのサイズ。2 次元イメージの [height,width,channels] または 3 次元イメージの [height,width,depth,channels] にそれぞれ対応する、3 個または 4 個の数値のベクトルとして指定します。modelfile の ONNX モデルで入力サイズが指定されていない場合にのみ、ネットワークはこの情報を使用します。

例: ImageInputSize=[28 28 1] (2 次元グレースケール入力イメージの場合)

例: ImageInputSize=[224 224 3] (2 次元カラー入力イメージの場合)

例: ImageInputSize=[28 28 36 3] (3 次元カラー入力イメージの場合)

最初のネットワーク出力の層のタイプ。"classification""regression"、または "pixelclassification" として指定します。関数 importONNXNetwork は、ClassificationOutputLayer オブジェクト、RegressionOutputLayer オブジェクト、または pixelClassificationLayer (Computer Vision Toolbox) オブジェクトを、インポートされたネットワーク アーキテクチャの最初の出力分岐の末尾に追加します。pixelClassificationLayer (Computer Vision Toolbox) オブジェクトを追加するには、Computer Vision Toolbox™ が必要です。modelfile の ONNX モデルによって出力層のタイプが指定されている場合、または TargetNetwork"dlnetwork" として指定した場合、importONNXNetwork は名前と値の引数 OutputLayerType を無視します。

例: OutputLayerType="regression"

最初のネットワーク出力の出力層のクラス。categorical ベクトル、string 配列、文字ベクトルの cell 配列、または "auto" として指定します。Classes"auto" の場合、importONNXNetwork によってクラスが categorical(1:N) に設定されます。ここで、N はクラスの数です。string 配列または文字ベクトルの cell 配列 str を指定した場合、importONNXNetwork によって出力層のクラスが categorical(str,str) に設定されます。TargetNetwork"dlnetwork" として指定した場合、importONNXNetwork は名前と値の引数 Classes を無視します。

例: Classes={'0','1','3'}

例: Classes=categorical({'dog','cat'})

データ型: char | categorical | string | cell

定数畳み込みによる最適化。"deep""shallow" または "none" として指定します。定数畳み込みは、ONNX 演算子からそれと等価な組み込みの MATLAB 層への変換の際に、ONNX 初期化子 (初期定数値) に対して演算を実行することで、インポートされたネットワーク アーキテクチャを最適化します。

ソフトウェアにより等価な組み込みの MATLAB 層に変換できない演算子が ONNX ネットワークに含まれている場合 (組み込みの MATLAB 層への変換がサポートされている ONNX 演算子を参照してください)、定数畳み込みによる最適化によって、サポートされていない層の数を減らすことができます。FoldConstants"deep" に設定した場合、ネットワークに含まれるサポートされていない層の数は、この引数を "shallow" に設定した場合と同じか、それより少なくなります。ただし、ネットワークをインポートする時間が長くなる可能性があります。ネットワーク アーキテクチャの最適化を無効にするには、FoldConstants"none" に設定します。

定数畳み込みによる最適化を実行しても、サポートされていない層がネットワークに残っている場合、importONNXNetwork はエラーを返します。この場合、importONNXLayers または importONNXFunction を使用してネットワークをインポートできます。詳細については、代替機能を参照してください。

例: FoldConstants="shallow"

出力引数

すべて折りたたむ

事前学習済みの ONNX ネットワーク。DAGNetwork オブジェクトまたは dlnetwork オブジェクトとして返されます。

  • ネットワークを DAGNetwork オブジェクトとしてインポートするには、TargetNetwork"dagnetwork" として指定します。その後、DAGNetwork オブジェクト上で、関数 classify を使用してクラス ラベルを予測します。

  • ネットワークを dlnetwork オブジェクトとしてインポートするには、TargetNetwork"dlnetwork" として指定します。その後、dlnetwork オブジェクト上で、関数 predict を使用してクラス ラベルを予測します。正しいデータ形式を使用して、入力データを dlarray として指定します (詳細については、dlarray の引数 fmt を参照してください)。

制限

  • importONNXNetwork でサポートされる ONNX のバージョンは、次のとおりです。

    • この関数は、ONNX 中間表現バージョン 6 をサポートしています。

    • この関数は、ONNX 演算子セット 6 ~ 13 をサポートしています。

メモ

エクスポートしたネットワークをインポートする場合、元のネットワークとは異なるネットワークの層が再インポートされ、サポート対象外となる可能性があります。

詳細

すべて折りたたむ

組み込みの MATLAB 層への変換がサポートされている ONNX 演算子

importONNXNetwork は、組み込みの MATLAB 層への変換を行う次の ONNX 演算子をサポートします (いくつかの制限があります)。

ONNX 演算子Deep Learning Toolbox の層

Add

additionLayer または nnet.onnx.layer.ElementwiseAffineLayer

AveragePool

averagePooling2dLayer

BatchNormalization

batchNormalizationLayer

Concat

concatenationLayer

Constant

なし (重みとしてインポート)

Conv*

convolution2dLayer

ConvTranspose

transposedConv2dLayer

Dropout

dropoutLayer

Elu

eluLayer

Gemm

fullyConnectedLayer (ONNX ネットワークが再帰型の場合)、または nnet.onnx.layer.FlattenLayer とそれに続く convolution2dLayer (それ以外の場合)

GlobalAveragePool

globalAveragePooling2dLayer

GlobalMaxPool

globalMaxPooling2dLayer

GRU

gruLayer

InstanceNormalization

"channel-wise" として指定された numGroups をもつ groupNormalizationLayer

LeakyRelu

leakyReluLayer

LRN

CrossChannelNormalizationLayer

LSTM

lstmLayer または bilstmLayer

MatMul

fullyConnectedLayer (ONNX ネットワークが再帰型の場合)、convolution2dLayer (それ以外の場合)

MaxPool

maxPooling2dLayer

Mul

multiplicationLayer

Relu

reluLayer または clippedReluLayer

Sigmoid

sigmoidLayer

Softmax

softmaxLayer

Sum

additionLayer

Tanh

tanhLayer

*Conv 演算子の pads 属性が、2 つの要素 [p1,p2] のみをもつベクトルである場合、importONNXNetwork は、[p1,p2,p1,p2] として指定された名前と値のペアの引数 'Padding' をもつ convolution2dLayer として Conv をインポートします。

ONNX 演算子ONNX インポーター カスタム層

Clip

nnet.onnx.layer.ClipLayer

Div

nnet.onnx.layer.ElementwiseAffineLayer

Flatten

nnet.onnx.layer.FlattenLayer または nnet.onnx.layer.Flatten3dLayer

Identity

nnet.onnx.layer.IdentityLayer

ImageScaler

nnet.onnx.layer.ElementwiseAffineLayer

PRelu

nnet.onnx.layer.PReluLayer

Reshape

nnet.onnx.layer.FlattenLayer

Sub

nnet.onnx.layer.ElementwiseAffineLayer
ONNX 演算子Image Processing Toolbox™
DepthToSpacedepthToSpace2dLayer (Image Processing Toolbox)
Resizeresize2dLayer (Image Processing Toolbox) または resize3dLayer (Image Processing Toolbox)
SpaceToDepthspaceToDepthLayer (Image Processing Toolbox)
Upsampleresize2dLayer (Image Processing Toolbox) または resize3dLayer (Image Processing Toolbox)

ONNX 入出力テンソルから組み込みの MATLAB 層への変換

importONNXNetwork は、ONNX ネットワークの入出力テンソルのデータ形式を解釈し、それらを組み込みの MATLAB 入出力層に変換しようと試みます。解釈の詳細については、ONNX 入力テンソルから Deep Learning Toolbox 層への変換およびONNX 出力テンソルから MATLAB 層への変換の表を参照してください。

Deep Learning Toolbox では、各データ形式の文字は次のラベルのいずれかでなければなりません。

  • S — 空間

  • C — チャネル

  • B — バッチ観測値

  • T — 時間またはシーケンス

  • U — 指定なし

ONNX 入力テンソルから Deep Learning Toolbox 層への変換

データ形式データの解釈Deep Learning Toolbox の層
ONNX 入力テンソル MATLAB 入力形式形状種類
BCCBc 行 n 列の配列。ここで、c は特徴の数、n は観測値の数です。特徴featureInputLayer
BCSSBSSCCSSSSCSSCB

h x w x c x n の数値配列。ここで、h、w、c、および n は、それぞれイメージの高さ、幅、チャネル数、および観測値の数です。

2 次元イメージimageInputLayer
BCSSSBSSSCCSSSSSSCSSSCB

h x w x d x c の数値配列。ここで、h、w、d、c、および n は、それぞれイメージの高さ、幅、深さ、チャネル数、およびイメージの観測値の数です。

3 次元イメージimage3dInputLayer
TBCCBT

c x s x n の行列。ここで、c はシーケンスの特徴の数、s はシーケンス長、n はシーケンスの観測値の数です。

ベクトル シーケンスsequenceInputLayer
TBCSSSSCBT

h x w x c x s x n の配列。ここで、h、w、c、および n は、それぞれイメージの高さ、幅、およびチャネル数に対応し、s はシーケンス長、n はイメージ シーケンスの観測値の数です。

2 次元イメージ シーケンスsequenceInputLayer
TBCSSSSSSCBT

h x w x d x c x s x n の配列。ここで、h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数に対応し、s はシーケンス長、n はイメージ シーケンスの観測値の数です。

3 次元イメージ シーケンスsequenceInputLayer

ONNX 出力テンソルから MATLAB 層への変換

データ形式MATLAB 層
ONNX 出力テンソルMATLAB 出力形式
BCTBCCBCBTclassificationLayer
BCSSBSSCCSSSSCBCSSSBSSSCCSSSSSSCSSCBSSSCBpixelClassificationLayer (Computer Vision Toolbox)
TBCSSTBCSSSSSCBTSSSCBTregressionLayer

GPU におけるインポートしたネットワークの使用

GPU 上では importONNXNetwork は実行されません。ただし、importONNXNetwork は、深層学習用の事前学習済みニューラル ネットワークを、GPU で使用可能な DAGNetwork オブジェクトまたは dlnetwork オブジェクトとしてインポートします。

  • ネットワークを DAGNetwork オブジェクトとしてインポートした場合、classify を使用して、インポートしたネットワークによる予測を CPU または GPU で実行できます。名前と値の引数 ExecutionEnvironment を使用して、ハードウェア要件を指定します。複数の出力があるネットワークの場合、DAGNetwork オブジェクト用の関数 predict を使用します。

  • ネットワークを DAGNetwork オブジェクトとしてインポートした場合、predict を使用して、インポートしたネットワークによる予測を CPU または GPU で実行できます。名前と値の引数 ExecutionEnvironment を使用して、ハードウェア要件を指定します。ネットワークに複数の出力がある場合は、名前と値の引数 ReturnCategoricaltrue として指定します。

  • ネットワークを dlnetwork オブジェクトとしてインポートした場合、predict を使用して、インポートしたネットワークによる予測を CPU または GPU で実行できます。入力データとネットワーク パラメーターのいずれかが GPU に保存されている場合、関数 predict を GPU で実行できます。

    • minibatchqueue を使用して入力データのミニバッチの処理と管理を行う場合、GPU が使用可能であれば、出力は minibatchqueue オブジェクトによって GPU 配列に変換されます。

    • dlupdate を使用して、dlnetwork オブジェクトの学習可能パラメーターを GPU 配列に変換します。

      dlnet = dlupdate(@gpuarray,dlnet)

  • trainNetwork を使用することにより、インポートしたネットワークに 1 つの CPU または 1 つの GPU で学習させることができます。実行環境のオプションを含む学習オプションを指定するには、関数 trainingOptions を使用します。名前と値の引数 ExecutionEnvironment を使用して、ハードウェア要件を指定します。学習を高速化する方法の詳細については、Scale Up Deep Learning in Parallel, on GPUs, and in the Cloudを参照してください。

GPU を使用するには Parallel Computing Toolbox™ とサポートされている GPU デバイスが必要です。サポートされているデバイスについては、リリース別の GPU サポート (Parallel Computing Toolbox)を参照してください。

ヒント

  • 事前学習済みのネットワークを新しいイメージの予測または転移学習に使用するには、インポートしたモデルの学習に使用したイメージに行った前処理と同じようにイメージを前処理しなければなりません。最も一般的な前処理ステップは、イメージのサイズ変更、イメージの平均値の減算、イメージの BGR 形式から RGB 形式への変換です。

    • イメージのサイズを変更するには、imresize を使用します。たとえば、imresize(image,[227,227,3]) のようにします。

    • RGB 形式から BGR 形式にイメージを変換するには、flip を使用します。たとえば、flip(image,3) のようにします。

    学習および予測用のイメージの前処理の詳細は、イメージの深層学習向け前処理を参照してください。

代替機能

Deep Learning Toolbox Converter for ONNX Model Format には、事前学習済みの ONNX ネットワークをインポートするための 3 つの関数 (importONNXNetworkimportONNXLayers、および importONNXFunction) が用意されています。

インポートしたネットワークに、組み込みの MATLAB 層への変換がサポートされていない ONNX 演算子が含まれており (組み込みの MATLAB 層への変換がサポートされている ONNX 演算子を参照)、importONNXNetwork がカスタム層を生成しない場合、importONNXNetwork はエラーを返します。この場合でも、importONNXLayers を使用してネットワーク アーキテクチャと重みをインポートするか、importONNXFunction を使用して ONNXParameters オブジェクトおよびモデル関数としてネットワークをインポートすることができます。

各シナリオに最適なインポート関数の詳細については、Select Function to Import ONNX Pretrained Networkを参照してください。

参照

[1] Open Neural Network Exchange. https://github.com/onnx/.

[2] ONNX. https://onnx.ai/.

バージョン履歴

R2018a で導入

すべて展開する

R2021b 以降はエラー

R2021b での動作変更