alexnet
Rete neurale convoluzionale AlexNet
Descrizione
AlexNet è una rete neurale convoluzionale con 8 livelli di profondità. È possibile caricare una versione preaddestrata della rete, addestrata su oltre un milione di immagini del database di ImageNet [1]. La rete preaddestrata è in grado di classificare le immagini in 1000 categorie di oggetti, come tastiera, mouse, matita e molti animali. Di conseguenza, la rete ha appreso rappresentazioni ricche di feature per un'ampia gamma di immagini. La dimensione di input dell'immagine della rete è 227x227. Per ulteriori reti addestrate in MATLAB®, vedere Reti neurali profonde preaddestrate.
È possibile utilizzare classify
per classificare nuove immagini utilizzando la rete AlexNet. Seguire i passaggi di Classificazione di immagini utilizzando GoogLeNet e sostituire GoogLeNet con AlexNet.
Per un’introduzione concreta ai metodi pratici di Deep Learning, vedere Deep Learning Onramp.
restituisce una rete AlexNet addestrata sul set di dati di ImageNet.net
= alexnet
Questa funzione richiede il pacchetto di supporto Deep Learning Toolbox™ Model for AlexNet Network. Se il pacchetto di supporto non è installato, la funzione fornisce un link per il download. In alternativa, vedere Deep Learning Toolbox Model per la rete AlexNet.
Per ulteriori reti addestrate in MATLAB, vedere Reti neurali profonde preaddestrate.
restituisce una rete AlexNet addestrata sul set di dati di ImageNet. Questa sintassi è equivalente a net
= alexnet('Weights','imagenet'
)net = alexnet
.
restituisce l'architettura della rete AlexNet non addestrata. Il modello non addestrato non richiede il pacchetto di supporto.layers
= alexnet('Weights','none'
)
Esempi
Download del pacchetto di supporto per AlexNet
Scaricare e installare il pacchetto di supporto Deep Learning Toolbox Model for AlexNet Network.
Digitare alexnet
nella riga di comando.
alexnet
Se il pacchetto di supporto Deep Learning Toolbox Model for AlexNet Network non è installato, la funzione fornisce un link al pacchetto di supporto richiesto nell’Add-On Explorer. Fare clic sul link per installare il pacchetto di supporto, quindi fare clic su Install. Verificare che l’installazione sia stata eseguita correttamente digitando alexnet
nella riga di comando.
alexnet
ans = SeriesNetwork with properties: Layers: [25×1 nnet.cnn.layer.Layer]
Se il pacchetto di supporto richiesto è installato, la funzione restituisce un oggetto SeriesNetwork
.
Visualizzare la rete con Deep Network Designer.
deepNetworkDesigner(alexnet)
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.
Transfer learning utilizzando AlexNet
Questo esempio mostra come perfezionare una rete neurale convoluzionale AlexNet preaddestrata per eseguire la classificazione di una nuova raccolta di immagini.
AlexNet è stata addestrata su oltre un milione di immagini ed è in grado di classificare le immagini in 1000 categorie di oggetti (ad esempio, tastiera, tazza da caffè, matita e molti animali). La rete ha appreso ricche rappresentazioni di feature per un’ampia gamma di immagini. La rete prende un’immagine come input e produce come output un’etichetta per l’oggetto all’interno dell’immagine, insieme alle probabilità che l’oggetto appartenga a ciascuna delle altre categorie di oggetti.
Il transfer learning è ampiamente utilizzato nelle applicazioni di Deep Learning. Si può prendere una rete preaddestrata e utilizzarla come punto di partenza per l’apprendimento di una nuova attività. Solitamente, eseguire il fine-tuning di una rete tramite il transfer learning è molto più veloce e semplice che addestrare una rete con pesi inizializzati da zero su base casuale. È possibile trasferire rapidamente le feature apprese a una nuova attività utilizzando un numero minore di immagini di addestramento.
Caricamento dei dati
Decomprimere e caricare le nuove immagini come un datastore di immagini. imageDatastore
etichetta automaticamente le immagini in base ai nomi delle cartelle e memorizza i dati come un oggetto ImageDatastore
. Un datastore di immagini consente di memorizzare i dati delle immagini di grandi dimensioni, compresi quelli che non entrano nella memoria, e di leggere in modo efficiente i batch delle immagini durante l’addestramento di una rete neurale convoluzionale.
unzip('MerchData.zip'); imds = imageDatastore('MerchData', ... 'IncludeSubfolders',true, ... 'LabelSource','foldernames');
Dividere i dati in set di dati di addestramento e di convalida. Utilizzare il 70% delle immagini per l’addestramento e il 30% per la convalida. splitEachLabel
divide il datastore images
in due nuovi datastore.
[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,'randomized');
Questo set di dati molto piccolo contiene adesso 55 immagini di addestramento e 20 immagini di convalida. Visualizzare alcune immagini di esempio.
numTrainImages = numel(imdsTrain.Labels); idx = randperm(numTrainImages,16); figure for i = 1:16 subplot(4,4,i) I = readimage(imdsTrain,idx(i)); imshow(I) end
Caricamento della rete preaddestrata
Caricare la rete neurale AlexNet preaddestrata. Se Deep Learning Toolbox™ Model for AlexNet Network non è installato, il software fornisce un link per il download. AlexNet è addestrata su oltre un milione di immagini ed è in grado di classificare le immagini in 1000 categorie di oggetti, come tastiera, mouse, matita e molti animali. Di conseguenza, il modello ha appreso rappresentazioni ricche di feature per un'ampia gamma di immagini.
net = alexnet;
Utilizzare analyzeNetwork
per visualizzare una visualizzazione interattiva dell'architettura di rete e informazioni dettagliate sui livelli della rete.
analyzeNetwork(net)
Il primo livello, ossia il livello di input delle immagini, richiede immagini di input di dimensioni 227x227x3, dove 3 indica il numero di canali del colore.
inputSize = net.Layers(1).InputSize
inputSize = 1×3
227 227 3
Sostituzione dei livelli finali
Gli ultimi tre livelli della rete preaddestrata net
sono configurati per 1000 classi. Questi tre livelli devono essere perfezionati per i nuovi problemi di classificazione. Estrarre tutti i livelli dalla rete preaddestrata, tranne gli ultimi tre.
layersTransfer = net.Layers(1:end-3);
Trasferire i livelli alla nuova attività di classificazione sostituendo gli ultimi tre livelli con un livello completamente connesso, un livello softmax e un livello di output della classificazione. Specificare le opzioni del nuovo livello completamente connesso sulla base dei nuovi dati. Impostare il livello completamente connesso in modo che abbia la stessa dimensione del numero di classi dei nuovi dati. Per apprendere più rapidamente nei nuovi livelli rispetto ai livelli trasferiti, aumentare i valori WeightLearnRateFactor
e BiasLearnRateFactor
del livello completamente connesso.
numClasses = numel(categories(imdsTrain.Labels))
numClasses = 5
layers = [ layersTransfer fullyConnectedLayer(numClasses,'WeightLearnRateFactor',20,'BiasLearnRateFactor',20) softmaxLayer classificationLayer];
Addestramento della rete
La rete richiede immagini di input di dimensioni 227x227x3, ma le immagini nei datastore di immagini hanno dimensioni diverse. Utilizzare un datastore di immagini aumentate per ridimensionare automaticamente le immagini di addestramento. Specificare ulteriori operazioni di aumento da eseguire sulle immagini di addestramento: capovolgere casualmente le immagini di addestramento lungo l'asse verticale e traslarle casualmente fino a 30 pixel in orizzontale e verticale. L’aumento dei dati aiuta la rete ad evitare l’overfitting e a memorizzare i dettagli esatti delle immagini di addestramento.
pixelRange = [-30 30]; imageAugmenter = imageDataAugmenter( ... 'RandXReflection',true, ... 'RandXTranslation',pixelRange, ... 'RandYTranslation',pixelRange); augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain, ... 'DataAugmentation',imageAugmenter);
Per ridimensionare automaticamente le immagini di convalida senza eseguire un ulteriore aumento dei dati, utilizzare un datastore di immagini aumentate senza specificare alcuna ulteriore operazione di pre-elaborazione.
augimdsValidation = augmentedImageDatastore(inputSize(1:2),imdsValidation);
Specificare le opzioni di addestramento. Per il transfer learning, mantenere le feature dei livelli precedenti della rete preaddestrata (i pesi dei livelli trasferiti). Per rallentare l’apprendimento nei livelli trasferiti, impostare la velocità di apprendimento iniziale su un valore ridotto. Nel passaggio precedente, sono stati aumentati i fattori della velocità di apprendimento del livello completamente connesso per accelerare l'apprendimento nei nuovi livelli finali. Questa combinazione di impostazioni della velocità di apprendimento porta ad un apprendimento veloce solo nei nuovi livelli e ad un apprendimento più lento negli altri livelli. Quando si esegue il transfer learning, non è necessario l’addestramento per un numero elevato di epoche. Un'epoca è un ciclo di addestramento completo sull'intero set di dati di addestramento. Specificare la dimensione del mini-batch e i dati di convalida. Il software convalida la rete ogni ValidationFrequency
iterazioni durante l’addestramento.
options = trainingOptions('sgdm', ... 'MiniBatchSize',10, ... 'MaxEpochs',6, ... 'InitialLearnRate',1e-4, ... 'Shuffle','every-epoch', ... 'ValidationData',augimdsValidation, ... 'ValidationFrequency',3, ... 'Verbose',false, ... 'Plots','training-progress');
Addestrare la rete composta dai livelli trasferiti e da quelli nuovi. Per impostazione predefinita, trainNetwork
utilizza una GPU solo se disponibile, altrimenti utilizza una CPU. L’addestramento su GPU richiede Parallel Computing Toolbox™ e un dispositivo GPU supportato. Per informazioni sui dispositivi supportati, vedere GPU Computing Requirements (Parallel Computing Toolbox). Inoltre, si può specificare l’ambiente di esecuzione tramite l’argomento nome-valore dell’'ExecutionEnvironment'
delle trainingOptions
.
netTransfer = trainNetwork(augimdsTrain,layers,options);
Classificazione delle immagini di convalida
Classificare le immagini di convalida utilizzando la rete ottimizzata.
[YPred,scores] = classify(netTransfer,augimdsValidation);
Visualizzare quattro immagini di convalida di esempio con le etichette previste.
idx = randperm(numel(imdsValidation.Files),4); figure for i = 1:4 subplot(2,2,i) I = readimage(imdsValidation,idx(i)); imshow(I) label = YPred(idx(i)); title(string(label)); end
Calcolare la precisione della classificazione sul set di convalida. La precisione è la frazione di etichette che la rete predice correttamente.
YValidation = imdsValidation.Labels; accuracy = mean(YPred == YValidation)
accuracy = 1
Per suggerimenti su come migliorare la precisione della classificazione, vedere Deep Learning Tips and Tricks.
Classificazione di un’immagine utilizzando AlexNet
Leggere, ridimensionare e classificare un’immagine utilizzando AlexNet. Innanzi tutto, caricare un modello AlexNet preaddestrato.
net = alexnet;
Leggere l’immagine utilizzando imread
.
I = imread('peppers.png');
figure
imshow(I)
Il modello preaddestrato necessita che le dimensioni dell’immagine siano uguali a quelle di input della rete. Determinare la dimensione di input della rete utilizzando la proprietà InputSize
del primo livello della rete.
sz = net.Layers(1).InputSize
sz = 1×3
227 227 3
Ridimensionare l'immagine alla dimensione di input della rete.
I = imresize(I,sz(1:2)); figure imshow(I)
Classificare l’immagine utilizzando classify
.
label = classify(net,I)
label = categorical
bell pepper
Mostrare l’immagine e il risultato della classificazione insieme.
figure imshow(I) title(label)
Estrazione di feature utilizzando AlexNet
Questo esempio mostra come estrarre le feature dell'immagine apprese da una rete neurale convoluzionale preaddestrata e come utilizzare tali feature per addestrare un classificatore di immagini. L'estrazione di feature è il modo più semplice e veloce per utilizzare la potenza rappresentativa delle reti profonde preaddestrate. Ad esempio, è possibile addestrare una macchina a vettori di supporto (SVM) utilizzando fitcecoc
(Statistics and Machine Learning Toolbox™) sulle feature estratte. Considerando che l’estrazione di feature richiede solo un singolo passaggio attraverso i dati, costituisce un buon punto di partenza se non si dispone di una GPU con cui accelerare l’addestramento della rete.
Caricamento dei dati
Decomprimere e caricare le immagini campione come un datastore di immagini. imageDatastore
etichetta automaticamente le immagini in base ai nomi delle cartelle e memorizza i dati come un oggetto ImageDatastore
. Un datastore di immagini consente di memorizzare i dati di immagini di grandi dimensioni, compresi quelli che non entrano nella memoria. Dividere i dati in 70% per l’addestramento e 30% per la prova.
unzip('MerchData.zip'); imds = imageDatastore('MerchData', ... 'IncludeSubfolders',true, ... 'LabelSource','foldernames'); [imdsTrain,imdsTest] = splitEachLabel(imds,0.7,'randomized');
Sono ora presenti 55 immagini di addestramento e 20 immagini di convalida in questo set di dati molto piccolo. Visualizzare alcune immagini di esempio.
numImagesTrain = numel(imdsTrain.Labels); idx = randperm(numImagesTrain,16); for i = 1:16 I{i} = readimage(imdsTrain,idx(i)); end figure imshow(imtile(I))
Caricamento della rete preaddestrata
Caricare una rete AlexNet preaddestrata. Se il pacchetto di supporto Deep Learning Toolbox Model for AlexNet Network non è installato, il software fornisce un link per il download. AlexNet è addestrata su oltre un milione di immagini ed è in grado di classificare le immagini in 1000 categorie di oggetti. Ad esempio, tastiera, mouse, matita e molti animali. Di conseguenza, il modello ha appreso rappresentazioni ricche di feature per un'ampia gamma di immagini.
net = alexnet;
Visualizzare l’architettura di rete. La rete dispone di cinque livelli convoluzionali e tre livelli completamente connessi.
net.Layers
ans = 25x1 Layer array with layers: 1 'data' Image Input 227x227x3 images with 'zerocenter' normalization 2 'conv1' Convolution 96 11x11x3 convolutions with stride [4 4] and padding [0 0 0 0] 3 'relu1' ReLU ReLU 4 'norm1' Cross Channel Normalization cross channel normalization with 5 channels per element 5 'pool1' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0 0 0] 6 'conv2' Grouped Convolution 2 groups of 128 5x5x48 convolutions with stride [1 1] and padding [2 2 2 2] 7 'relu2' ReLU ReLU 8 'norm2' Cross Channel Normalization cross channel normalization with 5 channels per element 9 'pool2' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0 0 0] 10 'conv3' Convolution 384 3x3x256 convolutions with stride [1 1] and padding [1 1 1 1] 11 'relu3' ReLU ReLU 12 'conv4' Grouped Convolution 2 groups of 192 3x3x192 convolutions with stride [1 1] and padding [1 1 1 1] 13 'relu4' ReLU ReLU 14 'conv5' Grouped Convolution 2 groups of 128 3x3x192 convolutions with stride [1 1] and padding [1 1 1 1] 15 'relu5' ReLU ReLU 16 'pool5' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0 0 0] 17 'fc6' Fully Connected 4096 fully connected layer 18 'relu6' ReLU ReLU 19 'drop6' Dropout 50% dropout 20 'fc7' Fully Connected 4096 fully connected layer 21 'relu7' ReLU ReLU 22 'drop7' Dropout 50% dropout 23 'fc8' Fully Connected 1000 fully connected layer 24 'prob' Softmax softmax 25 'output' Classification Output crossentropyex with 'tench' and 999 other classes
Il primo livello, ossia il livello di input delle immagini, richiede immagini di input di dimensioni 227x227x3, dove 3 indica il numero di canali del colore.
inputSize = net.Layers(1).InputSize
inputSize = 1×3
227 227 3
Estrazione delle feature dell’immagine
La rete costruisce una rappresentazione gerarchica delle immagini di input. I livelli più profondi contengono feature di livello superiore, costruite utilizzando le feature di livello inferiore dei livelli precedenti. Per ottenere le rappresentazioni delle feature delle immagini di addestramento e di prova, utilizzare activations
su livello completamente connesso 'fc7'
. Per ottenere una rappresentazione di livello inferiore delle immagini, utilizzare un livello precedente della rete.
La rete richiede immagini di input di dimensioni 227x227x3, ma le immagini nei datastore di immagini hanno dimensioni diverse. Per ridimensionare automaticamente le immagini di addestramento e di prova prima di utilizzarle come input di rete, creare dei datastore di immagini aumentate, specificare la dimensione desiderata dell’immagine e utilizzare tali datastore come argomenti di input di activations
.
augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain); augimdsTest = augmentedImageDatastore(inputSize(1:2),imdsTest); layer = 'fc7'; featuresTrain = activations(net,augimdsTrain,layer,'OutputAs','rows'); featuresTest = activations(net,augimdsTest,layer,'OutputAs','rows');
Estrarre le etichette delle classi dai dati di addestramento e di prova.
YTrain = imdsTrain.Labels; YTest = imdsTest.Labels;
Classificatore di immagini adatte
Utilizzare le feature estratte dalle immagini di addestramento come variabili predittive e adattare una macchina a vettori di supporto (SVM) multiclasse utilizzando fitcecoc
(Statistics and Machine Learning Toolbox).
mdl = fitcecoc(featuresTrain,YTrain);
Classificazione delle immagini di prova
Classificare le immagini di prova utilizzando il modello SVM addestrato e le feature estratte dalle immagini di prova.
YPred = predict(mdl,featuresTest);
Visualizzare quattro immagini di prova di esempio con le etichette previste.
idx = [1 5 10 15]; figure for i = 1:numel(idx) subplot(2,2,i) I = readimage(imdsTest,idx(i)); label = YPred(idx(i)); imshow(I) title(label) end
Calcolare la precisione della classificazione sul set di prova. La precisione è la frazione di etichette che la rete predice correttamente.
accuracy = mean(YPred == YTest)
accuracy = 1
Questa SVM ha un’alta precisione. Se la precisione non è sufficientemente alta con l'estrazione di feature, si può provare con il transfer learning.
Argomenti di output
net
— Rete neurale convoluzionale AlexNet preaddestrata
Oggetto SeriesNetwork
Rete neurale convoluzionale AlexNet preaddestrata, restituita come un oggetto SeriesNetwork
.
layers
— Architettura della rete neurale convoluzionale AlexNet non addestrata
array di Layer
Architettura della rete neurale convoluzionale AlexNet non addestrata, restituita come un array di Layer
.
Suggerimenti
Per un’introduzione concreta ai metodi pratici di Deep Learning, vedere Deep Learning Onramp.
Riferimenti
[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] Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton. "ImageNet Classification with Deep Convolutional Neural Networks." Advances in neural information processing systems. 2012.
[4] BVLC AlexNet Model. https://github.com/BVLC/caffe/tree/master/models/bvlc_alexnet
Funzionalità estese
Generazione di codice C/C++
Genera codice C e C++ con MATLAB® Coder™.
Per la generazione di codice, è possibile caricare la rete utilizzando la sintassi net = alexnet
o passando la funzione alexnet
su coder.loadDeepLearningNetwork
(MATLAB Coder). Ad esempio: net = coder.loadDeepLearningNetwork('alexnet')
.
Per ulteriori informazioni, vedere Load Pretrained Networks for Code Generation (MATLAB Coder).
La sintassi alexnet('Weights','none')
non è supportata per la generazione di codice.
Generazione di codice GPU
Genera codice CUDA® per GPU NVIDIA® con GPU Coder™.
Note sull’utilizzo e sulle limitazioni:
Per la generazione di codice, è possibile caricare la rete utilizzando la sintassi
net = alexnet
o passando la funzionealexnet
sucoder.loadDeepLearningNetwork
(GPU Coder). Ad esempio:net = coder.loadDeepLearningNetwork('alexnet')
.Per ulteriori informazioni, vedere Load Pretrained Networks for Code Generation (GPU Coder).
La sintassi
alexnet('Weights','none')
non è supportata per la generazione di codice GPU.
Cronologia versioni
Introdotto in R2017a
Vedi anche
Deep Network Designer | vgg16
| vgg19
| resnet18
| resnet50
| densenet201
| googlenet
| inceptionresnetv2
| squeezenet
| importKerasNetwork
| importCaffeNetwork
Comando MATLAB
Hai fatto clic su un collegamento che corrisponde a questo comando MATLAB:
Esegui il comando inserendolo nella finestra di comando MATLAB. I browser web non supportano i comandi MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)