Uso del aprendizaje profundo para el reconocimiento de objetos

Autor: Joyce Xu

Traductor: Paula Vidal

 

1

1

Con la aparición de los vehículos autónomos, sistemas inteligentes de videovigilancia y diversas aplicaciones, como el conteo de personas, la demanda de sistemas de reconocimiento facial está creciendo. Estos sistemas se refieren no solo al reconocimiento y la clasificación de los objetos en las imágenes, sino también a la ubicación de cada uno de ellos, trazando a su alrededor un cuadro delimitador apropiado. Esto hizo que el sistema de reconocimiento de objetos fuera una tarea cada vez más compleja en comparación con su predecesora en el campo de la visión artificial: clasificación de imágenes.

Afortunadamente, los enfoques más apropiados para el reconocimiento de objetos son, actualmente, extensiones modelo para la clasificación de imágenes. Hace unos meses, Google lanzó una nueva API de reconocimiento de objetos (interfaz de programación de aplicaciones) en Tensorflow. En este lanzamiento, encontramos modelos pre-entrenados con pesos relativos:

En el articulo anterior, hablamos sobre las tres arquitecturas de redes neuronales mencionadas anteriormente (MobileNets, Inception y ResNet), pero hoy veremos los modelos de reconocimiento de objetos para Tensorflow: Faster R-CNN, R-FCN y SSD. A través de este artículo, entenderemos cómo se aplica el aprendizaje profundo a estos modelos para el reconocimiento de objetos, cómo son diferentes unos de otros y qué puntos son comunes.

Faster R-CNN

El R-CNN más rápido es ahora un modelo de referencia para la detección de objetos basado en el aprendizaje profundo, que ha inspirado muchos modelos posteriores de detección y segmentación, incluidos los dos que examinaremos. Desafortunadamente, no podemos entender completamente el R-CNN más rápido sin analizar R-CNN y Fast R-CNN, sus predecesores.

R-CNN

Podemos decir que el R-CNN, Region-based Convolutional Neural Network, es la red que dio vida los juegos. Consiste en tres fases:

  1. Escaneando la imagen de entrada para detectar objetos posibles, usando un algoritmo llamado Selective Search, que extrae aproximadamente 2000 regiones de esta imagen (Region Proposal).
  2. Implementación de la red neuronal convolucional (CNN) en la parte superior de cada región.
  3. Extrapolación de la salida de cada CNN para ingresarla en:
    1. una SVM (Support Vector Machine) para clasificar la región
    2. Realice una regresión lineal para restringir el cuadro delimitador del objeto, si existe.

Las fases estan ilustradas (de abajo hacia arriba) en la figura siguiente:

 

2

2

En otras palabras, primero generamos las regiones posibles, luego extraemos las características y luego clasificamos esas regiones en función de las características extraídas. Básicamente, hemos convertido la detección de objetos en un problema de clasificación. El R-CNN es muy intuitivo pero, lamentablemente,  muy lento.

 

Fast R-CNN

La version creado sucesiva es el Fast R-CNN. Este se parece al original en muchas de sus características, pero es mejor en términos de velocidad de detección para dos aspectos:

  1. La extracción de características se lleva a cabo antes de extraer las regiones de interés, pero usando solo una CNN para toda la imagen en lugar de 2000 CNN en las 2000 regiones sobrepuestas .
  2. SVM se reemplaza por una función softmax , además, la red neuronal también se usa para realizar pronósticos en lugar de crear un nuevo modelo

 

El modelo se ve más o menos así:

 

3 1

3 1

Como podemos ver en la imagen, ahora estamos generando propuestas regionales basadas no en la imagen original, sino en el último mapa de las características extrapoladas de la red. Esto nos permite entrenar solo una CNN para toda la imagen.

Además, en lugar de entrenar diferentes SVM para clasificar cada objeto, hay una sola capa de softmax que genera directamente la probabilidad para la categoria de referencia. Entonces, ahora tenemos una sola red para entrenar, con la diferencia de lo que sucedió anteriormente donde en cambio había una red neuronal flanqueada por múltiples SVM.

El Fast R-CNN se desempeña, por lo tanto, mejor en términos de velocidad. Sin embargo, queda un defecto importante: el algoritmo de selective search que propone posibles regiones.

Faster R-CNN

Ahora hemos alcanzado el objetivo inicial de nuestro artículo: Faster R-CNN. La intuición fue aquella de reemplazar el lento algoritmo de  selective search con una red neuronal rápida. Específicamente, se introdujo la region proposal network  (RPN), una red de propuesta regional.

Cómo funciona el RPN:

  • En la última capa de una CNN inicial, una ventana deslizante de 3×3 se mueve a través del mapa de características para asignarle un tamaño más pequeño (por ejemplo, 256-d).
  • Para cada posición de ventana deslizante, el RPN genera múltiples regiones posibles basadas en uniones espaciales de dimensiones fijas llamadas cajas de anclaje. (anchor boxes).
  • Cada propuesta regional consiste en:
  • un puntaje (score) para la presencia del objeto en esa región en particular
  • 4 coordenadas que representan el cuadro delimitador de la región.

En otras palabras, veamos nuestra región en el último mapa de características, teniendo en cuenta los diferentes k caudros de anclaje que lo rodean. Para cada cuadro, se muestra si esta tiene un objeto y  caules son las coordenadas del cuadro. En la imagen, se representa como aparece desde la posición de una ventana deslizante:

 

4 1

4 1

La puntuación de 2k representa la probabilidad dada por softmax para cada caja k debido a la presencia de un objeto. Cabe señalar que, aunque el RPN procesa las coordenadas de los cuadros delimitadores, no clasifica los posibles objetos de todos modos: tiene el único propósito de identificar regiones en las que hay objetos presentes , por lo tanto, comunicar las coordenadas con los cuadros relacionados. Si un cuadro de anclaje tiene una puntuación, relativa a la presencia de un objeto, por encima de un cierto umbral, entonces esa casilla dada se seleccionará como una posible región.

Teniendo ahora nuestras posibles regiones, las presentamos directamente en el Fast R-CNN. Agregamos una capa de Pooling, algunas capas completamente conectadas, finalmente una capa de clasificación softmax y un regresor de  cuadros delimitadores (cuadro delimitador regresivo). Podemos decir que Faster R-CNN = RPN + Fast R-CNN.

 

5 1

5 1

El Faster R-CNN logra asi una  mejor velocidad y precisión. Aunque ha habido múltiples intentos de aumentar la velocidad de reconocimiento de los objetos, solo unos pocos modelos han sido capaces de superar esta red. En otras palabras, el Faster R-CNN ciertamente no es el método más fácil y rápido para la  object detection, pero aún presenta uno de los mejores rendimientos. Por lo tanto, el  Faster R-CNN en Tensorflow con  la Inception ResNet es el modelo más lento pero también el más preciso.

Aunque el la Faster R-CNN puede parecer complejo, es posible observar que en el corazón de su estructura es el mismo su original el R-CNN: identifica las posibles regiones de objetos y las clasifica. Este es el enfoque dominante de la mayoría de los modelos actuales de detección de objetos, incluido el que vamos a analizar ahora.

