Main Content

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

augmentedImageDatastore

Trasformare i batch per aumentare i dati dell’immagine

Descrizione

Un datastore di immagini aumentate trasforma batch di dati di addestramento, convalida, prova e predizione tramite una pre-elaborazione opzionale come il ridimensionamento, la rotazione e la riflessione. Ridimensionare le immagini per renderle compatibili con le dimensioni di input della rete di Deep Learning. Aumentare i dati delle immagini di addestramento con operazioni di pre-elaborazione randomizzate per evitare l’overfitting della rete e la conseguente memorizzazione dei dettagli esatti delle immagini di addestramento.

Per addestrare una rete utilizzando immagini aumentate, fornire augmentedImageDatastore a trainNetwork. Per ulteriori informazioni, vedere Preprocess Images for Deep Learning.

  • Quando si utilizza un datastore di immagini aumentate come sorgente di immagini di addestramento, il datastore altera in modo casuale i dati di addestramento per ogni epoca, in modo che ogni epoca utilizzi un set di dati leggermente diverso. Il numero effettivo di immagini di addestramento ad ogni epoca non cambia. Le immagini trasformate non vengono memorizzate.

  • Un imageInputLayer normalizza le immagini utilizzando la media delle immagini aumentate, non la media del set di dati originale. Tale media viene calcolata solo una volta per la prima epoca aumentata. Tutte le altre epoche utilizzano la stessa media, in modo che l'immagine media non cambi durante l'addestramento.

Per impostazione predefinita, un augmentedImageDatastore ridimensiona esclusivamente le immagini per adattarle alle dimensioni dell’output. È possibile configurare le opzioni per ulteriori trasformazioni dell'immagine utilizzando un imageDataAugmenter.

Creazione

Descrizione

auimds = augmentedImageDatastore(outputSize,imds) crea un datastore di immagini aumentate per i problemi di classificazione utilizzando le immagini dal datastore di immagini imds e imposta la proprietà OutputSize.

auimds = augmentedImageDatastore(outputSize,X,Y) crea un datastore di immagini aumentate per i problemi di classificazione e regressione. L’array di X contiene le variabili predittive mentre l’array di Y contiene le etichette categoriche o le risposte numeriche.

auimds = augmentedImageDatastore(outputSize,X) crea un datastore di immagini aumentate per prevedere le risposte dei dati dell’immagine nell’array di X.

auimds = augmentedImageDatastore(outputSize,tbl) crea un datastore di immagini aumentate per i problemi di classificazione e regressione. La tabella tbl contiene i predittori e le risposte.

auimds = augmentedImageDatastore(outputSize,tbl,responseNames) crea un datastore di immagini aumentate per i problemi di classificazione e regressione. La tabella tbl contiene i predittori e le risposte. L’argomento responseNames specifica le variabili di risposta in tbl.

esempio

auimds = augmentedImageDatastore(___,Name,Value) crea un datastore di immagini aumentate utilizzando la coppia nome-valore per impostare le proprietà ColorPreprocessing, DataAugmentation, OutputSizeMode e DispatchInBackground. È possibile specificare più coppie nome-valore. Racchiudere ciascun nome della proprietà tra virgolette.

Ad esempio, augmentedImageDatastore([28,28],myTable,'OutputSizeMode','centercrop') crea un datastore di immagini aumentate che taglia le immagini dal centro.

Argomenti di input

espandi tutto

Datastore di immagini, specificato come un oggetto ImageDatastore.

ImageDatastore consente la lettura di batch di file immagine JPG o PNG utilizzando il prefetch. Se si utilizza una funzione personalizzata per la lettura delle immagini, ImageDatastore non esegue il prefetch.

Suggerimento

Utilizzare augmentedImageDatastore per pre-elaborare le immagini per il Deep Learning in modo efficiente, compreso il ridimensionamento delle immagini.

Non utilizzare l’opzione readFcn della funzione imageDatastore per la pre-elaborazione o il ridimensionamento poiché questa opzione è solitamente molto più lenta.

