Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

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 trainNetwork. Para obtener más información, consulte Preprocess Images for 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.

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.

ImageDatastore permite leer lotes de archivos de imágenes JPG o PNG mediante precarga. Si utiliza una función personalizada para leer las imágenes, ImageDatastore no realiza la precarga.

Sugerencia

Use augmentedImageDatastore para preprocesar eficiente de las imágenes para deep learning, incluyendo el cambio de tamaño de las imágenes.

No use la opción readFcn de la función imageDatastore para preprocesar o cambiar el tamaño, ya que esta opción suele ser bastante más lenta.

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.

Si el arreglo contiene valores NaN, estos se propagan a lo largo del entrenamiento. Sin embargo, en la mayoría de los casos, el entrenamiento no converge.

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 trainNetwork y funciones de inferencia como predict y classify. 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,YTrain] = digitTrain4DArrayData;

digitTrain4DArrayData carga el conjunto de entrenamiento de dígitos como datos de un arreglo 4D. 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.

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

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

idx = randperm(size(XTrain,4),1000);
XValidation = XTrain(:,:,:,idx);
XTrain(:,:,:,idx) = [];
YValidation = YTrain(idx);
YTrain(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. trainNetwork actualiza los parámetros de la red y descarta las imágenes aumentadas.

imageSize = [28 28 1];
augimds = augmentedImageDatastore(imageSize,XTrain,YTrain,'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
    classificationLayer];

Especifique las opciones de entrenamiento para el gradiente descendente estocástico con momento.

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

Entrene la red. Puesto que las imágenes de validación no son aumentadas, la precisión de validación es superior a la precisión de entrenamiento.

net = trainNetwork(augimds,layers,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