R-FCN

Regresemos  atras por un momento. Hemos dicho que Fast R-CNN ha mejorado mucho su velocidad de detección al compartir una sola CNN para todas las regiones. Este mecanismo básico es el mismo que el de la R-FCN: aumente la velocidad maximizando el numero de parámetros compartidos.

La Region-based FullyConvolutional Net (R-FCN) comparte la totalidad del cálculo para cada salida individual.

Por un lado, cuando clasificamos un objeto queremos que el modelo sea invariante con las traducciones, para identificarlo donde sea que aparezca. Por otro lado, sin embargo, necesitamos saber también una posible variación de las traducciones: si nuestro objeto está en la esquina superior izquierda, el modelo debe dibujar un cuadro delimitador en ese punto. Entonces, ¿cómo encontrar un compromiso entre los dos extremos, la varianza y la invarianza?

La solución dada por R-FCN es representada por la position-sentitive score maps: mapas de puntuación (relativo a los features, extraer a través de convoluciones, a las que se les asigna un puntaje basado en la presencia una determinada clase dada) sensibles a la posición de los objetos que intentemos clasificar.

Cada uno de estos mapas representa una posición relativa a una clase de objetos. Por ejemplo, un cuadro mapa de puntos podría activarse si identifica el lado superior derecho de un gato, mientras que otro podría activarse cuando detecta el lado inferior izquierdo de una máquina. Esencialmente, estos mapas de puntuación son mapas de características convolucionales que han sido entrenados para reconocer ciertas partes de cada objeto.

La R-FCN funciona de la siguiente manera:

Ejecuta una CNN (en este caso un ResNet) en la imagen de entrada.

Agregue una capa convolucional que incluya todos los mapas generados a partir del paso anterior para obtener un conjunto de puntuaciones de las imágenes generales  . Obtenemos k²(C+1) puntuación de mapas, donde k² representa el número de posiciones relativas para dividir un objeto (por ejemplo 3²  para una cuadrícula 3×3), donde C+1

  1. Ejecute una RPN para generar regiones de interés (RoI)
  2. Divide cada una RoI en el mismo k² subregiones el cual está compuesto por mapas de puntuaciones
  3. Ahora debemos verificar si en la suma de los puntajes generales, de cada subregión coincide con la posición relativa correspondiente de un objeto. Por ejemplo, si queremos considerar la subregión en la esquina superior izquierda, debemos tomar el mapa de puntuación que corresponde a la esquina superior izquierda de un objeto y convertirlo en un promedio dentro del ROl. Este proceso se repite para cada catergoria.
  4. Despues que cada k² subregión tiene un valor de “object match” por cada categoria, se obtiene un promedio de las subregiones para obtener un puntaje para cada categoria.

5.Clasifique los RoI con una función softmax en los restantes C + 1 vectores dimensionales

 

Un R-FCN, que tiene un RPN que genera los RoI, aparecerá más o menos así:

6 1

6 1

Comprender cómo funciona este modelo es más fácil si realmente puede visualizar concretamente lo que hace. A continuación tenemos un ejemplo de cómo funciona mientras busca de dectectar un recién nacido.

 

7

7

Figura 4: podemos observar una RoI que no se superpone correctamente con el objeto
Figura 3: Observamos una R-FCN (k x k = 3 x 3) por la categoria persona

En términos simples: el R-FCN considera cada región, subdividiéndolas en subregiones y preguntando a cada una de ellas si corresponden a la porción relativa de la imagen de entrada. Por ejemplo, “¿Se parece a la parte centro derecha de un niño?”. Esto se repite en cada categoria. Si la mayoría de las partes de las subregiones resultan correspondientes, entonces el RoI lo clasifica como recién nacido, después que la función softmax lo ha realizado en en todas las categorias.

De esta forma, el R-FCN puede identificar simultáneamente la varianza de las traducciones, proponiendo diferentes regiones de objetos y la invariabilidad de las traducciones a través de la referencia de cada región a los mismos mapas de puntuación. Estos mapas de puntuación deberian aprender a clasificar un gato como tal, donde sea que aparezca. Además, es completamente convolucional: esto significa que el cálculo se comparte en toda la red.

Esto permite que el R-FCN sea s más rápido que el FasterR-CNN , logrando el mismo grado de precisión.

SSD

El último modelo que vamos a analizar es el Single-Shot Detector (SDD) . Como el R-FCN alcanzó una velocidad mucho más alta que el Faster R-CNN pero de una forma diferente.

Los primeros dos modelos realizan una  region proposal y region classification en dos fases distintas. En primer lugar, utilizan una RPN (region proposal network) para generar las regiones de interés, luego clasifican estas regiones a través de sus capas totalmente conectadas o las capas convolucionales sensibles a la posición de los objetos que se van a clasificar. El SSD combina estos dos procesos en un solo paso, al tiempo que proporciona los cuadros de delimitación y las categoria, en el momento que examina la imagen.

 

 

Dada una imagen de entrada y un conjunto de etiquetas para al dataset, la SSD actúa de esta manera:

1) Pasa la imagen a través de una serie de capas convolucionales, produciendo mapas de las características a diferentes escalas (por ejemplo, 10×10, luego 6×6 y nuevamente 3×3, etc.)

2) Por cada posición en cada uno de estos mapas de características, se usa un filtro convolucional de 3×3 para evaluar un pequeño conjunto de requadros delimitadores predefinidos. Estos últimos son el equivalente a cuadros de anclaje(anchor boxes) del Faster R-CNN

3)Por cada requadro establece al mismo tiempo:

  1. El recuadro del bounding box
  2. La probabilidad para cada categoria.

Durante el entrenamiento se hace coincidir el requadro real con el predicho sobre Intersection over Union (IoU), que es el índice de Jaccard. Los recuadros mejores pr se etiquetarán como “positivos”, así como todos los demás recuadros con un valor de IoU> 0.5.

Durante el entrenamiento de la SSD, sin embargo, existe una dificultad peculiar en comparación con los modelos anteriores. En los primeros dos modelos, el RPN permitió considerar solo lo que tenía la más mínima posibilidad de ser un objeto. Con la SSD, sin embargo, se elimina el primer filtro: clasifica y rastrea cuadros delimitadores en cada posición de la imagen, usando recuadros de diferentes formas y escalas múltiples. Esto da como resultado  un número mucho mayor de recuadros  donde la mayoría de estos son negativos (ya que no detecta objetos).

El SSD corrige este problema de dos maneras. Primero, utiliza la no-maximum suppression  (NMS) para agrupar varias requadros superpuestos en una unico recuadro. Entonces, por ejemplo, cuatro recuadros de forma y tamaño similares contienen el mismo objeto, el NMS le permite mantener el mejor rquadro, el más preciso, y descartar los restantes. En segundo lugar, utiliza una técnica llamada  para hard negative mining para equilibrar las categorias durante el entrenamiento. Con esta técnica, solo se utiliza un subconjunto de ejemplos negativos con la mayorloss in fase di training  (los denominados falsos positivos)  que se  usa para cada iteración durante el entrenamiento. El SSD mantiene una relación de 3: 1 entre negativos y positivos.

 

 

 