Immagini specificate come un array numerico quadrimensionale. Le prime tre dimensioni sono l'altezza, la larghezza e i canali, mentre l'ultima dimensione indicizza le singole immagini.

Se l’array contiene dei NaN, gli stessi verranno propagati attraverso l’addestramento. Tuttavia, nella maggior parte dei casi, l’addestramento non riesce a convergere.

Tipi di dati: single | double | uint8 | int8 | uint16 | int16 | uint32 | int32

Risposte per la classificazione o la regressione, specificate in uno dei seguenti modi:

  • Per un problema di classificazione, Y è un vettore categorico che contiene le etichette dell’immagine.

  • Per un problema di regressione, Y può essere:

    • Una matrice numerica n per r, dove n è il numero delle osservazioni e r è il numero delle risposte.

    • Un array numerico h per w per c per n, dove h per w per c è la dimensione di una singola risposta e n è il numero di osservazioni.

Le risposte non devono contenere alcun NaN.

Tipi di dati: categorical | double

Dati di input, specificati come una tabella. tbl deve contenere i predittori nella prima colonna come percorsi di immagine o immagini, assoluti o relativi. Il tipo e la posizione delle risposte dipendono dal problema:

  • Per un problema di classificazione, la risposta deve essere una variabile categorica contenente le etichette delle immagini. Se il nome della variabile di risposta non è specificato nella chiamata a augmentedImageDatastore, le risposte devono essere nella seconda colonna. Se le risposte si trovano in una colonna diversa rispetto a tbl, è necessario specificare il nome della variabile di risposta utilizzando l’argomento responseNames.

  • Per un problema di regressione, le risposte devono essere valori numerici posti nella colonna o nelle colonne successive alla prima. Le risposte possono essere in più colonne come scalari o in una singola colonna come vettori numerici o array di celle contenenti array numerici tridimensionali. Se non si specifica il nome della variabile o delle variabili di risposta, augmentedImageDatastore accetta le colonne rimanenti di tbl come variabili della risposta. È possibile specificare i nomi delle variabili di risposta utilizzando l’argomento responseNames.

Le risposte non devono contenere alcun NaN. Qualora fossero presenti dei NaN nei dati del predittore, gli stessi saranno propagati attraverso l’addestramento; tuttavia, nella maggior parte dei casi, l’addestramento non riesce a convergere.

Tipi di dati: table

Nomi delle variabili di risposta nella tabella di input, specificati in uno dei seguenti modi:

  • Per le attività di classificazione o regressione con una singola risposta, responseNames deve essere un vettore di carattere o uno scalare di stringa contenente la variabile di risposta nella tabella di input.

    Per le attività di regressione con risposte multiple, responseNames deve essere un array di stringhe o un array di celle dei vettori di carattere contenente le variabili di risposta nella tabella di input.

Tipi di dati: char | cell | string

Proprietà

espandi tutto

Operazioni di pre-elaborazione del colore eseguite su immagini in scala di grigi o su immagini RGB di input, specificate come 'none', 'gray2rgb' o 'rgb2gray'. Quando il datastore di immagini contiene una combinazione di immagini in scala di grigi e di immagini RGB, utilizzare ColorPreprocessing per garantire che tutte le immagine di output abbiano il numero di canali richiesto da imageInputLayer.

Quando l'immagine di input ha già il numero di canali colore richiesto, non viene eseguita alcuna operazione di pre-elaborazione del colore. Ad esempio, se si specifica il valore 'gray2rgb' e un’immagine di input ha già tre canali, non viene eseguita alcuna pre-elaborazione del colore.

Nota

L’oggetto augmentedImageDatastore converte le immagini RGB in scala di grigi utilizzando la funzione rgb2gray. Se un'immagine ha tre canali che non corrispondono ai canali rosso, verde e blu (come un'immagine nello spazio colore L*a*b*), l’utilizzo di ColorPreprocessing può produrre risultati insoddisfacenti.

