Tensorflow: Potenciando Convoluciones con Spatial Transformers (parte 1)

Spatial Transformer Networks

En el artículo anterior vimos en qué consistía el concepto de convolución. Esta, aunque está dando muy buenos resultados en ámbitos de visión artificial e incluso en problemas de series temporales, tiene una serie de debilidades en cuanto a su capacidad de resistencia frente a variaciones en los datos.

La capa de Pooling aplica un kernel o ventana sobre el feature map resultante de la convolución. Dicho filtro hace un “resumen”, por ejemplo, tomando el valor máximo o la media del área del feature map sobre el que se aplica para posteriormente ir deslizándolo por el resto de dicho feature map. De esta forma es posible trabajar con Redes Convolucionales profundas reduciendo el coste computacional necesario. Además, proporciona una cierta invarianza a la traslación. No obstante, como el tamaño de la ventana de pooling suele ser pequeño (2×2), esa fortaleza estará limitada a las últimas capas de la red cuando el feature map sea también pequeño.

También se hizo una introducción a una técnica empleada para aumentar el poder de generalización de las Redes Convolucionales aumentando las imágenes del conjunto de entrenamiento. Y para conseguirlo se aplicaban transformaciones afines (rotaciones, escalados, transvecciones y traslaciones) a las imágenes del dataset. Así se conseguían nuevos ejemplos con los que entrenar la red.

Esas transformaciones las podemos representar mediante una matriz de 2 filas y 3 columnas. La idea es utilizar la operación de multiplicación de matrices para aplicar una transformación afín (representada mediante esa matriz de 2 filas y 3 columnas) a un punto identificado mediante sus coordenadas (x, y, 1) pero expresadas en forma de vector columnar (3 filas y 1 columna). La técnica de añadir un 1 en el eje z a las coordenadas de un punto de 2 dimensiones se explicó en el artículo anterior y permite representar la traslación en forma matricial. A continuación, se muestran algunos ejemplos de los valores que debería tomar la matriz de transformación para aplicar diversas transformaciones afines a un punto.

Matriz identidad

valores que debería tomar la matriz de transformación para aplicar transformaciones afines a un punto

Escalado de aumento con factor de 2

valores que debería tomar la matriz de transformación para aplicar transformaciones afines a un punto

Escalado de reducción con factor de 2

valores que debería tomar la matriz de transformación para aplicar transformaciones afines a un punto

Rotación de 45º en contra de las agujas del reloj ()

valores que debería tomar la matriz de transformación para aplicar transformaciones afines a un punto

Aumentar el dataset incorporando modificaciones de las imágenes presentes en los datos con los que se va a entrenar ayuda a dicho proceso al tratarse de un aprendizaje supervisado.

Spatial Transformer Networks

Con la técnica de Spatial Transformer Networks (STN) se pretende potenciar esa mejora además de, en cierto modo, automatizarla. Esto permite que sea la propia Red Neuronal la que aplique transformaciones a la imagen de entrada o al feature map para que se fije en el objeto a reconocer. De esta forma, se consigue una mayor capacidad de generalización abstrayéndose de su varianza posicional.

Como os habréis dado cuenta, he escrito que con las STN será la propia red la que aplique modificaciones a la imagen de entrada o a los feature maps. Eso es así porque una STN se comportará como un módulo diferenciable que se podrá enganchar en cualquier parte de la red neuronal principal. El hecho de que las operaciones de este módulo sean derivables permitirá que pueda ser entrenado mediante Backpropagation al mismo tiempo que la red principal. Esto hace posible colocarlo en cualquier parte de dicha red, como se comentó anteriormente. Normalmente se suele colocar al principio de la Red Convolucional para que los siguientes feature maps se obtengan a partir de la salida del módulo STN.

La arquitectura de un módulo STN puede apreciarse en la siguiente imagen en la que comprobamos que está formada por 3 componentes llamados Localisation Network, Grid Generator y Sampler.

Spatial Transformer Networks

Localisation Network

Este componente recibe el feature map U, hace que pase a través de una Red Neuronal que puede ser un Perceptrón Multicapa (en este caso lo redimensionará previamente para que tenga formato (Tamaño_Batch, Altura * Anchura * Número_Canales) o una Red Convolucional y finalmente hará una regresión para obtener los 6 parámetros correspondientes a los valores que tomará la matriz de transformación

Spatial Transformer Networks - localisation networkLos valores de esta red se entrenarán de forma supervisada al mismo tiempo que la Red Neuronal principal en la que se inserte el módulo STN.

A continuación, se adjunta un código de ejemplo en Tensorflow para mostrar cómo podría implementarse el componente de Localisation Network mediante un Perceptrón de 2 capas con Dropout (para añadir regularización), en la que el bias de la última capa estará inicializado con los valores de la matriz identidad:

Spatial Transformer Networks - localisation network

Si quieres saber más sobre Grid Generator y Sampler, ¡atento al próximo artículo!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *