Clasificación de imágenes de TensorFlow: CNN (Red Neural Convolucional)

¿Qué es la Red Neural Convolucional?

La red neuronal convolucional, también conocida como convnets o CNN, es un método bien conocido en aplicaciones de visión por ordenador. Este tipo de arquitectura es dominante para reconocer objetos de una imagen o vídeo.

En este tutorial, aprenderá a construir una convnet y a usar TensorFlow para resolver el dataset escrito a mano.

En este tutorial, aprenderá

Arquitectura de una red neuronal convolucional

Piense en Facebook hace unos años, después de subir una imagen a su perfil, se le pidió que agregara un nombre a la cara en la imagen manualmente. Hoy en día, Facebook usa convnet para etiquetar a tu amigo en la imagen automáticamente.

Una red neuronal convolucional no es muy difícil de entender. Una imagen de entrada se procesa durante la fase de convolución y posteriormente se le atribuye una etiqueta.

Una arquitectura convnet típica se puede resumir en la imagen siguiente. En primer lugar, una imagen es empujada a la red; esto se llama la imagen de entrada. A continuación, la imagen de entrada pasa por un número infinito de pasos; esta es la parte convolucional de la red. Finalmente, la red neuronal puede predecir el dígito en la imagen.

Una imagen se compone de una matriz de píxeles con alto y ancho. Una imagen en escala de grises sólo tiene un canal, mientras que la imagen en color tiene tres canales (cada uno para rojo, verde y azul). Un canal está apilado uno sobre el otro. En este tutorial, utilizará una imagen en escala de grises con un solo canal. Cada píxel tiene un valor de 0 a 255 para reflejar la intensidad del color. Por ejemplo, un píxel igual a 0 mostrará un color blanco mientras que el píxel con un valor cercano a 255 será más oscuro.

Vamos a echar un vistazo a una imagen almacenada en el dataset MNIST. La siguiente imagen muestra cómo representar la imagen de la izquierda en un formato de matriz. Tenga en cuenta que, la matriz original se ha estandarizado para estar entre 0 y 1. Para un color más oscuro, el valor de la matriz es aproximadamente 0.9, mientras que los píxeles blancos tienen un valor de 0.

Operación convolucional

El componente más crítico del modelo es la capa convolucional. Esta parte tiene como objetivo reducir el tamaño de la imagen para cálculos más rápidos de los pesos y mejorar su generalización.

Durante la parte convolucional, la red mantiene las características esenciales de la imagen y excluye el ruido irrelevante. Por ejemplo, el modelo está aprendiendo a reconocer un elefante a partir de una imagen con una montaña en el fondo. Si utiliza una red neuronal tradicional, el modelo asignará un peso a todos los píxeles, incluidos los de la montaña que no es esencial y puede engañar a la red.

En su lugar, una red neuronal convolucional utilizará una técnica matemática para extraer sólo los píxeles más relevantes. Esta operación matemática se llama convolución. Esta técnica permite a la red aprender entidades cada vez más complejas en cada capa. La convolución divide la matriz en trozos pequeños para aprender a la mayoría de los elementos esenciales dentro de cada pieza.

Componentes de Convnets

Hay cuatro componentes de un Convnets

  1. Convolución
  2. No linealidad (RelU)
  3. Agrupación o submuestreo
  4. Clasificación (capa totalmente conectada)
  • Convolución

El propósito de la convolución es extraer localmente las características del objeto en la imagen. Esto significa que la red aprenderá patrones específicos dentro de la imagen y será capaz de reconocerla en todas partes de la imagen.

La convolución es una multiplicación por elemento. El concepto es fácil de entender. El equipo escaneará una parte de la imagen, generalmente con una dimensión de 3×3 y la multiplica a un filtro. La salida de la multiplicación por elemento se denomina mapa de entidades. Este paso se repite hasta que se escanea toda la imagen. Tenga en cuenta que, después de la convolución, el tamaño de la imagen se reduce.

A continuación, hay una URL para ver en acción cómo funciona la convolución.

Hay numerosos canales disponibles. A continuación, enumeramos algunos de los canales. Puede ver que cada filtro tiene un propósito específico. Tenga en cuenta, en la imagen de abajo; el Kernel es un sinónimo del filtro.

Fuente

Aritmética detrás de la convolución

La fase convolucional aplicará el filtro en una pequeña matriz de píxeles dentro de la imagen. El filtro se moverá a lo largo de la imagen de entrada con una forma general de 3×3 o 5×5. Significa que la red desliza estas ventanas a través de toda la imagen de entrada y calcula la convolución. La siguiente imagen muestra cómo funciona la convolución. El tamaño del parche es 3×3, y la matriz de salida es el resultado de la operación por elementos entre la matriz de imagen y el filtro.


