Main Content

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

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

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

目的説明
分類

事前学習済みのニューラル ネットワークを分類問題に直接適用します。新しいイメージを分類するには、minibatchpredict を使用します。予測された分類スコアをラベルに変換するには、関数 scores2label を使用します。事前学習済みのニューラル ネットワークを分類に使用する方法を示す例については、GoogLeNet を使用したイメージの分類を参照してください。

特徴抽出

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

転移学習

大規模なデータ セットで学習させたニューラル ネットワークから層を取り出し、新しいデータ セットで微調整します。詳細については、転移学習を参照してください。簡単な例については、転移学習入門を参照してください。他の事前学習済みのニューラル ネットワークを試してみるには、Retrain Neural Network to Classify New Imagesを参照してください。

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

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

ヒント

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

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

メモ

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

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

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

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

ニューラル ネットワークの精度

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

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

SqueezeNet ニューラル ネットワークを読み込むには、関数 imagePretrainedNetwork を使用します。

[net,classNames] = imagePretrainedNetwork;

他のニューラル ネットワークの場合は、関数 imagePretrainedNetwork の最初の引数を使用してモデルを指定します。ネットワークに必要なサポート パッケージがない場合、この関数は、ダウンロードするためのリンクを表示します。あるいは、アドオン エクスプローラーから事前学習済みのニューラル ネットワークをダウンロードすることもできます。

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

imagePretrainedNetwork のモデル名引数ニューラル ネットワーク名深さサイズパラメーター数 (100 万個単位)イメージ入力サイズ必要なサポート パッケージ
"squeezenet"SqueezeNet [2] 18

5.2 MB

1.24

227-by-227

なし
"googlenet"GoogLeNet [3][4]22

27 MB

7.0

224-by-224

Deep Learning Toolbox Model for GoogLeNet Network

"googlenet-places365"
"inceptionv3"Inception-v3 [5]48

89 MB

23.9

299-by-299

Deep Learning Toolbox Model for Inception-v3 Network
"densenet201"DenseNet-201 [6]201

77 MB

20.0

224-by-224

Deep Learning Toolbox Model for DenseNet-201 Network
"mobilenetv2"MobileNet-v2 [7]53

13 MB

3.5

224-by-224

Deep Learning Toolbox Model for MobileNet-v2 Network
"resnet18"ResNet-18 [8]18

44 MB

11.7

224-by-224

Deep Learning Toolbox Model for ResNet-18 Network
"resnet50"ResNet-50 [8]50

96 MB

25.6

224-by-224

Deep Learning Toolbox Model for ResNet-50 Network
"resnet101"ResNet-101 [8]101

167 MB

44.6

224-by-224

Deep Learning Toolbox Model for ResNet-101 Network
"xception"Xception [9]71

85 MB

22.9299-by-299Deep Learning Toolbox Model for Xception Network
"inceptionresnetv2"Inception-ResNet-v2 [10]164

209 MB

55.9

299-by-299

Deep Learning Toolbox Model for Inception-ResNet-v2 Network
"shufflenet"ShuffleNet [11]505.4 MB1.4224-by-224Deep Learning Toolbox Model for ShuffleNet Network
"nasnetmobile"NASNet-Mobile [12]*20 MB 5.3224-by-224Deep Learning Toolbox Model for NASNet-Mobile Network
"nasnetlarge"NASNet-Large [12]*332 MB88.9331-by-331Deep Learning Toolbox Model for NASNet-Large Network
"darknet19"DarkNet-19 [13]1978 MB20.8256 x 256Deep Learning Toolbox Model for DarkNet-19 Network
"darknet53"DarkNet-53 [13]53155 MB41.6256 x 256Deep Learning Toolbox Model for DarkNet-53 Network
"efficientnetb0"EfficientNet-b0 [14]8220 MB5.3

224-by-224

Deep Learning Toolbox Model for EfficientNet-b0 Network
"alexnet"AlexNet [15]8

