Main Content

La traduzione di questa pagina non è aggiornata. Fai clic qui per vedere l'ultima versione in inglese.

resnet18

Rete neurale convoluzionale ResNet-18

  • ResNet-18 network architecture

Descrizione

ResNet-18 è una rete neurale convoluzionale con 18 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 rete ha una dimensione di input dell'immagine di 224x224. Per ulteriori reti addestrate in MATLAB®, vedere Reti neurali profonde preaddestrate.

È possibile utilizzare classify per classificare nuove immagini utilizzando il modello ResNet-18. Seguire i passaggi di Classificazione di immagini utilizzando GoogLeNet e sostituire GoogLeNet con ResNet-18.

Per riaddestrare la rete su una nuova attività di classificazione, seguire i passaggi di Addestramento della rete di Deep Learning per classificare nuove immagini e caricare ResNet-18 al posto di GoogLeNet.

Suggerimento

Per creare una rete residua non addestrata adatta ad attività di classificazione delle immagini, utilizzare resnetLayers.

esempio

net = resnet18 restituisce una rete ResNet-18 addestrata sul set di dati di ImageNet.

Questa funzione richiede il pacchetto di supporto Deep Learning Toolbox™ Model for ResNet-18 Network. Se il pacchetto di supporto non è installato, la funzione fornisce un link per il download.

net = resnet18('Weights','imagenet') restituisce una rete ResNet-18 addestrata sul set di dati di ImageNet. Questa sintassi è equivalente a net = resnet18.

lgraph = resnet18('Weights','none') restituisce l'architettura della rete ResNet-18 non addestrata. Il modello non addestrato non richiede il pacchetto di supporto.

Esempi

comprimi tutto

Scaricare e installare il pacchetto di supporto Deep Learning Toolbox Model for ResNet-18 Network.

Digitare resnet18 nella riga di comando.

resnet18

Se il pacchetto di supporto Deep Learning Toolbox Model for ResNet-18 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 resnet18 nella riga di comando. Se il pacchetto di supporto richiesto è installato, la funzione restituisce un oggetto DAGNetwork.

resnet18
ans = 

  DAGNetwork with properties:

         Layers: [72×1 nnet.cnn.layer.Layer]
    Connections: [79×2 table]

Visualizzare la rete con Deep Network Designer.

deepNetworkDesigner(resnet18)

Scoprire altre reti neurali preaddestrate in Deep Network Designer facendo clic su New.

Deep Network Designer start page showing available pretrained neural networks

Se è necessario scaricare una rete neurale, fermarsi sulla rete neurale desiderata e fare clic su Install per aprire l’Add-On Explorer.

Caricare un modello preaddestrato ResNet-18.

net = resnet18;

Leggere un’immagine di prova utilizzando imread.

I = imread("peppers.png");
imshow(I)

Figure contains an axes object. The axes object contains an object of type image.

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

   224   224     3

Ridimensionare l'immagine alla dimensione di input della rete.

I = imresize(I,sz(1:2));

Classificare l’immagine utilizzando classify.

label = classify(net,I)
label = categorical
     bell pepper 

Mostrare l’immagine e il risultato della classificazione insieme.

imshow(I)
title(label)

Figure contains an axes object. The axes object with title bell pepper contains an object of type image.

Nel workspace, estrai il set di dati MathWorks Merch.

unzip("MerchData.zip");

Aprire Deep Network Designer per vedere le reti preaddestrate disponibili.

deepNetworkDesigner

Selezionare ResNet-18 e fare clic su Open (Apri). Se Deep Learning Toolbox™ Model for ResNet-18 Network non è installato, il software apre l'Add-On Explorer.

Per caricare i dati in Deep Network Designer, nella scheda Data (Dati), fai clic su Import Data > Import Image Classification Data (Importa dati > Importa dati di classificazione delle immagini). Nell’elenco Data source (Sorgente dati), seleziona Folder (Cartella). Fare clic su Browse (Sfoglia) e selezionare la cartella MerchData estratta.

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. Selezionare Randomize (Randomizza) per assegnare in modo casuale la proporzione specificata di immagini ai set di convalida e di addestramento.

Fai clic su Import per importare i dati in Deep Network Designer.

L'applicazione mostra un riepilogo dei dati importati.

Per riaddestrare la rete preaddestrata alla classificazione di nuove immagini, sostituire l’ultimo livello completamente connesso e il livello di classificazione finale con nuovi livelli adattati al nuovo set di dati.

Nel pannello Designer, scorrere fino alla fine della rete e ingrandirla. Trascinare un nuovo fullyConnectedLayer sull’area di disegno. Modificare OutputSize con il numero di classi nei nuovi dati, 5 in questo esempio.

Per rendere l’apprendimento più veloce nei nuovi livelli rispetto a quelli trasferiti, impostare WeightLearnRateFactor e BiasLearnRateFactor su 10. Eliminare l’ultimo livello completamente connesso ('fc1000') e collegare il nuovo livello al suo posto.

Sostituisci il livello di output. Trascinare un nuovo classificationLayer sull’area di disegno. Eliminare il livello di output originale ('ClassificationLayer_predictions') e collegare il nuovo livello al suo posto.