Fuente
Observe que el ancho y el alto de la salida pueden ser diferentes de la anchura y la altura de la entrada. Sucede debido al efecto de borde.

Borde, efecto

La imagen tiene un mapa de características 5×5 y un filtro 3×3. Sólo hay una ventana en el centro donde el filtro puede filtrar una cuadrícula 3×3. El mapa de entidades de salida se reducirá en dos teselas junto con una dimensión 3×3.

Para obtener la misma dimensión de salida que la dimensión de entrada, debe agregar relleno. El relleno consiste en agregar el número correcto de filas y columnas a cada lado de la matriz. Permitirá que la convolución se centre en cada tesela de entrada. En la imagen de abajo, la matriz de entrada/salida tiene la misma dimensión 5×5

Al definir la red, las entidades convolvidas se controlan mediante tres parámetros:

  1. Profundidad: Define el número de filtros a aplicar durante la convolución. En el ejemplo anterior, vio una profundidad de 1, lo que significa que sólo se utiliza un filtro. En la mayoría de los casos, hay más de un filtro. La siguiente imagen muestra las operaciones realizadas en una situación con tres filtros

  1. Stride: Define el número de “salto de píxel” entre dos rebanadas. Si la zancada es igual a 1, las ventanas se moverán con una extensión de píxel de uno. Si la zancada es igual a dos, las ventanas saltarán en 2 píxeles. Si aumenta la zancada, tendrá mapas de entidades más pequeños.

Ejemplo zancada 1

Imagen zancada 2

  1. Relleno cero: Un relleno es una operación de agregar un número correspondiente de filas y columnas en cada lado de los mapas de entidades de entrada. En este caso, la salida tiene la misma dimensión que la entrada.
  2. No linealidad (RelU)

Al final de la operación de convolución, la salida está sujeta a una función de activación para permitir la no linealidad. La función de activación habitual para convnet es el Relu. Todos los píxeles con un valor negativo serán reemplazados por cero.

  • Operación de agrupamiento máximo

Este paso es fácil de entender. El propósito de la agrupación es reducir la dimensionalidad de la imagen de entrada. Los pasos se realizan para reducir la complejidad computacional de la operación. Al disminuir la dimensionalidad, la red tiene pesos más bajos para calcular, por lo que evita el exceso de ajuste.

En esta etapa, debe definir el tamaño y la zancada. Una forma estándar de poner en común la imagen de entrada es utilizar el valor máximo del mapa de entidades. Mira la imagen de abajo. La “agrupación” mostrará una submatriz de cuatro del mapa de entidades 4×4 y devolverá el valor máximo. La agrupación toma el valor máximo de una matriz 2×2 y luego mueve estas ventanas en dos píxeles. Por ejemplo, la primera sub-matriz es [3,1,3,2], la agrupación devolverá el máximo, que es 3.

Hay otra operación de agrupamiento como la media.

Esta operación reduce agresivamente el tamaño del mapa de entidades

  • Capas totalmente conectadas

El último paso consiste en construir una red neuronal artificial tradicional como lo hizo en el tutorial anterior. Conecta todas las neuronas de la capa anterior a la capa siguiente. Utilice una función de activación softmax para clasificar el número en la imagen de entrada.

Resumen:

La red neuronal convolucional compila diferentes capas antes de hacer una predicción. Una red neuronal tiene:

  • Una capa convolucional
  • Función Relu Activation
  • Capa de agrupación
  • Capa densamente conectada

Las capas convolucionales aplican diferentes filtros en una subregión de la imagen. La función de activación Relu añade no linealidad y las capas de agrupación reducen la dimensionalidad de los mapas de entidades.

Todas estas capas extraen información esencial de las imágenes. Por fin, el mapa de entidades se alimenta a una capa primaria completamente conectada con una función softmax para hacer una predicción.

Entrena CNN con TensorFlow

Ahora que está familiarizado con el bloque de construcción de un convnets, está listo para construir uno con TensorFlow. Utilizaremos el conjunto de datos MNIST para la clasificación de imágenes.

La preparación de datos es la misma que el tutorial anterior. Puede ejecutar los códigos y saltar directamente a la arquitectura de la CNN.

Seguirá los pasos que se indican a continuación:

Paso 1: Cargar conjunto de datos

Paso 2: Capa de entrada

Paso 3: Capa convolucional

Paso 4: Capa de agrupación

Paso 5: Segunda capa convolucional y capa de agrupación