Su arquitectura se ve así:

8

Como se mencionó anteriormente, vemos que hay “extra feature layers. Estos mapas de características de tamaño variable ayudan a identificar objetos de diferentes tamaños. Aquí hay un ejemplo:

9

En mapas de funciones más pequeñas (4×4), cada cuadro cubre una región más amplia de la imagen, lo que le permite identificar objetos más grandes. La region proposal y la clasificación se ejecutan al mismo tiempo: teniendo categorias p de objetos, cada cuadro delimitador se asocia con un vector dimensional (4 + p) que produce 4 recuadros de coordenadas y probabilidad de categorias p. En última instancia, una función sotmax también se usa para clasificar objetos.

Por lo tanto, podemos decir que el SSD no es tan diferente de los dos modelos anteriores. Sin embargo, omite el paso de la identificación de la región, considerando cada cuadro en cada posición de la imagen junto con su clasificación. Al realizar todos estos procesos simultáneamente, el SSD es sin duda el más rápido de los tres modelos considerados.

 

 

 

 

Conclusión

El  Faster R-CNN , el R-FCN y el SSD son tres de los mejores y más usados modelos para la detección de objetos. Todos ellos confían en las redes neuronales convolucionales para las primeras etapas del proceso y siguen, más o menos, el mismo método de proponer regiones y clasificación.

Guía para arquitecturas de redes profundas

Autora: Joyce Xu

Tradutor: Paula Vidal

 

 

1

GoogLeNet, 2014

En los últimos años, gran parte del progreso realizado en el uso del aprendizaje profundo para la visión artificial se puede rastrear a un pequeño grupo de arquitecturas de redes neuronales. Dejando de lado las matemáticas, los códigos y los detalles de la implementación, en este artículo pretendemos analizar cómo funcionan estos modelos.

Por el momento, Keras domina con seis de estos modelos pre-entrenados que ya están incluidos en la biblioteca:

  • VGG16
  • VGG19
  • ResNet50
  • Inception v3
  • Xception
  • MobileNet

 

 

Las redes VGG, junto con la anterior AlexNet del 2012, siguen el esquema arquetípico de las redes convolucionales clásicas: una serie de convolucionces,max pooling, capas de activación y finalmente algunas capas de clasificación completamente conectadas. MobileNet es, esencialmente, una versión simplificada de la arquitectura Xception, optimizada para aplicaciones móviles. Sin embargo, los tres modelos restantes realmente han redefinido la forma en que actualmente observamos las redes neuronales. Este artículo se centrará en la intuición de las arquitecturas de ResNet, Inception y Xception, y en por qué se han convertido en el punto de referencia para los estudios posteriores de visión artificial.

ResNet

ResNet, nació de una simple observación: “¿por qué agregar más capas a las redes neuronales profundas no mejora la precisión, o incluso peor?”

Intuitivamente, las redes neuronales más profundas no deben funcionar peor que las superficiales, o al menos no durante el entrenamiento cuando no existe el riesgo de overfitting. Tomamos una red de ejemplo con n capas que alcanzan cierta precisión. Como mínimo, una red con n + 1 capas debería ser capaz de alcanzar el mismo grado de precisión copiando las primeras n capas y ejecutando un mapeo de identidad para la última capa. Del mismo modo, las redes de n + 2, n + 3 y n + 4 capas pueden, con el mismo método, obtener la misma precisión. Sin embargo, a medida que la profundidad de la red crece esto no siempre es cierto.

Los desarrolladores de ResNet han devuelto este problema a la hipótesis de que las asignaciones directas son difíciles de entrenar. Por lo tanto, propusieron un remedio: en lugar de tratar de aprender a partir de mapeos subyacentes de x y H (x), es posible aprender la diferencia entre los dos, que es el “residuo” y, posteriormente, ajustar el último a la entrada.

Supongamos que el residuo es F (x) = H (x) -x. Ahora nuestra red intenta aprender de F (x) + x.

Esto dio origen a los famosos bloques de ResNet (red residual):

2.jpg

ResNet block

 

ResNet block

Cada “bloque” ResNet consta de una serie de capas y un mapeo de identidad que agrega una entrada de bloque a la salida. Esta operación de “adición” se realiza elemento por elemento. Y si la entrada y la salida son de diferentes tamaños, se pueden utilizar técnicas de relleno cero o de proyección (a través de convoluciones de 1×1) para crear las dimensiones correspondientes.

Volviendo a nuestra red de ejemplo, este método puede simplificar enormemente la construcción de las capas de identidad de las que está compuesto. De hecho, es mucho más fácil aprender a presionar F (x) a 0 y dejar la salida como x. Por lo tanto, ResNet proporciona a las capas un punto de referencia x desde el cual aprender, en lugar de comenzar desde cero desde una transformación de identidad.

Esta idea es realmente efectiva en la práctica. Antes, en las redes neuronales profundas había un problema de cancelación del gradiente, cuyo descenso, dado por la minimización de la función de error, se reduce exponencialmente a través de la retropropagación de las capas anteriores. En esencia, el largo camino a través de las capas anteriores hizo que los signos de errores fueran tan pequeños que no permitieran que la red aprendiera. Sin embargo, gracias a la innovación introducida por ResNet, descrita anteriormente, ahora podemos construir redes de innumerables capas (potencialmente más de mil) que tienen un alto grado de precisión. Este fue un gran paso, considerando que el modelo más profundo creado hasta entonces fue de 22 capas (ganador de la competencia ILSVRC 2014).

Se han publicado muchos artículos posteriores sobre aprendizaje profundo, pero sin mayores mejoras. ResNet sigue siendo, fundamentalmente, el modelo que cambió nuestra comprensión de las redes neuronales y cómo aprenden

¡La red de 1000+ capas es de código abierto! Puedes encontrarlo aquí.

Inception

Si ResNet se concentra en la profundidad, Inception Family ™ se enfoca en la extensión. Entonces, los desarrolladores de Inception estaban interesados en la eficiencia computacional de entrenar redes más grandes. En otras palabras: ¿cómo podemos aumentar el ancho de las redes neuronales sin exceder la capacidad computacional de una computadora?

El trabajo original se refería a un componente conocido como el nombre de “Inception model”.  El corazón de este modelo contenía dos elementos innovadores.

  1. La primera intuición se refiere a las operaciones en las capas. En una CNN tradicional, cada capa extrae información de la capa anterior para transformar los datos de origen en un tipo diferente de información. La salida de una convolución de 5×5 extrae características diferentes de las de un 3×3 o un máximo de agrupación, y así sucesivamente. Para cada capa, ¿cómo podemos adivinar qué núcleo proporciona la información más relevante?

¿Por qué no dejar que el modelo elija?