227 MB

61.0

227-by-227

Deep Learning Toolbox Model for AlexNet Network
"vgg16"VGG-16 [16]16

515 MB

138

224-by-224

Deep Learning Toolbox Model for VGG-16 Network
"vgg19"VGG-19 [16]19

535 MB

144

224-by-224

Deep Learning Toolbox Model for VGG-19 Network

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

Places365 で学習させた GoogLeNet

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

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

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

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

[net,classNames] = imagePretrainedNetwork;
deepNetworkDesigner(net)

Deep Network Designer displaying a pretrained SqueezeNet neural 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 neural networks

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

特徴抽出

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

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

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

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

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

転移学習

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

ヒント

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

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

Transfer learning workflow

ニューラル ネットワークのインポートとエクスポート

TensorFlow™ 2、TensorFlow-Keras、PyTorch®、および ONNX™ (Open Neural Network Exchange) モデル形式から、ニューラル ネットワークをインポートできます。Deep Learning Toolbox のニューラル ネットワークを TensorFlow 2 および ONNX モデル形式にエクスポートすることもできます。

インポート関数

外部の深層学習プラットフォームとモデルの形式dlnetwork としてのモデルのインポート
SavedModel 形式の TensorFlow ニューラル ネットワークまたは TensorFlow-Keras ニューラル ネットワークimportNetworkFromTensorFlow
.pt ファイルに含まれるトレースされた PyTorch モデルimportNetworkFromPyTorch
ONNX モデル形式のニューラル ネットワークimportNetworkFromONNX

関数 importNetworkFromTensorFlowimportNetworkFromPyTorch、および importNetworkFromONNX は、これらの関数が組み込み MATLAB® 層に変換できない TensorFlow 層、PyTorch 層、または ONNX 演算を含むモデルがインポートされたとき、カスタム層を自動的に生成します。これらの関数は、自動的に生成したカスタム層を現在のフォルダー内のパッケージに保存します。詳細については、Autogenerated Custom Layersを参照してください。

エクスポート関数

外部の深層学習プラットフォームとモデルの形式ニューラル ネットワークまたは層グラフのエクスポート
Python® パッケージに含まれる TensorFlow 2 モデルexportNetworkToTensorFlow
ONNX モデル形式exportONNXNetwork

関数 exportNetworkToTensorFlow は、Deep Learning Toolbox のニューラル ネットワークを Python パッケージに含まれる TensorFlow モデルとして保存します。エクスポートされたモデルを読み込んで標準の TensorFlow 形式として保存する方法の詳細については、Load Exported TensorFlow ModelおよびSave Exported TensorFlow Model in Standard Formatを参照してください。

ONNX を中間形式として使用することで、ONNX モデルのエクスポートまたはインポートをサポートしている他の深層学習フレームワークと相互運用できます。

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

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

Audio Toolbox™ には、事前学習済みのオーディオ深層学習ネットワーク向けの MATLAB および Simulink® のサポートが用意されています。事前学習済みのネットワークを使用して、YAMNet で音を分類し、CREPE でピッチを推定し、VGGish または OpenL3 で特徴埋め込みを抽出し、VADNet で音声区間検出 (VAD) を実行します。ディープ ネットワーク デザイナーを使用し、事前学習済みのオーディオ ニューラル ネットワークをインポートして可視化することもできます。

関数 audioPretrainedNetwork (Audio Toolbox) を使用して、事前学習済みのオーディオ ネットワークを読み込みます。オーディオの前処理、ネットワーク推論、およびネットワーク出力の後処理を扱うエンドツーエンド関数の 1 つを使用することもできます。次の表は、利用可能な事前学習済みオーディオ ニューラル ネットワークの一覧です。

