Main Content

augmentedImageDatastore

Transformar lotes para aumentar datos de imágenes

Descripción

Un almacén de datos de imágenes aumentado transforma lotes de datos de entrenamiento, validación, prueba y predicción, con preprocesamientos opcionales como cambio de tamaño, rotación y reflexión. Cambie el tamaño de las imágenes para que sean compatibles con el tamaño de entrada de la red de deep learning. El aumento de datos de imágenes de entrenamiento con operaciones de preprocesamiento aleatorizadas ayuda a evitar que la red se sobreajuste y memorice los detalles exactos de las imágenes de entrenamiento.

Para entrenar una red usando imágenes aumentadas, proporcione el augmentedImageDatastore a la función trainnet. Para obtener más información, consulte Preprocesar imágenes para deep learning.

  • Cuando utiliza un almacén de datos de imágenes aumentado como fuente de imágenes de entrenamiento, el almacén de datos perturba aleatoriamente los datos de entrenamiento de cada época, para que cada época utilice un conjunto de datos ligeramente diferente. El número real de imágenes de entrenamiento de cada época no cambia. Las imágenes transformadas no se almacenan en la memoria.

  • Una imageInputLayer normaliza imágenes utilizando la media de las imágenes aumentadas, no la media del conjunto de datos original. Esta media se calcula una vez para la primera época aumentada. El resto de las épocas utilizan la misma media, de modo que la imagen media no cambia durante el entrenamiento.

  • Use un almacén de datos de imágenes aumentado para preprocesar de forma eficiente las imágenes para deep learning, incluyendo el cambio de tamaño de estas. No use la opción ReadFcn de objetos ImageDatastore. ImageDatastore permite leer lotes de archivos de imágenes JPG o PNG mediante precarga. Si establece la opción ReadFcn como una función personalizada, ImageDatastore no realiza la precarga y suele ser bastante más lenta.

De forma predeterminada, un augmentedImageDatastore solo cambia el tamaño de las imágenes para ajustarlas al tamaño de salida. Puede configurar opciones para transformar imágenes adicionales empleando un objeto imageDataAugmenter.

Creación

Descripción

auimds = augmentedImageDatastore(outputSize,imds) crea un almacén de datos de imágenes aumentado para problemas de clasificación utilizando imágenes de un almacén de datos de imágenes imds y establece la propiedad OutputSize.

auimds = augmentedImageDatastore(outputSize,X,Y) crea un almacén de datos de imágenes aumentado para problemas de clasificación y regresión. El arreglo X contiene las variables predictoras y el arreglo Y contiene las etiquetas categóricas o repuestas numéricas.

auimds = augmentedImageDatastore(outputSize,X) crea un almacén de datos de imágenes aumentado para predecir respuestas de datos de imágenes en el arreglo X.

auimds = augmentedImageDatastore(outputSize,tbl) crea un almacén de datos de imágenes aumentado para problemas de clasificación y regresión. La tabla tbl contiene predictores y respuestas.

auimds = augmentedImageDatastore(outputSize,tbl,responseNames) crea un almacén de datos de imágenes aumentado para problemas de clasificación y regresión. La tabla tbl contiene predictores y respuestas. El argumento responseNames especifica las variables de respuesta en tbl.

ejemplo

auimds = augmentedImageDatastore(___,Name,Value) crea un almacén de datos de imágenes aumentado utilizando pares nombre-valor para establecer las propiedades ColorPreprocessing, DataAugmentation, OutputSizeMode y DispatchInBackground. Puede especificar varios pares nombre-valor. Encierre el nombre de cada propiedad entre comillas.

Por ejemplo, augmentedImageDatastore([28,28],myTable,'OutputSizeMode','centercrop') crea un almacén de datos de imágenes aumentado que recorta la parte central de las imágenes.

Argumentos de entrada

expandir todo

Almacén de datos de imágenes, especificado como un objeto ImageDatastore.

Imágenes, especificadas como arreglo numérico 4D. Las primeras tres dimensiones son la altura, la anchura y los canales, y la última dimensión indexa las imágenes individuales.

Tipos de datos: single | double | uint8 | int8 | uint16 | int16 | uint32 | int32

Respuestas para clasificación o regresión, especificadas como una de las siguientes:

  • Para un problema de clasificación, Y es un vector categórico que contiene las etiquetas de las imágenes.

  • Para un problema de regresión, Y puede ser:

    • Una matriz de n por r, en la que n es el número de observaciones y r es el número de respuestas.

    • Un arreglo numérico de h por w por c por n, en el que h por w por c es el tamaño de una sola respuesta y n es el número de observaciones.

Las respuestas no pueden contener valores NaN.

Tipos de datos: categorical | double

