Entradas

Redes neuronales capsulares

Autor: Matteo Alberti

Traductor: Paula Vidal

 

Las redes neuronales convolucionales obtienen grandes resultados cuando los datos que estan en fase de prueba, resultan ser muy similares a los utilizados en la fase de aprendizaje, pero, en caso de rotaciones, traducciones o transformaciones, estos resultan sujetos a una falta de capacidad para generalizar. Por lo tanto, es una práctica común proporcionarle a nuestro training set un aumento de datos y de los ejemplos de estas posibles variantes, sin embargo, obtenemos un aprendizaje mnemotécnico en nuestra red (con el crecimiento computacional vinculado a la mayor cantidad de datos) en lugar de tener un modelo capaz de generalizar bien y que distinga cada tipo de situacion.

En los últimos años, las investigaciones en el campo de computer vison (en lo que se refiere al aprendizaje profundo) se centró en cómo aumentar la profundidad de una red, agregando más capas (capas) para lograr un mayor grado de abstracción (comenzando desde las primeras capas convolucionales capaces de extraer formas pequeñas, ángulos o intensidad de color, vamos paso a paso combinando características simples en diseños cada vez más complejos)

Para hacer esto, tenemos que mantener bajo control el número de parámetros (y los tiempos computacionales) usamos un operador, común en todas las redes profundas, osea un pooling (para ser precisos, la versión llamada max-pooling) que nos permite que reduzca el número de parámetros reduciendo progresivamente el componente espacial seleccionando los valores más altos pero perdiendo la información espacial relacionada con las características extraídas.

 

1

 

Por lo tanto, la investigación sobre la arquitectura de las redes neuronales se centra progresivamente en el objetivo de aprender a generalizar mejor en lugar de proporcionar datos cada vez más procesados. Se realizó un primer paso con las redes neuronales capsulares, donde nuestro objetivo es obtener una Equivariancia (invarianza de las rototraslaciones) que reemplace al operador de pooling con una nueva estructura denominada: Dynamic Routing

  

Introduccion

Una cápsula es un grupo de neuronas. La actividad de un vector de una cápsula representa los parámetros de instanciación cuando un objeto (o parte de él) viene detectado por la red. La longitud de este vector representa la probabilidad de existencia de la clase dada, mientras que la orientación del vector codifica información espacial (por ejemplo, rotaciones y traducciones) dentro de una matriz de posa.

Matriz de Posa: es una herramienta utilizada en la representación gráfica donde la construcción de una imagen parte de una representación jerárquica de formas geométricas. En nuestro caso, el objetivo resulta ser un objetivo un tanto opuesto; deconstruir una imagen en sus componentes básicos de la cual vamos a guardar la posición relativa en referencia a las otras características

 

2.jpg

Cuando una cápsula que está en un nivel inferior se activa produce una predicción aproximada a su nodo de afiliación de las cápsulas en su nivel superior a través de una matriz de transformación. Si una cápsula de alto nivel recibe suficientes predicciones de pertenencia, se activa. Este proceso, denominado dynamic routing, permite sustituir el pooling máximo a través de una selección “inteligente” de características que se mantienen durante la fase de formación.

 

3

Clasificado la cara solo la figura de la izquierda

 

Arquitectura

 

La principal diferencia en las redes capsulares, por lo tanto, consiste en una arquitectura no profunda.

4

 Vamos Analizar las capas principales:

  • La primera capa convolucional (256 kernels, 9×9, stride igual a uno, activación ReLu)

En la primera capa convolucional vamos a convertir la intensidad de los píxeles en características de bajo nivel, no nos importa mantener la posición espacial relativa; de hecho, queremos utilizar todas esas propiedades importantes par acompartir parámetros útiles para reducir los tiempos computacionales.

Il secondo strato dunque riceve in input le features estratte tramite convoluzione:

  • PrimaryCaps consiste en dos capas ocultas

La primera capa corresponde al proceso de rendering el cual lo hemos descrito antes.

La segunda capa, por el contrario, es convolucional (32 cápsulas 8 dimensionales) donde cada cápsula representa una característica extraída, por lo tanto, a través de una convolución de 9×9 kernels y un ritmo igual a dos.

El output de PrimaryCaps consiste por lo tanto, en cápsulas de 32x6x6 8 dimensiones.

  • DigitCaps

 

La última capa por reproducir en forma vectorial h FC-Layer, es decir, vamos a reducir el número de neuronas (en este caso de cápsulas) para obtener una para cada clase del objetivo

 

Resumiendo las principales innovaciones:

  • Reemplazar las neuronas con las cápsulas
  • Reemplazo de max-pooling con dynamic routing
  • Nueva función de activación
  • Arquitectura no profunda

 

Función de activación

Como se introdujo anteriormente, queremos que la actividad vectorial producida por una cápsula represente la probabilidad de existencia de la data feature . Entonces, necesitamos una nueva función de activación que ya no funcione con escalares sino con vectores:

.

La siguiente función, llamada“squashing” no hace nada más que normalizar en nuestro vector entre cero y uno sin modificar la orientación del mismo vector.

Esto nos permite no solo Equivariance sino, en el caso de la detección de rostros, por ejemplo, podemos saber si y cuántos grados gira la cara.

5

Dynamic Routing

Dynamic Routing no es solo un max-pooling que seleziona el número de conexiones de una manera más inteligente, nos permite preservar, como se describió anteriormente, la “jerarquía entre las partes”El Dynamic Routing quindi es un proceso iterativo, en la fase directa, que conecta cápsulas con actividades  similares.

 

2.jpg 1