audioPretrainedNetwork のモデル名引数ニューラル ネットワーク名前処理関数および後処理関数エンドツーエンド関数Simulink ブロック
"yamnet"YAMNetyamnetPreprocess (Audio Toolbox)classifySound (Audio Toolbox)YAMNet (Audio Toolbox), Sound Classifier (Audio Toolbox)
"vggish"VGGishvggishPreprocess (Audio Toolbox)vggishEmbeddings (Audio Toolbox)VGGish (Audio Toolbox), VGGish Embeddings (Audio Toolbox)
"openl3"OpenL3openl3Preprocess (Audio Toolbox)openl3Embeddings (Audio Toolbox)OpenL3 (Audio Toolbox), OpenL3 Embeddings (Audio Toolbox)
"crepe"CREPEcrepePreprocess (Audio Toolbox), crepePostprocess (Audio Toolbox)pitchnn (Audio Toolbox)CREPE (Audio Toolbox), Deep Pitch Estimator (Audio Toolbox)
"vadnet"VADNetvadnetPreprocess (Audio Toolbox), vadnetPostprocess (Audio Toolbox)detectspeechnn (Audio Toolbox)なし

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

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

GitHub の事前学習済みモデル

最新の事前学習済みモデルを見つけるには、MATLAB Deep Learning Model Hub を参照してください。

次に例を示します。

参照

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

[2] Iandola, Forrest N., Song Han, Matthew W. Moskewicz, Khalid Ashraf, William J. Dally, and Kurt Keutzer. "SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5 MB model size." Preprint, submitted November 4, 2016. https://arxiv.org/abs/1602.07360.

[3] Szegedy, Christian, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, and Andrew Rabinovich. "Going deeper with convolutions." In Proceedings of the IEEE conference on computer vision and pattern recognition, pp. 1-9. 2015.

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

[5] Szegedy, Christian, Vincent Vanhoucke, Sergey Ioffe, Jon Shlens, and Zbigniew Wojna. "Rethinking the inception architecture for computer vision." In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pp. 2818-2826. 2016.

[6] Huang, Gao, Zhuang Liu, Laurens Van Der Maaten, and Kilian Q. Weinberger. "Densely Connected Convolutional Networks." In CVPR, vol. 1, no. 2, p. 3. 2017.

[7] Sandler, M., Howard, A., Zhu, M., Zhmoginov, A. and Chen, L.C. "MobileNetV2: Inverted Residuals and Linear Bottlenecks." In 2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition (pp. 4510-4520). IEEE.

[8] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. "Deep residual learning for image recognition." In Proceedings of the IEEE conference on computer vision and pattern recognition, pp. 770-778. 2016.

[9] Chollet, F., 2017. "Xception: Deep Learning with Depthwise Separable Convolutions." arXiv preprint, pp.1610-02357.

[10] Szegedy, Christian, Sergey Ioffe, Vincent Vanhoucke, and Alexander A. Alemi. "Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning." In AAAI, vol. 4, p. 12. 2017.

[11] Zhang, Xiangyu, Xinyu Zhou, Mengxiao Lin, and Jian Sun. "ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices." arXiv preprint arXiv:1707.01083v2 (2017).

[12] Zoph, Barret, Vijay Vasudevan, Jonathon Shlens, and Quoc V. Le. "Learning Transferable Architectures for Scalable Image Recognition." arXiv preprint arXiv:1707.07012 2, no. 6 (2017).

[13] Redmon, Joseph. “Darknet: Open Source Neural Networks in C.” https://pjreddie.com/darknet.

[14] Mingxing Tan and Quoc V. Le, “EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks,” ArXiv Preprint ArXiv:1905.1194, 2019.

[15] Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton. "ImageNet Classification with Deep Convolutional Neural Networks." Communications of the ACM 60, no. 6 (May 24, 2017): 84–90. https://doi.org/10.1145/3065386

[16] Simonyan, Karen, and Andrew Zisserman. "Very deep convolutional networks for large-scale image recognition." arXiv preprint arXiv:1409.1556 (2014).

[17] 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

[18] 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).

参考

| | | | | | | | |

関連するトピック

外部の Web サイト