Quando le immagini di input non hanno 1 o 3 canali, come nel caso di immagini multispettrali o iperspettrali, non viene eseguita alcuna operazione di pre-elaborazione del colore. In questo caso, tutte le immagini di input devono avere lo stesso numero di canali.

Tipi di dati: char | string

Pre-elaborazione applicata alle immagini di input, specificata come un oggetto imageDataAugmenter o 'none'. Quando DataAugmentation è 'none', non viene applicata alcuna pre-elaborazione alle immagini di input.

Osservazioni sul dispatch in background durante l’addestramento, la previsione o la classificazione, specificate come false o true. Per utilizzare il dispatch in background, è necessario disporre di Parallel Computing Toolbox™.

I datastore di immagini aumentate eseguono il dispatch in background solo quando vengono utilizzati con trainNetwork e funzioni di inferenza, come predict e classify. Il dispatch in background non avviene quando la funzione read è chiamata direttamente dal datastore.

Numero di osservazioni che vengono restituite in ciascun batch. Il valore di MiniBatchSize può essere modificato solo dopo aver creato il datastore. Per l'addestramento, la previsione e la classificazione, la proprietà MiniBatchSize è impostata sulla dimensione del mini-batch definita in trainingOptions.

proprietà è di sola lettura.

Numero totale di osservazioni nel datastore di immagini aumentate. Il numero di osservazioni corrisponde alla lunghezza di un'epoca di addestramento.

Dimensione delle immagini di output, specificata come vettore di due numeri interi positivi. Il primo elemento specifica il numero di righe nelle immagini di output, mentre il secondo elemento specifica il numero di colonne.

Nota

Se si crea un augmentedImageDatastore specificando la dimensione dell’immagine di output come un vettore a tre elementi, il datastore ignora il terzo elemento. Invece, il datastore utilizza il valore di ColorPreprocessing per determinare la dimensionalità delle immagini di output. Ad esempio, se si specifica OutputSize come [28 28 1] ma si imposta ColorPreprocessing come 'gray2rgb', le immagini di output avranno una dimensione di 28x28x3.

Metodo utilizzato per ridimensionare le immagini di output, specificato come uno dei seguenti.

  • 'resize': scala l'immagine utilizzando l'interpolazione bilineare per adattarla alle dimensioni dell'output.

    Nota

    augmentedImageDatastore utilizza il metodo di interpolazione bilineare di imresize con antialiasing. L'interpolazione bilineare consente una rapida elaborazione delle immagini, evitando le distorsioni causate dall'interpolazione del vicino più vicino. Per impostazione predefinita, imresize utilizza invece l’interpolazione bicubica con antialiasing per produrre un’immagine di alta qualità, ma con tempi di elaborazione più lunghi.

  • 'centercrop': prende un ritaglio dal centro dell’immagine di addestramento. Il ritaglio ha la stessa dimensione della dimensione di output.

  • 'randcrop': prende un ritaglio casuale dall’immagine di addestramento. Il ritaglio casuale ha la stessa dimensione della dimensione di output.

Tipi di dati: char | string

Funzioni oggetto

combineCombine data from multiple datastores
hasdataDetermine if data is available to read
numpartitionsNumber of datastore partitions
partitionPartition a datastore
partitionByIndexPartition augmentedImageDatastore according to indices
previewPreview subset of data in datastore
readRead data from augmentedImageDatastore
readallRead all data in datastore
readByIndexRead data specified by index from augmentedImageDatastore
resetReset datastore to initial state
shuffleShuffle data in augmentedImageDatastore
subsetCreate subset of datastore or FileSet
transformTransform datastore
isPartitionableDetermine whether datastore is partitionable
isShuffleableDetermine whether datastore is shuffleable

Esempi

comprimi tutto

Addestrare una rete neurale convoluzionale utilizzando dati immagine aumentati. L’aumento dei dati aiuta la rete ad evitare l’overfitting e a memorizzare i dettagli esatti delle immagini di addestramento.