Datos de entrada, especificados como una tabla. tbl debe contener los predictores en la primera columna como trayectorias de imagen absolutas o relativas o como imágenes. El tipo y la ubicación de las respuestas depende del problema:

  • Si se trata de un problema de clasificación, la respuesta es una variable categórica que contiene las etiquetas de las imágenes. Si no se especifica el nombre de la variable de respuesta en la llamada a augmentedImageDatastore, las respuestas deben estar en la segunda columna. Si las respuestas están en una columna diferente de tbl, debe especificar el nombre de la variable de respuesta utilizando el argumento responseNames.

  • Si se trata de un problema de regresión, las respuestas deben ser valores numéricos en la columna o columnas después de la primera. Las respuestas pueden estar en varias columnas como escalares o en una sola columna como vectores numéricos o arreglos de celdas que contengan arreglos numéricos tridimensionales. Cuando no se especifica el nombre de la variable o variables de respuesta, augmentedImageDatastore acepta las columnas restantes de tbl como las variables de respuesta. Puede especificar los nombres de las variables de respuesta utilizando el argumento responseNames.

Las respuestas no pueden contener valores NaN. Si hay valores NaN en los datos del predictor, se propagan a través del entrenamiento; sin embargo, en la mayoría de los casos, el entrenamiento no converge.

Tipos de datos: table

Nombres de las variables de respuesta en la tabla de entrada, especificados como una de las siguientes opciones:

  • Si se trata de tareas de clasificación o regresión con una sola respuesta, responseNames debe ser un vector de caracteres o un escalar de cadena que contenga una variable de respuesta en la tabla de entrada.

    Si se trata de tareas de regresión con varias respuestas, responseNames debe ser un arreglo de cadena o un arreglo de celdas de vectores de caracteres que contenga variables de respuesta en la tabla de entrada.

Tipos de datos: char | cell | string

Propiedades

expandir todo

Operaciones de preprocesamiento de color realizadas en imágenes RGB o en escala de grises de entrada, especificadas como 'none', 'gray2rgb' o 'rgb2gray'. Cuando el almacén de datos de imágenes contiene una mezcla de imágenes en escala de grises y RGB, utilice ColorPreprocessing para asegurarse de que todas las imágenes de salida tengan el número de canales requerido por imageInputLayer.

No se realiza ninguna operación de preprocesamiento de color cuando una imagen de entrada ya tiene el número requerido de canales de color. Por ejemplo, si especifica el valor 'gray2rgb' y una imagen de entrada ya tiene tres canales, no se realiza ningún preprocesamiento de color.

Nota

El objeto augmentedImageDatastore convierte la imagen RGB en una imagen en escala de grises utilizando la función rgb2gray. Si una imagen tiene tres canales que no se corresponden con los canales rojo, verde y azul (como una imagen en el espacio de color L*a*b*), el uso de ColorPreprocessing puede dar resultados deficientes.

No se realiza ninguna operación de preprocesamiento de color cuando las imágenes de entrada no tienen 1 o 3 canales, como en el caso de las imágenes multiespectrales o hiperespectrales. En este caso, todas las imágenes de entrada deben tener el mismo número de canales.

Tipos de datos: char | string

Preprocesamiento aplicado a imágenes de entrada, especificado como un objeto imageDataAugmenter o 'none'. Cuando DataAugmentation es 'none', no se aplica prepocesamiento a las imágenes de entrada.

Distribución de observaciones en segundo plano durante el entrenamiento, la predicción o la clasificación, especificada como false o true. Para utilizar la distribución en segundo plano, debe tener Parallel Computing Toolbox™.

Los almacenes de datos de imágenes aumentados solo realizan la distribución en segundo plano cuando se usan con la función trainnet y con funciones de inferencia, como predict y minibatchpredict. No se produce la distribución en segundo plano cuando se llama directamente a la función read del almacén de datos.

Número de observaciones que se devuelven en cada lote. Solo se puede cambiar el valor de MiniBatchSize una vez que se ha creado el almacén de datos. Para el entrenamiento, la predicción y la clasificación, la propiedad MiniBatchSize se establece en el tamaño de minilote definido en trainingOptions.

Esta propiedad o parámetro es de solo lectura.

Número total de observaciones en el almacén de datos de imágenes aumentado. El número de observaciones es la longitud de una época de entrenamiento.

Tamaño de las imágenes de salida, especificado como un vector de dos enteros positivos. El primer elemento especifica el número de filas en las imágenes de salida y el segundo elemento especifica el número de columnas.

Nota