Un módulo Inception elabora múltiples y diferentes transformaciones en los mismos datos de entrada, al mismo tiempo, vinculando los resultados en una sola salida. En otras palabras, cada  capa“Inception module”  consistira en una convolución de 5×5, una 3×3 y max-pool. La selección de las características más relevantes se deja a la siguiente capa.

3The increased

La mayor densidad de información de la arquitectura de este modelo tiene un problema relevante: el aumento drástico en la capacidad computacional requerida. No solo los filtros convolucionales más grandes (por ejemplo, 5×5) son exigentes y costosos de calcular, sino que la superposición de diferentes filtros aumenta el número de mapas de características para cada capa. Este es un verdadero impedimento para nuestro modelo.

Veámoslo de otra manera: para cada filtro que agreguemos, debemos realizar una convolución en todos los mapas de entrada para calcular una única salida. En la imagen a continuación vemos cómo la creación de un mapa de salida a partir de un solo filtro implica el cálculo en cada mapa de las capas anteriores.

4

Digamos que hay M mapas de entrada. Para cada filtro adicional, debemos hacer que se involocre a lo largo de todos los mapas de entrada M; de la misma manera, si tenemos más N filtros, deberíamos hacer que se convolucionen a lo largo de todos los mapas N * M. En otras palabras, “cualquier aumento uniforme en el número de [filtros] da como resultado un aumento al cuadrado en el cálculo”. Nuestro módulo Inception ha triplicado o cuadruplicado la cantidad de filtros. Desde un punto de vista computacional, es un problema real.

Esto lleva a la segunda intuición: use circunvoluciones 1×1 para una reducción en la dimensionalidad. Para resolver la dificultad computacional descrita anteriormente, los desarrolladores de Inception usaron convoluciones 1×1 para “filtrar” la profundidad de las salidas. Estas circunvoluciones tienen en cuenta un valor a la vez, pero a través de múltiples canales, y también pueden extraer información espacial y comprimirla en una dimensión más pequeña. Por ejemplo, con 2 x 1×1 filtros, una entrada de tamaño 64x64x100 (con 100 mapas de características) se puede comprimir a 64x64x20. Al reducir el número de mapas de entrada, los desarrolladores pudieron superponer las transformaciones de diferentes capas en paralelo, lo que generó redes que eran profundas (con numerosas capas) y amplias (con operaciones paralelas).

5

 

  1. a) modulo Inception,primera versión b) modulo Inception con reducción de dimensionalidad

la primera versión de Inception, llamada “GoogLeNet”, es la anteriormente mencionada que tiene 22 capas y que ganaron la competencia ILSVRC 2014. Inception v2 y v3, desarrolladas un año después, son mejores que la versión anterior por varios factores: el más relevante es el refactoring de circunvoluciones grandes en otras más pequeñas y consecutivas, que son más fáciles de aprender. Por ejemplo, en el Inception v3, la convolución 5×5 fue reemplazada por dos convulsiones consecutivas de 3×3.

El inicio se convirtió rápidamente en una referencia para la arquitectura de modelos posteriores. Su última versión, v4, también agrega conexiones residuales entre cada módulo, creando un híbrido entre Inception y ResNet. No obstante, el factor más importante es que este modelo demuestra la fortaleza de las arquitecturas red-red bien concebidas, que alcanzan un nuevo nivel en la legitimación del poder de las redes neuronales.

Vale la pena señalar que la investigación sobre las siguientes versiones v2 y v3 se publicó el día inmediatamente posterior a la fecha de renuncia en ResNet.

Xception

Xception, “extreme inception”, con diferencia de las arquitecturas anteriores, ha cambiado nuestra comprensión de las redes neuronales, particularmente las redes convolucionales.

La hipótesis fue: “las correlaciones espaciales y las que existen entre los canales son lo suficientemente libres para hacer que sea preferible no mapearlas juntas”.

Esto significa que en una CNN tradicional, los estados convolucionales identificaron correlaciones entre el espacio y la profundidad. En la siguiente imagen podemos revisar la operación.

4

El filtro considera simultáneamente una dimensión espacial (cada cuadrado de 2×2 colores) y un cross-channel o dimensión de “profundidad” (la pila de cuatro cuadrados). En la capa de entrada de una imagen, esto es el equivalente de un filtro convolucional que examina un grupo de píxeles de 2×2  que atraviesa los tres canales RGB. Entonces nos hacemos una pregunta: ¿qué razón tenemos para considerar la región de imagen y los canales simultáneamente?

6

Inception comienza a separar estos dos elementos: gracias a las convoluciones 1×1 proyecta la entrada original en múltiples espacios de entrada de menor tamaño, y de cada uno de estos utiliza diferentes filtros para transformar esos pequeños bloques de datos tridimensionales. Xception va aún más allá: en lugar de dividir los datos de entrada en múltiples grupos comprimidos, mapea  separadamente para realizar una convolución 1×1 en profundidad para capturar correlaciones cross-channel .

Esta operación se conoce como “depthwise separable convolution”  que consiste en una convolución espacial(depthwise convolution) realizada independientemente para cada canal, seguida de una convección 1×1 (pointwise convolution) entre los canales. Por lo tanto, es una búsqueda de correlaciones primero en un espacio bidimensional y luego en un espacio unidimensional. Esta asignación 2D + 1D es más fácil de aprender que una completamente 3D.

Xception supera el rendimiento de Inception v3 en los  dataset de ImageNet, y lo hace igualmente bien con los dataset para la clasificación de imágenes de 17,000 clases. Además, tiene la misma cantidad de parámetros del modelo Inception, lo que permite una eficienente. Aunque Xception es muy reciente, su arquitectura ya se ha convertido en parte de las aplicaciones de Google para visión móvil, a través de MobileNet.

Tenemos  que decir que el desarrollador de Xception, François Chollet, también es el autor de Keras.

 

 

 

Perspectivas y aplicaciones

 

El conocimiento de ResNet, Inception y Xception se ha vuelto más y más importante, tanto en investigación como en negocios. Una aplicación interesante es el aprendizaje por transferencia, una técnica de aprendizaje automático en la cual el conocimiento tomado de una fuente (por ejemplo, ResNet) se aplica a un dominio /o sector especifico que podria tener puntos de datos numéricamente mucho más pequeños. Esto generalmente incluye dos acciones: inicializar un modelo con pesos preinscritos por ResNet, Inception, etc., utilizándolo tanto para la extracción de características como para la optimización (fine-tuning) de las últimas capas en un nuevo dataset. A través del aprendizaje de transferencia, estos modelos pueden reutilizarse para cualquier operación relacionada con él, desde la detección de objetos para vehículos de conducción autónomos hasta la creación de etiquetas y subtítulos para grabaciones de video.

Puede encontrar una guía de Keras para a modelos de fine-tuning aquí.

 

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

