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

Spatial Transformer Networks

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

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 Networks

A 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

dia4ra cdti

El proyecto empresarial de DATAHACK CONSULTING SL., denominado “DESARROLLO DE INTELIGENCIA ARTIFICIAL EN ROBOTS APLICADOS AL TRATAMIENTO DEL ALZHEIMER Y LA DEMENCIA” y número de expediente 00104725 / SNEO-20171211 ha sido subvencionado por el CENTRO

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 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 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 NetworkGrid 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 network

Los 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!

chevron-down