Si crea un augmentedImageDatastore especificando el tamaño de salida de la imagen como un vector de tres elementos, el almacén de datos ignora el tercer elemento. En su lugar, el almacén de datos usa el valor de ColorPreprocessing para determinar la dimensionalidad de las imágenes de salida. Por ejemplo, si especifica OutputSize como [28 28 1], pero establece ColorPreprocessing como 'gray2rgb', las imágenes de salida tienen un tamaño de 28 por 28 por 3.

Método utilizado para cambiar el tamaño de las imágenes de salida, especificado con uno de los valores siguientes:

  • 'resize': escalar la imagen usando interpolación bilineal para ajustarla al tamaño de salida.

    Nota

    augmentedImageDatastore utiliza el método de interpolación bilineal de imresize con antialiasing. La interpolación bilineal permite un procesamiento de imágenes rápido al tiempo que evita distorsiones como las causadas por la interpolación del vecino más cercano. En cambio, de forma predeterminada imresize utiliza interpolación bicúbica con antialiasing para producir una imagen de tamaño cambiado de alta calidad a costa de un mayor tiempo de procesamiento.

  • 'centercrop': recortar del centro de la imagen de entrenamiento. El recorte es del mismo tamaño que la salida.

  • 'randcrop': recortar aleatoriamente de la imagen de entrenamiento. El recorte aleatorio es del mismo tamaño que la salida.

Tipos de datos: char | string

Funciones del objeto

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

Ejemplos

contraer todo

Entrene una red neuronal convolucional con datos de imágenes aumentadas. El aumento de datos ayuda a evitar que la red se sobreajuste y memorice los detalles exactos de las imágenes de entrenamiento.

Cargue los datos de muestra, que están formados por imágenes sintéticas de dígitos manuscritos. XTrain es un arreglo de 28 por 28 por 1 por 5000, donde:

  • 28 es la altura y la anchura de las imágenes.

  • 1 es el número de canales.

  • 5000 es el número de imágenes sintéticas de dígitos manuscritos.

labelsTrain es un vector categórico que contiene las etiquetas para cada observación.

load DigitsDataTrain

Reserve 1000 de las imágenes para la validación de la red.

idx = randperm(size(XTrain,4),1000);
XValidation = XTrain(:,:,:,idx);
XTrain(:,:,:,idx) = [];
TValidation = labelsTrain(idx);
labelsTrain(idx) = [];

Cree un objeto imageDataAugmenter que especifique las opciones de preprocesamiento para el aumento de imágenes, como el cambio de tamaño, la rotación, la traslación y la reflexión. Traslade aleatoriamente las imágenes hasta tres píxeles horizontal y verticalmente, y rote las imágenes con un ángulo de hasta 20 grados.

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]

Cree un objeto augmentedImageDatastore para utilizarlo durante el entrenamiento de la red y especifique el tamaño de salida de la imagen. Durante el entrenamiento, el almacén de datos lleva a cabo el aumento de imágenes y cambia su tamaño. El almacén de datos aumenta las imágenes sin guardar ninguna en la memoria. trainnet actualiza los parámetros de la red y descarta las imágenes aumentadas.

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

Especifique la arquitectura de la red neuronal convolucional.

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];

Especifique las opciones de entrenamiento. Para escoger entre las opciones se requiere un análisis empírico. Para explorar diferentes configuraciones de opciones de entrenamiento mediante la ejecución de experimentos, puede utilizar la app Experiment Manager.

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

Entrene la red neuronal con la función trainnet. Para la clasificación, utilice la pérdida de entropía cruzada. De forma predeterminada, la función trainnet usa una GPU en caso de que esté disponible. Para entrenar en una GPU se requiere una licencia de Parallel Computing Toolbox™ y un dispositivo GPU compatible. Para obtener información sobre los dispositivos compatibles, consulte GPU Computing Requirements (Parallel Computing Toolbox). De lo contrario, la función trainnet usa la CPU. Para especificar el entorno de ejecución, utilice la opción de entrenamiento ExecutionEnvironment.

net = trainnet(augimds,layers,"crossentropy",opts);

Sugerencias

  • Puede visualizar muchas imágenes transformadas en la misma figura utilizando la función imtile. Por ejemplo, este código muestra un minilote de imágenes transformadas desde un almacén de datos de imágenes aumentado llamado auimds.

    minibatch = read(auimds);
    imshow(imtile(minibatch.input))
  • De forma predeterminada, cambiar el tamaño es la única operación de preprocesamiento de imágenes que se realiza en las imágenes. Para habilitar operaciones de preprocesamiento adicionales, utilice el argumento de par nombre-valor DataAugmentation con un objeto imageDataAugmenter. Cada vez que se leen imágenes del almacén de datos de imágenes aumentado, se aplica una combinación aleatoria diferente de operaciones de preprocesamiento a cada imagen.

Historial de versiones

Introducido en R2018a