En el artículo anterior hicimos una introducción a las Spatial Transformer Networks (STN) y desarrollamos su componente Localisation Network. Hoy nos centraremos en desarrollar los dos componentes restantes.

Grid Generator

El objetivo de Grid Generator es obtener un “Parameterised Sampling Grid”, que son un conjunto de puntos del feature map de entrada U a partir de los cuales se generarán los puntos del feature map de salida V que contendrá la imagen transformada.

Para ello, en primer lugar el Grid Generator creará un meshgrid del mismo tamaño que el feature map de entrada U. De forma que si la altura es H, habrá en dicho eje H valores igualmente espaciados entre -1 y 1 y si la anchura es W dispondrá en ese eje de W valores igualmente espaciados entre -1 y 1. Esos valores se corresponderán con el conjunto de índices (xt, yt) que hacen referencia a las coordenadas en el feature map de salida V. Como queremos aplicar transformaciones afines a este grid y entre esas transformaciones están las traslaciones, para poder hacerlo empleando la operación de multiplicación de matrices habrá que añadir una fila de 1s (eje z) al vector de coordenadas (xt, yt) para obtener sus correspondientes coordenadas homogéneas. Esta técnica se explicó en el artículo anterior sobre cómo “Potenciar Convoluciones con Transformaciones Afines”.

En la siguiente captura de pantalla puede verse el código en Tensorflow para la generación de ese meshgrid tomando como ejemplo unas dimensiones de 10x10:

Spatial Transformer Networks - grid generator

Para entenderlo mejor vamos a ir ejecutando paso a paso esas operaciones:

Spatial Transformer Networks - grid generator

Spatial Transformer Networks - grid generator

Spatial Transformer Networks - grid generator

Spatial Transformer Networks - grid generator

Spatial Transformer Networks - grid generator

Spatial Transformer Networks - grid generator

Spatial Transformer Networks - grid generator

Spatial Transformer Networks - grid generator

El conjunto de coordenadas  source (xs, ys) del  Parameterised Sampling Grid son los índices de los píxeles del feature map de entrada U que habrá que extraer para obtener la imagen transformada del feature map de salida. Para obtener ese conjunto de índices (xs, ys) habrá que obtener los 6 valores de θ que se corresponden con la salida de la Localisation Network, redimensionarlos en forma de matriz de transformación de (2 filas, 3 columnas) y multiplicar esa matriz por el grid de índices target (xt, yt, 1) en formato de vector columnar:

Spatial Transformer Networks - grid generator

En la imagen (a) de la izquierda se puede comprobar como a partir del feature map U de entrada se genera un grid G del mismo tamaño. Al aplicar a G la transformación identidad TI se obtiene el Parameterised Sampling Grid, es decir, las coordenadas source (xs, ys) que se samplearán del feature map de entrada U. Como se ha aplicado la transformación identidad, la imagen presente en U será igual a la de V (que se obtiene al aplicar el Parameterised Sampling Grid a U).

En la imagen (b) de la derecha se observa que el Parameterised Sampling Grid se obtiene aplicando una transformación afín Tθ al grid G.

Spatial Transformer Networks - grid generator

Sampler

Como los valores de (xs, ys) serán fraccionales necesitamos mapearlos a valores enteros para lo que emplearemos alguna función de interpolación.

El sampler empleará las coordenadas del Parameterised Sampling Grid, el feature map de entrada U y la función de interporlación para generar el feature map de salida V.

Según el paper, cada coordenada (xs, ys) indica la localización del feature map de entrada U donde se aplicará un sampling kernel “k” para obtener el valor de un píxel concreto “i” en el feature map de salida V para cada canal “c” empleando la siguiente fórmula:

Spatial Transformer Networks - sampler

Donde Φx y Φy son los parámetros de un sampling kernel k() que establece la interpolación a aplicar. Los autores del paper emplearon interpolación bilineal, pero se puede emplear cualquier sampling kernel siempre que sea diferenciable con respecto a  (xs, ys) para poder aplicar el módulo de STN durante el backpropagation de la red principal.

Conclusión

Combinando el Localisation Network, el Grid Generator y el Sampler se consigue construir un módulo Spatial Transformer. Como se comentó anteriormente, dicho módulo se puede colocar en cualquier parte de una Red Convolucional y permitirá que la red aprenda cómo aplicar transformaciones a los feature maps mientras se minimiza el error de entrenamiento de la red.

Finalmente, el conocimiento de cómo transformar cada ejemplo de entrenamiento quedará almacenado en los pesos de la Localisation Network y su salida podrá ser utilizada cuando se considere oportuno para codificar la transformación de un objeto.

Combinar esta técnica de Spatial Transformer con un aumentado explícito de los ejemplos de entrenamiento a los que se les apliquen transformaciones y distintos tipos de ruido potenciará los resultados de reconocimiento de la Red Convolucional.


MÁSTER EXPERTO EN BIG DATA & ANALYTICS

Gracias al Master en Big Data Analytics 100% Online tendrás amplios conocimientos sobre las herramientas y técnicas analíticas necesarias para la modelización de los principales retos de negocio, con el fin de mejorar la toma de decisiones a través de los datos y el conocimiento.

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 (2x2), 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!


Rubén Martínez, Data engineer en datahack

chevron-down