Potenciando Convoluciones con Transformaciones Afines

Spatial Transformer Networks: convolución

En DIA4RA tenemos que dotar al robot de capacidad para interpretar visualmente lo que le rodea. En el ámbito de la visión artificial, los algoritmos basados en Redes Neuronales Convolucionales han conseguido grandes resultados y actualmente se aplican en áreas que van desde la detección de tumores a la conducción autónoma. Las Redes Convolucionales se caracterizan por tener una serie de capas entre las que destacan:

Capa Convolucional:

Cada capa estará formada por un conjunto de filtros o kernels cuyos valores se calcularán mediante Gradient Descent durante el entrenamiento del algoritmo. Cada kernel será el encargado de detectar una característica visual. Muy entrecomillado, estas capas simulan el funcionamiento del Cortex Visual ya que en la Red se formará una jerarquía de kernels. De esta forma, los filtros de las primeras capas detectarán features visuales sencillas como bordes o líneas. Y aumenta su complejidad a medida que se avanza en las capas de la red que se apoyarán en la información detectada por las capas previas. Durante este proyecto, probaremos la eficiencia de otros modelos que tienen una mayor base biológica como son las Spiking Neural Networks, a las que también dedicaremos un artículo para introduciros en ellas.

El tamaño de un kernel normalmente es más pequeño que el de la imagen sobre la que operará. Cada kernel se aplicará sobre una región de la imagen del mismo tamaño realizando un producto “element wise” de cada píxel de esa región de la imagen con el píxel correspondiente del kernel para realizar finalmente la suma de los valores resultantes. Como se entrenará de forma supervisada cada filtro para detectar una característica en la imagen, dicho filtro se irá desplazando por la imagen. Luego, el parámetro denominado “strides” será el que controle el tamaño del desplazamiento en cada paso del entrenamiento. El resultado de aplicar el kernel sobre toda la imagen recibe el nombre de Feature Map.

Capa de Pooling:

Permite reducir la dimensionalidad de los feature maps resultantes de una capa previa de Pooling, reteniendo la información más relevante. Requiere la definición de una spatial neighborhood (indicando el tamaño de la ventana a la que se aplicará la reducción) y la operación a aplicar a los elementos de esa ventana de la cual resultará un único elemento que será representativo de todos. Esta operación puede ser simplemente aquel elemento con el máximo valor (denominado MaxPooling), la suma (Sum) de los valores de todos los elementos o la media (Avg) de los valores de los mismos.

Spatial Transformer Networks -pooling

El problema de las Convolutional Neural Networks (CNN) es que no son robustas frente a variaciones en los datos de entrada como pueden ser modificaciones del fondo, rotaciones, cambios de escala, diferentes puntos de vista, etc. Mediante la operación de MaxPooling se puede conseguir una cierta invarianza frente a la traslación ya que va reduciendo el Feature Map quedándose con la información más relevante.

Aquí cobra importancia el concepto de Receptive Field, que, muy a grandes rasgos, podría definirse como el área de la imagen o Feature Map de entrada que influye en la activación de una neurona. Su tamaño viene dado por la siguiente fórmula:

F(0) = 1

F(n) = F(n – 1) + (kernel_size – 1) * dilation(n)

Donde F(0) se corresponde con el tamaño del Receptive field para las neuronas de la primera capa y el parámetro “n” hace referencia al índice de capa. El término “dilation” hace referencia a que cada valor del kernel operará sobre un píxel de la imagen. La separación con el píxel sobre el que se aplicará el siguiente valor del kernel se corresponde con el valor de dilation. Cuando los valores del filtro se aplican sobre píxeles adyacentes de la imagen el valor de dilation será 0.

Volviendo a la operación de MaxPooling. Como normalmente se suele emplear un tamaño de ventana de 2×2 como parámetro para este tipo de capa, solo se conseguirá una cierta invarianza a la traslación en capas muy profundas próximas a la salida. Por tanto, esto no proporciona un aprendizaje robusto frente a distintas escalas o rotaciones.

Una forma de conseguir que el modelo convolucional resultante sea más generalizable consiste en aumentar el dataset aplicando a sus imágenes una serie de modificaciones, de manera que esos nuevos ejemplos ampliarán el conjunto de ejemplos con el que se va a entrenar el algoritmo. Otra técnica que permitirá hacer más robusto el modelo convolucional será empleando Spatial Transformers a los que dedicaremos el segundo capítulo de esta serie de 2 artículos. Pero antes, vamos a hacer un repaso por las principales transformaciones en un espacio de 2D que se suelen aplicar sobre las imágenes para cubrir las diferentes posibilidades en las que puede aparecer un mismo objeto.

Principales transformaciones en un espacio de 2D

Vamos a comenzar representando las coordenadas (x, y) de un punto “P” como una matriz de 2 filas y una columna: Spatial Transformer Networks

Las transformaciones afines de “P” estarán formadas por una transformación lineal

Spatial Transformer Networks

Esta transformación lineal será aplicada (mediante multiplicación de matrices) a las coordenadas

Spatial Transformer NetworksA esto se le sumará una traslación