Quando una capsula al livello inferiore si attiva produce una predizione al possibile nodo di appartenenza alle capsule di livello superiore attraverso una matrice di trasformazione. Se una capsula di alto livello riceve sufficienti predizioni di appartenenza diviene attiva. Questo processo, chiamato dynamic routing, permette di sostituire il max pooling attraverso una selezione “intelligente” delle features da mantenere durante la fase di allenamento.

 

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)

 

Introducción al autoencoder

Autor:Nathan Hubens

Linkedind: https://www.linkedin.com/in/nathan-hubens

Tradutor: Paula Vidal

 

 

Los autoencoders son redes neuronales con el objetivo de generar nuevos datos primero comprimiendo la entrada en un espacio de variables latentes y luego reconstruyendo la salida en base a la información adquirida. Este tipo de red consta de dos partes:

  1. Encoder: la parte de la red que comprime la entrada en un espacio de variables latentes y que puede representarse mediante la función de codificación h = f (x).
  2. Decoder: la parte que trata de reconstruir la entrada en base a la información recolectada previamente. Se representa mediante la función de decodificación r = g (h).

1 3

Arquitectura de un autoencoder.

 

El autoencoder se puede describir con la siguiente función d (f (x)) = r  donde r es similar a la entrada original de x.

¿Por qué copiar la entrada en la salida?

Lo que esperamos es que, cuando entrenamos un autoencoder y copiamos la entrada, el espacio de variables latentes h pueda tomar características útiles para nosotros.

Esto se puede lograr imponiendo límites a la acción de codificación, forzando el espacio h que sea de menores  dimensiones que x. En este caso, el autoencoder viene llamado undercomplete. Al entrenar el espacio undercomplete, traemos el autoencoder que capturar las características más relevantes de los datos de entrenamiento. Si no les damos suficientes restricciones, la red se limita a la tarea de copiar la entrada en la salida, sin individuar ninguna información útil sobre la distribución de datos. Esto puede suceder incluso cuando el tamaño del subespacio latente tiene el mismo tamaño que el espacio inicial; en el caso cuando tenemos un caso de autoencoder overcomplete, significa que  el tamaño del espacio de variables latentes es mayor que las entradas. En estos casos, incluso con  simples encoder y decoder lineales, podemos copiar la entrada en la salida sin aprender nada sobre los datos.

Idealmente, es posible entrenar con éxito cualquier arquitectura basada en el autoencoder eligiendo adecuadamente los parámetros y la capacidad de cada encoder-decoder en función de la complejidad de los datos a modelar.

 

El uso de los autoencoder

Hasta la fecha, la reducción de ruido y la reducción de dimensionalidad para la visualización de datos se consideran las aplicaciones más interesantes de autoencoders. Con el ajuste apropiado de

 

Con la configuración apropiada de la dimensionalidad y las restricciones relacionadas en la dispersión de los datos, a través del autoencoder es posible obtener proyecciones en subespacios de mayor interés en comparación con métodos lineales como PCA.

Los autoencoders se entrenan automáticamente a través de datos de muestra. Esto significa que es fácil entrenar la red para tener un buen rendimiento en tipos similares de entrada, sin la necesidad de generalizar. Es decir, solo la compresión realizada en datos similares a los utilizados en el conjunto de entrenamiento tendrá buenos resultados, pero si se realiza en diferentes datos no será muy efectiva. Otras técnicas de compresión como JPEG serán más capaces de realizar esta función.

 

Estas redes neuronales están capacitadas para conservar la mayor cantidad de información posible cuando se insertan en el encoder y luego en el decoder, pero también para que las nuevas representaciones adquieran diferentes tipos de propiedades. Se describen cuatro tipos de autoencoders , es por esto crearemos un ejemplo para cada uno de ellos utilizandoòps en framework Keras y en el dataset MNIST.

 

Tipos de autoencoder

En este artículo, enumeramos cuatro:

  1. Vanilla autoencoder
  2. Autoencoder multicapa
  3. Autoencoder convolucional
  4. Autoencoder regularizado

Vanila autoencoder

Es la forma más simple, caracterizada por una red de tres capas, es decir, una red neuronal con una sola capa oculta. La entrada y la salida son las mismas y, en nuestro caso, aprendemos cómo reconstruir la entrada mediante el uso del optimizador Adam , como función de pérdida, la desviación mínima del cuadrado.

En esta tipología estamos en el caso de encoder undercomplete donde la capa oculta, con un tamaño igual a 64, es más pequeña que la de la entrada (784), obtenida de la siguiente fórmula 28x28x1. Esta restricción fuerza a la red neuronal a aprender de una representación de datos comprimida.

 

input_size = 784
hidden_size = 64
output_size = 784

x = Input(shape=(input_size,))

# Encoder
h = Dense(hidden_size, activation='relu')(x)

# Decoder
r = Dense(output_size, activation='sigmoid')(h)

autoencoder = Model(input=x, output=r)
autoencoder.compile(optimizer='adam', loss='mse')

 

Autoencoder multicapa

Si solo una capa oculta no es suficiente, podemos extender el autoencoder a lo largo de la dimensión de profundidad. Nuestra implementación ahora usa tres capas ocultas para una mejor generalización, pero también tendremos que hacer que la red sea simétrica utilizando la capa intermedia.

input_size = 784
hidden_size = 128
code_size = 64

x = Input(shape=(input_size,))

# Encoder
hidden_1 = Dense(hidden_size, activation='relu')(x)
h = Dense(code_size, activation='relu')(hidden_1)

# Decoder
hidden_2 = Dense(hidden_size, activation='relu')(h)
r = Dense(input_size, activation='sigmoid')(hidden_2)

autoencoder = Model(input=x, output=r)
autoencoder.compile(optimizer='adam', loss='mse')

Autoencoder convolucional

Surge una pregunta: ¿podrían usarse autoencoders con convoluciones en lugar de capas conectadas por completo?

Y la respuesta es sí. El principio es el mismo, pero se usan vectores tridimensionales en lugar de vectores unidimensionales. La imagen de entrada se muestrea para obtener una representación latente, es decir, una reducción dimensional, lo que obliga al autoencoder a aprender de una versión comprimida de la imagen.

x = Input(shape=(28, 28,1)) 

# Encoder
conv1_1 = Conv2D(16, (3, 3), activation='relu', padding='same')(x)
pool1 = MaxPooling2D((2, 2), padding='same')(conv1_1)
conv1_2 = Conv2D(8, (3, 3), activation='relu', padding='same')(pool1)
pool2 = MaxPooling2D((2, 2), padding='same')(conv1_2)
conv1_3 = Conv2D(8, (3, 3), activation='relu', padding='same')(pool2)
h = MaxPooling2D((2, 2), padding='same')(conv1_3)


# Decoder
conv2_1 = Conv2D(8, (3, 3), activation='relu', padding='same')(h)
up1 = UpSampling2D((2, 2))(conv2_1)
conv2_2 = Conv2D(8, (3, 3), activation='relu', padding='same')(up1)
up2 = UpSampling2D((2, 2))(conv2_2)
conv2_3 = Conv2D(16, (3, 3), activation='relu')(up2)
up3 = UpSampling2D((2, 2))(conv2_3)
r = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(up3)

