AI, curso pr谩ctico. Preprocesamiento y adici贸n de im谩genes.

El preprocesamiento es un t茅rmino general para todas las manipulaciones realizadas con datos antes de transferir su modelo, incluido el centrado, la normalizaci贸n, el desplazamiento, la rotaci贸n, el recorte, etc. Como regla general, se requiere preprocesamiento en dos casos.

  • Limpieza de datos . Suponga que algunos artefactos est谩n presentes en las im谩genes. Para facilitar el entrenamiento del modelo, los artefactos deben eliminarse en la etapa de preprocesamiento.
  • Adici贸n de datos . A veces, los conjuntos de datos peque帽os no son suficientes para la formaci贸n de modelos profundos de alta calidad. Un enfoque de suplemento de datos es muy 煤til para resolver este problema. Este es el proceso de transformar cada muestra de datos de varias maneras y agregar tales muestras modificadas al conjunto de datos. De esta forma, se puede aumentar el tama帽o efectivo del conjunto de datos.

Consideremos algunos posibles m茅todos de transformaci贸n durante el preprocesamiento y su implementaci贸n a trav茅s de Keras.


Datos


En este y en los art铆culos siguientes, se utilizar谩 un conjunto de datos para analizar el color emocional de las im谩genes. Contiene 1.500 ejemplos de im谩genes, divididas en dos clases: positiva y negativa. Veamos algunos ejemplos.


Ejemplos negativos


Ejemplos positivos

Transformaciones de limpieza


Ahora considere un conjunto de posibles transformaciones com煤nmente utilizadas para limpiar datos, su implementaci贸n e impacto en las im谩genes.

Todos los fragmentos de c贸digo se pueden encontrar en el libro Preprocessing.ipynb .

Reescalado


Las im谩genes generalmente se almacenan en formato RGB (Rojo Verde Azul). En este formato, la imagen est谩 representada por una matriz tridimensional (o de tres canales).


Descomposici贸n RGB de la imagen. Gr谩fico tomado de Wikiwand

Una dimensi贸n se usa para canales (rojo, verde y azul), las otras dos representan la ubicaci贸n. Por lo tanto, cada p铆xel se codifica con tres n煤meros. Cada n煤mero generalmente se almacena como un tipo entero sin signo de 8 bits (0 a 255).

El cambio de escala es una operaci贸n que cambia el rango num茅rico de datos simplemente dividi茅ndolo por una constante predeterminada. En redes neuronales profundas, puede ser necesario limitar los datos de entrada a un rango de 0 a 1 debido a un posible desbordamiento, problemas de optimizaci贸n, estabilidad, etc.

Por ejemplo, volvemos a escalar nuestros datos del rango [0; 255] al rango [0; 1] En lo sucesivo, utilizaremos la clase Keras ImageDataGenerator , que le permite realizar todas las transformaciones sobre la marcha.

Creemos dos instancias de esta clase: una para los datos transformados y la otra para la fuente:


(o para datos predeterminados). Solo es necesario especificar la constante de escala. Adem谩s, la clase ImageDataGenerator le permite transmitir datos directamente desde una carpeta en su disco duro utilizando el m茅todo flow_from_directory .

Todos los par谩metros se pueden encontrar en la documentaci贸n , pero los par谩metros principales son: la ruta a la secuencia y el tama帽o de la imagen objetivo (si la imagen no coincide con el tama帽o objetivo, el generador simplemente la corta o la construye). Finalmente, obtenemos una muestra del generador y consideramos los resultados.

Visualmente, ambas im谩genes son id茅nticas, pero la raz贸n de esto es porque las herramientas Python * cambian el tama帽o de las im谩genes autom谩ticamente



al rango predeterminado para que puedan mostrarse en la pantalla. Considere los datos sin procesar (matrices). Como puede ver, los macizos sin procesar difieren exactamente 255 veces.

Escala de grises


