Main Content

imageDataAugmenter

Configurar el aumento de datos de imagen

Descripción

Un aumentador de datos de imagen configura un conjunto de opciones de preprocesamiento para aumentar la imagen, como el cambio de tamaño, la rotación y la reflexión.

imageDataAugmenter lo usa un objeto augmentedImageDatastore para generar lotes de imágenes aumentadas. Para obtener más información, consulte Aumentar imágenes para el entrenamiento con transformaciones geométricas aleatorias.

Creación

Descripción

aug = imageDataAugmenter crea un objeto imageDataAugmenter con valores predeterminados de propiedad coherentes con la transformación de identidad.

ejemplo

aug = imageDataAugmenter(Name,Value) configura un conjunto de opciones de aumento de imagen usando pares nombre-valor para establecer propiedades. Puede especificar varios pares nombre-valor. Encierre el nombre de cada propiedad entre comillas.

Propiedades

expandir todo

Valor de relleno usado para definir los puntos fuera de los límites al remuestrear, especificado como escalar numérico o vector numérico.

  • Si las imágenes aumentadas son de un solo canal, FillValue debe ser un escalar.

  • Si las imágenes aumentadas son multicanal, FillValue puede ser un escalar o un vector de longitud igual al número de canales de la imagen de entrada. Por ejemplo, si la imagen de entrada es una imagen RGB, FillValue puede ser un vector de longitud 3.

Para imágenes en escala de grises y en color, el valor de relleno predeterminado es 0. Para imágenes categóricas, el valor de relleno predeterminado es una etiqueta '<undefined>' y la función trainnet ignora los píxeles rellenos durante el entrenamiento.

Ejemplo: 128

Reflexión aleatoria en la dirección izquierda-derecha, especificada como un escalar lógico. Cuando RandXReflection es true (1), cada imagen se refleja horizontalmente con un 50% de probabilidad. Cuando RandXReflection es false (0), no se refleja ninguna imagen.

Reflexión aleatoria en la dirección arriba-abajo, especificada como un escalar lógico. Cuando RandYReflection es true (1), cada imagen se refleja verticalmente con un 50% de probabilidad. Cuando RandYReflection es false (0), no se refleja ninguna imagen.

Intervalo de rotación, en grados, aplicado a la imagen de entrada, especificado como una de las siguientes opciones.

  • Vector numérico de 2 elementos. El segundo elemento debe ser mayor o igual que el primero. El ángulo de rotación se elige de forma aleatoria a partir de una distribución uniforme continua dentro del intervalo especificado.

  • Identificador de función. La función no debe aceptar argumentos de entrada y devolver el ángulo de rotación como escalar numérico. Use un identificador de función para elegir ángulos de rotación de un intervalo disjunto o use una distribución de probabilidad no uniforme. Para obtener más información sobre los identificadores de función, consulte Crear un identificador de función.

De forma predeterminada, las imágenes aumentadas no se rotan.

Ejemplo: [-45 45]

Intervalo de escalado uniforme (isotrópico) aplicado a la imagen de entrada, especificado como uno de los siguientes elementos.

  • Vector numérico de 2 elementos. El segundo elemento debe ser mayor o igual que el primero. El factor de escala se elige de forma aleatoria a partir de una distribución uniforme continua dentro del intervalo especificado.

  • Identificador de función. La función no debe aceptar argumentos de entrada y devolver el factor de escala como escalar numérico. Use un identificador de función para elegir factores de escala de un intervalo disjunto o use una distribución de probabilidad no uniforme. Para obtener más información sobre los identificadores de función, consulte Crear un identificador de función.

De forma predeterminada, las imágenes aumentadas no se escalan.

Ejemplo: [0.5 4]

Intervalo de escalado horizontal aplicado a la imagen de entrada, especificado como uno de los siguientes elementos.

  • Vector numérico de 2 elementos. El segundo elemento debe ser mayor o igual que el primero. El factor de escala horizontal se elige de forma aleatoria a partir de una distribución uniforme continua dentro del intervalo especificado.

  • Identificador de función. La función no debe aceptar argumentos de entrada y devolver el factor de escala horizontal como escalar numérico. Use un identificador de función para elegir factores de escala horizontal de un intervalo disjunto o use una distribución de probabilidad no uniforme. Para obtener más información sobre los identificadores de función, consulte Crear un identificador de función.

De forma predeterminada, las imágenes aumentadas no se escalan en dirección horizontal.

Nota

Si especifica RandScale, imageDataAugmenter ignora el valor de RandXScale cuando se escalan imágenes.

Ejemplo: [0.5 4]

Intervalo de escalado vertical aplicado a la imagen de entrada, especificado como uno de los siguientes elementos.

  • Vector numérico de 2 elementos. El segundo elemento debe ser mayor o igual que el primero. El factor de escala vertical se elige de forma aleatoria a partir de una distribución uniforme continua dentro del intervalo especificado.

  • Identificador de función. La función no debe aceptar argumentos de entrada y devolver el factor de escala vertical como escalar numérico. Use un identificador de función para elegir factores de escala vertical de un intervalo disjunto o use una distribución de probabilidad no uniforme. Para obtener más información sobre los identificadores de función, consulte Crear un identificador de función.

De forma predeterminada, las imágenes aumentadas no se escalan en dirección vertical.

Nota

Si especifica RandScale, imageDataAugmenter ignora el valor de RandYScale cuando se escalan imágenes.

Ejemplo: [0.5 4]