autoencoder = Model(input=x, output=r)
autoencoder.compile(optimizer='adam', loss='mse')

Autoencoder regularizado

Existen otros métodos mediante los cuales podemos restringir la reconstrucción del autoencoder como una alternativa a la imposición de una dimensionalidad reducida de las capas ocultas. En lugar de limitar la capacidad del modelo manteniendo una arquitectura poco profunda del encoder y decoder , así como una reducción forzada, los autoencoders regularizados utilizan una función de pérdida para alentar al modelo a asumir propiedades que van más allá de la simple capacidad de copiar la entrada en la salida . En la práctica, encontramos dos tipos diferentes: autoencoder disperso y Denoising autoencoder.

  1. Autoencoder escaso: generalmente se utilizan para la clasificación. Al entrenar un autoencoder, las unidades ocultas en la capa intermedia se activan con demasiada frecuencia. Para evitar esto, debemos reducir su tasa de activación limitándola a una fracción de los datos de entrenamiento. Esta restricción se denomina restricción de dispersión, porque cada unidad se activa solo mediante un tipo de entrada predefinido.
input_size = 784
hidden_size = 64
output_size = 784

x = Input(shape=(input_size,))

# Encoder
h = Dense(hidden_size, activation='relu', activity_regularizer=regularizers.l1(10e-5))(x)

# Decoder
r = Dense(output_size, activation='sigmoid')(h)

autoencoder = Model(input=x, output=r)
autoencoder.compile(optimizer='adam', loss='mse')

Otro cambio que podemos hacer durante la fase de reconstrucción es agregar un término de regularización a nuestra función de pérdida: por ejemplo, un regulador de tipo 1 introduce una penalización en la función de pérdida, que actúa durante la fase de optimización. Como resultado, tendremos menos activaciones que las de un autoencoder de Vanilla

2.Denoising autoencoder:En lugar de agregar penalización a la función de pérdida, podemos hacer que el objeto cambie, agregando ruido a la imagen de entrada y haciendo que el autoencoder aprenda a eliminarlo de manera autónoma. Esto significa que la red extraerá solo la información más relevante y aprenderá de una representación sólida de los datos

x = Input(shape=(28, 28, 1))

# Encoder
conv1_1 = Conv2D(32, (3, 3), activation='relu', padding='same')(x)
pool1 = MaxPooling2D((2, 2), padding='same')(conv1_1)
conv1_2 = Conv2D(32, (3, 3), activation='relu', padding='same')(pool1)
h = MaxPooling2D((2, 2), padding='same')(conv1_2)


# Decoder
conv2_1 = Conv2D(32, (3, 3), activation='relu', padding='same')(h)
up1 = UpSampling2D((2, 2))(conv2_1)
conv2_2 = Conv2D(32, (3, 3), activation='relu', padding='same')(up1)
up2 = UpSampling2D((2, 2))(conv2_2)
r = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(up2)

autoencoder = Model(input=x, output=r)
autoencoder.compile(optimizer='adam', loss='mse')

Utilizar el Deep Learning para mejorar la gráfica de FIFA 18

Autor: Chintan Trivedi

Linkedin: https://www.linkedin.com/in/chintan-trivedi-78665774/

Tradutor: Paula Vidal

 

1

 

Comparación entre las dos caras de Ronaldo: a la izquierda la de FIFA 18, a la derecha la generada por una  red neuronal profunda.

Game Studios ha gastado millones de dólares y cientos de horas de investigación y desarrollo en el diseño de los gráficos del juego, en un intento de hacerlo lo más veraz y natural posible. Aunque las caras de los jugadores son decididamente realistas, aún es posible distinguirlas de las reales. Sin embargo, ¿ han aprovechado los desarrollos  obtenidos en el procesamiento de imágenes utilizando redes neuronales profundas para mejorar los gráficos y, al mismo tiempo, reducir el esfuerzo requerido para hacerlo?

Entonces trataremos de responder usando FIFA 18

Para comprender si los desarrollos recientes pueden ayudarnos a responder esta pregunta,nos concentraremos en mejorar los gráficos faciales de los jugadores que utilizan el algoritmo DeepFakes,  es una red neuronal profunda que puede entrenarse para aprender y generar rostros humanos de una manera extremadamente realista. Este artículo se encargará, por lo tanto, de recrear las caras de los jugadores, sacándolos del juego y luego mejorarlos para que sean idénticos a los reales.

 Nota: aquí encontrará una buena explicación sobre cómo funciona el algoritmo DeepFake, este puede reemplazar una cara con la de cualquier otra persona que use autoencoder y redes neuronales convolucionales.

Recopilar datos de entrenamiento

A diferencia de los desarrolladores del juego, podemos obtener los datos que necesitamos simplemente búscando en Google, sin tener que molestar a Ronaldo y perdile que use los trajes que para registrar sus movimientos.

Comencemos obsenvando su cara digital, una de las mejores obtenidas del juego. Para que recopile  información el algoritmo deepfakes, simplemente necesitamos grabar la cara del jugador a través de la función  instant replay del juego. Ahora podemos reemplazarlo con la verdadera cara de Ronaldo y, para este propósito, descargamos algunas de sus imágenes de la búsqueda de Google que lo muestran desde diferentes ángulos. Estos pocos elementos son todo lo que necesitamos para comenzar el proceso de capacitacion del modelo.

Arquitectura modelo y entrenamiento

El algoritmo deepfakes se refiere al entrenamiento de redes neuronales profundas llamadas autoencoder. Estas redes para el entrenamiento no supervisado se componen de un encoder que comprime la entrada en un espacio de variables latentes denominado “encoding”, y un decoder que utiliza este espacio para reconstruir la entrada. Esta arquitectura obliga a la red a extrapolar información sobre la distribución de los datos de entrada, en lugar de dejar que se limite a la simple tarea de copiar la entrada en la salida. Utilizaremos aquí una red convolucional como un encoder y una red neuronal desconvolucional como decoder. Esta arquitectura está entrenada para minimizar el error de reconstrucción en el aprendizaje no supervisado

En nuestro caso, también formaremos simultáneamente dos autoencoders: el primero aprenderá a recrear la cara de Ronaldo a partir de los gráficos de FIFA 18, mientras que el segundo lo hará utilizando las imágenes reales previamente descargadas. En deepfakes, ambas redes comparten el mismo codificador pero están capacitadas con diferentes decoder.

2.jpg 5

2.jpg 5

  1. Operación del primer autoencoder que aprende de los gráficos del juego

3 2

2. Operación del segundo autoencoder que aprende a través de imágenes reales

Usando un modelo previamente entrenado en otras caras, la pérdida total va de 0.06 a 0.02, aproximadamente, en cuatro horas de entrenamiento usando una GTX 1070. En este caso, la capacitación continuó en el mismo modelo, CageNet, utilizado previamente para generar la cara de Nicolas Cage

Usar el modelo entrenado para intercambiar caras

 