Otro tipo de transformaci贸n que puede ser 煤til es la escala de grises , que convierte una imagen RGB de color en una imagen en la que todos los colores se representan en tonos de gris. El procesamiento de im谩genes convencional puede usar la traducci贸n en escala de grises en combinaci贸n con un umbral posterior. Este par de transformaciones puede rechazar p铆xeles ruidosos y definir formas en la imagen. Hoy, todas estas operaciones son realizadas por la red neuronal convolucional (CNN), pero la conversi贸n en escala de grises como un paso de preprocesamiento puede ser 煤til. Ejecute este paso en Keras con la misma clase de generador.



Aqu铆 creamos solo una instancia de la clase y tomamos dos generadores diferentes. El segundo generador establece el par谩metro color_mode en "escala de grises" (el valor predeterminado es "RGB").

Muestras de centrado


Ya hemos visto que los valores de los datos sin procesar est谩n en el rango de 0 a 255. Por lo tanto, una muestra es una matriz tridimensional de n煤meros de 0 a 255. A la luz de los principios de estabilidad de optimizaci贸n (deshacerse del problema de la desaparici贸n o saturaci贸n de valores), puede ser necesario normalizar el conjunto de datos para que el promedio de cada muestra de datos sea 0 .



Para esto, es necesario calcular el valor promedio sobre toda la muestra y restarlo de cada n煤mero en la muestra dada.
En Keras, esto se hace usando el par谩metro samplewise_center .

Normalizaci贸n de la desviaci贸n est谩ndar de las muestras.


Esta etapa de preprocesamiento se basa en la misma idea que el centrado de las muestras, pero en lugar de establecer el promedio en 0 desde, establece la desviaci贸n est谩ndar en 1.



La normalizaci贸n de la desviaci贸n est谩ndar se controla mediante el par谩metro samplewise_std_normalization . Cabe se帽alar que estos dos m茅todos de normalizaci贸n de muestras a menudo se usan juntos.

Esta transformaci贸n se puede utilizar en modelos de aprendizaje profundo para mejorar la estabilidad de la optimizaci贸n al reducir el impacto de los gradientes explosivos.

Centrado de funciones


Las dos secciones anteriores utilizaron una t茅cnica de normalizaci贸n que analiz贸 cada muestra individual de datos. Existe un enfoque alternativo para el procedimiento de normalizaci贸n. Considere cada n煤mero en la matriz de im谩genes como un signo. Entonces cada imagen es un vector de caracter铆sticas . Hay muchos de esos vectores en el conjunto de datos; por lo tanto, podemos considerarlos como una distribuci贸n desconocida. Esta distribuci贸n es multiparam茅trica, y su dimensi贸n ser谩 igual al n煤mero de caracter铆sticas, es decir, ancho 脳 alto 脳 3. Aunque se desconoce la distribuci贸n real de los datos, puede intentar normalizarla restando la distribuci贸n promedio. Cabe se帽alar que el valor promedio es un vector de la misma dimensi贸n, es decir, tambi茅n es una imagen. En otras palabras, promediamos sobre todo el conjunto de datos, y no sobre una muestra.

Hay un par谩metro especial de Keras llamado featurewise_centering , pero, desafortunadamente, a partir de agosto de 2017, hubo un error en su implementaci贸n; por lo tanto, lo implementamos nosotros mismos. Primero, consideramos todo el conjunto de datos en la memoria (podemos pagarlo, ya que estamos tratando con un peque帽o conjunto de datos). Lo hicimos configurando el tama帽o del paquete al tama帽o del conjunto de datos. Luego calculamos la imagen promedio sobre todo el conjunto de datos y finalmente la restamos de la imagen de prueba.



Normalizaci贸n de la desviaci贸n est谩ndar de los s铆ntomas.


La idea de normalizar la desviaci贸n est谩ndar es exactamente la misma que la idea de centrar. La 煤nica diferencia es que en lugar de restar el promedio, dividimos por la desviaci贸n est谩ndar. Visualmente, el resultado no es muy diferente. Sucedi贸 lo mismo


durante el cambio de escala, dado que la normalizaci贸n de la desviaci贸n est谩ndar no es m谩s que un cambio de escala con una constante calculada de cierta manera, y con un cambio de escala simple, la constante se especifica manualmente. Tenga en cuenta que una idea similar de normalizar los paquetes de datos es el n煤cleo de una t茅cnica moderna de aprendizaje profundo llamada BatchNormalization .



