ドキュメンテーション

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

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

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

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

目的説明
分類

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

特徴の抽出

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

転移学習

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

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

googlenet などの関数を使用すると、アドオン エクスプローラーから事前学習済みのネットワークをダウンロードするためのリンクを取得できます。次の表に、ImageNet で学習させた利用可能な事前学習済みのネットワークとそれらのプロパティの一部を示します。ネットワークの深さは、入力層から出力層までのパスにある逐次畳み込み層または全結合層の最大数として定義されます。すべてのネットワークの入力は RGB イメージです。

ネットワーク深さサイズパラメーター数 (100 万個単位)イメージ入力サイズ
alexnet8

227 MB

61.0

227-by-227

vgg1616

515 MB

138

224-by-224

vgg1919

535 MB

144

224-by-224

squeezenet18

4.6 MB

1.24

227-by-227

googlenet22

27 MB

7.0

224-by-224

inceptionv348

89 MB

23.9

299-by-299

densenet201201

77 MB

20.0

224-by-224

mobilenetv254

13 MB

3.5

224-by-224

resnet1818

44 MB

11.7

224-by-224

resnet5050

96 MB

25.6

224-by-224

resnet101101

167 MB

44.6

224-by-224

xception71

85 MB

22.9299-by-299
inceptionresnetv2164

209 MB

55.9

299-by-299

Places365 で学習させた GoogLeNet

標準の GoogLeNet ネットワークは ImageNet データセットで学習していますが、Places365 データセット [3] [4] で学習させたネットワークを読み込むこともできます。Places365 で学習させたネットワークは、イメージを 365 個の異なる場所カテゴリ (野原、公園、滑走路、ロビーなど) に分類します。Places365 データセットで学習させた事前学習済みの GoogLeNet ネットワークを読み込むには、googlenet('Weights','places365') を使用します。転移学習を実行して新しいタスクを実行する場合、最も一般的な方法は、ImageNet データセットで事前学習させたネットワークを使用することです。新しいタスクがシーンの分類に似ている場合は、Places-365 で学習させたネットワークを使用すると精度を向上できることがあります。

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

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

ヒント

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

以下のプロットを使用して、ネットワークを使用した予測に要する時間と ImageNet 検証精度を比較します。精度が高く高速なものが優れたネットワークです。プロットには、最新の GPU (NVIDIA® TITAN Xp) およびサイズが 64 のミニバッチを使用した場合の、予測時間に対する分類精度が表示されています。予測時間は、最も高速なネットワークを基準にして測定されます。各マーカーの面積は、ディスク上でのネットワークのサイズに比例します。

比較対象のすべてのメトリクス (この場合は精度と予測時間) に関して、あるネットワークより他に優れたネットワークがない場合、そのネットワークは "パレート効率的" であると呼ばれます。すべてのパレート効率的なネットワークのセットは、"パレート境界" と呼ばれます。パレート境界には、両方のメトリクスについて他のネットワークに劣らないすべてのネットワークが含まれます。このプロットでは、精度と予測時間の平面のパレート境界上にあるネットワークをつないでいます。AlexNet、VGG-16、VGG-19、Xception、DenseNet-201 を除くすべてのネットワークがパレート境界上にあります。

メモ

以下のプロットは、さまざまなネットワークの相対速度の指標のみを示しています。厳密な予測と学習の反復回数は、使用するハードウェアとミニバッチ サイズによって異なります。

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

制約のあるハードウェアを使用して予測を実行する場合やインターネットを介してネットワークを分散させる場合は、ディスクやメモリ上でのネットワークのサイズも考慮してください。

ネットワークの精度

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

特徴の抽出

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

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

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

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

ResNets は多くの場合に適切な特徴抽出器です。事前学習済みのネットワークを特徴抽出に使用する方法を示す例については、Extract Image Features Using Pretrained Networkを参照してください。

転移学習

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

ヒント

ネットワークを微調整すると、多くの場合、精度を最大限に高められます。非常に小さいデータセット (クラスごとのイメージ数が約 20 未満) の場合、代わりに特徴抽出を試みてください。

ネットワークの微調整は、単純な特徴抽出よりも時間と手間がかかりますが、ネットワークにさまざまな特徴セットの抽出を学習させることができるため、多くの場合に最終的なネットワークの精度が向上します。ネットワークには新しい特徴を学習するためのデータがあるので、新しいデータセットの規模があまり小さくなければ、通常は特徴抽出よりも微調整がうまく機能します。転移学習の実行方法を示す例は、ディープ ネットワーク デザイナーを使用した転移学習および新しいイメージを分類するための深層学習ネットワークの学習を参照してください。

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

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

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

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

ONNX を中間形式として使用することで、TensorFlow、PyTorch、Caffe2、Microsoft® Cognitive Toolkit (CNTK)、Core ML、Apache MXNet™ など、ONNX モデルのエクスポートまたはインポートをサポートしている他の深層学習フレームワークと相互運用できます。

関数 exportONNXNetwork を使用して、学習済みの Deep Learning Toolbox ネットワークを ONNX モデル形式にエクスポートします。その後で、ONNX モデルを ONXX モデルのインポートをサポートしている他の深層学習フレームワークにインポートできます。

事前学習済みのネットワークを 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] Zhou, Bolei, Aditya Khosla, Agata Lapedriza, Antonio Torralba, and Aude Oliva. "Places: An image database for deep scene understanding." arXiv preprint arXiv:1610.02055 (2016).

[4] Places. http://places2.csail.mit.edu/

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

参考

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

関連するトピック