Paso 6: Capa densa

Paso 7: Logit Layer

Paso 1: Cargar conjunto de datos

El conjunto de datos MNIST está disponible con scikit para aprender en esta URL. Descárguelo y guárdelo en Descargas. Puede cargarlo con fetch_mldata (‘MNIST original’).

Crear un tren o conjunto de pruebas

Debe dividir el conjunto de datos con train_test_split

Escalar las entidades

Finalmente, puede escalar la característica con MinMaxScaler

Definir la CNN

Una CNN utiliza filtros en el píxel sin procesar de una imagen para aprender patrones de detalles comparados con el patrón global con una red neuronal tradicional. Para construir una CNN, debe definir:

  1. Una capa convolucional: aplique n número de filtros al mapa de entidades. Después de la convolución, debe usar una función de activación Relu para agregar no linealidad a la red.
  2. Capa de agrupación: el siguiente paso después de la convolución es reducir la muestra máxima de entidad. El objetivo es reducir la dimensionalidad del mapa de entidades para evitar el exceso de ajuste y mejorar la velocidad de cálculo. La agrupación máxima es la técnica convencional, que divide los mapas de entidades en subregiones (generalmente con un tamaño de 2×2) y mantiene solo los valores máximos.
  3. Capas completamente conectadas: Todas las neuronas de las capas anteriores están conectadas a las capas siguientes. La CNN clasificará la etiqueta según las entidades de las capas convolucionales y se reducirá con la capa de agrupación.

Arquitectura de CNN

  • Capa convolucional: aplica 14 filtros 5×5 (extrayendo subregiones 5×5 píxeles), con función de activación RelU
  • Capa de agrupación: realiza agrupación máxima con un filtro 2×2 y zancada de 2 (que especifica que las regiones agrupadas no se superponen)
  • Capa convolucional: aplica 36 filtros 5×5, con función de activación RelU
  • Capa de agrupación #2: De nuevo, realiza agrupación máxima con un filtro 2×2 y zancada de 2
  • 1,764 neuronas, con una tasa de regularización de la deserción de 0.4 (probabilidad de 0.4 de que cualquier elemento dado se caiga durante el entrenamiento)
  • Capa densa (Capa de Logits): 10 neuronas, una para cada clase de dígito objetivo (0—9).

Hay tres módulos importantes para usar para crear una CNN:

  • conv2d (). Construye una capa convolucional bidimensional con el número de filtros, el tamaño del núcleo del filtro, el relleno y la función de activación como argumentos.
  • max_pooling2d (). Construye una capa de agrupación bidimensional utilizando el algoritmo max-pooling.
  • denso (). Construye una capa densa con las capas y unidades ocultas

Definirá una función para construir la CNN. Veamos en detalle cómo construir cada bloque de construcción antes de envolver todo en la función.

Paso 2: Capa de entrada

Debe definir un tensor con la forma de los datos. Para eso, puede usar el módulo tf.reshape. En este módulo, debe declarar el tensor para cambiar la forma y la forma del tensor. El primer argumento son las características de los datos, que se definen en el argumento de la función.

Una imagen tiene un alto, un ancho y un canal. El dataset MNIST es una imagen monocrónica con un tamaño 28×28. Definimos el tamaño del lote a -1 en el argumento shape para que tome la forma de las entidades [“x”]. La ventaja es hacer que los hiperparámetros de tamaño de lote para sintonizar. Si el tamaño del lote se establece en 7, el tensor alimentará 5,488 valores (28*28*7).

La primera capa convolucional tiene 14 filtros con un tamaño de kernel de 5×5 con el mismo relleno. El mismo relleno significa que tanto el tensor de salida como el tensor de entrada deben tener la misma altura y anchura. Tensorflow agregará ceros a las filas y columnas para garantizar el mismo tamaño.

Utilice la función de activación Relu. El tamaño de salida será [28, 28, 14].

Paso 4: Capa de agrupación

El siguiente paso después de la convolución es el cálculo de agrupamiento. El cálculo de agrupamiento reducirá la dimensionalidad de los datos. Puede usar el módulo max_pooling2d con un tamaño de 2×2 y zancada de 2. Utilice la capa anterior como entrada. El tamaño de salida será [batch_size, 14, 14, 14]

Paso 5: Segunda capa convolucional y capa de agrupación

La segunda capa convolucional tiene 32 filtros, con un tamaño de salida de [batch_size, 14, 14, 32]. La capa de agrupación tiene el mismo tamaño que antes y la forma de salida es [batch_size, 14, 14, 18].

Paso 6: Capa densa