Ahora llegamos a la parte más interesante. El algoritmo puede intercambiar rostros mediante la adopción de un truco inteligente: en el segundo autoencoder se inserta la entrada del primero . De esta forma, el encoder compartido puede usar el encoding obtenido de las caras digitales de FIFA 18 y permitir que el decoder B reconstruya, sobre la base de la imagen digital, la cara real. Al hacerlo, las caras de la FIFA se convierten directamente en la imagen realista de Ronaldo

4 2

El segundo codificador convierte la cara de FIFA en la real de Ronaldo

Resultados

El GIF muestra una vista previa rápida de los resultados obtenidos al permitir que el algoritmo funcione en las caras de otros jugadores. Podemos ver un mejoramiento notable.

 

5 1

5 1

6

6

Comparación antes y después del uso de deepfakes, de las caras de Ronaldo, Morate y Ozil

Se pueden encontrar más resultados en este video.

¿Podemos usar el algoritmo para colocarnos a nosotros mismos en el juego?

La respuesta es sí: todo lo que necesita es un video de un minuto de nosotros mismos y la descarga. El modelo se capacitó en unas pocas horas. Podemos, de esta manera, encontrarnos en el juego en la modalidad  “Viaje”.

Puntos de fuerza y debilidades

La mejor ventaja que hemos obtenido de este enfoque es sin duda el hiperrealismo de los rostros y los gráficos, difícilmente distinguibles de la realidad. Este resultado se puede lograr en unas pocas horas de entrenamiento, a diferencia de lo que ocurre con los desarrolladores del juego que, con el enfoque de hoy, toman años en hacer su trabajo. Esto significa que los productores podrían potencialmente hacer nuevos títulos en plazos mucho más cortos y que las compañías de producción podrían ahorrar una gran cantidad de dinero.

La limitación más obvia hasta ahora es que estas caras se han generado despues, como CGI (imágenes generadas por computadora) en películas, mientras que el juego requiere una realización en tiempo real. No obstante, una gran diferencia es que este enfoque no requiere intervención humana para generar resultados efectivos después de que el modelo ha sido entrenado. Además, la unica limitacion es el tiempo que toma la red neuronal para generar la imagen de salida. Probablemente no tome mucho tiempo para poder tener modelos generativos que no sean demasiado profundos y pesados, que puedan funcionar muy rápidamente sin comprometer la calidad de la producción. Al igual que ocurre con YOLO, SSD y MobileNets para la detección de objetos en tiempo real, lo que antes no era posible con modelos como RCNN.

Cómo implementar una red neuronal artificial para jugar FIFA 18

Autor: Chintan Trivedi

Linkedin: https://www.linkedin.com/in/chintan-trivedi-78665774/

Traductor: Paula Vidal

 

El A.I. Los bots, es decir, programas capaces de actuar,  son generalmente programados con un conjunto  reglas  prioritarias las cuales se comunican con el juego. En la mayoría de los casos, este enfoque es suficientemente efectivo para que el robot imite el comportamiento humano. Sin embargo, en muchos contextos todavía es muy simple distinguir entre un bot y un ser humano real. Por lo tanto, consideraremos esta pregunta: ¿qué pasaría si dejamos que el robot comprenda de forma autónoma la observación del juego humano, sin usar reglas empíricas?

Esto requiere un juego donde sea posible recopilar este tipo de datos sobre el comportamiento de los jugadores y FIFA 18 (dudas). Al registrar nuestras acciones y decisiones durante la fase de juego nos permite implementar un bot basado en el aprendizaje profundo, sin que sea necesario requerir una programación de cada regla del juego.

 

4 1

4 1

 

El código para este proyecto y el modelo ya entrenado se pueden encontrar aquí.

Mecanismos del juego

Para implementar un tipo de bot no es necesario acceder a ningún código interno. Es mas simple de lo que piensan basta solo una simple captura de pantalla de la ventana del juego para encender nuestro motor. Este último procesa la información visual y realiza sobre la base de ellos una acción que se comunica al juego a través de una simulación de la presión de las teclas. Por lo tanto, el procedimiento se repite para cada paso

 

Ahora que tenemos un input  y el  conjunto de capturas de pantalla es esto que permite que el bot actúe,  la parte interesante es:  como viene constituida la  inteligencia artificial y como esta aprende del juego. Esto se hace primero 1) usando una red neuronal convolucional (CNN) para procesar las pantallas y, en segundo lugar, 2) usando redes de memoria a corto y largo plazo (LSTM) para decidir sobre la acción más apropiada.

 

 

 

Paso 1) entrenar una red neuronal convolucional (CNN)

Los CNN a menudo son conocidos por su capacidad para individuar objetos en una imagen con gran precisión. Al combinarlo con poderosas GPU y arquitecturas de redes inteligentes, podemos obtener un modelo de CNN que opera en tiempo real.

5 2

5 2

 

Para hacer que nuestro bot procese la imagen que se le proporcionó como input, utilizamos una CNN rápida y extremadamente ligera llamada MobileNet. El mapa de las características, extrapolado de la red, representa una comprensión profunda de la imagen, logrando identificar datos tales como la posición de los jugadores y otros objetos de interés en el espacio de la pantalla. Este mapeo se usa luego con una caja múltiple que con una sola toma para identificar a los jugadores en el área de juego, junto con la pelota y el objetivo.

6

6

Paso 2) entrenar redes de memoria a corto y largo plazo (LSTM)

7

7

Ahora que tenemos una comprensión de la imagen, podemos continuar con el siguiente paso, ahora inicia acción. Sin embargo, no podemos limitarnos al estudio de una sola pantalla para decidir cómo actuar, sino que deberíamos mirar una secuencia corta de ellas. Aquí es donde entran en juego los LSTM porque se sabe que modelan una secuencia de tiempo y datos. Cada cuadro consecutivo se utiliza como un paso de tiempo en nuestra secuencia, y para cada uno de ellos se extrae un feature map  utilizando el modelo CNN. Estos últimos se introducen simultáneamente en dos redes LSTM.

La prima rete LSTM ha la funzione di capire quali movimenti il giocatore necessita di fare ed è, quindi, un modello di classificazione “multi-classe”. La seconda LSTM riceve lo stesso input ma deve, invece, decidere quale azione scegliere tra passaggio corto, cross, passaggio filtrante e tiro. È quindi anch’essa un modello multiclasse. Gli output prodotti da queste due classificazioni sono poi convertiti nella pressione dei tasti che controllano le azioni di gioco.

Le reti sono state allenate sulla base di dati collezionati attraverso il gioco manuale, la raccolta delle immagini e la pressione del tasto corretto.

La primera red LSTM tiene la función de comprender qué movimientos necesita hacer el jugador y, por lo tanto, es un modelo de clasificación “multi-clase”. La segunda LSTM recibe la misma entrada, pero en su lugar debe decidir qué acción elegir entre pase corto, cross, pass y un tiro. Por lo tanto, también es un modelo multiclasado. Los resultados producidos por estas dos clasificaciones se convierten luego en la presión de las teclas que controlan las acciones del juego.