Spatial Transformer Networks. Las coordenadas del punto p’ resultante pueden escribirse (siendo “a”, “b”, “c”, “d”, “e”, “f” escalares) como:

Spatial Transformer Networks

Preserva la propiedad de que las líneas paralelas continúan siéndolo después de la transformación afín. Teniendo en cuenta esto, generaremos 4 transformaciones afines: escalado, rotación, traslación  y transvección o sesgado.

Escalado

Consiste en multiplicar la coordenadas (x, y) por un factor de escalado para cada eje, consiguiendo que el valor en cada uno de ellos aumente / disminuya proporcionalmente a su correspondiente factor. Si hacemos que b = d = c = f = 0 entonces tendríamos un escalado en el que la coordenada “x” aumentaría “a” veces si “a” > 1 (disminuiría si “a” < 1) y la coordenada “y” lo haría (aumentar o disminuir) en función del valor de “e”.

Spatial Transformer Networks

En el caso de que el factor de escalado sea igual para los 2 ejes, recibiría el nombre de escalado isotrópico.

Rotación

Permite transformar las coordenadas (x, y) de un punto “p” desplazándolas un determinado ángulo desde un punto fijo que hará las veces de centro de la circunferencia.

Spatial Transformer Networks

Spatial Transformer Networks

entonces tendremos una rotación desde el origen:

Spatial Transformer Networks

Traslación

Con esta transformación podremos desplazar un punto a un nuevo lugar sumando un valor a cada una de sus coordenadas.

Si a = e = 1 y b = d = 0, añadiendo el valor de “c” a “x” y el de “f” a “y” conseguiremos realizar una traslación del punto P a P’:

Spatial Transformer Networks

Transvección

Esta transformación consiste en desplazar / rotar un eje dando lugar a que el eje “x” y el eje “y” ya no sean perpendiculares. Las líneas que sean paralelas a los ejes mantendrán su longitud pero se modificará la de las demás dando lugar a una deformación de los objetos. Para hacernos una idea, un círculo pasará a ser una elipse y un rectángulo se convertirá en un paralelogramo.

Para realizar una transvección al punto P de coordenadas (x, y) habría que dar los siguientes valores a = e =1, c = f = 0 de forma que el punto P’ se obtendría mediante la operación:

Spatial Transformer Networks

Coordenadas homogéneas

Las transformaciones afines de rotación, escalado y transvección son transformaciones lineales y su resultado lo podemos obtener mediante la multiplicación de matrices donde una será la matriz de transformación y la otra estará formada por las coordenadas (x, y) del punto representado como un vector columnar.

Spatial Transformer Networks

La representación mediante matrices se puede emplear para descomponer transformaciones complejas en un conjunto de transformaciones más simples. Si, por ejemplo, queremos aplicar una rotación R a un objeto P y después escalar su tamaño a otro mediante una transformación de escalado S dicha secuencia quedaría de la siguiente forma: P’ = S(RP). Como la multiplicación de matrices es asociativa se pueden eliminar los paréntesis, por lo que se tendría: P’ = SRP.

La matriz de transformación para realizar una rotación empleando un ángulo en sentido contrario a las agujas del reloj desde un origen será:

Spatial Transformer Networks

La matriz de escalado que empleará un factor Sx para la coordenada “x” y otro Sy para la coordenada “y” se corresponderá con:

Spatial Transformer Networks

La matriz de transvección que empleará un factor de transvección horizontal Hx y otro vertical Hy se puede escribir como:

Spatial Transformer Networks

Acabamos de ver que la notación matricial es bastante útil para poder factorizar transformaciones complejas y que la podemos emplear con las transformaciones lineales como son la rotación, el escalado y la transvección. Empleando estas transformaciones lineales el objeto o el punto no se moverá del origen. Pero la traslación no es una transformación lineal y aquí es donde entra en acción el concepto de coordenadas homogéneas para poder representarla mediante también mediante multiplicación de matrices.

La coordenadas homogéneas consisten en proyectar la representación de un espacio en 2D sobre un espacio en 3D con la coordenada del eje z = 1. Para ello, incluiremos una fila y una columna en la matriz de transformación y una coordenada con valor 1 al vector que queremos transformar de la siguiente manera:

Spatial Transformer Networks

La forma de representar mediante coordenadas homogéneas la matriz de rotación que vimos anteriormente en 2D será:

Spatial Transformer Networks

La representación empleando coordenadas homogéneas de la matriz de escalado que escribimos en 2D quedará así:

Spatial Transformer Networks

Por último, las coordenadas homogéneas para la matriz de transvección en 2D se corresponderá con:

Spatial Transformer Networks

Hasta aquí este artículo con el que se pretendía mostrar una introducción al concepto de convolución aplicado a la visión artificial, sus vulnerabilidades y cómo realizar un primer intento de hacerlo más robusto aumentando el dataset aplicando transformaciones afines a sus imágenes.

En el siguiente post de esta serie veremos qué son las Spatial Transformer Networks y cómo consiguen hacer mucho más robustos los modelos basado en Redes Convolucionales frente a este tipo de variaciones que se dan en el mundo real. ¡No os lo perdáis!


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 *