Main Content

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

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

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

目的 説明
分類

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

特徴抽出

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

転移学習

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

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

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

ヒント

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

Comparison of the accuracy and relative prediction time of the pretrained networks. As the accuracy of the pretrained networks increases, so does the relative prediction time.

メモ

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

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

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

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

ネットワークの精度

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

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

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

net = squeezenet;

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

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

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

5.2 MB

1.24

227-by-227

googlenet 22

27 MB

7.0

224-by-224

inceptionv3 48

89 MB

23.9

299-by-299

densenet201 201

77 MB

20.0

224-by-224

mobilenetv2 53

13 MB

3.5

224-by-224

resnet18 18

44 MB

11.7

224-by-224

resnet50 50

96 MB

25.6

224-by-224

resnet101 101

167 MB

44.6

224-by-224

xception 71

85 MB

22.9 299-by-299
inceptionresnetv2 164

209 MB

55.9

299-by-299

shufflenet 50 5.4 MB 1.4 224-by-224
nasnetmobile * 20 MB 5.3 224-by-224
nasnetlarge * 332 MB 88.9 331-by-331
darknet19 19 78 MB 20.8 256 x 256
darknet53 53 155 MB 41.6 256 x 256
efficientnetb0 82 20 MB 5.3

224-by-224

alexnet 8

227 MB

61.0

227-by-227

vgg16 16

515 MB

138

224-by-224

vgg19 19

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 で学習させたネットワークを使用すると精度を向上できることがあります。

オーディオ タスクに適した事前学習済みのネットワークの詳細については、オーディオ アプリケーション用の事前学習済みのネットワークを参照してください。

事前学習済みのネットワークの可視化

ディープ ネットワーク デザイナーを使用し、事前学習済みのネットワークを読み込んで可視化できます。

deepNetworkDesigner(squeezenet)

Deep Network Designer displaying a pretrained SqueezeNet network

層のプロパティを表示して編集するには、層を選択します。層のプロパティに関する情報については、層の名前の横にあるヘルプ アイコンをクリックしてください。

Cross channel normalization layer selected in Deep Network Designer. The PROPERTIES pane shows the properties of the layer.

ディープ ネットワーク デザイナーで[新規]をクリックし、事前学習済みの他のネットワークを探索します。

Deep Network Designer start page showing available pretrained networks

ネットワークをダウンロードする必要がある場合は、目的のネットワークで一時停止し、[インストール]をクリックしてアドオン エクスプローラーを開きます。

特徴抽出

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

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

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

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

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

転移学習

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

ヒント

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

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

Transfer learning workflow

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

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

インポート関数

外部の深層学習プラットフォームとモデルの形式 ネットワークとしてのモデルのインポート 層グラフとしてのモデルのインポート
ONNX モデル形式のネットワーク importONNXNetwork importONNXLayers
SavedModel 形式の TensorFlow ネットワーク importTensorFlowNetwork importTensorFlowLayers
HDF5 形式または JSON 形式の TensorFlow-Keras ネットワーク importKerasNetwork importKerasLayers
.prototxtファイルのアーキテクチャと.caffemodelファイルの重みを使用する咖啡ネットワーク importCaffeNetwork importCaffeLayers

関数importTensorFlowNetworkおよび関数importTensorFlowLayersは、関数importKerasNetworkおよび関数importKerasLayersよりも推奨されます。

  • 関数importTensorFlowNetworkおよび関数importTensorFlowLayersは TensorFlow 2 をサポートします。サポートされる TensorFlow のバージョンの詳細についてはLimitationsを参照してください。TensorFlow 1 から TensorFlow 2 に移行する利点の詳細については、https://www.tensorflow.org/guide/migrateを参照してください。

  • 関数importTensorFlowNetworkと関数importTensorFlowLayersは SavedModel 形式をサポートしますが、importKerasNetworkimportKerasLayersは HDF5 形式をサポートします。TensorFlow は、SavedModel 形式を推奨します。ネットワークを MATLAB®にインポートする前に、TensorFlow ネットワークを SavedModel 形式に変換することを検討してください。

  • 関数importTensorFlowNetworkと関数importTensorFlowLayersは、カスタム TensorFlow 層をインポートするとき、またはソフトウェアが TensorFlow 層を同等の組み込み MATLAB 層に変換できないときに、カスタム層を自動的に生成できます。例については、Import TensorFlow Network with Autogenerated Custom Layersを参照してください。

関数importONNXNetworkと関数importONNXLayersは、ソフトウェアが ONNX 演算子を同等の組み込み MATLAB 層に変換できないときに、カスタム層を生成することもできます。例については、ONNX ネットワークのインポートとカスタム層の自動生成を参照してください。まれなケースとして、importONNXNetworkおよびimportONNXLayersが ONNX モデルを層にインポートできないときは、importONNXFunctionを使用してモデルを関数としてインポートできます。ONNX インポート関数を選択する方法の詳細については、事前学習済みの ONNX ネットワークをインポートする関数の選択を参照してください。

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

Import networks from and export networks to external deep learning platforms.

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

Audio Toolbox™ には、事前学習済みの VGGish、YAMNet、OpenL3、および CREPE ネットワークが用意されています。MATLAB 内の関数vggish(Audio Toolbox)、関数yamnet(Audio Toolbox)、関数openl3(Audio Toolbox)、および関数crepe(Audio Toolbox)、もしくは Simulink®内のVGGish(Audio Toolbox)ブロックおよびYAMNet(Audio Toolbox)ブロックを使用して、事前学習済みのネットワークを直接操作します。ディープ ネットワーク デザイナーを使用し、事前学習済みのオーディオ ネットワークをインポートして可視化することもできます。

次の表に、利用可能な事前学習済みのオーディオ ネットワークとそれらのプロパティの一部を示します。

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

89.1 MB

22.2

1024×1×1

openl3(Audio Toolbox) 8

18.8 MB

4.68

128×199×1

vggish(Audio Toolbox) 9

289 MB

72.1

96×64×1

yamnet(Audio Toolbox) 28

15.5 MB

3.75

96×64×1

転移学習や特徴抽出を実行するには、VGGish および YAMNet を使用します。VGGish と OpenL3 の特徴埋め込みを抽出して、機械学習や深層学習のシステムに入力します。関数classifySound(Audio Toolbox)Sound Classifier(Audio Toolbox)ブロックは、YAMNet を使用して音を特定し、その音を 521 個のカテゴリのいずれかに分類します。関数pitchnn(Audio Toolbox)は、CREPE を使用して、深層学習によるピッチ推定を実行します。

事前学習済みのオーディオ ネットワークを新しいタスクに適応させる方法を示す例については、Transfer Learning with Pretrained Audio Networks(Audio Toolbox)およびTransfer Learning with Pretrained Audio Networks in Deep Network Designerを参照してください。

オーディオ アプリケーション用の深層学習の使用に関する詳細については、Introduction to Deep Learning for Audio Applications(Audio Toolbox)を参照してください。

GitHubの事前学習済みモデル

最新の事前学習済みモデルを見つけるには、MATLAB深学习模型中心を参照してください。

次に例を示します。

  • GPT-2、BERT、FinBERT などの変換器モデルについては、Transformer Models for MATLABの GitHub®リポジトリを参照してください。

  • YOLOv4-coco や YOLOv4-tiny-coco などの事前学習済みの YOLO-v4 オブジェクト検出モデルについては、Pretrained YOLO-v4 Network for Object Detectionの GitHub リポジトリを参照してください。

参照

[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

参考

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

関連するトピック

外部の Web サイト