Caricare i dati di esempio, che consistono in immagini sintetiche di cifre scritte a mano.

[XTrain,YTrain] = digitTrain4DArrayData;

digitTrain4DArrayData carica il set di addestramento delle cifre come dati di array quadrimensionali. XTrain è un array di 28x28x1x5000, dove:

  • 28 è l’altezza e la larghezza delle immagini.

  • 1 è il numero dei canali.

  • 5000 è il numero di immagini sintetiche di cifre scritte a mano.

YTrain è un vettore categorico contenente le etichette per ciascuna osservazione.

Mettere da parte 1000 immagini per la convalida della rete.

idx = randperm(size(XTrain,4),1000);
XValidation = XTrain(:,:,:,idx);
XTrain(:,:,:,idx) = [];
YValidation = YTrain(idx);
YTrain(idx) = [];

Creare un oggetto imageDataAugmenter che specifica le opzioni di pre-elaborazione per l’aumento dell’immagine, come il ridimensionamento, la rotazione, la traslazione e la riflessione. Traslare casualmente le immagini fino a tre pixel in orizzontale e in verticale e ruotarle con un angolo fino a 20 gradi.

imageAugmenter = imageDataAugmenter( ...
    'RandRotation',[-20,20], ...
    'RandXTranslation',[-3 3], ...
    'RandYTranslation',[-3 3])
imageAugmenter = 
  imageDataAugmenter with properties:

           FillValue: 0
     RandXReflection: 0
     RandYReflection: 0
        RandRotation: [-20 20]
           RandScale: [1 1]
          RandXScale: [1 1]
          RandYScale: [1 1]
          RandXShear: [0 0]
          RandYShear: [0 0]
    RandXTranslation: [-3 3]
    RandYTranslation: [-3 3]

Creare un oggetto augmentedImageDatastore da utilizzare per l’addestramento della rete e specificare la dimensione dell’immagine di output. Durante l'addestramento, il datastore esegue l'aumento delle immagini e le ridimensiona. Il datastore aumenta le immagini senza salvarne alcuna in memoria. trainNetwork aggiorna i parametri di rete e poi scarta le immagini aumentate.

imageSize = [28 28 1];
augimds = augmentedImageDatastore(imageSize,XTrain,YTrain,'DataAugmentation',imageAugmenter);

Specificare l’architettura della rete neurale convoluzionale.

layers = [
    imageInputLayer(imageSize)
    
    convolution2dLayer(3,8,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    maxPooling2dLayer(2,'Stride',2)
    
    convolution2dLayer(3,16,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    maxPooling2dLayer(2,'Stride',2)
    
    convolution2dLayer(3,32,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

Specificare le opzioni di addestramento per la discesa stocastica del gradiente con momento.

opts = trainingOptions('sgdm', ...
    'MaxEpochs',15, ...
    'Shuffle','every-epoch', ...
    'Plots','training-progress', ...
    'Verbose',false, ...
    'ValidationData',{XValidation,YValidation});

Addestrare la rete. Poiché le immagini di convalida non sono aumentate, la precisione di convalida è superiore a quella di addestramento.

net = trainNetwork(augimds,layers,opts);

Suggerimenti

  • È possibile visualizzare molte immagini trasformate nella stessa figura utilizzando la funzione imtile. Ad esempio, questo codice visualizza un mini-batch di immagini trasformate da un datastore di immagini aumentate chiamato auimds.

    minibatch = read(auimds);
    imshow(imtile(minibatch.input))
  • Per impostazione predefinita, il ridimensionamento è l'unica operazione di preelaborazione delle immagini. Abilitare ulteriori operazioni di preelaborazione utilizzando l’argomento della coppia nome-valore DataAugmentation con un oggetto imageDataAugmenter. Ogni volta che le immagini vengono lette dal datastore di immagini aumentate, a ciascuna immagine viene applicata una diversa combinazione casuale di operazioni di pre-elaborazione.

Cronologia versioni

Introdotto in R2018a