Specificare le opzioni di addestramento. Selezionare la scheda Training (Addestramento) e fare clic su Training Options (Opzioni di addestramento). Impostare Solver (Risolutore) su sgdm, InitialLearnRate su 0.0001, MiniBatchSize su 11, MaxEpochs su 8 e ValidationFrequency su 5.

Per addestrare la rete con le opzioni di addestramento specificate, fai clic su OK e poi su Train (Addestra).

Per esportare l’architettura di rete con i pesi addestrati, nella scheda Training (Addestramento), selezionare Export > Export Trained Network and Results (Esporta > Esporta la rete addestrata e i risultati). Deep Network Designer esporta la rete addestrata come la variabile trainedNetwork_1.

Caricare una nuova immagine da classificare utilizzando la rete addestrata.

I = imread("MerchDataTest.jpg");

Durante l’addestramento, Deep Network Designer ridimensiona le immagini per adattarle alle dimensioni di input della rete. Per visualizzare le dimensioni di input della rete, andare al pannello Designer e selezionare imageInputLayer (primo livello). Le dimensioni di input di questa rete sono 224x224.

Ridimensionare l’immagine di test per adattarla alle dimensioni di input della rete.

I = imresize(I,[224 224]);

Classificare l’immagine di test utilizzando la rete addestrata.

YPred = classify(trainedNetwork_1,I);
imshow(I)
title("Predicted Class: " + string(YPred));

Caricare la rete neurale preaddestrata ResNet-18 e trovare la dimensione di input.

net = resnet18;
inputSize = net.Layers(1).InputSize;

Estrarre il set di dati MathWorks Merch. Caricare le nuove immagini come un datastore di immagini.

unzip("MerchData.zip");
imds = imageDatastore("MerchData", ...
    IncludeSubfolders=true, ...
    LabelSource="foldernames");

numClasses = numel(categories(imds.Labels));

Dividere i dati in set di dati di addestramento e di convalida. Specificare "randomized" per assegnare in modo casuale la proporzione specificata di immagini ai seti di convalida e di addestramento.

[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,"randomized");

Utilizzare un datastore di immagini aumentate per ridimensionare automaticamente le immagini di addestramento in modo che corrispondano alle dimensioni di input della rete.

augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain);
augimdsValidation = augmentedImageDatastore(inputSize(1:2),imdsValidation);

Per riaddestrare la rete preaddestrata alla classificazione di nuove immagini, sostituire l’ultimo livello completamente connesso e il livello di classificazione finale con nuovi livelli adattati al nuovo set di dati. Per prima cosa, estrarre il grafico di livello dalla rete addestrata.

lgraph = layerGraph(net); 

Sostituire il livello completamente connesso con un nuovo livello completamente connesso con un numero di output pari al numero di classi. Per rendere l’apprendimento più veloce nei nuovi livelli rispetto a quelli trasferiti, aumentare i valori WeightLearnRateFactor e BiasLearnRateFactor del livello completamente connesso.

newLearnableLayer = fullyConnectedLayer(numClasses, ...
    WeightLearnRateFactor=10, ...
    BiasLearnRateFactor=10);
    
lgraph = replaceLayer(lgraph,"fc1000",newLearnableLayer);

Il livello di classificazione specifica le classi di output della rete. Sostituire il livello di classificazione con un nuovo livello senza etichette di classe. trainNetwork imposta automaticamente le classi di output del livello al momento dell'addestramento.

newClassLayer = classificationLayer;
lgraph = replaceLayer(lgraph,"ClassificationLayer_predictions",newClassLayer);

Specificare le opzioni di addestramento. Per rallentare l’apprendimento nei livelli trasferiti, impostare la velocità di apprendimento iniziale su un valore ridotto.

options = trainingOptions("sgdm", ...
    InitialLearnRate=0.0001, ...
    MiniBatchSize=11, ...
    MaxEpochs=8, ...
    ValidationData=augimdsValidation, ...
    ValidationFrequency=5, ...
    Verbose=false, ...
    Plots="training-progress");

Addestrare la rete.

trainedNetwork = trainNetwork(augimdsTrain,lgraph,options);

Figure Training Progress (23-Mar-2023 10:38:35) contains 2 axes objects and another object of type uigridlayout. Axes object 1 with xlabel Iteration, ylabel Loss contains 15 objects of type patch, text, line. Axes object 2 with xlabel Iteration, ylabel Accuracy (%) contains 15 objects of type patch, text, line.

Carica una nuova immagine da classificare utilizzando la rete addestrata.

I = imread("MerchDataTest.jpg");
I = imresize(I,inputSize(1:2));

Classificare i dati dell’immagine.

YPred = classify(trainedNetwork,I);
imshow(I)
title("Predicted class: " + string(YPred));

Figure contains an axes object. The axes object with title Predicted class: MathWorks Cube contains an object of type image.

Argomenti di output

comprimi tutto

Rete neurale convoluzionale ResNet-18 preaddestrata, restituita come un oggetto DAGNetwork.

Architettura della rete neurale convoluzionale ResNet-18 non addestrata, restituita come un oggetto LayerGraph.

Riferimenti

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

[2] 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.

Funzionalità estese

Cronologia versioni

Introdotto in R2018a