Reti neurali profonde preaddestrate
È possibile prendere una rete neurale di classificazione delle immagini preaddestrata, che ha già imparato a estrarre feature potenti e informative dalle immagini naturali e utilizzarla come punto di partenza per apprendere una nuova attività. La maggior parte delle reti neurali preaddestrate viene addestrata su un sottoinsieme del database ImageNet [1], utilizzato nell’ImageNet Large-Scale Visual Recognition Challenge (ILSVRC) [17]. Queste reti neurali sono state addestrate su oltre un milione di immagini e sono in grado di classificare le immagini in 1000 categorie di oggetti, come tastiera, tazza di caffè, matita e molti animali. Utilizzare una rete neurale preaddestrata con il transfer learning è tipicamente molto più rapido e semplice rispetto all'addestramento di una rete neurale da zero.
È possibile utilizzare le reti neurali precedentemente addestrate per le seguenti attività:
Scopo | Descrizione |
---|---|
Classificazione | Applicazione di reti neurali preaddestrate direttamente ai problemi di classificazione. Per classificare una nuova immagine, utilizzare |
Estrazione di feature | Utilizzo di una rete neurale preaddestrata per l’estrazione di feature, utilizzando le attivazioni dei livelli come feature. È possibile utilizzare queste attivazioni come feature per addestrare un altro modello di Machine Learning, come una macchina a vettori di supporto (SVM). Per ulteriori informazioni, vedere Estrazione di feature. Per un esempio, vedere Extract Image Features Using Pretrained Network. |
Transfer learning | Acquisizione di livelli da una rete neurale addestrata su un insieme di dati di grandi dimensioni e perfezionamento su un nuovo insieme di dati. Per ulteriori informazioni, vedere Transfer learning. Per un semplice esempio, vedere Come iniziare a utilizzare il transfer learning. Per provare ulteriori reti neurali preaddestrate, vedere Retrain Neural Network to Classify New Images. |
Confronto tra reti neurali preaddestrate
Le reti neurali preaddestrate possiedono caratteristiche diverse che sono importanti al momento della scelta della rete neurale da applicare al problema. Le caratteristiche più importanti sono la precisione, la velocità e la dimensione della rete neurale. La scelta di una rete neurale è generalmente un compromesso tra queste caratteristiche. Utilizzare il grafico sottostante per confrontare la precisione della convalida di ImageNet con il tempo necessario per fare una previsione utilizzando la rete neurale.
Suggerimento
Per iniziare con il transfer learning, provare a scegliere una delle reti neurali più veloci, come SqueezeNet o GoogLeNet. In questo modo è possibile iterare rapidamente e provare diverse impostazioni, come le fasi di pre-elaborazione dei dati e le opzioni di addestramento. Una volta individuate le impostazioni che funzionano bene, provare una rete neurale più accurata, come Inception-v3 o una ResNet e controllare se si verifica un miglioramento dei risultati.
Nota
Il grafico qui sopra mostra solo un'indicazione delle velocità relative delle diverse reti neurali. I tempi esatti di previsione e di iterazione dell'addestramento dipendono dall'hardware e dalla dimensione del mini-batch utilizzato.
Una buona rete neurale ha un'elevata precisione ed è veloce. Il grafico mostra la precisione della classificazione rispetto al tempo di previsione quando si utilizza una GPU moderna (una NVIDIA® Tesla® P100) e un mini-batch con dimensione 128. Il tempo di previsione è misurato rispetto alla rete neurale più veloce. L'area di ogni marcatore è proporzionale alla dimensione della rete neurale sul disco.
La precisione della classificazione sull’insieme di convalida ImageNet è il modo più comune per misurare la precisione delle reti neurali addestrate su ImageNet. Le reti neurali che sono precise su ImageNet sono spesso precise anche quando vengono applicate ad altri insiemi di dati delle immagini naturali utilizzando il transfer learning o l’estrazione di feature. Questa generalizzazione è possibile in quanto le reti neurali hanno imparato a estrarre feature potenti e informative dalle immagini naturali e tali feature divengono generali per altri insiemi di dati simili. Tuttavia, un'elevata precisione su ImageNet non sempre si trasferisce direttamente ad altre attività ed è quindi opportuno provare più reti neurali.
Se si desidera eseguire la previsione utilizzando hardware limitato o distribuendo le reti neurali su Internet, è necessario considerare anche la dimensione della rete neurale sul disco e nella memoria.
Precisione della rete neurale
Esistono diversi modi per calcolare la precisione della classificazione sull’insieme di convalida di ImageNet e diverse sorgenti utilizzano metodi diversi. A volte viene utilizzato un insieme di più modelli mentre, altre volte, ciascuna immagine viene valutata più volte utilizzando più ritagli. A volte viene indicata la precisione top-5 anziché la precisione standard (top-1). A causa di queste differenze, spesso non è possibile confrontare direttamente le precisioni dalle diverse sorgenti. Le precisioni delle reti neurali preaddestrate nel Deep Learning Toolbox™ sono le precisioni standard (top-1) che utilizzano un singolo modello e un singolo ritaglio dell’immagine centrale.
Caricamento delle reti neurali preaddestrate
Per caricare la rete neurale SqueezeNet, utilizzare la funzione imagePretrainedNetwork
.
[net,classNames] = imagePretrainedNetwork;
Per altre reti neurali, specificare il modello utilizzando il primo argomento della funzione imagePretrainedNetwork
. Se non si dispone del pacchetto di supporto richiesto per la rete, la funzione fornisce un link di download. In alternativa, è possibile scaricare le reti neurali preaddestrate da Add-On Explorer.
Questa tabella elenca le reti neurali preaddestrate disponibili che sono state addestrate su ImageNet e alcune delle loro proprietà. La profondità della rete neurale è definita come il maggior numero di livelli convoluzionali sequenziali o completamente connessi su un percorso dall'input all'output della rete. Gli ingressi di tutte le reti neurali sono immagini RGB.
Nome del modello dell'argomento imagePretrainedNetwork | Nome della rete neurale | Profondità | Dimensione | Parametri (milioni) | Dimensione dell'immagine di input | Pacchetto di supporto richiesto |
---|---|---|---|---|---|---|
"squeezenet" | SqueezeNet [2] | 18 | 5,2 MB | 1.24 | 227x227 | Nessuno |
"googlenet" | GoogLeNet [3][4] | 22 | 27 MB | 7.0 | 224x224 | Deep Learning Toolbox, modello per la rete GoogLeNet |
"googlenet-places365" | ||||||
"inceptionv3" | Inception-v3 [5] | 48 | 89 MB | 23.9 | 299x299 | Deep Learning Toolbox, modello per la rete Inception-v3 |
"densenet201" | DenseNet-201 [6] | 201 | 77 MB | 20.0 | 224x224 | Deep Learning Toolbox, modello per la rete DenseNet-201 |
"mobilenetv2" | MobileNet-v2 [7] | 53 | 13 MB | 3.5 | 224x224 | Deep Learning Toolbox, modello per la rete MobileNet-v2 |
"resnet18" | ResNet-18 [8] | 18 | 44 MB | 11.7 | 224x224 | Deep Learning Toolbox, modello per la rete ResNet-18 |
"resnet50" | ResNet-50 [8] | 50 | 96 MB | 25.6 | 224x224 | Deep Learning Toolbox, modello per la rete ResNet-50 |
"resnet101" | ResNet-101 [8] | 101 | 167 MB | 44.6 | 224x224 | Deep Learning Toolbox, modello per la rete ResNet-101 |
"xception" | Xception [9] | 71 | 85 MB | 22.9 | 299x299 | Deep Learning Toolbox, modello per la rete Xception |
"inceptionresnetv2" | Inception-ResNet-v2 [10] | 164 | 209 MB | 55.9 | 299x299 | Deep Learning Toolbox, modello per la rete Inception-ResNet-v2 |
"shufflenet" | ShuffleNet [11] | 50 | 5,4 MB | 1.4 | 224x224 | Deep Learning Toolbox, modello per la rete ShuffleNet |
"nasnetmobile" | NASNet-Mobile [12] | * | 20 MB | 5.3 | 224x224 | Deep Learning Toolbox, modello per la rete NASNet-Mobile |
"nasnetlarge" | NASNet-Large [12] | * | 332 MB | 88.9 | 331x331 | Deep Learning Toolbox, modello per la rete NASNet-Large |
"darknet19" | DarkNet-19 [13] | 19 | 78 MB | 20.8 | 256x256 | Deep Learning Toolbox, modello per la rete DarkNet-19 |
"darknet53" | DarkNet-53 [13] | 53 | 155 MB | 41.6 | 256x256 | Deep Learning Toolbox, modello per la rete DarkNet-53 |
"efficientnetb0" | EfficientNet-b0 [14] | 82 | 20 MB | 5.3 | 224x224 | Deep Learning Toolbox, modello per la rete EfficientNet-b0 |
"alexnet" | AlexNet [15] | 8 | 227 MB | 61.0 | 227x227 | Deep Learning Toolbox, modello per la rete AlexNet |
"vgg16" | VGG-16 [16] | 16 | 515 MB | 138 | 224x224 | Deep Learning Toolbox, modello per la rete VGG-16 |
"vgg19" | VGG-19 [16] | 19 | 535 MB | 144 | 224x224 | Deep Learning Toolbox, modello per la rete VGG-19 |
*Le reti neurali NASNet-Mobile e NASNet-Large non consistono in una sequenza lineare di moduli.
GoogLeNet addestrato su Places365
La rete neurale GoogLeNet standard è addestrata sull’insieme di dati di ImageNet, ma è anche possibile caricare una rete neurale addestrata sull’insieme di dati di Places365 [18] [4]. La rete neurale addestrata su Places365 classifica le immagini in 365 diverse categorie di luoghi, come campi, parchi, piste e atri. Per caricare una rete neurale GoogLeNet preaddestrata, che è stata addestrata sull’insieme di dati di Places365, utilizzare imagePretrainedNetwork("googlenet-places365")
. Quando si esegue il transfer learning per una nuova attività, l'approccio più comune è quello di utilizzare reti neurali preaddestrate su ImageNet. Se la nuova attività è simile alla classificazione di scene, l'utilizzo della rete neurale addestrata su Places365 può fornire una precisione maggiore.
Per informazioni sulle reti neurali preaddestrate adatte ad attività audio, vedere Reti neurali preaddestrate per applicazioni audio.
Visualizzazione delle reti neurali preaddestrate
È possibile caricare e visualizzare le reti neurali preaddestrate utilizzando Deep Network Designer.
[net,classNames] = imagePretrainedNetwork; deepNetworkDesigner(net)
Selezionare un livello per visualizzare e modificare le sue proprietà. Fare clic sull'icona di aiuto accanto al nome del livello per ottenere le informazioni sulle sue proprietà.
Scoprire altre reti neurali preaddestrate in Deep Network Designer facendo clic su New.
Se è necessario scaricare una rete neurale, fermarsi sulla rete neurale desiderata e fare clic su Install per aprire l’Add-On Explorer.
Estrazione di feature
L'estrazione di feature è un modo semplice e veloce per utilizzare la potenza del Deep Learning senza investire tempo e fatica nell'addestramento di una rete neurale completa. Considerando che richiede un solo passaggio sulle immagini di addestramento, è particolarmente utile se non si dispone di una GPU. Si estraggono le feature apprese dell’immagine utilizzando una rete neurale preaddestrata e le si utilizzano per addestrare un classificatore, come una macchina a vettori di supporto utilizzando fitcsvm
(Statistics and Machine Learning Toolbox).
Provare l'estrazione di feature quando il nuovo insieme di dati è molto piccolo. Poiché si addestra solo un classificatore semplice sulle feature estratte, l'addestramento è veloce. È anche improbabile che il perfezionamento dei livelli più profondi della rete neurale migliori la precisione, poiché i dati da cui apprendere sono pochi.
Se i dati sono molto simili a quelli originali, è probabile che le feature più specifiche estratte in profondità nella rete neurale siano utili per la nuova attività.
Se i dati sono molto diversi da quelli originali, le feature estratte più in profondità nella rete neurale potrebbero essere meno utili per l’attività. Provare ad addestrare il classificatore finale su feature più generali, estratte da un livello di rete neurale precedente. Se il nuovo insieme di dati è ampio, si può anche provare ad addestrare una rete neurale da zero.
Spesso le reti neurali ResNet sono ottimi estrattori di feature. Per un esempio che mostra come utilizzare una rete neurale preaddestrata per l'estrazione di feature, vedere Extract Image Features Using Pretrained Network.
Transfer learning
È possibile eseguire il perfezionamento dei livelli più profondi della rete neurale addestrando la rete neurale sul nuovo insieme di dati, utilizzando la rete neurale preaddestrata come punto di partenza. Solitamente, eseguire il perfezionamento di una rete neurale tramite il transfer learning è molto più veloce e semplice che costruire e addestrare una nuova rete neurale. La rete neurale ha già appreso un ricco insieme di feature dell'immagine, ma tramite il suo perfezionamento può apprendere feature specifiche per il nuovo insieme di dati. Se si dispone di un insieme di dati molto ampio, il transfer learning potrebbe non essere più veloce dell’addestramento da zero.
Suggerimento
Il perfezionamento di una rete neurale spesso offre la massima precisione. Per gli insiemi di dati molto piccoli (meno di circa 20 immagini per classe), è preferibile provare l'estrazione di feature.
Il perfezionamento di una rete neurale è più lento e richiede uno sforzo maggiore rispetto alla semplice estrazione di feature ma, poiché la rete neurale può imparare a estrarre un insieme diverso di feature, la rete neurale finale è spesso maggiormente precisa. Solitamente, il perfezionamento funziona meglio dell'estrazione di feature, a condizione che il nuovo insieme di dati non sia troppo piccolo, in modo che la rete neurale disponga di dati da cui apprendere nuove feature. Per esempi che mostrano come eseguire il transfer learning, vedere Preparazione della rete per il transfer learning con Deep Network Designer e Retrain Neural Network to Classify New Images.
Importazione ed esportazione di reti neurali
È possibile importare reti neurali da TensorFlow™ 2, TensorFlow-Keras, PyTorch® e dal formato di modello ONNX™ (Open Neural Network Exchange). È inoltre possibile esportare le reti neurali Deep Learning Toolbox su TensorFlow 2 e nel formato di modello ONNX.
Funzioni di importazione
Piattaforma esterna di Deep Learning e formato di modello | Importazione del modello come dlnetwork |
---|---|
Rete neurale TensorFlow o TensorFlow-Keras in formato SavedModel | importNetworkFromTensorFlow |
Modello PyTorch tracciato in un file .pt | importNetworkFromPyTorch |
Rete neurale in formato di modello ONNX | importNetworkFromONNX |
Le funzioni importNetworkFromTensorFlow
, importNetworkFromPyTorch
e importNetworkFromONNX
creano livelli personalizzati generati automaticamente quando si importa un modello con livelli TensorFlow, PyTorch o con gli operatori ONNX che le funzioni non possono convertire in livelli MATLAB® integrati. Le funzioni salvano i livelli personalizzati generati automaticamente in un pacchetto nella cartella corrente. Per ulteriori informazioni, vedere Autogenerated Custom Layers.
Funzioni di esportazione
Piattaforma esterna di Deep Learning e formato di modello | Esportazione della rete neurale o di un grafico di livello |
---|---|
Modello TensorFlow 2 nel pacchetto Python® | exportNetworkToTensorFlow |
Formato di modello ONNX | exportONNXNetwork |
La funzione exportNetworkToTensorFlow
salva una rete neurale Deep Learning Toolbox come modello TensorFlow in un pacchetto Python. Per ulteriori informazioni su come caricare il modello esportato e salvarlo in un formato TensorFlow standard, vedere Load Exported TensorFlow Model e Save Exported TensorFlow Model in Standard Format.
Utilizzando ONNX come un formato intermedio, è possibile interoperare con altri framework di Deep Learning che supportano l’esportazione o l’importazione del modello ONNX.
Reti neurali preaddestrate per applicazioni audio
Audio Toolbox™ fornisce il supporto MATLAB e Simulink® per le reti di Deep Learning audio preaddestrate. Utilizzare le reti preaddestrate per classificare i suoni con YAMNet, stimare l'intonazione con CREPE, estrarre feature di embedding con VGGish o OpenL3 ed eseguire il rilevamento dell'attività vocale (VAD) con VADNet. È inoltre possibile importare e visualizzare le reti neurali preaddestrate per l’audio utilizzando Deep Network Designer.
Utilizzare la funzione audioPretrainedNetwork
(Audio Toolbox) per caricare una rete audio preaddestrata. È inoltre possibile utilizzare una delle funzioni end-to-end che gestiscono la pre-elaborazione dell'audio, l'inferenza della rete e la post-elaborazione dell'output di rete. Questa tabella elenca le reti neurali audio pre-addestrate disponibili.
Nome del modello dell'argomento audioPretrainedNetwork | Nome della rete neurale | Funzioni di pre-elaborazione e di post-elaborazione | Funzioni end-to-end | Blocchi Simulink |
---|---|---|---|---|
"yamnet" | YAMNet | yamnetPreprocess (Audio Toolbox) | classifySound (Audio Toolbox) | YAMNet (Audio Toolbox), Sound Classifier (Audio Toolbox) |
"vggish" | VGGish | vggishPreprocess (Audio Toolbox) | vggishEmbeddings (Audio Toolbox) | VGGish (Audio Toolbox), VGGish Embeddings (Audio Toolbox) |
"openl3" | OpenL3 | openl3Preprocess (Audio Toolbox) | openl3Embeddings (Audio Toolbox) | OpenL3 (Audio Toolbox), OpenL3 Embeddings (Audio Toolbox) |
"crepe" | CREPE | crepePreprocess (Audio Toolbox), crepePostprocess (Audio Toolbox) | pitchnn (Audio Toolbox) | CREPE (Audio Toolbox), Deep Pitch Estimator (Audio Toolbox) |
"vadnet" | VADNet | vadnetPreprocess (Audio Toolbox), vadnetPostprocess (Audio Toolbox) | detectspeechnn (Audio Toolbox) | Nessuno |
Per esempi che mostrano come adattare le reti neurali preaddestrate per l’audio a una nuova attività, vedere Transfer Learning with Pretrained Audio Networks (Audio Toolbox) e Adapt Pretrained Audio Network for New Data Using Deep Network Designer.
Per ulteriori informazioni sull’utilizzo del Deep Learning per le applicazioni audio, vedere Deep Learning for Audio Applications (Audio Toolbox).
Modelli preaddestrati su GitHub
Per trovare i modelli preaddestrati più recenti, vedere Hub del modello di Deep Learning di MATLAB.
Ad esempio:
Per i modelli di trasformatori basati su testo, come GPT-2, BERT e FinBERT, vedere il repository Modelli di trasformatori per MATLAB GitHub®.
Per un modello di rilevamento di oggetti EfficientDet-D0 preaddestrato, vedere il repository Rete EfficientDet preaddestrata per il rilevamento di oggetti GitHub.
Riferimenti
[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).
Vedi anche
imagePretrainedNetwork
| dlnetwork
| trainingOptions
| trainnet
| importNetworkFromTensorFlow
| importNetworkFromPyTorch
| importNetworkFromONNX
| exportNetworkToTensorFlow
| exportONNXNetwork
| Deep Network Designer
Argomenti complementari
- Deep Learning in MATLAB
- Preparazione della rete per il transfer learning con Deep Network Designer
- Extract Image Features Using Pretrained Network
- Classificazione di immagini utilizzando GoogLeNet
- Retrain Neural Network to Classify New Images
- Visualize Features of a Convolutional Neural Network
- Visualize Activations of a Convolutional Neural Network
- Deep Dream Images Using GoogLeNet