Luego, debe definir la capa completamente conectada. El mapa de entidades debe aplanarse antes de conectarse con la capa densa. Puede utilizar la remodelación del módulo con un tamaño de 7*7*36.

La capa densa conectará 1764 neuronas. Añada una función de activación Relu. Además, agrega un término de regularización de deserción con una tasa de 0.3, lo que significa que el 30 por ciento de los pesos se establecerá en 0. Tenga en cuenta que, la deserción se produce solo durante la fase de entrenamiento. La función cnn_model_fn tiene un modo de argumento para declarar si el modelo necesita ser entrenado o evaluar.

Paso 7: Logit Layer

Finalmente, puede definir la última capa con la predicción del modelo. La forma de salida es igual al tamaño del lote y 10, el número total de imágenes.

Puede crear un diccionario que contenga las clases y la probabilidad de cada clase. El módulo tf.argmax () con devuelve el valor más alto si las capas logit. La función softmax devuelve la probabilidad de cada clase.

Sólo desea devolver la predicción diccionaria cuando el modo se establece en predicción. Usted agrega estos códigos para disipar las predicciones

El siguiente paso consiste en calcular la pérdida del modelo. En el último tutorial, aprendiste que la función de pérdida para un modelo multiclase es entropía cruzada. La pérdida se calcula fácilmente con el siguiente código:

El paso final es optimizar el modelo, es decir, encontrar los mejores valores de los pesos. Para eso, se utiliza un optimizador de descenso de gradiente con una tasa de aprendizaje de 0.001. El objetivo es minimizar la pérdida

Terminaste con la CNN. Sin embargo, desea mostrar las métricas de rendimiento durante el modo de evaluación. Las métricas de rendimiento para un modelo multiclass son las métricas de precisión. Tensorflow está equipado con una precisión de módulo con dos argumentos, las etiquetas y los valores predichos.

Eso es todo. Creaste tu primera CNN y estás listo para envolver todo en una función con el fin de usarla para entrenar y evaluar el modelo.

Los pasos siguientes son los mismos que los tutoriales anteriores.

En primer lugar, se define un estimador con el modelo CNN.

Una CNN toma muchas veces para entrenar, por lo tanto, se crea un gancho de registro para almacenar los valores de las capas softmax cada 50 iteraciones.

Usted está listo para estimar el modelo. Establecer un tamaño de lote de 100 y barajar los datos. Tenga en cuenta que establecemos pasos de entrenamiento de 16.000, puede tomar mucho tiempo entrenar. Ten paciencia.

Ahora que el modelo está entrenado, puede evaluarlo e imprimir los resultados

Con la arquitectura actual, obtiene una precisión del 97%. Puede cambiar la arquitectura, el tamaño del lote y el número de iteraciones para mejorar la precisión. La red neuronal CNN ha funcionado mucho mejor que la ANN o la regresión logística. En el tutorial sobre la red neuronal artificial, que tenía una precisión de 96%, que es menor la CNN. Las actuaciones de la CNN son impresionantes con un conjunto de imágenes más grande, tanto en términos de cálculo de velocidad como de precisión.

Resumen

Una red neuronal convolucional funciona muy bien para evaluar la imagen. Este tipo de arquitectura es dominante para reconocer objetos de una imagen o vídeo.

Para construir una CNN, debe seguir seis pasos:

Paso 1: Capa de entrada:

Este paso cambia la forma de los datos. La forma es igual a la raíz cuadrada del número de píxeles. Por ejemplo, si una imagen tiene 156 píxeles, la forma es 26×26. Debe especificar si la imagen tiene color o no. Si es así, entonces tenía 3 a la forma- 3 para RGB-, de lo contrario 1.

Paso 2: Capa convolucional

A continuación, debe crear las capas convolucionales. Aplicar diferentes filtros para permitir a la red aprender característica importante. Especifique el tamaño del núcleo y la cantidad de filtros.

Paso 3: Capa de agrupación

En el tercer paso, agrega una capa de agrupación. Esta capa disminuye el tamaño de la entrada. Lo hace tomando el valor máximo de la sub-matriz a. Por ejemplo, si la submatriz es [3,1,3,2], la agrupación devolverá el máximo, que es 3.

Paso 4: Agregar capa convolucional y capa de agrupación

En este paso, puede agregar tanto como desee capas conv y capas de agrupación. Google utiliza arquitectura con más de 20 capas conv.

Paso 5: Capa densa

El paso 5 aplanar el anterior para crear un capas completamente conectadas. En este paso, puede usar diferentes funciones de activación y agregar un efecto de abandono.

Paso 6: Logit Layer

El paso final es la predicción.

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *