Main Content

Come iniziare con la classificazione delle immagini

Questo esempio mostra come creare una rete neurale convoluzionale semplice per la classificazione tramite Deep Learning utilizzando l'applicazione Deep Network Designer. Le reti neurali convoluzionali sono strumenti essenziali per il Deep Learning e sono particolarmente adatte per il riconoscimento di immagini.

Caricamento dei dati delle immagini

Carica i dati campione come datastore di immagini. Per accedere a questi dati, aprire l'esempio come script live. La funzione imageDatastore etichetta automaticamente le immagini in base ai nomi delle cartelle. Il set di dati contiene 10 categorie e ogni immagine all’interno del set di dati ha un formato di 28x28x1 pixel.

unzip("DigitsData.zip")

imds = imageDatastore("DigitsData", ...
    IncludeSubfolders=true, ...
    LabelSource="foldernames");

classNames = categories(imds.Labels);

Suddividere i dati in set di addestramento, convalida e test. Utilizzare il 70% delle immagini per l'addestramento, il 15% per la convalida e il 15% per i test. Specificare "randomized" per assegnare la proporzione specificata di file di ciascuna classe ai nuovi set di dati. La funzione splitEachLabel divide il datastore delle immagini in tre nuovi datastore.

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

Definizione dell’architettura di rete

Per costruire la rete, utilizzare l'applicazione Deep Network Designer.

deepNetworkDesigner

Per creare una rete nuova, utilizza la funzione di pausa su Blank Network (Rete vuota) e fai clic su New (Nuova).

Nel pannello Designer, definisci l’architettura della rete neurale convoluzionale. Trascina i livelli dalla Layer Library (Libreria livelli) e collegali. Per velocizzare la ricerca tra i livelli, usa la finestra di ricerca Filter layers (Filtrare livelli) nel pannello Layer Library. Per modificare le proprietà di un livello, fai clic sul livello e modifica i valori nel pannello Properties (Proprietà).

Trascinare questi livelli in ordine e collegarli in sequenza. Per prima cosa, trascinare un imageInputLayer sull'area di disegno e impostare InputSize su 28,28,1.

Quindi, trascinare questi livelli sull'area di disegno e collegarli in ordine:

  • convolution2dLayer

  • batchNormalizationLayer

  • reluLayer

Quindi, collegare un fullyConnectedLayer e impostare OutputSize sul numero di classi presenti nei dati, in questo esempio 10.

Infine, aggiungere un softmaxLayer.

Per verificare che la rete sia pronta per l’addestramento, fare clic su Analyze (Analizza). Il Deep Learning Network Analyzer non riporta errori o avvisi, quindi la rete è pronta per l'addestramento. Per esportare la rete, fare clic su Export (Esporta). L'applicazione salva la rete come variabile net_1.

Specificazione delle opzioni di addestramento

Specificare le opzioni di addestramento. La scelta tra le opzioni richiede un'analisi empirica. Per scoprire le diverse configurazioni delle opzioni di addestramento eseguendo esperimenti, è possibile utilizzare l'applicazione Experiment Manager.

options = trainingOptions("sgdm", ...
    MaxEpochs=4, ...
    ValidationData=imdsValidation, ...
    ValidationFrequency=30, ...
    Plots="training-progress", ...
    Metrics="accuracy", ...
    Verbose=false);

Addestramento di reti neurali

Addestrare la rete neurale utilizzando la funzione trainnet. Poiché l'obiettivo è la classificazione, utilizzare la perdita di entropia incrociata.

net = trainnet(imdsTrain,net_1,"crossentropy",options);

Test della rete neurale

Per testare la rete neurale, classificare i dati di convalida e calcolare la precisione della classificazione.

Fare previsioni utilizzando la funzione minibatchpredict e convertire i punteggi in etichette utilizzando la funzione scores2label. Per impostazione predefinita, la funzione minibatchpredict utilizza una GPU, se disponibile.

scores = minibatchpredict(net,imdsValidation);
YValidation = scores2label(scores,classNames);

Calcolare la precisione della classificazione. La precisione è la percentuale di etichette previste correttamente.

TValidation = imdsValidation.Labels;
accuracy = mean(YValidation == TValidation)
accuracy = 0.9780

Visualizzare alcune delle previsioni.

numValidationObservations = numel(imdsValidation.Files);
idx = randi(numValidationObservations,9,1);

figure
tiledlayout("flow")
for i = 1:9
    nexttile
    img = readimage(imdsValidation,idx(i));
    imshow(img)
    title("Predicted Class: " + string(YValidation(idx(i))))
end

Per le fasi successive di Deep Learning, si può provare a utilizzare le reti preaddestrate e il transfer learning. Per un esempio, vedere Come iniziare a utilizzare il transfer learning.

Vedi anche

|

Argomenti complementari