Universidad
Veracruzana
Facultad de Ingeniería Electrónica y
Comunicaciones.
Docente:
Dr. Luis Javier .
Experiencia Educativa:
Procesamiento Analógico de Señales.
Tema:
Examen Extraordinario de la EE de PAS.
Alumno:
Luz Alicia Lara Sobrevilla.
1
Índice
1.- Introducción........................................................................................................................3
1.1.- ¿Qué es el Deep Learning?..........................................................................................4
1.2.- Antecedentes...................................................................................................................4
1.3.- ¿Por qué es importante el Deep Learning?.............................................................6
1.4.- ¿Cómo funciona el Deep Learning?..........................................................................7
1.5.- ¿Cuál es la diferencia entre Machine Learning y Deep Learning?...........9
2.- Estado del arte.................................................................................................................11
2.1.- Aprendizaje Máquina...........................................................................12
2.1.- Tipos de aprendizaje máquina.............................................................13
2.1.1.- Aprendizaje supervisado...................................................................14
2.1.2.- Aprendizaje no supervisado..............................................................15
2.1.3.- Aprendizaje Profundo.......................................................................16
3.- Redes Neuronales Biológicas..................................................................18
4.- Redes Neuronales Artificiales..................................................................19
4.1.- Arquitectura de Redes Neuronales......................................................21
4.2.- Estructura de un ANS.........................................................................22
5.1.- Red Neuronal Monocapa......................................................................25
5.2.- Red Neuronal Multicapa......................................................................25
5.3.- Red Neuronal Recurrente....................................................................26
6.- Visión por computador...........................................................................27
7.- Redes Neuronales Convolucionales.........................................................31
7.1.- Capa Convolucional.............................................................................33
2
1.- Introducción.
Las recientes técnicas de aprendizaje de modelos basadas en aprendizaje
profundo (Deep Learning), en visión por computador, prometen altas tasas
de reconocimiento. Pero el proceso de elaboración de los conjuntos de
imágenes de entrenamiento y test, el número y complejidad de redes que
los implementan y el número de parámetros a evaluar hace difícil su
utilización de manera contrastada.
En la visión por computador se iniciaron las primeras investigaciones
alrededor de los años 50. Desde esa época se trabaja en modelos
matemáticos asociados a estas tecnologías, pero es ahora, gracias al Big
Data, la digitalización, el abaratamiento de los dispositivos de
almacenamiento, las mejoras de hardware que permiten procesos en
paralelo a mucha velocidad y a modelos matemáticos en redes neuronales
profundas que se ha conseguido llevar este campo a un nivel superior.
La irrupción de las redes neuronales profundas, más específicamente las
redes neuronales convolucionales, está permitiendo el desarrollo de
aplicaciones de visión por computador como por ejemplo el desarrollo de
coches autónomos.
Esto puede dar a entender que las nuevas técnicas de Deep Learning
actúan por arte de magia resolviendo problemas impensables años atrás.
Pero nada más lejos de la realidad, para conseguir estos resultados se han
de tener conjuntos de datos extensos con los que entrenar a los
clasificadores.
Si es cierto que en la actualidad existen más facilidades para conseguir
estos conjuntos de datos o reutilizar conjuntos de datos ya creados. Para
el pro- cesamiento de estos grandes conjuntos de datos también ha sido
relevante el avance de las unidades de procesamiento gráfico (GPU),
gracias a ellas se han podido reducir considerablemente los tiempos de
procesamiento de los modelos de red.
3
1.1.- ¿Qué es el Deep Learning?
El Deep Learning es una técnica de aprendizaje automático que enseña a
los ordenadores a hacer lo que resulta natural para las personas: aprender
mediante ejemplos. El Deep Learning es una tecnología clave presente en
los vehículos sin conductor que les permite reconocer una señal de stop o
distinguir entre un peatón y una farola.
Resulta fundamental para el control mediante voz en dispositivos tales
como teléfonos, tabletas, televisores y altavoces manos libres. El
aprendizaje profundo atrae mucha atención últimamente, y hay razones de
peso para ello. Está consiguiendo resultados que antes no eran posibles.
Con el Deep Learning, un modelo informático aprende a realizar tareas de
clasificación directamente a partir de imágenes, texto o sonido. Los
modelos de Deep Learning pueden obtener una precisión de vanguardia
que, en ocasiones, supera el rendimiento humano. Los modelos se
entrenan mediante un amplio conjunto de datos etiquetados y
arquitecturas de redes neuronales que contienen muchas capas.
El deep learning forma parte del machine learning, es decir, que el
aprendizaje profundo es una rama concreta que se engloba dentro del
aprendizaje automático.
1.2.- Antecedentes.
No nos equivocamos al pensar que el futuro próximo depende en gran
medida de conceptos como el aprendizaje automático (machine learning) o
el aprendizaje profundo (deep learning), y es que todo apunta a que esa es
la línea de evolución que va a seguirse durante los próximos años en
nuestra sociedad: vehículos autónomos, asistentes personales,
encriptación biométrica, máquinas que desempeñan trabajos tediosos, etc.
4
El machine learning es una rama de la IA que se encarga del estudio,
investigación y desarrollo de máquinas que aprendan por sí solas y que
sean capaces de auto programarse, aprendiendo de su propia experiencia
combinando datos de entradas y situaciones del mundo real.
A su vez, dentro de la rama del machine learning que se engloba dentro del
campo de la inteligencia artificial, nos encontramos con el denominado
deep learning, que hace referencia a un subconjunto que desarrolla la idea
del aprendizaje automático a través de modelos informáticos que
funcionan de forma similar al cerebro humano, un sistema de redes
artificiales de neuronas que analizan los datos.
Como decimos, el campo de la ciencia sobre el que se asientan ambos
conceptos es el de la inteligencia artificial (artificial intelligence), también
conocida como inteligencia computacional, donde se combina el área de la
informática con otras como la lógica y las ciencias cognitivas, procurando
tener como resultado el diseño de máquinas inteligentes.
El reconocimiento visual artificial es una tarea que ha venido
convirtiéndose en crucial en las últimas décadas en ciertos campos de la
ingeniería, principalmente la robótica. Con ello se pretende dar a los
sistemas robóticos una aproximación a la capacidad del sentido de la vista
humana, de manera que sean capaces de conocer por sí solos su entorno e
interactuar con él según la información recogida, tal y como lo hace el
cerebro humano.
El Deep Learning o Aprendizaje Profundo supone una nueva área dentro
del Machine Learning, que se introduce con el objetivo de moverla hacia su
meta principal, que es la Inteligencia Artificial.
En concreto la detección de objeto tiene ya aplicaciones tecnológicas y de
otros tipos que suponen un gran avance hacia la inteligencia artificial.
Entre dichas aplicaciones se encuentra el reconocimiento facial,
reconocimiento de tráfico en automóviles auto pilotados, o ingeniería
biomédica entre muchos otros.
Es por ello que las técnicas se están perfeccionando cada vez más, y en
este momento se ha conseguido tener unos datos muy positivos de errores
cometidos en la detección de objetos en imágenes y videos.
En el contenido tratado en asignaturas de sistemas de percepción se han
visto clasificadores de objetos mediante algunos métodos sencillos para el
5
reconocimiento de patrones de distinto tipo. En ellos se utilízala estructura
de clasificación siguiente:
Lectura de la imagen.
Separación de regiones.
Extracción de características.
Aplicación de clasificador.
Obtención de la clase.
Para ello hace falta tomar algunas decisiones, como qué características se
van a usar para diferenciar las clases y qué discriminantes.
Un ejemplo del mismo es el clasificador por distancia. Su funcionamiento
se basa en que, cada clase se agrupa en torno a un elemento modelo o
prototipo. Así, cuando se tiene un objeto a clasificar, se calcula la
distancia que tiene hasta esos elementos canon de cada clase, y se le
asigna la clase del prototipo que se encuentra más cerca. De esta manera,
no se necesita ninguna fase de aprendizaje, sin embargo, los errores en las
predicciones pueden ser erróneas.
El concepto machine learning (ML) hace referencia al aprendizaje
automático o aprendizaje de máquinas y, como tal, se engloba dentro del
campo de la inteligencia artificial. La teoría del funcionamiento del ML es
simple, las máquinas toman datos y aprenden por ellos mismos.
Los sistemas de aprendizaje automático permiten que un sistema aprenda
a reconocer patrones por sí mismos y a hacer predicciones, a diferencia de
otras técnicas más antiguas donde se requiere la codificación manual de
un programa de software con instrucciones específicas para completar una
tarea.
Mediante esta técnica, un sistema tiene la capacidad de aplicar
rápidamente el conocimiento obtenido de grandes conjuntos de datos para
conseguir distintos objetivos en poco tiempo como pueden ser, por
ejemplo, un reconocimiento facial o de voz.
6
1.3.- ¿Por qué es importante el Deep Learning?
En una palabra: precisión. El aprendizaje profundo alcanza unos niveles
de precisión de reconocimiento nunca vistos. Esto contribuye a que la
electrónica de consumo satisfaga las expectativas de los usuarios, y
resulta crucial en aplicaciones críticas para la seguridad, tales como los
vehículos sin conductor. Los últimos avances en el ámbito del aprendizaje
profundo han llegado a un punto en el que este supera a las personas en
algunas tareas; por ejemplo, en la clasificación de objetos presentes en
imágenes.
Aunque las primeras teorías sobre el aprendizaje profundo se
desarrollaron en la década de los ochenta, existen dos razones principales
por las que solo ha empezado a resultar útil recientemente:
1. El Deep Learning requiere grandes cantidades de datos etiquetados. Por
ejemplo, para el desarrollo de un vehículo sin conductor se necesitan
millones de imágenes y miles de horas de vídeo.
2. El Deep Learning requiere una potencia de cálculo significativa. Las
GPU de alto rendimiento tienen una arquitectura paralela que resulta
eficiente para el aprendizaje profundo. En combinación con clusters o
con el cálculo en la nube, esto permite a los equipos de desarrollo
reducir el tiempo necesario para el entrenamiento de una red de
aprendizaje profundo de semanas a horas o incluso menos.
1.4.- ¿Cómo funciona el Deep Learning?
La mayor parte de los métodos de aprendizaje emplean arquitecturas de
redes neuronales, por lo que, a menudo, los modelos de aprendizaje
profundo se denominan redes neuronales profundas.
El término “profundo” suele hacer referencia al número de capas ocultas
en la red neuronal. Las redes neuronales tradicionales solo contienen dos
o tres capas ocultas, mientras que las redes profundas pueden tener hasta
7
150. Los modelos de Deep Learning se entrenan mediante el uso de
extensos conjuntos de datos etiquetados y arquitecturas de redes
neuronales que aprenden directamente a partir de los datos, sin necesidad
de una extracción manual de características.
Figura 1: Redes neuronales organizadas en capas que constan de una serie de
nodos interconectados. Las redes pueden tener decenas o cientos de capas
ocultas.
Uno de los tipos más populares de redes neuronales profundas son las
conocidas como redes neuronales convolucionales (CNN o ConvNet).
Una CNN convoluciona las características aprendidas con los datos de
entrada y emplea capas convolucionales 2D, lo cual hace que esta
arquitectura resulte adecuada para procesar datos 2D, tales como
imágenes.
Las CNN eliminan la necesidad de una extracción de
características manual, por lo que no es necesario identificar las
características utilizadas para clasificar las imágenes. La CNN funciona
mediante la extracción de características directamente de las
imágenes. Las características relevantes no se entrenan previamente;
se aprenden mientras la red se entrena con una colección de imágenes.
Esta extracción de características automatizada hace que los modelos
de Deep Learning sean muy precisos para tareas de visión artificial,
tales como la clasificación de objetos.
Las CNN aprenden a detectar diferentes características de una imagen
mediante decenas o cientos de capas ocultas. Cada capa oculta aumenta
la complejidad de las características de la imagen aprendidas. Por ejemplo,
la primera capa oculta podría aprender cómo detectar bordes, mientras la
segunda aprende cómo detectar formas más complejas propias de la forma
del objeto que se intenta reconocer.
8
Figura 2: Ejemplo de una red con muchas capas convolucionales. Se aplican filtros a
cada imagen de entrenamiento con distintas resoluciones, y la salida de cada
imagen convolucionada se emplea como entrada para la siguiente capa.
1.5.- ¿Cuál es la diferencia entre Machine Learning
y Deep Learning?
El Deep Learning es una forma especializada de aprendizaje automático.
Un flujo de trabajo de Machine Learning empieza con la extracción manual
de las características relevantes de las imágenes. Estas características se
utilizan entonces para crear un modelo que categoriza los objetos de la
imagen. Con un flujo de trabajo de Deep Learning, las características
relevantes se extraen directamente de las imágenes. Además, el
aprendizaje profundo realiza un “aprendizaje completo”, es decir, se
9
proporcionan datos sin procesar y una tarea que realizar, como puede ser
una clasificación, a una red, la cual aprende cómo hacerlo
automáticamente.
Otra diferencia clave es que con los algoritmos de Deep Learning la escala
aumenta con los datos, mientras que, en el caso del aprendizaje
superficial, existe convergencia. El aprendizaje superficial hace referencia
a los métodos de aprendizaje automático que llegan a un punto muerto en
cierto nivel de rendimiento cuando se agregan más ejemplos y datos de
entrenamiento a la red.
Una ventaja fundamental de las redes de aprendizaje profundo es que
suelen seguir mejorando a medida que aumenta el tamaño de los datos.
Figuras 3 y 4. Comparación de un enfoque de aprendizaje automático para la
categorización de vehículos (arriba) con el aprendizaje profundo (abajo).
10
2.- Estado del arte.
Hasta el año 2010 las redes neuronales habían visto reducir su uso por la
comunidad científica. Pocas investigadores seguían trabajando en redes
neuronales entre ellos: los grupos de Geoffrey Hinton en la Universidad de
Toronto, Yoshua Bengio en la Uni- versidad de Montreal, Yann LeCun en
la Universidad de Nueva York y IDSIA en Suiza.
En 2011 Dan Ciresan ganó una competición de clasificación de imágenes
con algorit- mos de redes neuronales profundas. Pero el momento clave
llegaría un año después en 2012, con la aparición del grupo de Geoffrey
Hinton en la competición ImageNet.
ImagNet fue una competición que consistía en resolver un problema de
clasificación de imágenes en 1000 categorías después de haber realizado
un entrenamiento sobre 1’4 millones de imágenes. Se consiguió una tasa
de acierto del 83.6 %. Años más tarde en el 2015 se consiguió un acierto
de 96.4 % considerando así que el problema estaba resuelto.
Especificando, las redes neuronales utilizadas para estas competiciones
son llamadas redes neuronales convolucionales. Este tipo de redes son
11
mayormente utilizadas para la visión por computador aunque también son
empleadas para otros campos.
Gracias a los avances tecnológicos y tener una capacidad de cálculo mayor
a la de hace escasos años, las redes neuronales son ahora un tema de
actualidad donde la comunidad científica ha vuelto con fuerza para seguir
mejorando este campo cada día.
2.1.- Aprendizaje Máquina.
Los algoritmos de aprendizaje automático permiten a los ordenadores
hacer aquello que humanos y animales realizan de forma natural:
aprender de la experiencia. Dichos algoritmos giran en torno al uso de
métodos computacionales que permiten “aprender” información a partir de
los datos sin depender de una ecuación que defina en su totalidad al
modelo. Así pues, emplean métodos adaptativos que mejoran su
rendimiento a medida que aumenta el número de muestras disponibles
para su entrenamiento.
El desempeño de los diferentes métodos de aprendizaje máquina se basa
en encontrar patrones naturales en los datos proporcionados que permiten
generar una base de conocimiento. Más tarde, con ella será posible llevar a
cabo predicciones y tomar mejores decisiones.
El uso de estas técnicas debe ser considerado cuando se desee afrontar un
problema complejo que implique gestionar una gran cantidad de datos y
muchas variables, pero no se disponga de ninguna ecuación que las
relacione. Con ello, su empleo está extendido tanto en actividades diarias
12
en las que es necesario tomar decisiones críticas como en otras menos
comunes que están viéndose potenciadas gracias al reciente crecimiento
del Big Data. Entre todas ellas, se pueden destacar las siguientes:
El diagnóstico médico: detección de tumores, secuenciación del
ADN, descubrimiento de fármacos.
Predicciones financieras: compra-venta de acciones, calificación del
crédito (como medida de riesgo), detección de fraudes.
Procesamiento de imágenes y visión artificial: detección de
movimiento, detección de objetos, reconocimiento facial.
Control de la producción de energía: previsiones de carga o tasación
de su precio.
Predicciones útiles para el mantenimiento de las industrias
aeroespacial, automovilística o de producción masiva.
Procesamiento de lenguaje natural.
Previsión de las tendencias de compras de los clientes en base a
patrones de su comportamiento.
Recomendacionesal consumidor de páginas web de
contenido audiovisual.
Figura 5. Aplicaciones reales del aprendizaje máquina.
13
2.2.- Tipos de aprendizaje máquina.
A continuación, se van a presentar los diferentes tipos de aprendizaje
automático existentes en función del mecanismo utilizado para aprender.
Aprendizaje supervisado: entrena un modelo con datos de
entrada y salida conocidos para que se puedan predecir salidas
futuras. Se suele utilizar si se necesita llevar a cabo una
predicción o una clasificación.
Aprendizaje no supervisado: encuentra patrones ocultos o
estructuras intrínsecas entre los datos de entrada. Se emplea en
los casos en los que se necesita explorar los datos para localizar
una buena representación interna, como la división de datos en
clusters.
14
Figura 6. Tipos de aprendizaje máquina
2.2.1.- Aprendizaje supervisado.
El aprendizaje automático supervisado produce una función que establece
una correspondencia entre las entradas y salidas deseadas del sistema.
Los algoritmos de este tipo de aprendizaje tienen como objetivo la
predicción, con lo que toman un conjunto conocido de datos de entrada y
respuesta conocidas para esos datos y entrenan un modelo con objeto de
generar pronósticos razonables como respuesta a datos nuevos.
Para desarrollar dichos modelos predictivos el aprendizaje supervisado
emplea técnicas de clasificación y regresión.
15
Técnicas de clasificación: predicen respuestas discretas. Los
modelos de clasificación organizan los datos de entrada en
categorías, por lo que se recomienda el uso de estos métodos si
los datos disponibles se pueden etiquetar, categorizar o dividir en
grupos concretos. Sus aplicaciones más habituales son las
imágenes médicas, el reconocimiento de voz y la calificación
crediticia. Algunos algoritmos habituales para realizar la
clasificación son: SVM, árboles de decisión, k-vecino más
cercano, clasificadores bayesianos, análisis discriminantes,
regresión logística y redes neuronales.
Técnicas de regresión: predicen respuestas continuas. Ese tipo de
modelos se basan en la evaluación de una o más variables para
predecir su comportamiento, por lo que se recomienda su uso si
se trabaja con variables reales, como la temperatura o el tiempo
que tarda una pieza de equipamiento en fallar. Sus aplicaciones
más habituales son la predicción de cargas o el trading
algorítmico. Algunos algoritmos habituales de regresión son:
modelos lineales, regresión por pasos, redes neuronales o
aprendizaje neuro difuso adaptativo.
2.2.2.- Aprendizaje no supervisado.
El aprendizaje automático no supervisado tiene como objetivo encontrar
estructuras intrínsecas en los datos. Se emplea para inferir información a
partir de conjuntos de datos de entrada sin respuestas etiquetadas.
El clustering (agrupación) es la técnica más común. Se basa en la
exploración de datos con objeto de encontrar patrones ocultos en los
mismos. Sus aplicaciones más comunes son el análisis de secuencias
genéticas, la investigación de mercados o el reconocimiento de objetos.
16
Figura 7. Clustering
Algunos algoritmos habituales para realizar clustering son: clustering
jerárquico, modelos de mezclas gaussianas, modelos de Markov ocultos,
mapas auto organizados o clustering sustractivo.
2.2.3.- Aprendizaje Profundo.
El aprendizaje profundo o Deep Learning es un sub-campo del aprendizaje
automático o Machine Learning, que a su vez, es un sub-campo de la
inteligencia artificial.
El principal objetivo de la IA es ofrecer algoritmos y técnicas para resolver
problemas que las personas pueden resolver de forma intuitiva o
automatizada. Un ejemplo es como la IA puede interpretar el contenido de
una imagen y extraer conclusiones sobre esta.
El aprendizaje profundo se divide en diferentes ramas como redes
neuronales, redes neuronales convolucionales o redes neuronales
recurrentes. Estas arquitecturas son utilizadas en campos como la visión
por computador, reconocimiento del habla o reconocimiento de dígitos
manuscritos entre otros.
A pesar de que el Deep Learning parece una técnica nueva e innovadora,
las investigaciones al respecto surgen hace más de 30 años cuando el
17
japonés Kunihiko Fukushima propone un modelo neuronal de entre cinco
y seis capas. Sin embargo, la complejidad de su desarrollo y el coste
elevado de su investigación provoca que se posponga y se retome con
fuerza hace menos de 10 años. Los motivos principales por los que solo ha
empezado a resultar útil recientemente son:
Requiere de grandes cantidades de datos etiquetados.
Requiere de una potencia de cálculo significativa. Las GPU (Graphics
Processing Unit) de alto rendimiento que tienen arquitectura
paralela resultan eficientes para la aplicación de técnicas de
aprendizaje profundo.
El boom de esta técnica se produce cuando en 2012 un grupo de
investigación de la Universidad de Toronto obtiene resultados
sorprendentes en una de las principales competiciones de reconocimiento
de imágenes: ILSVRC, ImageNet Large Scale Visual Recognition Challenge.
Desde entonces, su papel en muchas áreas de inteligencia artificial ha
aumentado y sus resultados mejoran a técnicas tradicionales en todo
aquello que tiene que ver con reconocimiento de patrones, imágenes, voz,
etc. El salto de calidad que aporta el Deep Learning a estas tareas viene
determinado porque supera con éxito el desafío de la variabilidad intra-
clase. Ésta consiste en las diferencias notables que existen entre imágenes
que pertenecen a la misma clase. Con diferentes técnicas aplicadas en
Deep Learning se consigue minimizarla.
El aprendizaje profundo se basa en el aprendizaje máquina y no es más
que una familia de algoritmos cuyo propósito es simular el
comportamiento que lleva a cabo nuestro cerebro para reconocer
imágenes, palabras o sonidos. En el cerebro humano, ante un estímulo,
ciertas neuronas se activan, evalúan la información que han recibido,
reaccionan y se comunican con otras neuronas. En posteriores estímulos
añaden nuevos datos a los que ya conocen, evalúan el resultado de las
acciones anteriores y corrigen su funcionamiento para tener la mejor
reacción posible.
Los algoritmos citados son empleados por las redes neuronales artificiales
para actuar de forma similar al cerebro, pero simplificando el conjunto de
18
neuronas empleado en distintas capas. Así, cada grupo de neuronas
analiza los datos de entrada, los procesa y los entrega a otro grupo de
neuronas en forma de datos. Los buenos resultados de este método son
posibles por la cantidad de conexiones existentes entre las diferentes
capas.
3.- Redes Neuronales Biológicas.
Se estima que el sistema nervioso contiene alrededor de cien mil millones
de neuronas, organizadas mediante una red compleja en la que las
neuronas individuales pueden estar conectadas a varios miles de neuronas
distintas. Se calcula que una neurona del córtex cerebral recibe
información, por término medio, de unas 10.000 neuronas, y envía
impulsos a varios cientos de ellas.
Figura 8. : Neurona humana.
Desde un punto de vista funcional, las neuronas constituyen procesadores
de información sencillos. Como todo sistema de este tipo, posee un canal
de entrada de información, las dendritas; un órgano de cómputo, el soma,
y un canal de salida.
La mayor parte de las neuronas poseen una estructura de árbol llamada
desdirías de tal forma que las neuronas se unen a través de uniones
denominadas sinapsis. En el tipo de sinapsis más común no existe un
contacto físico entre las neuronas, sino que éstas permanecen separadas
19
por un pequeño vacío de unas 0.2 micras. Con relación a la sinapsis, se
habla de neuronas presinápticas (las que envían las señales) y neuronas
postsinápticas (las que las reciben).
Las sinapsis son dirigidas, es decir, la información fluye siempre en un
único sentido.
4.- Redes Neuronales Artificiales.
Una red de neuronas, llamada comúnmente red neuronal artificial, es un
modelo matemático formado por una serie de operaciones que, para un
vector de entrada x, ofrece un vector de salida distinto f(x). Otra forma de
verlas, como ya se ha indicado en el apartado anterior, es como un
procesador que recibe información entrante codificada como números,
hace una serie de operaciones y produce como resultado información
saliente igualmente codificada como números.
Las neuronas se organizan en capas, donde cada una se conecta con todas
las de la capa siguiente. En esta arquitectura, cada conexión tiene
asociado un peso, por lo que la principal operación que se realiza es una
multiplicación entre el valor de la neurona y el de su conexión saliente. De
esta manera, las neuronas de las capas siguientes reciben los resultados
anteriores sumados en uno y aplican funciones no lineales para producir
un nuevo resultado y formando así las redes neuronales, las cuales
producirán una salida a partir de un conjunto de datos de entrada a la
misma. En este punto, según la red neuronal utilizada, las funciones
serán de uno u otro tipo. La más común es la función sigmoide.
20
Figura 7. Función sigmoide
Existen tres tipos de capas en las que se agrupan las neuronas:
Capas de entrada: Neuronas que introducen los valores de entrada
en la red, por lo que dispondrá de tantas neuronas como datos de
entrada. En estas neuronas no se produce procesamiento.
Capas ocultas: Cálculos intermedios de la red. Cada neurona oculta
contiene un peso y un parámetro que son los elementos que
transformarán los datos de entrada. El número de capas ocultas es
variable.
Capas de salida: Neuronas cuyos valores corresponden a los valores
de salida de la red neuronal. En esta capa cada neurona también
tendrá asociado pesos y parámetros.
En la arquitectura descrita, el proceso de aprendizaje de una red neuronal
consiste en, basándose en una serie de ejemplos en los que se conoce el
valor de salida para la entrada correspondiente, ser capaz de inducir la
relación entre entradas y salidas para datos desconocidos. Este proceso se
denomina entrenamiento de la red y puede ser visto como el proceso de
21
ajuste de los parámetros de la red. Partiendo de un conjunto de pesos
aleatorios, el proceso de aprendizaje busca adaptar el valor de los mismos
que permitan a la red conseguir el comportamiento deseado. El proceso de
aprendizaje es un proceso iterativo en el cual se refina la solución hasta
alcanzar un nivel de operación satisfactorio.
De hecho, la mayoría de los métodos de entrenamiento utilizados en redes
neuronales consisten en definir una función de error que mida el
rendimiento de la red en función de los pesos.
A partir de ella, el objetivo es encontrar un conjunto de pesos que la
minimicen o maximicen, determinando con ellos el punto óptimo de la red
neuronal.
Figura 8. Modelo genérico de una neurona artificial.
Para describir la estructura de la neurona es necesario mencionar las
dendritas, que son la vía de entrada de las señales a la misma, y que
posteriormente se combinarán en el cuerpo de la neurona. Por otro lado, el
axón es la vía de salida de la señal que la neurona ha generado.
4.1.- Arquitectura de Redes Neuronales.
22
Se denomina arquitectura a la topología o estructura en la que las
distintas neuronas constituyentes de la red neuronal se asocian. En un
ANS, los nodos se conectan por medio de sinapsis; esta estructura de
conexiones sinápticas determina el comportamiento de la red. Las
conexiones sinápticas son direccionales, es decir, la información sólo
puede fluir en un sentido (desde la neurona presináptica a la neurona
postsináptica).
En general, las neuronas se suelen agrupar en unidades estructurales
denominadas capas. Dentro de una capa las neuronas pueden agruparse
formando grupos neuronales. Dentro de una misma capa o agrupación, las
neuronas suelen ser del mismo tipo. El conjunto de una o más capas
constituye una red neurona.
Podemos distinguir tres tipos de capas:
Capa de entrada: compuesta por neuronas que reciben datos o
señales procedentes del entorno.
Capa de salida: aquella cuyas neuronas proporcionan la respuesta
de la red neuronal.
Capa oculta: aquella que no tiene una conexión directa con el
entorno.
23
4.2.- Estructura de un ANS.
Los tres conceptos a emular de los sistemas nerviosos son: paralelismo de
cálculo, memoria distribuida, y adaptabilidad al entorno.
El procesamiento paralelo resulta esencial en este tipo de tareas para
poder realizar gran cantidad de cálculo en un intervalo de tiempo lo más
reducido posible.
Otro concepto importante que aparece en el cerebro es el de memoria
distribuida. Mientras que en un computador la información ocupa
posiciones de memoria bien definidas, en los sistemas neuronales se
encuentra distribuida por las sinapsis de la red, de modo que si una
sinapsis resulta dañada, no perdemos más que una parte muy pequeña de
la información.
El último concepto fundamental es el de adaptabilidad. Los ANS se
adaptan fácilmente al entorno modificando sus sinapsis, y aprenden de la
experiencia, pudiendo generalizar conceptos a partir de casos particulares.
A partir de las tres propiedades anteriores concluimos que en la
realización de un sistema neuronal artificial puede establecerse una
estructura jerárquica similar. El elemento esencial de partida será la
24
neurona artificial, que se organizará en capas; varias capas constituirán
una red neuronal, y por último, una red neuronal (o conjunto de ellas),
junto con las interfaces de entrada y salida, más los módulos
convencionales adicionales necesarios, constituirán el sistema global de
proceso.
Figura 7. Estructura jerárquica de un sistema basado en ANS.
4.3.- Modelo estándar de neurona artificial.
Considerando que la regla de propagación es la suma ponderada y que la
función de salida es la identidad, la neurona estándar consiste en:
Un conjunto de entradas .
Unos pesos sinápticos asociados a las entradas.
Una regla de propagación . La más común suele ser
.
Una función de activación que representa
simultáneamente la salida de la neurona y su estado de activación.
25
Todos estos elementos quedan recogidos en la siguiente ilustración que
pone de manifiesto el modelo considerado.
Figura 7. Modelo de neurona estándar.
5.- Tipos de Redes Neuronales.
5.1.- Red Neuronal Monocapa.
Se corresponde con la red neuronal más sencilla ya que se tiene una capa
de neuronas que proyectan las entradas a una capa de neuronas de salida
donde se realizan los diferentes cálculos.
26
Figura 7. Red Neuronal Monocapa.
5.2.- Red Neuronal Multicapa.
Es una generalización de la anterior, existiendo un conjunto de capas
intermedias entre la capa de entrada y la de salida (capas ocultas). Este
tipo de red puede estar total o parcialmente conectada
27
Red Neuronal Multicapa.
5.3.- Red Neuronal Recurrente.
Este tipo de red se diferencia de las anteriores en la existencia de lazos de
realimentación en la red. Estos lazos pueden ser entre neuronas de
diferentes capas, neuronas de la misma capa o, entre una misma neurona.
Esta estructura la hace especialmente adecuada para estudiar la dinámica
de los sistemas no lineales.
Red Neuronal Recurrente.
6.- Visión por computador
Como su nombre indica, el principal objetivo de la visión por computador
es intentar imitar la funcionalidad del sistema de visión. Acciones como
diferenciar un coche o diferenciar objetos visibles en un fondo son
acciones que las personas realizan a diario. Esto es una tarea compleja la
28
cual lleva años de investigación para que un ordenador sea capaz de
detectarlo con una precisión razonable.
La visión por computador está obteniendo unos avances importantes en
los últimos años. La puesta en escena de la redes neuronales profundas y
más concretamente de las redes neuronales convolucionales han dado
paso a este salto de nivel. El reconocimiento facial, de señales de tráfico o
los coches autónomos son algunos de los ejemplos de las aplicaciones que
se están consiguiendo.
Sin embargo, antes de llegar a este punto hay un largo recorrido que es
importante mencionar para ver la evolución que ha sufrido la visión por
computador. En el año 2001 apareció el algoritmo Viola-Jones capaz de
detectar rostros de forma eficiente [5]. El algo- ritmo detecta rostros en
tiempo real a partir de una cámara web, en aquel momento fue
considerada una de las mejores aportaciones al mundo de la visión por
computador. Pocos años después, en 2005, apareció Histogram of oriented
gradients (HOG)[7]. Este nuevo método superó a los algoritmos existentes
para la detección de personas [8].
Para la clasificación de imágenes se hace uso de los métodos de extracción
de características mencionados y posteriormente de un algoritmo de
clasificación para las características extraídas. No obstante, antes de
aplicar estos pasos se realiza un pre-proceso a la imagen para normalizar
los efectos de contraste y brillo y la eliminación de ruido.
En los dos siguientes sub-apartados se repasan algunas de las principales
técnicas que se han estado utilizando para la extracción de características
y la clasificación de estas.
Figura 7. Pasos de un clasificador de imagen.
29
6.1.- Extracción de características.
Una imagen de entrada contiene una gran cantidad de características. Sin
embargo una gran multitud de estas pueden ser irrelevantes y negativas
para el paso de la clasi- ficación. Por ello, el primer paso a realizar es la
simplificación de la imagen, extrayendo de estas la información importante
y eliminando aquella que no proporciona informa- ción para la
clasificación. A este proceso se le llama extracción de características. Los
siguientes métodos son algunos de los que se utilizaban o utilizan para
realizar este pro- ceso.
6.2.- Filtros en cascada.
Paul Viola y Michael Jones propusieron un método para la detección de
objetos utili- zando clasificadores en cascada basados en características
Haar [5]. Partiendo de un gran conjunto de imágenes positivas y negativas,
se aplican los denominados filtros de Haar. Cada una de las ventanas se
aplica en la imagen extrayendo una única característica, cuyo valor se
obtiene a partir de la diferencia en la suma de los valores de los píxeles
entre zonas en negro y zonas en blanco.
Cuando se extraen todas las características de una imagen muchas de
ellas son irrelevantes. Para eliminar estas se aplica la técnica Adaboost
que consiste en la utilización de clasificadores débiles para alcanzar a
partir de estos un clasificador fuerte. Una de las principales aplicaciones
30
donde se aplica la técnica de filtros en cascada es para la detección de
rostros.
Figura 2.2: Filtros de Haar.
6.3.- LBP (Local Binary Patterns.
LBP es un descriptor de texturas introducidas que calcula una re-
presentación local de la textura que se construye comparando cada píxel
con los píxeles vecinos. Si la intensidad de un píxel vecino es superior al
píxel central, entonces se aplica el valor 0 para el píxel vecino, en caso
contrario será 1.
Figura 2.3: Descriptor LBP que opera en un vecindario de píxeles fijo de 3
x 3.
Cuando se obtiene el resultado en binario, se establece un orden y se
calcula el valor del píxel central. Es importante mantener el orden
establecido para realizar la suma para los siguientes píxeles. Por último se
calcula el histograma de características LBP a partir del cual se pueden
detectar patrones en una textura y a raíz de ello realizar la clasificación de
una imagen con algún algoritmo de clasificación.
31
Figura 2.4: Test binario almacenado en una lista de 8-bits
6.4.- HOG (HISTOGRAM OF Oriented Gradients).
El método HOG fue propuesto en 2005 por Dalal y Triggs y demostró que
el método HOG en combinación con máquinas de vectores soporte podía
utilizarse para entrenar clasificadores altamente precisos. HOG divide una
imagen en ventanas realizando un configuración en rejilla. De cada
ventana se obtiene un histograma donde las entradas son las
orientaciones de los gradientes.
Como otros métodos, HOG es un extractor de características lo que se
podría entender que transforma una imagen a una versión comprimida de
esta. Para diferenciar conjuntos de características hace falta un algoritmo
que sea capaz de separarlos, aquí es donde se emplean las máquinas de
vectores soporte.
6.5.- Clasificadores.
Con los métodos descritos en el apartado anterior, se explica el proceso de
cómo convertir una imagen a un vector de características. Los algoritmos
de aprendizaje automático son los encargados de tomar como entrada este
vector de características y producir como salida una etiqueta de clase.
En la actualidad hay una gran variedad de algoritmos que se pueden
observar y una clasificación de algunos de los algoritmos más utilizados en
el aprendizaje automático.
32
Figura 2.5: Tipos de algoritmos de aprendizaje automático.
33
7.- Redes Neuronales Convolucionales.
Uno de los tipos más populares de redes neuronales profundas son las
conocidas como redes neuronales convolucionales: CNN o ConvNet.
Las capas que utilizan estas redes son 2D, por lo que resulta una
arquitectura adecuada para procesar datos 2D tales como imágenes.
: Esquema estructura de una CNN
En general, una red convolucional no es más que una modificación de una
red neuronal básica donde la principal diferencia radica en que los pesos
son filtros que se convolucionarán directamente con la imagen [16]. La
particularidad de este tipo de redes es que cada neurona de una capa no
recibe conexiones de todas las neuronas de la capa anterior, sino sólo de
algunas. Esto favorece que una neurona se especialice en una región de la
lista de códigos de la capa anterior, reduciendo drásticamente el número
de pesos y de multiplicaciones necesarias.
34
En cuanto a las principales diferencias de las CNN con otros modelos de
redes neuronales tradicionales destacan dos:
• Las CNN disponen de un número de capas elevado, por lo que será
necesario tener en cuenta el papel que va a desempeñar las capacidades
de GPU que tenga el dispositivo a utilizar.
• Las CNN eliminan la necesidad de una extracción de características
manual, por lo que no es necesario identificar previamente las
características a utilizar para clasificar las imágenes. En las CNN las
características relevantes no se entrenan, se aprenden mientras la red se
entrena con una colección de imágenes. Esta extracción de características
automatizada hace que los modelos de aprendizaje profundo sean muy
precisos para la clasificación de objetos.
En la imagen a continuación se muestra la estructura básica de un CNN.
En ella se puede observar cómo las capas de más alto nivel llevan a cabo la
extracción de características mencionada, y las capas más bajas clasifican
y deciden la categoría de la imagen de entrada. En ese primer bloque cada
capa oculta aumenta la complejidad de las características aprendidas. Por
ejemplo, la primera capa podría aprender a detectar bordes, mientras la
segunda aprende cómo detectar formas más complejas propias del objeto
que se pretende reconocer.
Estructura de una CNN
35
A continuación se describirá de forma detallada en qué consisten cada uno
de las capas de filtros que componen la arquitectura general de las redes
neuronales convolucionales:
Capa convolucional.
Pooling.
Capa completamente conectada.
Capa de clasificación.
7.1.- Capa Convolucional
En la capa de convolución de la Red Neuronal, se le aplica a la imagen una
operación de convolución con un filtro determinado. La operación de
convolución, tiene la siguiente expresión matemática:
𝐺(𝑖,𝑗)=ΣΣ𝐹(𝑢,𝑣)·𝐼 (𝑖−𝑢,𝑗−𝑣)𝑘𝑣=−𝑘𝑘𝑢=−𝑘
Donde F es el filtro que:
se aplica , e I será la imagen a la cual s e aplica la operación de
convolución.
En este caso, no se desea aplicar a la imagen un único filtro, sino un
banco de filtros, para conseguir detectores de distintas características de
la imagen.
36
: Esquema convolución imágenes con banco de filtros diferentes
De esta manera al aplicar convolución con dicho banco de filtros, a la
salida se obtendrá un volumen 3D en el que cada “canal” es una salida de
la convolución de la imagen con uno de los filtros que componen el banco.
Así, las dimensiones del volumen de salida serán MxNxF , donde MxN es el
tamaño de la imagen original y F es el número de filtros que conforman el
banco.
Sin embargo la convolución con el filtro no s e realiza en cada uno de los
pixeles de la imagen, sino que se hace cada cierto número de ellos. Este
paso entre un pixel convolucionado y el siguiente será el llamado stride.
Para resumir se dirá que en toda capa de convolución se tendrán tres
hiperparámetros que controlan el tamaño del volumen de salida de dicha
capa:
1. La profundidad del volumen de salida es un hiperparámetro. Se
corresponde con el número de filtros del volumen de salida es un
hiperparámetro. Se corresponde con el número de filtros que quiere
usare quiere usar, cada uno aprendiendo a buscar algo diferente en
la entrada., cada uno aprendiendo a buscar algo diferente en la
entrada.
2. Se ha de ha de especificar el paso (especificar el paso (stride) con el
que se va a deslizar el filtro. Esto producirá volúmenes del filtro.
Esto producirá volúmenes de salida parcialmente más pequeños
cuanto mayor sea dicho salida parcialmente más pequeños cuanto
mayor sea dicho strides.
3. A veces será conveniente colocar ceros alrededor del borde del
volumen de entrada. Esta operación se A veces será conveniente
37
colocar ceros alrededor del borde del volumen de entrada. Esta
operación se denomina zero-padding, y su tamaño es otro
hiperparámetro y su tamaño es otro hiperparámetro.
Teniendo todo lo anterior en cuenta tendríamos la salida de nuestra
primera capa de convolución.
Teniendo todo lo anterior en cuenta tendríamos la salida de nuestra
primera capa de convolución.
2.4.2
7.2.- Max PoolingMax Pooling
En este paso se realiza un proceso de desratización, de manera que se
toma cada “rebanada” del cubo de salida de la capa anterior (capa de
convolución), y en cada pixel se calcula el máximo sobre una pequeña
vecindad.
7: Ejemplificación gráfica de cálculo de la función Max Pooling
38
Este proceso se realiza para conseguir invariación ante pequeños cambios
en posición en la imagen. Además también reduce el coste computacional
reduciendo el número de parámetros a aprender.
Para seguir completando la Red Neuronal Convolucional, se irán
añadiendo nuevas capas de filtros. Estos filtros se convolucionan con la
salida de la capa anterior. El resultado de cada convolución es de nuevo
una rebanada en el cubo de salida.
8: Explicación gráfica operaciones convolución y Max Pooling
7.3.- Capa Completamente Conectada
Después de añadir varias capas sucesivas de convolución y pooling
respectivamente, se van a añadir una o dos capas completamente
conectadas o FC (siglas de su término en inglés Fully Connected). En esta
no se realizará convolución, sino el producto lineal entre el filtro y la salida
de la capa anterior (que típicamente habrá sido una capa max pooling).
39
9 : Explicación gráfica capas fully connected
7.4.- Capa Clasificación
Al final de todas las capas que conforman la red, es necesario añadir una
capa de clasificación. Esta dará como resultado un vector en el que cada
componente aporta información acerca de la probabilidad de la imagen de
entrada de pertenecer a una cierta clase.
10: Explicación gráfica capa de clasificación
40
Uniendo cada una de las capas que se han descrito, se obtiene la red
neuronal convolucional completa. Una vez que se ha entrenado a la misma
para calcular los pesos de los filtros aplicados, tomando como base un
conjunto de datos de entrada muy grande de los cuales es conocida la
categoría a la que pertenecen, la red será capaz de clasificar un dato que
se introduzca como entrada en una de las posibles categorías.
En este tipo de redes está basado el algoritmo de clasificación de objetos
en imágenes que se ha llevado a cabo durante la ejecución de este
proyecto, el cual se explicará con detalle más adelante en esta memoria.
8.- Detección de objetos.
Una vez que la red neuronal está entrenada y probada, de manera que es
válida para la clasificación de los objetos que se buscan, se puede probar
su funcionamiento sobre una imagen completa con varios objetos en ella,
que habrá que encontrar y localizar.
Por ejemplo, la señal que representa a una radiografía y la radiografía
propiamente se puede clasificar como “crecimiento de la aurícula
izquierda”, “posible tumor maligno” o “paciente sano”.
Otro ejemplo es el reconocimiento de personas o acciones, como en un
sistema de seguridad que analiza durante varios segundos el caminar de
un sujeto para identificarlo y clasificarlo como “usuario autorizado” o
“usuario no autorizado.”
Un sistema de reconocimiento de patrones que se construye a partir de
analizar y manipular instancias o ejemplos de un problema se conoce
como adaptivo. La construcción de este tipo de sistemas tiene dos etapas
principales: diseño y evaluación. En la primera se generan reglas de
41
decisión para clasificar instancias del problema y en la segunda se verifica
de forma intensiva que dichas reglas sean apropiadas para tomar buenas
decisiones.
El diseño de un clasificador es una actividad iterativa que implica probar y
modificar varias veces las transformaciones hasta encontrar las que ob-
tienen los mejores resultados. Este proceso depende en gran medida de la
experiencia de los diseñadores; sin embargo, en los últimos años se ha
incrementado la investigación de métodos basados en inteligencia artificial
que permiten realizar automáticamente algunas decisiones de diseño.
42
Etapas de diseño de un clasificador
Uno de los métodos más exitosos de diseño automático de clasificadores se
basa en el aprendizaje profundo, el cual ha tenido muy buenos resultados,
principalmente en problemas de visión y reconocimiento de voz.
Por su parte, el uso de un sistema de reconocimiento involucra tres pasos:
i. adquirir y pre-procesar la señal,
ii. aplicar las transformaciones para obtener características y
iii. aplicar las reglas de reconocimiento y decisión del clasificador.
Pasos de un clasificador
El análisis de señales agrupa a una inmensa variedad de teorías
matemáticas y algoritmos que permiten definir secuencias de
transformaciones orientadas a la extracción de información de las señales,
43
en particular para su reconocimiento. El proceso de análisis se inicia con
la observación del fenómeno, el cual se registra a través de sensores y
genera datos crudos. Existen varios tipos de transformaciones que pueden
realizarse sobre una señal digital, como la convolución, el filtrado de
frecuencia, el sub-muestreo, las funciones de transformación tiempo-
frecuencia y multi-resolución, etc.
8.- Implementación Analógica VS Digital.
8.1.- Pros y Contras de la Realización Analógica.
Una neurona puede implementarse fácilmente mediante dispositivos
analógicos, tratando de aprovechar las leyes físicas para la realización de
cálculos. Así, la suma ponderada de la neurona surge de manera directa
de la aplicación de las leyes de Kirchhoff en forma de sumas de corrientes.
Además, las características no lineales de los dispositivos favorecen le
realización de funciones de activación de tipos sigmoideo.
Por tanto, inicialmente la realización analógica parece presentar
importantes ventajas.
44
Un posible esquema de una neurona analógica se muestra en la figura,
donde el soma se representa mediante un amplificador operacional
(triángulos), y los pesos sinápticos mediante resistencias.
Modelo sencillo de neurona analógica basada en un amplificador operacional.
Este circuito presenta notables limitaciones como la de operar con una
única función de activación, excesivo consumo de potencia y la gran
cantidad de área ocupada por el dispositivo y su red de resistencias, que
no son reajustables.
Los circuitos analógicos, en general, presentan la interesante
característica de permitir el procesamiento de más de 1 bit por transistor,
así como proporcionar una velocidad de proceso mayor que la de los
circuitos digitales.
Aunque este tipo de implementación sea muy adecuada para la realización
de modelos de redes neuronales cabe comentar algunos aspectos negativos
de dicha realización:
Comparándolos con los circuitos digitales, los analógicos son más
susceptibles al ruido en la señal, ruido cruzado, efectos térmicos,
variaciones en la tensión de alimetación,...
45
La precisión proporcionada por el procesamiento analógico
está limitada normalmente a 8 bits, lo que resulta inadmisible
para muchos algoritmos de aprendizaje (como el Back
Propagation).
El mayor problema atribuible a la integración analógica la no
escalabilidad con la tecnología.
8.2.- Pros y Contras de la Realización Digital.
La realización digital de redes neuronales se basa en el almacenamiento de
los pesos y activaciones neuronales en registros, y en la utilización de
estructuras de cálculo clásicas (multiplicadores, AL's,...).
Unidad de procesamiento digital genérica que implementa un conjunto de neuronas virtuales
46
Para las redes neuronales menos inspiradas en la biología, es decir, casi
todos los modelos convencionles de ANS (MLP, SOFM, RBF,...) la
integración digital en un neuro chip proporciona características muy
interesantes, como flexibilidad en el diseño, posibilidad de integrar la fase
de aprendizaje, realización de diseños expandibles y precisión elevada. Los
diseños digitales proporcionan mayores ventajas globales, pues hay que
tener en cuenta que rango dinámico y precisión son aspectos críticos en
muchos modelos neuronales (como el Back Propagation), y con la
tecnología digital es posible alcanzar el nivel requerido.
Con todo, una de las grandes ventajas del diseño de circuitos digitales
VLSI es la disponibilidad de potentes paquetes CAD, y la posibilidad de
abordar los diseños con una metodología modular. Además, otra
importante ventaja es la rápida adecuación de los diseños digitales a las
nuevas tecnologías disponibles con mayor nivel de integración (estabilidad
con la tecnología), junto con la disponibilidad actual de herramientas de
síntesis automática a partir de descripciones en algún lenguaje de
descripción de hardware (como pueden ser VHDL o VERILOG) del circuito
a construir, disminuyendo notablemente los tiempos de desarrollo y
abaratando costes.
Obviamente, las desventajas de la implementación digital son el gran
consumo de área de silicio y la velocidad de ejecución relativamente lenta
(en comparación con las realizaciones analógicas).
47
Realización análogica frente a digital.
9.- Tecnologías empleadas.
A continuación se exponen las principales características de las
tecnologías utilizadas y el motivo de la elección de cada una de ellas.
Electron
Electron es una biblioteca de código abierto desarrollada por GitHub para
crear aplicaciones de escritorio multiplataforma con HTML, CSS y
JavaScript. Electron logra esto combinando Chromium y Node.js en tiempo
de ejecución y las aplicaciones se pueden ejecutar para Linux, Windows y
48
Mac. Se fundó en el año de 2013 al mismo tiempo que el editor de texto de
Github, Atom. Un año después ambas aplicaciones fueron liberadas como
código abierto.
Dispone de dos tipos de procesos siendo estos el proceso principal y el
proceso rende- rizador. Solo pueda haber un proceso principal y este se
encarga de ejecutar la aplicación y crear páginas web para la interfaz
gráfica de usuario. Electron trabaja con Chromium1 para mostrar páginas
webs utilizando la arquitectura multiproceso, ejecutando así un proceso
renderizador por cada página.
Una de las grandes ventajas que ofrece Electron es la introducción de
Node.js en la arquitectura. Node.js puede ser utilizado tanto en el proceso
principal como en el réndese trata de un proyecto de código abierto de
navegador web.
El principal motivo de la elección de Electron para el desarrollo de la
herramienta se debe a que se pueden desarrollar aplicaciones
multiplataforma y ofrece la posibilidad de realizar llamadas a
procedimientos remotos (RPC). Para la implementación de las llamadas a
procedimientos remotos se ha utilizado el módulo ZeroRPC2. Con la
integración de Zero RPC se consigue la comunicación con los diferentes
procesos implementados en otras tecnologías que se citan en los siguientes
apartados.
Node.js
Node.js es un entorno de ejecución para JavaScript construido con el
motor de Ja- vaScript V8 de Chrome. Utiliza un modelo de operaciones
entrada/salida sin bloqueos y orientado a objetos. Los paquetes “npm” de
Node.js son el ecosistemas de librerías de código abierto más grande en la
actualidad.
Funciona con un modelo de evaluación de un único hilo de ejecución
utilizando entra- das y salidas asíncronas, las cuales pueden ejecutarse
concurrentemente. La arquitectura de un único hilo de ejecución para
atender todas las solicitudes hace que todas las operaciones que realicen
entradas y salidas implementen una función Callback. Incorpora módulos
49
básicos como el módulo de red que proporciona una capa para
programación asíncrona u otros módulos como Path, File System o “fs”,
Buffer. Existe la posibilidad de añadir módulos de terceros.
Con la elección de Electron es necesario la integración de Node.js en la
arquitectura del proyecto. Una gran ventaja es la cantidad de paquetes
desarrollados por terceros que facilitan y simplifican la implementación de
la herramienta.
JQuery
Se trata de una biblioteca multiplataforma de JavaScript, que facilita la
interacción con documentos HTML, manipular el árbol DOM3, manejar
eventos y desarrollar ani- maciones.
La herramienta que se implementa en el proyecto sigue una metodología
orientada a eventos. Se elige JQuery debido a que esta tecnología permite
capturar eventos de los componentes HTML y facilita de alguna forma la
ejecución de las funcionalidades que se implementan en Node.js.
Python
Python es un lenguaje de programación multiparadigma soportando la
orientación a objetos, programación imperativa y programación funcional.
Es un lenguaje interpreta- do, usa tipado dinámico y es multiplataforma.
Puede distribuirse libremente ya que su intérprete como la biblioteca
estándar se en- cuentra de forma binaria y en código fuente en la página
web de Python. En la web se pueden encontrar también distribuciones y
módulos desarrollados por terceros, así co- mo documentación adicional.
El intérprete de Python puede extenderse fácilmente con nuevas
funcionalidades y tipos de datos implementado en C o C++.
Es un lenguaje que está ganando usuarios que se dedican al campo de la
inteligencia artificial. El framework Keras utilizado para el entrenamiento
de redes neuronales es una API integrada en Python, siendo esta la razón
de la elección para la integración en el proyecto. Mediante llamadas a
50
procesos remotos se puede establecer la comunicación con la herramienta
desarrollada con Electron.
ZMQ
En ocasiones es necesario conectar diferentes partes de un software para
establecer una comunicación entre ellas. El problema surge cuando las
dos partes que se quieren conectar están implementadas en lenguajes
diferentes.
Zero MQ es un sistema de mensajería con la capacidad de solucionar el
problema mencionado en el párrafo anterior. Es capaz de conectar códigos
en casi cualquier lenguaje y cualquier plataforma. Los creadores
argumentan que ofrece un gran entorno de concurrencia, resolviendo entre
otros la comunicación entre hilos de un proceso o entre procesos de una
misma máquina [29]. Ofrece una serie de patrones de diseño que
solucionan problemas comunes, entre estos patrones se encuentran: Req-
Rep, Push-Pull, Router-Dealer o Dealer-Dealer.
Durante la fase de entrenamiento, el proceso Python devuelve información
relevante sobre el estado del entrenamiento. Esta información se debe
actualizar en la interfaz de la herramienta. Con la integración de ZeroMQ
se consigue la comunicación entre el proceso Python y el proceso Node.js
encargado de actualizar la interfaz de usuario.
Materialize
Creado y diseñado por Google, es un lenguaje de diseño del interfaz de una
aplicación que combina los principios clásicos del diseño con los más
actuales. La finalidad de Google es ofrecer una experiencia de usuario
única en todos sus productos en cualquier plataforma.
Materialize cuenta con componentes con estilos por defecto, pero a su vez
fáciles de manejar y modificar por el usuario. Pensado principalmente para
el desarrollo web pero se puede integrar en aplicaciones para dispositivos
móviles como en aplicaciones para escritorio. La hoja de estilos propia
permite que cada diseño se pueda adaptar fácilmente a cualquier
51
resolución de pantalla. En la documentación oficial se encuentran un gran
número de ejemplos de cómo utilizar los componentes tradicionales y los
más actuales.
La interfaz de usuario del proyecto se genera a partir del HTML creado en
el proyecto de Electron. Después de realizar pruebas con Materialize se ha
comprobado la facilidad de aplicar un diseño atractivo para la interfaz,
ofreciendo una experiencia de usuario positiva.
TensorFlow
TensorFlow es una biblioteca de software de código abierto para el
aprendizaje auto- mático. Fue creado y lanzado por Google en el año 2015
consiguiendo un gran éxito hasta el momento. Cuenta con una gran
cantidad de colaboradores que lo sitúan como líder en el sector del
aprendizaje profundo.
Se trata de una plataforma creada para la construcción y entrenamiento
de redes neu- ronales, que permite detectar y descifrar patrones propios de
los seres humanos.
Puede realizar operaciones de cálculo tanto en CPU o GPU. Para el
entrenamiento de redes neuronales convolucionales ofrece un extenso
soporte para trabajar con GPU tanto de equipos de escritorio como en
servicios Cloud.
Para el presente proyecto se hace uso indirecto de Tensorflow debido a la
integración de la biblioteca Keras. En el siguiente apartado se profundiza
sobre el funcionamiento de Keras. En el Apéndice A se especifica la
máquina en la que se ha realizado la instalación y en el Apéndice B se
explican los pasos seguidos para la instalación de TensorFlow GPU y
Keras.
Keras
52
Keras es una API de redes neuronales de alto nivel, escrita en Python y con
posibili- dad de integrarse con TensorFlow, CNTK4 o Theano5. Su
desarrollo se basó en crear una API con la que realizar un experimento
sobre una red fuese una tarea sencilla y rápida.
La facilidad de uso es uno de los principales objetivos, ofreciendo una API
consis- tente y simple que minimiza el número de acciones que ha de
realizar el usuario. Ofrece una documentación extensa con algunos
ejemplos que pueden ser de gran ayuda para empezar a trabajar en el
campo de las redes neuronales. Separa por módulos cada una de las
partes de una red neuronal. Las capas de una red neuronal, la función de
coste, la función de activación, la función de regularización son entre otros
los módulos por los que está formado. Se pueden crear módulos
personalizados fácilmente, haciendo de Keras un sistema apto para
investigaciones avanzadas.
Los modelos se escriben en código Python. La implementación en Python
ofrecen la ventaja a la hora de la depuración y extensión de los modelos.
Gracias al desarrollo de librerías como Keras, Python está aumentando en
el sentido de desarrolladores que trabajan con él.
Se ha elegido Keras para integrarlo en el proyecto por la facilidad de
implementar una red neuronal. Existe una gran comunidad de
desarrolladores que comparten numerosos ejemplos de código que, en
cierta manera, ayudan al desarrollo de la herramienta.
OpenCV
OpenCV es una biblioteca libre de visión por computador desarrollada por
Intel. Des- de su aparición en 1999 ha sido utilizado en infinidad de
aplicaciones. Esto se debe a que su publicación se da bajo licencia
Berkeley Software Distribution (BSD), que permite que sea usado
libremente para fines comerciales y de investigación con las condiciones
expresadas.
Es multiplataforma, con versiones para distribuciones GNU/Linux, Mac
OS X, Win- dows, Android e IOS. Tiene interfaces C ++, Python y Java.Sus
funciones abarcan grandes áreas en el proceso de visión como el
reconocimiento de objetos, calibración de cámaras o visión robótica.
53
Otras funciones como redimensionamiento o recorte de imágenes también
están in- cluidas en la biblioteca. Estas características junto la detección
de objetos han decantado la elección para la integración en el proyecto.
10.- Usuarios.
Para cada usuario se detallan los conocimientos básicos que han de poseer
para poder utilizar la herramienta de forma correcta.
La herramienta está enfocada a usuarios principiantes en el mundo de las
redes convolucionales que sean capaces de entender los parámetros
requeridos en la creación de un modelo de red convolucional. Otro
requisito para este tipo de usuarios es poseer conocimiento medios en el
lenguaje de programación Python y del framework Keras para el modelado
de redes neuronales.
Sin embargo, la herramienta también puede ser utilizada por usuarios
expertos, aunque pueden encontrar limitaciones a la hora de crear un
modelo personalizado. En la creación de un conjunto de datos no
encontrará limitaciones y puede aprovechar la herramienta para
administrar de forma visual su conjunto.
No se requieren conocimientos en el campo redes convolucionales si el
usuario final de la aplicación solo tiene la intención de crear un conjunto
de datos.
54
11.- Aplicaciones.
11.1.- Reconocimiento de rostros mediante una
arquitectura basada en redes neuronales.
Las redes neuronales son una herramienta matemática que permite la
solución de una gran variedad de problemas, en particular aquellos de
difícil modelado. En este trabajo se presenta una arquitectura basada en
redes neuronales para la identificación de rostros. La arquitectura está
formada de varios clasificadores cada uno compuesto, a la vez, de una red
neuronal estándar tipo ART2 conectada a un Mapa de Memoria (MM). Las
salidas de los diferentes clasificadores están conectadas a un sumador
común (registro de evidencias) y a un conjunto de comparadores
permitiendo la fusión de datos. Se prueba el desempeño de la arquitectura
con un conjunto limitado de diez rostros.
11.1.2.-Introducción.
El rostro humano es un patrón muy complejo. Los humanos detectamos e
identificamos rostros en una imagen con muy poco esfuerzo. El
reconocimiento automático de tales patrones es, a la vez, un problema
difícil e interesante. En años recientes este problema ha atraído la
atención de muchos científicos.
Un sistema para localizar e identificar correctamente rostros humanos
sería útil en muchas aplicaciones tales como la identificación de criminales
55
y en sistemas de seguridad y autentificación. Otras aplicaciones donde el
reconocimiento de patrones puede ser usado incluyen la asistencia en el
reconocimiento del habla y la comunicación visual a través del teléfono y
otros medios.
Un sistema completo para el reconocimiento de rostros humanos debería
permitir realizar las siguientes tareas:
1. Determinar si una imagen contiene un rostro. Si es así,
determinar su número, posición y tamaño.
2. Determinar la identidad de cada rostro.
3. Proporcionar una descripción acerca del rostro (felicidad, enojo,
tristeza, etcétera), y
4. Entregar información extra, por ejemplo, edad, sexo, etcétera.
Obviamente esta tarea es bastante compleja, siendo aún un problema
difícil de resolver. Muchos aspectos acerca del reconocimiento de rostros
quedan por ser resueltos. Varios métodos para el reconocimiento de
rostros humanos han sido propuestos, por ejemplo, otros métodos basados
en redes neuronales, los métodos usando imágenes de mosaico, y los
métodos usando eligen caras.
Una arquitectura similar, compuesta de un solo clasificador, es usada en
el libro de Rayón y Figueroa (ver referencias) para el reconocimiento de
formas poligonales simples. El funcionamiento de la nueva arquitectura se
basa en el hecho de que para reconocer un rostro es necesario
descomponerlo en un conjunto de partes llamadas características visuales
(CV).
Una CV pudiera ser, por ejemplo, una región alrededor de un punto, un
conjunto de puntos, etcétera. A partir de cada CV, un vector de atributos
es obtenido. Este vector de atributos es entonces usado para entrenar la
red neuronal y construir su mapa de memoria con el clasificador
correspondiente.
Durante la etapa de reconocimiento, una lista restringida de las personas
obedeciendo a una descripción de entrada es obtenida en una primera
instancia, a la salida del registro de evidencias, en forma de un
histograma. Finalmente, esta lista se reduce a través de un método de
recorte (el conjunto de comparadores hace esto) para obtener la lista final
56
de posibles candidatos correspondiendo a la descripción de la imagen de
prueba.
11.1.3.- Arquitectura y funcionamiento.
Como mencionamos anteriormente, la arquitectura propuesta para el
reconocimiento de rostros humanos se compone de varios clasificadores,
cada uno compuesto, a la vez, de una red neuronal (RN) estándar tipo
ART2 conectada a un Mapa de Memoria (MM). Las salidas de los diferentes
clasificadores están conectadas a un sumador (registro de evidencias)
común y a un conjunto de comparadores. Para ser útil, la arquitectura
necesita que cada RN sea entrenada y que cada mapa de memoria
sea construido. Para esto usamos la siguiente metodología la cual está
dividida en dos fases, de inicialización y de indexado. Es durante la
primera fase que la RN es entrenada y el MM es construido. Nótese que
ambas fases comparten dos etapas: detección de características visuales y
codificación de características visuales.
El acrónimo ART viene del inglés Adaptive Resonance Theory, modelo
inicialmente propuesto por G. A. Carpenter and S. Grossberg en 1986 para
extender de los mecanismos de aprendizaje competitivos
de contrapropagación y mapas autoorganizados (ver referencias). El 2 de ART
2 indica que la red puede procesar entradas analógicas, a diferencia de la
ART 1, que solo es capaz de procesar entradas binarias.
Así pues, la arquitectura quedaría:
57
Arquitectura propuesta
El funcionamiento de la arquitectura propuesta se basa en el hecho de que
para reconocer un rostro, es necesario descomponerlo en un conjunto de
partes llamadas características visuales (CVs). Estas CVs permitirán como
veremos más adelante, el reconocimiento eficiente de personas a través de
información visual.
Para detectar las características visuales precedemos:
Un conjunto selecto de puntos es primeramente detectado de una imagen
del rostro.
Estos puntos son los mostrados en la figura mostrada a continuación.
Actualmente, estos puntos son seleccionados manualmente. A partir de
estos cinco puntos, otros cuatro puntos son calculados y marcados. Todos
estos puntos serán llamados en adelante puntos de interés. Se muestran a
continuación y son obtenidos en términos de la distancia entre los puntos
2 y 3. Con este conjunto de puntos, la siguientes CVs son derivadas:
a) Todos los píxeles encerrados en el rectángulo formado por
los puntos 6,7, 8 y 9.
b) El triángulo formado por los puntos 1, 2 y 5.
c) El triángulo formado por los puntos 2, 3 y 5.
d) El triángulo formado por los puntos 3, 4 y 5.
58
e) El triángulo formado por los puntos 1, 4 y 5.
Obtención de CVs
Las fases de la metodología llevada a cabo, es decir: Inicialización e indexado se pueden
resumir con la siguiente figura:
Figura 30.
(a) Fase de Inicialización. (b) Fase de indexado.
Estos dos vectores de atributos (a los que alguna de las referencias denominan VA) son
usados para entrenar las redes neuronales.
A continuación mostramos la detección de cada uno de los puntos de interés en una
fotografía con rostro real:
59
Puntos de interés en una fotografía real.
Etapa de entrenamiento de la red neuronal y construcción del MM:
Para esto el siguiente procedimiento es aplicado:
60
61