Métodos comunes de mejora de datos de Tensorflow2 y resumen de su implementación

En la construcción del modelo en la dirección CV, a menudo necesitamos mejorar los datos de las imágenes de entrada, lo que reducirá el ajuste excesivo del modelo a los datos y mejorará el rendimiento del modelo. En el proyecto real. Para escenarios como defectos industriales e imágenes médicas, los datos que obtenemos son limitados después de todo, es muy útil para mejorar el rendimiento del modelo a través de la mejora de datos. En este momento, solo se puede utilizar el método de mejora de la imagen para establecer el conjunto de datos necesarios para el entrenamiento.


Tabla de contenido

1. Mejora de datos supervisada

1.1, mejora de datos de una sola muestra

1.1.1, transformación del espacio geométrico

1.1.2, clase de conversión de color de píxeles

1.2, síntesis de múltiples muestras

1.2.1 、 SMOTE

1.2.2 、 Emparejamiento de muestras

1.2.3 、 confusión

1.3 Combate real: la realización de la mejora de datos en tf.data

1.3.1, el uso de la biblioteca imgaug en Tensorflow

1.3.2 Implementación de la mejora de datos confusos en Tensorflow

2. Mejora de datos sin supervisión

2.1 、 GAN

2.2 、 Aumento automático


Aquí presentamos una herramienta de mejora de datos más poderosa, todos los métodos de mejora que se le ocurran tener-imgaug . imgaug es una biblioteca para la mejora de imágenes en experimentos de aprendizaje automático. Admite una amplia gama de técnicas de expansión, puede combinarlas fácilmente y ejecutarlas en un orden aleatorio o en múltiples núcleos de CPU, con una interfaz aleatoria simple y poderosa, que no solo puede expandir imágenes, sino también expandir puntos clave / puntos de referencia, cuadros delimitadores, mapa de calor y mapa de segmentos.

 Comando de instalación de Imgaug:

pip install imgaug

Aquí primero presentamos los métodos de mejora de datos de uso común y luego presentamos cómo aplicar estos métodos de mejora en Tensorflow2.

El método de uso específico es el siguiente:

import cv2
import imgaug.augmenters as iaa

seq = iaa.Sequential([ 
    iaa.Fliplr(0.5), # horizontally flip 50% of the images
])

img=cv2.imread("D:\\PycharmProjects\\my_project\\GHIM-20\\GHIM-20\\19\\19_9597.jpg")
[img_seq,]=seq(images=[img])
cv2.imshow("test",img_seq)
cv2.waitKey(0)

 Mostrar resultados:

1. Mejora de datos supervisada

1.1, mejora de datos de una sola muestra

1.1.1, transformación del espacio geométrico

La clase de transformación geométrica es realizar una transformación geométrica en la imagen, incluidas varias operaciones como voltear, rotar, recortar, deformar y escalar.

  • Voltear

Flip incluye flip horizontal y vertical.

iaa.Fliplr(0.5) # 左右翻转
iaa.Flipud(1) #上下翻转
  •  Corte

Recorta la región de interés (ROI) de la imagen, generalmente durante el entrenamiento, se utiliza un método de recorte aleatorio.

Corte y acolchado

iaa.CropAndPad(px=None,
               percent=None,
               pad_mode='constant',
               pad_cval=0,
               keep_size=True,
               sample_independently=True,
               name=None,
               deterministic=False,
               random_state=None)