Las redes estan capacitadas sobre la base de los datos recopilados a través del juego manual, la recopilación de imágenes y cuando tocas el botón correcto.

Evaluación del rendimiento del bot

No pudimos evaluar el rendimiento del robot, excepto al dejarlo jugar. Después de solo 400 minutos de entrenamiento, el bot ha aprendido a correr hacia la meta del oponente, hacer pases delanteros y tomar una foto de la pantalla cada vez que detecta un gol. En el modo principiante de FIFA 18, ya ha anotado 4 goles en seis partidos, uno más que Paul Pogba durante la temporada 17/18.

Los videos del robot en acción se pueden encontrar aquí.

 

 

conclusiones

Las impresiones de estos enfoques de implementación de bot son ciertamente positivas. Con un entrenamiento bastante limitado, el bot logró comprender las reglas básicas del juego: moverse hacia la meta del oponente y empujar la pelota hacia la red. Sin duda sería capaz de alcanzar el nivel de rendimiento humano cuando se someta a muchas más horas de entrenamiento, lo que podría ser fácilmente recogido por el desarrollador del juego. Además, extender el modelo de entrenamiento al lanzamiento real de juegos haría que el comportamiento del robot fuera mucho más natural y realista.

Long-Term Memory Neural Network 1 – Introducción

Autor: Daniele D’armiento

Traductor: Paula Vidal

Las habilidades cognitivas como el reconocimiento, la predicción, la elección de respuestas y las acciones implican la recuperación de información previamente almacenada.

El desafío para desarrollo de la inteligencia artificial es crear un modelo que pueda almacenar mucha información y que pueda rescatarse rápidamente.

Pero no es una novedad que las computadoras ya puedan almacenar grandes cantidades de datos (se estima que todos los datos almacenados hasta la fecha superan los ZettaByte, o 1021 bytes) incluso estos datos están indexados en un database de varios tipos, disponibles y recuperables con lenguajes potentes como SQL.

Además, el cerebro humano tiene una memoria que no estable como aquella del silicio, pero en esta “brecha” reside el potecial de procesar datos como intuitivamente sabemos, asi poder vencer la maldición de la llamada dimensionalidad.

zattabite

Ninguna investigación ha revelado completamente los secretos del cerebro humano, sin embargo no comprendiendo completamente el funcionamiento de nuestra inteligencia, el desarrollo de estos últimos años  a sido gracias al  Deep Learning (que tiene sus orígenes enraizados en la biología de las redes neuronales) nos permite acercarnos a este modelo de inteligencia, que aprende a reconocer señales codificadas en imágenes y sonidos, clasificarlas, construir representaciones internas para organizar estos pilares de datos, recuperar rápidamente la información que se almacena de forma distribuida en todos los nodos de la red (por lo tanto, en cada neurona, y no en direcciones de memoria precisas), todo en modo automático, sin instrucciones algorítmicas secuenciales.

foto 2

 

En los años previos al advenimiento del Deep Learning la velocidad del cálculo era muy limitada, y no hace falta decir que, si los procesos son lentos, lleva mucho tiempo procesarlos y memorizarlos. Es obvio pero no trivial, porque nadie había intentado experimentar con un modelo de red la cual habría requerido años para ser utilizada, pero la clave para descubrir este mundo ya existía. Dado que el modelo de aprendizaje que todavía se utiliza en la actualidad es Backpropagation, junto con Gradient Descent para lograr que no haya ningún error, se requirió muchos pasos de actualización de los pesos de la red, y muchos datos como ejemplos para el cual poder aprender. Todo esto hace que el proceso de aprendizaje sea muy difícil con los cálculos.

foto 3

Como resultado, los viejos modelos tenían que ser livianos, y no explotaban la enorme cantidad de datos necesarios, se limitaban a arquitecturas “shallow” es decir, no profundas o con menos parámetros de entrenamiento, uno o dos niveles de neuronas feed-forward. Pero para abstraer una representación válida de la realidad observada, es decir, memorizar datos en estructuras complejas capaces de preservar el mayor número de características observadas, y al mismo tiempo generalizar, es decir, reconocer esas características incluso en objetos nuevos nunca antes observados, se necesita un modelo más complejo.

Necesitas memorizar más datos, memorizar pero no “como máquina”, (dicen todos aquellos nacidos antes del advenimiento de la singularidad, (si alguna vez pasara … ¡cuando la realidad supera  toda ciencia ficción!), Eso no es como cuando aprendemos un poema de memoria, pero al contrario, es como cuando enciendes una lámpara y entiendes una estructura de cosas que unifica varias facetas de una sola entidad que anteriormente parecía no estar relacionada con ningún enlace.

foto 4

Cuando un modelo de aprendizaje profundo nos sorprende con su capacidad para reconocer objetos en imágenes, o para comprender las palabras que estamos pronunciando, o para responder de manera sensata a una pregunta escrita, significa que el modelo ha capturado la información necesaria para resolver ese problema en particular, a partir de los datos a los que se han enviado. No memorizó todos los datos en una base de datos clásica, pero los filtró, resumiendo un “concepto”, de una manera que se acerca a la manera en que pensamos nosotros los conceptos.

Esto es posible gracias a la estructura “deep” de los modelos actuales, que permite, de una manera que todavía no se entiende del todo, almacenar más información y conceptos en la red, en comparación con los modelos anteriores.

En cuanto a los modelos lingüísticos para las traducciones, la conversación y todas las aplicaciones NLP y NLU, ha habido un marcado aumento en el rendimiento gracias a Deep Learning.

foto 5

Estas actuaciones se pueden medir estadísticamente, pero también es intuitivo comprender cómo un cierto modelo puede realizar un chatbot decente o una buena traducción. Si lo hace, significa que la red neuronal tiene una memoria capaz de hacer que las conexiones semánticas sean más complejas que una simple tabla de referencia. Esto requiere una memoria a largo plazo, que pueda vincular palabras o frases o referencias semánticas que tengan sentido, y así generar una representación interna de un contexto, en lugar de crear estadísticas simples de palabras en n-gramas tales como sucedia años atras.

foto 6

En el siguiente análisis veremos un modelo muy interesante, las redes (DMN) Dynamic Memory Network, que están formadas en elementos compuestos de frases de entrada, preguntas y respuestas, cuyo potencial radica en la llamada memoria Episodica, capaz de realizar un procesamiento de múltiples pasos de las frases de entrada, a partir de las cuales elabora un contexto e intenta extraer la información solicitada.

 

Bibliografía

https://blogs.cisco.com/gov/internet-traffic-continues-to-explode-no-end-in-sight

https://thoughtsahead.com/2017/01/27/machine-learning-series-introduction-to-machine-learning-linear-regression-and-gradient-descent/

https://www.quora.com/What-is-the-difference-between-deep-and-shallow-neural-networks

https://research.googleblog.com/2017/05/using-machine-learning-to-explore.html

https://yerevann.github.io/2016/02/05/implementing-dynamic-memory-networks/