En cada iteración cada cápsula produce una matriz de multiplicación con la salida de las cápsulas anteriores seleccionando solo aquellos con mayor producto escalar y orientación similar, analizando:

 

5 1

 

1)  Cápsulas en el nivel l y su salida  , r número de iteraciones de routing

2)  coeficiente temporal necesario para la iteración inicializada a cero

4)   Es pesado para cápsulas de “bajo nivel”, el uso del softmax para obtener un escalar no negativo con suma a uno. La primera iteración     la misma para todas las cápsulas que inician con

5) Para cada cápsula de “alto nivel”, calculamos una combinación lineal de los datos de entrada pesados con los coeficientes  , es decir, vamos a sumarlos y redimensionarlos

6) Aplicamos la función squash para “normalizar” a 1 y preservar la orientación del vector

 

 

Entrenamiento de una red capsular

Una vez fijado el forward pass a través del dynamic routing, vamos a entrenar nuestra red a través de una función de doble pérdida.

  • La primera parte se entrena a traves de una backpropagation como en las clasicas CNN , entonces entrenemos los siguientes pesos  para maximizar la norma de la cápsula  relativa a la de clase objetivo  ()
  • Otra versión de la red usa un MLP (como Autoencoding) para reconstruir la imagen de entrad

Nuestra función de pérdida será dada por Loss Funcion =  + p

Donde el término p no es más que un término de penalización para no afectar excesivamente a la segunda parte

 

2.jpg 2

 

Esta función de autocodificación es posible porque dentro de cada capsula final (una por cada clase del objetivo) toda la información está codificada para reconstruir la imagen. Entonces podemos crear una especie de función discriminativa que compare los datos de entrada con el target reconstruido usando la información de la matriz de posa.

 

Accuratezze raggiunte

1 1

 

Además de la precisión clásica, es interesante evaluar las propiedades intrínsecas de este modelo

Parametros CNN: 35.4 M (Deep)

Parametros Capsnet (8.2 M)

El número de parametros resulta significativamente más bajo debido a la menor cantidad de datos. Pero difiere mucho del large-dataset de gran tamaño en cuanto, el mecanismo aún no está optimizado

 

Resistencia a las transformaciones relacionadas:

CNN 66%

CapsuleNet 79%

 

Alta capacidad discriminatoria en objetos superpuestos:

 

2.jpg 3

Gracias a su capacidad de reconstrucción, no solo podemos clasificar sino segmentar objetos superpuestos (uno de los grandes límites de las redes neuronales convolucionales)

 

La GTX 745 y la instalación de tensorflow – gpu en Windows

Autora: Eleonora Bernasconi

 

Especificaciones de la tarjeta de gráficos NVIDIA GeForce GTX 745

Especificaciones: https://www.geforce.com/hardware/desktop-gpus/geforce-gtx-745-oem/specifications

Núcleos CUDA: 384

Base Clock (MHz): 1033

Velocidad de la memoria ( Gbps ): 1.8 Gbps

Cantidad de memoria: 4 GB

Interfaz de memoria: DDR3

Ancho de banda máx (GB/sec): 28.8

 

Figura 01 – nvidia-smi para el monitoreo de GPU

Abra el símbolo del sistema e ingrese:

cd C:\Program Files\NVIDIA Corporation\NVSMI

nvidia-smi

N.B. El porcentaje de uso de la GPU oscila entre 92% y 94%, en el Administrador de tareas de Windows permanece en 70%.

 

Instalación de Tensorflow con GPU para Windows 10

Requisitos

Python 3.5

Nvidia CUDA GPU. Verifique que la GPU sea compatible con CUDA.

Configurando la tarjeta GPU Nvidia

Instala Cuda Toolkit 8.0 e cuDNN v5.1.

Descarga e instalación de CUDA Toolkit

Toolkit 8.0 https://developer.nvidia.com/cuda-downloads

Ejemplo de directorio de instalación: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0

Descarga e instalación de cuDNN

Installa cuDNN versione 5.1 per Windows 10: https://developer.nvidia.com/cudnn

Extraiga los archivos cuDNN e ingréselos en el directorio Toolkit.

Variables de entorno

Después de instalar CUDA toolkit, asegúrese de que CUDA_HOME esté configurado en las variables de entorno; de lo contrario, agréguelo manualmente.

Figura 02 – Variables de entorno CUDA_HOME parte 01

 

Figura 03 – Variables de entorno CUDA_HOME parte 02

Instala Anaconda

Descarga : https://www.anaconda.com/download/

Cree un nuevo entorno con el nombre tensorflow-gpu y la versión 3.5.2 de python

conda create -n tensorflow-gpu python=3.5.2

N.B. En caso de que se encuentre con versiones incompatibles entre sí, simplemente active estos comandos para resolver el problema:

conda install -c conda-forge tensorflow-gpu

Anaconda instalará automáticamente las versiones requeridas de cuda, cudNN y otros paquetes.

Figura 04 – conda install -c conda-forge tensorflow-gpu

activate tensorflow-gpu

Figura 05 – activate tensorflow-gpu

 

Instala tensorFlow

pip install tensorflow-gpu

Figura 06 – pip install tensorflow-gpu

i Ahora ha terminado y tiene instalado con éxito tensorflow con la GPU !

i Recuerde activar el comando:activate tensorflow-gpu para entrar en modo GPU!

Prueba de GPU

python

import tensorflow as tf

sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

 

Figura 07 – prueba de GPU

 

Prueba en CIFAR-10 con 10 épocas

Tiempo promedio por época:150 sec

Tiempo total: 25 min

Figura 08 – Prueba en CIFAR-10 con 10 épocas