Intervalo de sesgo horizontal aplicado a la imagen de entrada, especificado como uno de los siguientes elementos. El sesgo se mide como un ángulo en grados y está dentro del intervalo (-90, 90).

  • Vector numérico de 2 elementos. El segundo elemento debe ser mayor o igual que el primero. El ángulo de sesgo horizontal se elige de forma aleatoria a partir de una distribución uniforme continua dentro del intervalo especificado.

  • Identificador de función. La función no debe aceptar argumentos de entrada y devolver el ángulo de sesgo horizontal como escalar numérico. Use un identificador de función para elegir ángulos de sesgo horizontal de un intervalo disjunto o use una distribución de probabilidad no uniforme. Para obtener más información sobre los identificadores de función, consulte Crear un identificador de función.

De forma predeterminada, las imágenes aumentadas no se sesgan en dirección horizontal.

Ejemplo: [0 45]

Intervalo de sesgo vertical aplicado a la imagen de entrada, especificado como uno de los siguientes elementos. El sesgo se mide como un ángulo en grados y está dentro del intervalo (-90, 90).

  • Vector numérico de 2 elementos. El segundo elemento debe ser mayor o igual que el primero. El ángulo de sesgo vertical se elige de forma aleatoria a partir de una distribución uniforme continua dentro del intervalo especificado.

  • Identificador de función. La función no debe aceptar argumentos de entrada y devolver el ángulo de sesgo vertical como escalar numérico. Use un identificador de función para elegir ángulos de sesgo vertical de un intervalo disjunto o use una distribución de probabilidad no uniforme. Para obtener más información sobre los identificadores de función, consulte Crear un identificador de función.

De forma predeterminada, las imágenes aumentadas no se sesgan en dirección vertical.

Ejemplo: [0 45]

Intervalo de traslación horizontal aplicado a la imagen de entrada, especificado como uno de los siguientes elementos. La distancia de traslación se mide en píxeles.

  • Vector numérico de 2 elementos. El segundo elemento debe ser mayor o igual que el primero. La distancia de traslación horizontal se elige de forma aleatoria a partir de una distribución uniforme continua dentro del intervalo especificado.

  • Identificador de función. La función no debe aceptar argumentos de entrada y devolver la distancia de traslación horizontal como escalar numérico. Use un identificador de función para elegir distancias de traslación horizontal de un intervalo disjunto o use una distribución de probabilidad no uniforme. Para obtener más información sobre los identificadores de función, consulte Crear un identificador de función.

De forma predeterminada, las imágenes aumentadas no se trasladan en dirección horizontal.

Ejemplo: [-5 5]

Intervalo de traslación vertical aplicado a la imagen de entrada, especificado como uno de los siguientes elementos. La distancia de traslación se mide en píxeles.

  • Vector numérico de 2 elementos. El segundo elemento debe ser mayor o igual que el primero. La distancia de traslación vertical se elige de forma aleatoria a partir de una distribución uniforme continua dentro del intervalo especificado.

  • Identificador de función. La función no debe aceptar argumentos de entrada y devolver la distancia de traslación vertical como escalar numérico. Use un identificador de función para elegir distancias de traslación vertical de un intervalo disjunto o use una distribución de probabilidad no uniforme. Para obtener más información sobre los identificadores de función, consulte Crear un identificador de función.

De forma predeterminada, las imágenes aumentadas no se trasladan en dirección vertical.

Ejemplo: [-5 5]

Funciones del objeto

augmentApply identical random transformations to multiple images

Ejemplos

contraer todo

Cree un aumentador de datos de imágenes que las preprocese antes del entrenamiento. Este aumentador rota imágenes en ángulos aleatorios en el intervalo de [0, 360] grados y cambia el tamaño de las imágenes en factores de escala aleatorios en el intervalo [0,5, 1].

augmenter = imageDataAugmenter( ...
    'RandRotation',[0 360], ...
    'RandScale',[0.5 1])
augmenter = 
  imageDataAugmenter with properties:

           FillValue: 0
     RandXReflection: 0
     RandYReflection: 0
        RandRotation: [0 360]
           RandScale: [0.5000 1]
          RandXScale: [1 1]
          RandYScale: [1 1]
          RandXShear: [0 0]
          RandYShear: [0 0]
    RandXTranslation: [0 0]
    RandYTranslation: [0 0]

Cree un almacén de datos de imágenes aumentadas mediante el aumentador de datos de imágenes. El almacén de datos de imágenes aumentadas también requiere datos de muestra, etiquetas y un tamaño de imagen de salida.

[XTrain,YTrain] = digitTrain4DArrayData;
imageSize = [56 56 1];
auimds = augmentedImageDatastore(imageSize,XTrain,YTrain,'DataAugmentation',augmenter)
auimds = 
  augmentedImageDatastore with properties:

         NumObservations: 5000
           MiniBatchSize: 128
        DataAugmentation: [1x1 imageDataAugmenter]
      ColorPreprocessing: 'none'
              OutputSize: [56 56]
          OutputSizeMode: 'resize'
    DispatchInBackground: 0

Previsualice las transformaciones aleatorias aplicadas a las ocho primeras imágenes del almacén de datos de imágenes.

minibatch = preview(auimds);
imshow(imtile(minibatch.input));

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

Previsualice diferentes transformaciones aleatorias aplicadas al mismo conjunto de imágenes.

minibatch = preview(auimds);
imshow(imtile(minibatch.input));

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

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

  • Para previsualizar las transformaciones aplicadas a las imágenes de muestreo, use la función augment.

  • Para aumentar la imagen durante el entrenamiento, cree un objeto augmentedImageDatastore y especifique las opciones de preprocesamiento mediante el par nombre-valor 'DataAugmentation' con un objeto imageDataAugmenter. El almacén de datos de imágenes aumentadas aplica automáticamente transformaciones aleatorias a los datos de entrenamiento.

Historial de versiones

Introducido en R2017b