ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

事前学習済みの畳み込みニューラル ネットワーク

自然イメージから強力で情報量の多い特徴を抽出するよう既に学習させてある事前学習済みのイメージ分類ネットワークを用意し、新しいタスクを学習させるための出発点として、そのネットワークを使用できます。事前学習済みのネットワークは、100 万枚を超えるイメージで学習しており、イメージを 1000 個のオブジェクト カテゴリ (キーボード、マグ カップ、鉛筆、多くの動物など) に分類できます。学習イメージは ImageNet データベース [1] のサブセットで、このデータベースは ImageNet Large-Scale Visual Recognition Challenge (ILSVRC) [2] で使用されています。通常は、転移学習によって事前学習済みのネットワークを使用する方が、ネットワークにゼロから学習させるよりもはるかに簡単で時間がかかりません。

事前学習済みのネットワークは、次のタスクで使用できます。

目的説明
分類

事前学習済みのネットワークを分類問題に直接適用します。新しいイメージを分類するには、classify を使用します。事前学習済みのネットワークを分類に使用する方法を示す例については、GoogLeNet を使用したイメージの分類を参照してください。

特徴の抽出

層の活性化を特徴として使用することで、事前学習済みのネットワークを特徴抽出器として使用します。これらの活性化を、サポート ベクター マシン (SVM) などの別の機械学習モデルの学習で特徴として使用できます。詳細は、特徴の抽出を参照してください。例については、AlexNet を使用した特徴抽出を参照してください。

転移学習

大規模なデータセットで学習させたネットワークから層を取り出し、新しいデータセットで微調整します。詳細は、転移学習を参照してください。簡単な例については、転移学習入門を参照してください。他の事前学習済みのネットワークを試してみるには、新しいイメージを分類するための深層学習ネットワークの学習を参照してください。

事前学習済みのネットワークの読み込み

googlenet などの関数を使用すると、アドオン エクスプローラーから事前学習済みのネットワークをダウンロードするためのリンクを取得できます。現在利用可能なすべてのダウンロードの一覧を確認するには、MathWorks Deep Learning Toolbox Team を参照してください。次の表に、利用可能な事前学習済みのネットワークとそれらのプロパティの一部を示します。ネットワークの深さは、入力層から出力層までのパスにある逐次畳み込み層と全結合層の最大数として定義されます。

ネットワーク深さサイズ

予測あたりの演算回数 (10 億回単位)

パラメーター数 (100 万個単位)イメージ入力サイズ
alexnet8

245 MB

0.7261

227-by-227

vgg1616

554 MB

15.5138

224-by-224

vgg1919

575 MB

19.6144

224-by-224

squeezenet18

6.4 MB

0.391.23

227-by-227

googlenet22

29 MB

1.587.0

224-by-224

inceptionv348

96 MB

5.723.9

299-by-299

resnet1818

47 MB

1.8111.7

224-by-224

resnet5050

104 MB

3.825.6

224-by-224

resnet101101

180 MB

7.645

224-by-224

inceptionresnetv2164

225 MB

13.256

299-by-299

事前学習済みのネットワークの比較

事前学習済みのネットワークには、問題に適用するネットワークを選択する際に重要になるさまざまな特性があります。最も重要なネットワーク属性は、ネットワークの精度、速度、およびサイズです。ネットワークの選択には、ネットワークの精度、速度、サイズの間のトレードオフが生じます。

ヒント

転移学習や特徴抽出を始めるには、SqueezeNet や GoogLeNet など、予測あたりに必要な演算回数が少ない高速なネットワークのいずれかを選択してみてください。繰り返しを迅速に実行でき、データの前処理手順や学習オプションなどのさまざまな設定を試すことができます。適切に機能する設定の感触を得てから、Inception-v3 などのより遅いネットワークを試し、結果が改善されるか確認します。

