Main Content

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

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

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

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

目的説明
分類

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

特徴抽出

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

転移学習

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

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

事前学習済みのネットワークには、問題に適用するネットワークを選択する際に重要になるさまざまな特性があります。最も重要な特性は、ネットワークの精度、速度、およびサイズです。ネットワークの選択には、通常、これらの特性の間のトレードオフが生じます。以下のプロットを使用して、ネットワークを使用した予測に要する時間と ImageNet 検証精度を比較します。

ヒント

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

メモ

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

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

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

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

ネットワークの精度

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

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

SqueezeNet ネットワークを読み込むには、コマンド ラインで squeezenet と入力します。

net = squeezenet;

その他のネットワークについては、googlenet などの関数を使用すると、アドオン エクスプローラーから事前学習済みのネットワークをダウンロードするためのリンクを取得できます。

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

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

5.2 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

mobilenetv253

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

shufflenet505.4 MB1.4224-by-224
nasnetmobile*20 MB 5.3224-by-224
nasnetlarge*332 MB88.9331-by-331
darknet191978 MB20.8256 x 256
darknet5353155 MB41.6256 x 256
efficientnetb08220 MB5.3

224-by-224

alexnet8

227 MB

61.0

227-by-227

vgg1616

515 MB

138

224-by-224

vgg1919

535 MB

144

224-by-224

*NASNet-Mobile ネットワークおよび NASNet-Large ネットワークは、モジュールの線形シーケンスで構成されていません。

Places365 で学習させた GoogLeNet

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

特徴抽出

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

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

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

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

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

転移学習

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

ヒント

ネットワークを微調整すると、多くの場合、精度を最大限に高められます。非常に小さいデータセット (クラスごとのイメージ数が約 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 を使用します。

オーディオ アプリケーション用の事前学習済みのネットワーク

Deep Learning Toolbox を Audio Toolbox™ と共に使用して、オーディオ処理および音声処理アプリケーション用の事前学習済みのネットワークを使用します。

Audio Toolbox には、事前学習済みの VGGish および YAMNet ネットワークが用意されています。関数 vggish (Audio Toolbox) および yamnet (Audio Toolbox) を使用して、事前学習済みのネットワークを直接操作します。関数 classifySound (Audio Toolbox) は、音を特定して 521 個のカテゴリのいずれかに分類することができるよう、YAMNet に対して必要な前処理および後処理を実行します。関数 yamnetGraph (Audio Toolbox) を使用すると、YAMNet オントロジーを検索できます。関数 vggishFeatures (Audio Toolbox) は、特徴の埋め込みを抽出し、機械学習や深層学習のシステムに入力できるように、VGGish に対して必要な前処理および後処理を実行します。オーディオ アプリケーション用の深層学習の使用に関する詳細については、Introduction to Deep Learning for Audio Applications (Audio Toolbox)を参照してください。

転移学習や特徴抽出を実行するには、VGGish および YAMNet を使用します。例については、Transfer Learning with Pretrained Audio Networks (Audio Toolbox)を参照してください。

参照

[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

参考

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

関連するトピック