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.
aug = imageDataAugmenter(
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.Name,Value
)
Propiedades
FillValue
— Valor de relleno
Escalar numérico | Vector numérico
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
RandXReflection
— Reflexión aleatoria
false
(predeterminado) | true
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.
RandYReflection
— Reflexión aleatoria
false
(predeterminado) | true
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.
RandRotation
— Intervalo de rotación
[0 0]
(predeterminado) | Vector numérico de 2 elementos | identificador de función
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]
RandScale
— Intervalo de escalado uniforme
[1 1]
(predeterminado) | Vector numérico de 2 elementos | identificador de función
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]
RandXScale
— Intervalo de escalado horizontal
[1 1]
(predeterminado) | Vector de 2 elementos de números positivos | identificador de función
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]
RandYScale
— Intervalo de escalado vertical
[1 1]
(predeterminado) | Vector de 2 elementos de números positivos | identificador de función
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]
RandXShear
— Intervalo de sesgo horizontal
[0 0]
(predeterminado) | Vector numérico de 2 elementos | identificador de función
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]
RandYShear
— Intervalo de sesgo vertical
[0 0]
(predeterminado) | Vector numérico de 2 elementos | identificador de función
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]
RandXTranslation
— Intervalo de traslación horizontal
[0 0]
(predeterminado) | Vector numérico de 2 elementos | identificador de función
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]
RandYTranslation
— Intervalo de traslación vertical
[0 0]
(predeterminado) | Vector numérico de 2 elementos | identificador de función
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
augment | Apply identical random transformations to multiple images |
Ejemplos
Crear un aumentador de datos de imágenes para cambiar el tamaño de las imágenes y rotarlas
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));
Previsualice diferentes transformaciones aleatorias aplicadas al mismo conjunto de imágenes.
minibatch = preview(auimds); imshow(imtile(minibatch.input));
Entrenar una red con imágenes aumentadas
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 objetoimageDataAugmenter
. 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
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)