Transformaci贸n con la adici贸n.


En esta secci贸n, observamos varias transformaciones dependientes de datos que usan expl铆citamente la naturaleza gr谩fica de los datos. Estos tipos de transformaciones a menudo se usan en procedimientos de adici贸n de datos.

Rotaci贸n


Este tipo de transformaci贸n gira la imagen en cierta direcci贸n (en sentido horario o antihorario).

El par谩metro que permite la rotaci贸n se llama rotaci贸n_rango . Indica el rango en grados desde el cual el 谩ngulo de rotaci贸n se selecciona aleatoriamente con una distribuci贸n uniforme. Cabe se帽alar que durante la rotaci贸n, el tama帽o de la imagen no cambia. Por lo tanto, algunas partes de la imagen pueden recortarse y otras llenarse.



El modo de relleno se establece utilizando el par谩metro fill_mode . Es compatible con varios m茅todos de relleno, pero aqu铆 usamos el m茅todo constante como ejemplo.



Desplazamiento horizontal


Este tipo de transformaci贸n desplaza la imagen en una determinada direcci贸n a lo largo del eje horizontal (izquierda o derecha).



El tama帽o del cambio se puede determinar utilizando el par谩metro width_shift_range y se puede medir como parte del ancho total de la imagen.

Desplazamiento vertical




Desplaza la imagen a lo largo del eje vertical (arriba o abajo). El par谩metro que controla el rango de desplazamiento se denomina generador de cambio de altura y tambi茅n se mide como parte de la altura total de la imagen.

Poda


Una conversi贸n de recorte o recorte desplaza cada punto en la direcci贸n vertical en una cantidad proporcional a la distancia desde ese punto hasta el borde de la imagen. Tenga en cuenta que en el caso general, la direcci贸n no tiene que ser vertical y es arbitraria.



El par谩metro que controla el desplazamiento se llama shear_range y corresponde al 谩ngulo de desviaci贸n (en radianes) entre la l铆nea horizontal en la imagen original y la imagen (en el sentido matem谩tico) de esta l铆nea en la imagen transformada.

Acercar / Alejar



Este tipo de transformaci贸n se aproxima o elimina la imagen original. El par谩metro zoom_range controla el factor de zoom.



Por ejemplo, si zoom_range es 0.5, entonces el factor de zoom se seleccionar谩 del rango [0.5, 1.5].



Volteo horizontal




Voltea la imagen en relaci贸n con el eje vertical. Se puede activar o desactivar utilizando el par谩metro horizontal_flip .

Volteo vertical




Voltea la imagen alrededor del eje horizontal. El par谩metro vertical_flip (de tipo booleano) controla la presencia o ausencia de esta transformaci贸n.

Combinaci贸n


Aplicamos todos los tipos descritos de transformaciones del complemento al mismo tiempo y vemos qu茅 sucede. Recuerde que los par谩metros para todas las transformaciones se seleccionan aleatoriamente de un cierto rango; por lo tanto, debemos obtener un conjunto de muestras con un grado significativo de diversidad.

Iniciamos ImageDataGenerator con todos los par谩metros disponibles y verificamos el hidrante rojo en la imagen.



Tenga en cuenta que el modo de relleno constante se us贸 solo para una mejor visualizaci贸n. Ahora usaremos un modo de relleno m谩s avanzado llamado m谩s cercano ; Este modo asigna el color del p铆xel existente m谩s cercano al p铆xel vac铆o.


Conclusi贸n


Este art铆culo proporciona una descripci贸n general de las t茅cnicas b谩sicas para el preprocesamiento de im谩genes, tales como: escala, normalizaci贸n, rotaci贸n, desplazamiento y recorte. Tambi茅n demostraron la implementaci贸n de estas t茅cnicas de transformaci贸n utilizando Keras y su introducci贸n en el proceso de aprendizaje profundo tanto t茅cnica (clase ImageDataGenerator ) como ideol贸gicamente (suplemento de datos).

Source: https://habr.com/ru/post/es414635/


All Articles