プロットを使用して、予測に必要な演算回数およびネットワーク パラメーターの数と ImageNet 検証精度を比較します。精度が高く、演算回数とパラメーターが少ないものが優れたネットワークです。このプロットは、演算回数に対する精度を示したもので、各マーカーの面積はパラメーター数に比例します。比較対象のすべてのメトリクスに関して、あるネットワークより他に優れたネットワークがない場合、そのネットワークは "パレート効率的" であると呼ばれます。この定義を使用すると、すべてのパレート効率的なネットワーク、つまり、この特定の意味で 「」"優れた" ネットワークを含む 「」"境界" を定義できます。このプロットでは、精度と速度の境界上にあるネットワークをつなぎ、精度と速度の境界と精度とサイズの境界の "両方" の上にあるネットワークをオレンジ色で示しています。SqueezeNet、GoogLeNet、ResNet-18、Inception-v3、および Inception-ResNet-v2 は両方の境界上にありますが、VGG ネットワークは、他のネットワークよりも規模が大きく低速で精度も劣っています。

ImageNet 検証セットでの分類精度は、ImageNet で学習させたネットワークの精度を測定する最も一般的な方法です。多くの場合、ImageNet において正確なネットワークは、転移学習または特徴抽出を使用して他の自然イメージ データセットに適用した場合にも正確です。このような汎化が可能である理由として、これらのネットワークが自然イメージから強力で情報量の多い特徴を抽出するよう学習済みであり、それらの特徴が他の類似データセットに汎化される点が挙げられます。ただし、ImageNet での高い精度は、必ずしも他のタスクにそのまま移行されないため、複数のネットワークを試すことをお勧めします。

制約のあるハードウェアを使用して予測を実行する場合やインターネットを介してネットワークを分散させる場合は、ディスクやメモリ上でのネットワークのサイズを考慮してください。ネットワーク パラメーターがネットワークのサイズのほとんどを占めるため、ネットワーク パラメーターの数を使用してネットワーク サイズを測定することがよくあります。

以下のプロットを使用して、精度と速度の平面と精度とサイズの平面で別々にネットワークを比較します。これらのプロットには、それぞれの平面で独立したパレート境界が表示されています。

ネットワークの精度

ImageNet 検証セットでの分類精度は、ImageNet で事前学習させたネットワークの精度を測定する最も一般的な方法ですが、ソースが異なる場合は分類精度を計算する方法が異なります。複数モデルのアンサンブルを使用する場合もあれば、複数の切り取りを使用して各イメージを複数回評価する場合もあります。場合によっては、標準的な (最上位の) 精度ではなく、上位 5 つの精度を見積もります。このような違いがあるため、異なるソースでの精度を直接比較することができないことがよくあります。Deep Learning Toolbox™ の事前学習済みネットワークの精度は、単一モデルとイメージの中心での単一の切り取りを使用した、標準的な (最上位の) 精度です。

予測あたりの演算回数

ネットワークの予測や学習の時間は、使用するハードウェアに大きく左右されるため、ハードウェアに依存しないネットワーク速度のメトリクスとして予測あたりに必要な乗算-加算演算の回数が一般的に使用されます。畳み込み層では、numWeights*numOutputPixels 回の乗算-加算演算が実行されます。ここで、numWeights は層の重みの数で、numOutputPixels は層の出力に含まれるピクセルの数です。numOutputPixels = 1 の全結合層についても同じ式が成り立ちます。他の層での演算はカウントされません。

特徴の抽出

特徴抽出は、ネットワーク全体の学習に時間や手間をかけずに深層学習の能力を活用できる簡単で高速な方法です。これが必要とするものは学習イメージを一巡する 1 つのパスのみであるため、GPU がない場合、特に便利です。事前学習済みのネットワークから学習済みのイメージの特徴を抽出し、fitcsvm (Statistics and Machine Learning Toolbox™) を使用するサポート ベクター マシンなどの分類器の学習で特徴として使用できます。

特に、新しいデータセットの規模が小さい場合、特徴抽出を試みる価値があります。抽出された特徴についてシンプルな分類器に学習させるだけであるため、学習は高速です。また、学習するデータがほとんどないため、ネットワークの深い層を微調整しても精度が改善される可能性はあまりありません。

  • 使用するデータが元のデータと非常によく似ている場合は、ネットワークの深い部分で抽出された、より具体的な特徴が役に立つ可能性が高くなります。

  • 使用するデータが元のデータと大きく異なる場合、ネットワークの深い部分で抽出された特徴は、目的のタスクにあまり役立たない可能性があります。ネットワークの初期の部分で抽出された、より一般的な特徴について最後の分類器の学習を試みてください。新しいデータセットの規模が大きい場合、ゼロからのネットワークの学習を試みることもできます。