parámetro:

  • px: desea recortar (valores negativos) o rellenar (valores positivos) píxeles. Tenga en cuenta que el porcentaje y el porcentaje no pueden existir al mismo tiempo. Si es Ninguno, no se utilizará el recorte a nivel de píxel. La lista int o int es la misma que la anterior. Si es una tupla de 4 elementos, entonces los 4 elementos representan respectivamente (arriba, derecha, abajo, izquierda), y cada elemento puede ser una tupla int o int o una lista int.
  • percent: recorte o pad según la proporción, igual que px. Pero los dos no pueden existir al mismo tiempo.
  • pad_mode: modo de relleno. Puede ser Todo, cadena, lista de cadenas. Maneras de relleno opcionales:  constant, edge, linear_ramp, maximum, median, minimum, reflect, symmetric, wrap. El significado específico se puede encontrar en la documentación numpy.
  • pad_cval: . Cuando pad_mode = constante, seleccione el valor de relleno. float、int、float tuple、int tuple、float list、int list
  • keep_size: tipo bool. Después de recortar, el tamaño de la imagen cambiará. Si el valor se establece en 1, se escalará al tamaño original después del recorte o almohadilla.
  • sample_independently: tipo bool. Si se establece en Falso, el valor seleccionado de px o porcentaje se aplicará a las cuatro direcciones cada vez.

Corte

iaa.Crop((0,0,100,100))

  •  Afín

Realice simultáneamente varias operaciones como recorte, rotación, conversión y ajuste de modo en la imagen. Por ejemplo, aquí podemos rotar la imagen entre -30 y 30 grados.

iaa.Affine(rotate=(-30, 30))

  •  Distorsión del zoom

Seleccione aleatoriamente una parte de la imagen y luego ajústela al tamaño de imagen original. Por ejemplo, ajuste el tamaño de cada imagen a alto = 100 y ancho = 100:

iaa.Resize({"height": 100, "width": 100})

1.1.2, clase de conversión de color de píxeles

  • Ruido

El ruido aleatorio se basa en la imagen original y algo de ruido se superpone aleatoriamente.

#高斯噪声(又称白噪声)。
#将高斯噪声添加到图像中,每个像素从正态分布N(0,s)采样一次,其中s对每个图像采样并在0和0.05 * 255之#间变化:
iaa.AdditiveGaussianNoise(scale=(0, 0.05 * 255))

#矩形丢弃增强器
#在面积大小可选定、位置随机的矩形区域上丢失信息实现转换,所有通道的信息丢失产生黑色矩形块,部分通道
#的信息丢失产生彩色噪声。
#通过将所有像素转换为黑色像素来丢弃2%,但是在具有原始大小的50%的图像的较低分辨率版本上执行此操作,#丢弃2x2的正方形:
iaa.CoarseDropout(0.02, size_percent=0.5)
#丢弃2%的图像,但是在具有原始大小的50%的图像的较低分辨率版本上执行此操作,丢弃2x2个正方形。 此
#外,在50%的图像通道中执行此操作,以便仅将某些通道的信息设置为0,而其他通道保持不变:
iaa.CoarseDropout(0.02, size_percent=0.5, per_channel=0.5)

  • Clase difusa

Reduzca la diferencia en el valor de cada píxel para lograr el desenfoque de la imagen y suavizar los píxeles.

#使用高斯内核模糊图像的增强器。用高斯内核模糊每个图像,sigma为3.0:
iaa.GaussianBlur(sigma=(0.0, 3.0))

#像素位移增强器
#通过使用位移字段在本地移动像素来转换图像。
#通过在强度为0.25的失真场后移动单个像素来局部扭曲图像。 每个像素的移动强度范围为0到5.0:
iaa.ElasticTransformation(alpha=(0, 5.0), sigma=0.25)

  • Conversión de contraste HSV

Al sumar o restar el valor V a cada píxel en el espacio HSV, el tono y la saturación se modifican para lograr la conversión de contraste.

