Tensorflow: Potenciando Convoluciones con Spatial Transformers (parte 2)

Spatial Transformer Networks

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 10×10:

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.


Rubén Martínez, Data engineer en datahack

Deja un comentario

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