事前学習済みのネットワークを特徴抽出に使用する方法を示す例については、AlexNet を使用した特徴抽出を参照してください。

転移学習

事前学習済みのネットワークを開始点として、新しいデータセットについてネットワークに学習させることによって、ネットワークの深い層を微調整できます。多くの場合、転移学習を伴うネットワークを微調整する方が、新しいネットワークを構築して学習させるよりも簡単で時間がかかりません。このネットワークはイメージの特徴を既に多数学習していますが、ネットワークを微調整すると、新しいデータセットに固有の特徴をネットワークに学習させることができます。

ネットワークの微調整は、単純な特徴抽出よりも時間と手間がかかりますが、ネットワークにさまざまな特徴セットの抽出を学習させることができるため、最終的なネットワークの精度が向上する可能性があります。ネットワークは新しい特徴を学習するためにデータを必要とするので、新しいデータセットの規模が比較的大きい場合は、特徴抽出よりも微調整がうまく機能する可能性が高くなります。データセットが非常に大規模な場合、転移学習はゼロから学習する場合に比べて速くならない可能性があります。転移学習の実行方法を示す例は、AlexNet を使用した転移学習および新しいイメージを分類するための深層学習ネットワークの学習を参照してください。

ネットワークのインポートとエクスポート

TensorFlow®-Keras、Caffe、および ONNX™ (Open Neural Network Exchange) モデル形式からネットワークやネットワーク アーキテクチャをインポートできます。学習済みのネットワークを ONNX モデル形式でエクスポートすることもできます。

Keras からのインポート

TensorFlow-Keras から事前学習済みのネットワークをインポートするには、importKerasNetwork を使用します。ネットワークと重みは、同じ HDF5 (.h5) ファイルから、または個別の HDF5 ファイルと JSON (.json) ファイルからインポートできます。詳細は、importKerasNetwork を参照してください。

TensorFlow-Keras からネットワーク アーキテクチャをインポートするには、importKerasLayers を使用します。重みと共にまたは重みなしで、ネットワーク アーキテクチャをインポートできます。ネットワーク アーキテクチャと重みは、同じ HDF5 (.h5) ファイルから、または個別の HDF5 ファイルと JSON (.json) ファイルからインポートできます。詳細は、importKerasLayers を参照してください。

Caffe からのインポート

Caffe から事前学習済みのネットワークをインポートするには、関数 importCaffeNetwork を使用します。Caffe Model Zoo [3] には、利用できる事前学習済みのネットワークが多数あります。目的の .prototxt および .caffemodel ファイルをダウンロードし、importCaffeNetwork を使用して事前学習済みのネットワークを MATLAB® にインポートします。詳細は、importCaffeNetwork を参照してください。

Caffe ネットワークのネットワーク アーキテクチャをインポートできます。目的の .prototxt ファイルをダウンロードし、importCaffeLayers を使用して MATLAB にネットワーク層をインポートします。詳細は、importCaffeLayers を参照してください。

ONNX へのエクスポートとインポート

学習済みのネットワークを ONNX モデル形式でエクスポートするには、関数 exportONNXNetwork を使用します。その後で、ONNX モデルを ONXX モデルのインポートをサポートしている TensorFlow などの他の深層学習フレームワークにインポートできます。詳細は、exportONNXNetwork を参照してください。

事前学習済みのネットワークを ONNX からインポートするには、importONNXNetwork を使用します。重みと共にまたは重みなしで、ネットワーク アーキテクチャをインポートするには、importONNXLayers を使用します。

参照

[1] ImageNet. http://www.image-net.org

[2] Russakovsky, O., Deng, J., Su, H., et al. “ImageNet Large Scale Visual Recognition Challenge.” International Journal of Computer Vision (IJCV). Vol 115, Issue 3, 2015, pp. 211–252

[3] Caffe Model Zoo. http://caffe.berkeleyvision.org/model_zoo.html

参考

| | | | | | | | | | | | | | | |

関連するトピック