iaa.WithColorspace(
        to_colorspace="HSV",
        from_colorspace="RGB",
        children=iaa.WithChannels(0, iaa.Add((10, 50)))

  • Perturbación de color RGB

Convierta la imagen del espacio de color RGB a otro espacio de color, aumente o disminuya los parámetros de color y luego vuelva al espacio de color RGB.

#每个图像转换成一个彩色空间与亮度相关的信道,提取该频道,之间加-30和30并转换回原始的色彩空间。
iaa.AddToBrightness((-30, 30))

#从离散的均匀范围中采样随机值[-50..50],将其转换为角度表示形式,并将其添加到色相(即色空间中的H通
#道)中HSV。
iaa.AddToHue((-50, 50))

#通过随机值增加或减少色相和饱和度。
#增强器首先将图像转换为HSV色彩空间,然后向H和S通道添加随机值,然后转换回RGB。
#在色相和饱和度之间添加随机值(对于每个通道独立添加-100,100对于该通道内的所有像素均添加相同的
#值)。
iaa.AddToHueAndSaturation((-100, 100), per_channel=True)

#将随机值添加到图像的饱和度。
#增强器首先将图像转换为HSV色彩空间,然后将随机值添加到S通道,然后转换回RGB。
#如果要同时更改色相和饱和度,建议使用AddToHueAndSaturation,否则图像将被两次转换为HSV并返RGB。
#从离散的均匀范围内采样随机值[-50..50],并将其添加到饱和度,即添加到 色彩空间中的S通道HSV。
iaa.AddToSaturation((-50, 50))

  • Superpíxeles

Genere varios superpíxeles de la imagen a la resolución máxima, ajústelos al tamaño original y reemplace todas las áreas de superpíxeles de la imagen original con superpíxeles en una determinada proporción, y el resto de áreas permanecen sin cambios.

#完全或部分地将图像变换为其超像素表示。
#每个图像生成大约64个超像素。 用平均像素颜色替换每个概率为50%。
iaa.Superpixels(p_replace=0.5, n_segments=64)

  • Afilar y grabar

Realice un cierto grado de nitidez o relieve en la imagen y combine el resultado con la imagen a través de un canal determinado.

#锐化图像,然后使用0.0到1.0之间的alpha将结果与原始图像重叠:
iaa.Sharpen(alpha=(0.0, 1.0), lightness=(0.75, 2.0))

#浮雕图像,然后使用0.0到1.0之间的alpha将结果与原始图像叠加:
iaa.Emboss(alpha=(0.0, 1.0), strength=(0.5, 1.5))

1.2, síntesis de múltiples muestras

1.2.1 、 SMOTE

SMOTE, técnica de sobremuestreo de minorías sintéticas, maneja el problema del desequilibrio de la muestra sintetizando artificialmente nuevas muestras y mejora el rendimiento del clasificador.

Principio SMOTE:

  1. Seleccione algunas muestras

  2. Para cada muestra de clase de muestra pequeña (x, y), encuentre K muestras vecinas más cercanas de acuerdo con la distancia euclidiana

  3. Un punto de muestra se selecciona aleatoriamente de K muestras vecinas más cercanas, asumiendo que el punto vecino más cercano seleccionado es (xn, yn). Un punto se selecciona aleatoriamente como un nuevo punto de muestra en el segmento de conexión entre la muestra de la clase de muestra pequeña (x, y) y el punto de muestra vecino más cercano (xn, yn), que satisface la siguiente fórmula:(x_ {nuevo}, y_ {nuevo}) = (x, y) + rand (0-1) ((x_ {n} -x), (y_ {n} -y))

  4. Repita el muestreo hasta que el número de muestras grandes y pequeñas esté equilibrado.

En Python, el algoritmo SMOTE se ha encapsulado en la biblioteca de aprendizaje desequilibrado. La siguiente figura muestra un ejemplo de mejora de datos implementada por el algoritmo. La figura de la izquierda es el diagrama de espacio de características de datos original y la figura de la derecha es el diagrama de espacio de características procesado por el algoritmo SMOTE.

Link de referencia:

SMOTE__Simple Principle Diagram_Algorithm Implementación e implementación simple de R y Python Tuning Package

1.2.2 、 Emparejamiento de muestras

El flujo de procesamiento del método SamplePairing se muestra en la siguiente figura. Dos imágenes se seleccionan aleatoriamente del conjunto de entrenamiento y se procesan mediante operaciones básicas de mejora de datos (como giros aleatorios, etc.). Luego, se superponen en una nueva muestra en el forma de promedio de píxeles, y la etiqueta es la muestra original. Una de las etiquetas.

Después de que se procesa SamplePairing, el tamaño del conjunto de entrenamiento se puede expandir de N a N * N, y el procesamiento también se puede completar en la CPU. El proceso de formación es una combinación de operaciones de procesamiento y desactivación alternativas mediante SamplePairing:

  1. Utilice datos tradicionales para mejorar la red de entrenamiento, sin utilizar los datos de SamplePairing para mejorar el entrenamiento;
  2. Después de completar una época en el conjunto de datos ILSVRC o 100 épocas en otros conjuntos de datos, únase al entrenamiento de mejora de datos SamplePairing;
  3. SamplePairing se desactiva de forma intermitente. Para el conjunto de datos ILSVRC, habilite SamplePairing para 300.000 imágenes y luego desactívelo para las siguientes 100.000 imágenes. Para otros conjuntos de datos, habilítelo en las primeras 8 épocas y deshabilítelo en las siguientes 2 épocas;
  4. Una vez que la función de pérdida de entrenamiento y la precisión sean estables, ajústelo y desactive SamplePairing.

Los resultados experimentales muestran que debido a que la operación de mejora de datos SamplePairing puede introducir muestras de entrenamiento con diferentes etiquetas, el error de usar el entrenamiento SamplePairing en cada conjunto de datos aumenta significativamente y el error de verificación de usar el entrenamiento SamplePairing en términos de error de detección se reduce en gran medida. Aunque SamplePairing tiene una idea simple, el efecto de mejora del rendimiento es considerable, de acuerdo con el principio de la navaja de Occam, desafortunadamente, la interpretabilidad no es fuerte y todavía hay una falta de apoyo teórico. En la actualidad, solo hay experimentos con datos de imágenes y se necesitan más experimentos e interpretaciones.

1.2.3 、 confusión

Mixup es un método de mejora de datos basado en el principio de minimización del riesgo de vecindad (VRM), que utiliza la interpolación lineal para obtener nuevos datos de muestra. Bajo el principio de minimización del riesgo de vecindad, basado en el conocimiento previo de que la interpolación lineal de vectores de características conducirá a la interpolación lineal de objetivos relacionados, se puede derivar una fórmula de confusión simple e independiente de los datos:

Entre ellos (xn, yn) están los nuevos datos generados por interpolación, (xi, yi) y (xj, yj) son dos datos seleccionados al azar en el conjunto de entrenamiento, el valor de λ satisface la distribución beta y el rango de valores es de 0 a 1., el hiperparámetro α controla la intensidad de la interpolación entre los objetivos de características.

El experimento de confusión es rico, y los resultados experimentales muestran que el error de generalización del modelo de aprendizaje profundo en el conjunto de datos ImageNet, el conjunto de datos CIFAR, el conjunto de datos de voz y el conjunto de datos de la tabla se puede mejorar, reduciendo la memoria del modelo de etiquetas dañadas. y mejorar la robustez del modelo frente a muestras adversas Robustez y entrenamiento frente a la estabilidad de la red generativa. El proceso de mezcla se da cuenta de que el límite se difumina, proporciona un efecto de predicción suave y mejora la capacidad de predicción del modelo fuera del rango de los datos de entrenamiento. A medida que aumenta el hiperparámetro α, aumentará el error de entrenamiento de los datos reales y disminuirá el error de generalización. Muestra que la confusión controla implícitamente la complejidad del modelo. A medida que aumentan la capacidad del modelo y los hiperparámetros, el error de entrenamiento disminuye. A pesar de la considerable mejora del efecto, la confusión aún no ha tenido una buena explicación para el equilibrio sesgo-varianza. En otros tipos de aprendizaje supervisado, no supervisado, semi-supervisado y por refuerzo, la confusión todavía tiene mucho espacio para el desarrollo.

Resumen: Mixup, SMOTE y SamplePairing tienen las mismas ideas. Todos tratan de unir puntos de muestra discretos para ajustarse a la distribución de muestra real, pero los puntos de muestra agregados aún se encuentran en el espacio de características donde se conocen los puntos de muestra pequeños. Área cerrada. Sin embargo, en el espacio de características, la verdadera distribución de datos de muestra pequeña puede no estar limitada a esta área. La interpolación adecuada fuera del rango dado puede lograr mejores efectos de mejora de datos.

Conexión de referencia:

Aprendizaje profundo | mezcla de trucos en la red de entrenamiento

1.3 Combate real: la realización de la mejora de datos en tf.data

1.3.1, el uso de la biblioteca imgaug en Tensorflow

import imgaug.augmenters as iaa

#添加需要增强的操作
self.augmenter = iaa.Sequential([
        iaa.Fliplr(config.sometimes),
        iaa.Crop(percent=config.crop_percent),
        ...
        ], random_order=config.random_order)

#封装增强函数
def augment_fn(self):
    def augment(images, labels):
        img_dtype = images.dtype
        img_shape = tf.shape(images)
        images = tf.numpy_function(self.augmenter.augment_images,[images],img_dtype)
        images = tf.reshape(images, shape = img_shape)
        return images, labels
    return augment

1.3.2 Implementación de la mejora de datos confusos en Tensorflow

 Enlace de referencia: https://github.com/OFRIN/Tensorflow_MixUp/blob/master/Train_MixUp.py

MIXUP_ALPHA = 0.2
BATCH_SIZE = 64

# MixUp Function
def MixUp(images, labels):
    indexs = np.random.permutation(BATCH_SIZE)
    alpha = np.random.beta(MIXUP_ALPHA, MIXUP_ALPHA, BATCH_SIZE)

    image_alpha = alpha.reshape((BATCH_SIZE, 1, 1, 1))
    label_alpha = alpha.reshape((BATCH_SIZE, 1))

    x1, x2 = images, images[indexs]
    y1, y2 = labels, labels[indexs]

    images = image_alpha * x1 + (1 - image_alpha) * x2
    labels = label_alpha * y1 + (1 - label_alpha) * y2

    return images, labels

2. Mejora de datos sin supervisión

La mejora de datos no supervisada incluye principalmente dos categorías:

  1. Aprendiendo la distribución de los datos a través del modelo, generando aleatoriamente imágenes consistentes con la distribución del conjunto de datos de entrenamiento, el método representativo, GAN.
  2. A través del modelo, aprenda un método de mejora de datos adecuado para la tarea actual, el método representativo, AutoAugment.

2.1 、 GAN

Redes generativas adversarias, nombre traducido redes generativas adversarias, contiene dos redes, una es una red generativa y la otra es una red de confrontación. Los principios básicos son los siguientes:

  1. G es una red que genera imágenes, recibe ruido aleatorio z y genera imágenes a través del ruido, denotado como G (z).
  2. D es una red discriminante, que determina si una imagen es "real", es decir, si es una imagen real o una imagen generada por G.

2.2 、 Aumento automático

Aunque se trata de un artículo, también se puede considerar como una dirección de investigación. Su idea básica: utilizar el aprendizaje por refuerzo para encontrar la mejor estrategia de transformación de imágenes a partir de los datos mismos y aprender diferentes métodos de mejora para diferentes tareas.

Fundamental:

  1. Prepare 16 operaciones de mejora de datos.
  2. Elija 5 operaciones de 16 y genere aleatoriamente la probabilidad y amplitud de usar la operación, llámela subpolítica y genere un total de 5 subpolíticas.
  3. Las imágenes de cada lote utilizan aleatoriamente una de las cinco operaciones de subpolíticas.
  4. Retroalimentación a través de la capacidad de generalización del modelo infantil sobre el conjunto de validación y el uso de métodos de aprendizaje mejorados.
  5. Después de 80 ~ 100 épocas, comienza a ser efectivo y puede aprender subpolíticas.
  6. Conecte estas 5 subpolíticas en serie y luego continúe con la capacitación final.

Link de referencia:

[Revisión técnica] ¿Cuáles son los métodos de mejora de datos en el aprendizaje profundo?

Python: mejora de datos de imagen de imgaug, Pythonimgaug, imagen

Artefacto de mejora de datos de imgaug: una lista de potenciadores

Supongo que te gusta

Origin blog.csdn.net/wxplol/article/details/107937508
Recomendado
Clasificación