Sie sind auf Seite 1von 66

1

APLICACIÓN DE TÉCNICAS DE APRENDIZAJE PROFUNDO PARA LA


CLASIFICACIÓN Y RECONOCIMIENTO DE OBJETOS EN IMÁGENES.

Estudiante: CAMILO ANDRÉS GAMARRA TORROLEDO


Estudiante: MANUEL SEBASTIÁN RÍOS BELTRÁN

DIRECTOR: ING. CARLOS SAITH RODRÍGUEZ R


CODIRECTOR: ING. CARLOS ANDRÉS QUINTERO P

FACULTAD DE INGENIERÍA ELECTRÓNICA


UNIVERSIDAD SANTO TOMÁS
BOGOTÁ D.C.
2

Tabla de contenidos

1. INTRODUCCIÓN ........................................................................................................................... 3
2. ANTECEDENTES: .......................................................................................................................... 5
3. JUSTIFICACIÓN: ........................................................................................................................... 8
4. OBJETIVOS: .................................................................................................................................. 9
4.1 General: ................................................................................................................................... 9
4.2 Específicos: .............................................................................................................................. 9
5. MARCO TEÓRICO ....................................................................................................................... 10
6. DISEÑO Y EJECUCIÓN DEL PROYECTO ....................................................................................... 16
6.1 DISEÑO DE LA SOLUCIÓN ...................................................................................................... 16
6.2 EJECUCIÓN DEL PROYECTO ................................................................................................... 19
6.2.1 SISTEMA DE INTELIGENCIA................................................................................................ 20
6.2.1.1 RECOLECCIÓN PARA LA BASE DE DATOS........................................................................... 20
6.2.1.2 PROCESO DE APRENDIZAJE ............................................................................................... 21
6.2.2 INTERACCIÓN CON EL USUARIO........................................................................................ 24
6.2.2.1 REQUERIMIENTOS PARA LA INTERFAZ CON EL USUARIO ................................................. 24
6.2.2.2 DESARROLLO DE LA APLICACIÓN MÓVIL .......................................................................... 24
6.2.2.3 IMPLEMENTACIÓN DE UN SERVICIO WEB ........................................................................ 28
6.2.3 REALIMENTACIÓN Y AUTO ENTRENAMIENTO .................................................................. 34
7. RESULTADOS DEL PROYECTO .................................................................................................... 39
7.1 Prueba 1: Validación del software de reconocimiento ......................................................... 39
7.2 Prueba 2: Validación de la realimentación de una categoría existente ................................ 43
7.3 Prueba 3: Validación de la creación de nuevas categorías ................................................... 44
8. IMPACTO SOCIAL ....................................................................................................................... 48
9. CONCLUSIONES ......................................................................................................................... 49
10. TRABAJO FUTURO ................................................................................................................. 50
11. BIBLIOGRAFÍA ........................................................................................................................ 52
3

1. INTRODUCCIÓN

Las ciencias de la computación han tomado un papel fundamental en el desarrollo


de las actividades cotidianas del ser humano, presentando herramientas que dan
solución a problemas en distintos ámbitos. Andrew Ng, profesor de la universidad
de Stanford cuyas investigaciones se centran en la inteligencia artificial; hace
énfasis en su curso de aprendizaje automático en como aplicaciones basadas en
algoritmos bioinspirados, aprendizaje automático y técnicas evolutivas, permiten por
ejemplo tener información sobre el tráfico, hacer predicciones climáticas, generar
seguridad con reconocimiento biométrico, hacer control de cultivos, obtener
ubicación gracias a la cartografía automática o incluso nos permiten la interacción
en las redes sociales. Estas técnicas computacionales se han visto beneficiadas
con el avance de la tecnología ya que los dispositivos electrónicos son capaces de
adquirir cada vez más información y procesarla en tiempos menores.
El reto de las ciencias computacionales es extraer información útil del medio en el
que el ser humano interactúa, con el fin de crear modelos matemáticos, estadísticos
o cuantitativos que puedan representar estos procesos naturales del hombre. De
allí se intenta poner todas estas técnicas al servicio de las personas para facilitar la
interacción fluida con textos, imágenes y conversaciones. También es en este punto
donde se ha evidenciado que existen ciertas barreras que impiden dicha interacción
fluida, por ejemplo existen limitaciones físicas que hacen que las personas puedan
tener problemas tanto en la recepción de la información y en la comunicación de
ideas (invidentes o personas sordomudas), por otro lado pueden haber barreras del
tipo cultural, ya que existen elementos propios de cada país que pueden ser
desconocidos por turistas como el idioma o el sistema de señalización de tráfico.
Por lo anterior se da la motivación de este proyecto, el hecho de construir una
herramienta tecnológica apoyada en las ciencias de la computación (en este caso
Deep Learning) que permita sobrepasar algunas de estas barreras, a través de la
creación de un servicio que reconozca y caracterice de forma automática imágenes
tomadas o proporcionadas por un usuario.
El siguiente texto presenta en los antecedentes un recorrido histórico de la evolución
de las ciencias en la computación y más exactamente la evolución que han tenido
los algoritmos probabilísticos, además de trabajos que de igual manera han querido
hacer la identificación de objetos en imágenes utilizando aprendizaje profundo.

Se podrá ver también la justificación y motivación que existe para desarrollar el


proyecto y así mismo los objetivos puntuales que se quieren completar con esta
tesis de grado.
4

Más adelante el documento pone al lector en contexto a través de los conceptos y


bases teóricas que se requieren para dar paso al diseño y ejecución del proyecto,
el cual está conformado por tres partes fundamentales.
A continuación, se encontrarán los resultados obtenidos, las pruebas realizadas y
las evaluaciones obtenidas de la herramienta tecnológica construida. Para poder
obtener las respectivas conclusiones, posibles trabajos futuros y los aportes o el
impacto social que puede tener un proyecto como este.
5

2. ANTECEDENTES:

Teniendo en cuenta que este es un trabajo enfocado a desarrollar una herramienta


tecnológica basada en las ciencias de la computación, es realmente importante
contextualizar su nacimiento, algo de su historia y desarrollo en servicio del ser
humano, para luego hacer una profundización en las técnicas que se planean
implementar en el desarrollo e este trabajo de grado.
Las ciencias de la computación están históricamente registradas desde la
construcción de los primeros dispositivos útiles para llevar cuentas y solucionar
problemas matemáticos. Existieron a través de los años importantes contribuciones
de investigadores como Leibniz, Pascal y Babbage para lograr una aproximación a
una primera computadora y los primeros algoritmos [1].
El desarrollo de las computadoras estaba limitado entonces al avance de nuevas
tecnologías, las máquinas que se creaban tenían el tamaño de habitaciones. Aun
así, reducir el tamaño de estas máquinas no era el único tema importante; los
científicos buscaban la forma de hacer estas máquinas cada vez más inteligentes
[2]. Por ello comenzaron a aparecer las investigaciones de personas relevantes en
la historia, personajes como Alan Turing considerado el padre de las ciencias de
computación, quien comenzó a hacer una abstracción del cerebro humano para
representarlo en el mundo de los ordenadores, entendiendo que de esta manera se
podrían hacer que las maquinas fueran mejores no solo en la parte del Hardware,
sino también en la parte del Software.
Fueron entonces los señores Waltter Pitts y Warren McCulloch, un neurofisiologo y
un matemático respectivamente, quienes concibieron los fundamentos de la
computación neuronal, modelaron en 1943 mediante circuitos eléctricos una red
neuronal simple [3]. A partir de este momento, se convirtió prácticamente en una
nueva línea de investigación el representar el funcionamiento del cerebro en
técnicas y modelos matemáticos aplicados a ordenadores informáticos.
En 1980, década considerada como la edad de la ilustración de las ciencias en
computación, Ray Solomonoff, inventor de la probabilidad algorítmica construye las
bases para el inicio de una técnica computacional realmente importante y
fundamental en las aplicaciones informáticas utilizadas actualmente, el aprendizaje
automático “Machine Learning”, un área cuyo fin es de crear programas capaces
de generalizar comportamientos a partir de una información no estructurada
suministrada en forma de ejemplos [4]. Dicha técnica se complementó a lo largo de
los años con temáticas que se desarrollaban en paralelo, entre ellas todo el
conocimiento adquirido de redes neuronales para optimizar procesos
computacionales. En resumen, estas máquinas a las que se les proporciona como
ya se mencionó, una serie de ejemplos con sus respectivas salidas, fueron capaces
de aprender y predecir resultados de distintas situaciones.
6

Empresas como Facebook, Google o YouTube utilizan hoy en día algoritmos de


aprendizaje para hacer que la interacción de sus plataformas y sus usuarios sea
cada vez más inteligente y personalizada, tomando como referencia gustos,
costumbres y actividades recurrentes.
En 2006 Geoffrey Hinton, un especialista en psicología cognitiva y en redes
neuronales establece el concepto de aprendizaje profundo “Deep Learning”, el cual
se puede considerar una evolución del aprendizaje automático, con una idea similar
y mediante algoritmos más robustos se busca procesar el lenguaje natural de los
seres humanos, textos, audios, videos e imágenes para la resolución de problemas
[5], logrando que las maquinas se parezcan cada vez más a una persona. De la
misma manera que el “machine learning”, con el objetivo de crear aplicaciones más
completas, fue importante el empalme con más técnicas de las ciencias en
computación, entre ellas la visión artificial, la minería de datos, los sistemas
bioinspirados, la robótica y la inteligencia artificial.
Un ejemplo muy famoso de una aplicación de Aprendizaje profundo se dio en 2012
en una conferencia de Microsoft, cuando el jefe del área de investigación comenzó
a hablar, su voz comenzó a ser traducida y escrita en tiempo real a la vista de todos
los espectadores. Aplicaciones más comunes de esta técnica, se pueden evidenciar
en los motores de interacción dispositivo-humano que ofrecen Apple y Microsoft;
Siri y Cortana, los cuales se comportan hoy en día como asistentes personales.
De acuerdo al problema que se quiere resolver en este proyecto, se va haciendo
evidente que la herramienta que se quiere implementar es una aplicación basada
en técnicas de Deep Learning y visión artificial para lograr la clasificación y posterior
reconocimiento de objetos. Teniendo en cuenta esto, se buscaron proyectos que
tuvieran un fin similar y que fueran desarrolladas bajo las mismas técnicas que se
desean implementar en este trabajo:
Real-time Activity Recognition on Smartphones Using Deep Neural Networks:
[6] Este trabajo desarrollado en el 2015 busca demostrar la eficiencia de las redes
neuronales profundas, por medio del uso de estas el autor del artículo logro
demostrar que las técnicas de Deep Learning pueden ser aplicadas para trabajos
en tiempo real usando un dispositivo móvil, en este caso ellos utilizaron datos
tomados de un acelerómetro, para determinar en tiempo real si la persona que usa
dicho dispositivo está caminando subiendo escaleras o en reposo.
Kinship verification from Videos Using Spatio-Temporal Texture Features:
Deep Learning [7]. Los autores de este artículo, escrito también en el 2015
demuestran una vez más la versatilidad que tienen los algoritmos de aprendizaje
modernos, esta vez la aplicación consiste en determinar el parentesco de una
persona con otra a través de un sistema de visión artificial junto con un algoritmo de
aprendizaje profundo, concluyen que las redes neuronales profundas tienen una
gran exactitud en el procesamiento de imágenes faciales, dando pie a futuras
investigaciones sobre el área.
7

Image Recognition Based on Deep Learning [8]. Este trabajo fue realizado por
investigadores de la universidad de ciencias de la computación y tecnología de
china en 2015, ellos aplican algoritmos de las dos corrientes más importantes del
Deep Learning , las redes neuronales artificiales convolucionales y las redes de
creencia profundas, en problemas de clasificación de imágenes, con esto logran
determinar la alta eficiencia de esos dos modelos y por supuesto pueden comparar
su desempeño, este trabajo los lleva a la conclusión de que las redes neuronales
convolucionales tienen un desempeño superior al de su competencia.
Hybrid Deep Learning for Face Verification [9]. En esta investigación desarrollada
en 2016, se buscó hacer un hibrido entre un algoritmo de redes neuronales
convolucionales, y el algoritmo de la máquina de Boltzman. El objetivo principal fue
hacer un estudio para la verificación de rostros, a partir de la extracción de
características locales visuales de la cara puestas en comparación en dos
imágenes, estos datos son procesados a través de múltiples capas.
Pose and Category Recognition of Highly Deformable Objects Using Deep
Learning [10]. En este trabajo, los investigadores centran sus esfuerzos en un
problema de alta complejidad como lo es el reconocimiento objetos fácilmente
deformables, en este caso prendas colgadas desde un solo punto, el sistema fue
diseñado he implementado en una plataforma robótica encargada de la
manipulación de la prenda y la extracción de datos de la misma, logrando un alto
grado de desempeño en la tarea de clasificación. Dicha investigación da como
evidencia la versatilidad y alta eficiencia de las redes convolucionales aplicadas a
imágenes digitales.
Convolutional-Recursive Deep Learning for 3D Object Classification [11]. Estos
investigadores de la Universidad de Stanford (entre ellos Andrew Ng). Aprovecharon
los avances y nuevas técnicas de visión artificial para determinar profundidad en
imágenes, con el objetivo de clasificar objetos en imágenes RGB con un modelo
basado en la combinación de redes neuronales convolucionales y redes neuronales
recursivas. Para realizar las pruebas, se obtuvo una base de datos con 51 clases
de objetos domésticos. Con 300 ejemplos por cada clase, donde cada uno de ellos
fue visto desde tres diferentes ángulos para realizar el entrenamiento con una base
más robusta.
Los artículos anteriores dan muestra de cómo la solución a problemas de detección
y clasificación de objetos en videos o imágenes, están orientados hacia la utilización
de redes neuronales convolucionales gracias a las altas tasas de rendimiento
mostrado y al aprovechamiento o empalme que se da de técnicas probabilísticas y
técnicas de visión artificial.
8

3. JUSTIFICACIÓN:

La tecnología busca transformar el entorno para satisfacer las necesidades del


hombre, en algunas ocasiones las necesidades surgen debido a la existencia de
barreras que limitan sus capacidades, estas barreras pueden ser tanto culturales,
regionales, intelectuales o incluso físicas. Con este proyecto de grado se busca
eliminar algunas de las limitantes creadas por dichas barreras desarrollando una
herramienta que aplicando técnicas de inteligencia computacional sea capaz de
darle a quien la use un mejor entendimiento de su entorno y en ciertos casos mejorar
su calidad de vida.
Por otra parte, las técnicas de aprendizaje autónomo son uno de los temas de más
relevancia en la actualidad. Cientos de investigadores trabajan diariamente en pro
del mejoramiento de dichas técnicas, razón por la cual se ha decidido aplicar esta
reciente y creciente técnica para implementar una herramienta útil para el ser
humano.
Las técnicas de aprendizaje y de visión artificial no han alcanzado su máximo
desarrollo , aun no existen algoritmos que sean capaces de resolver cualquier tipo
de problema sin importar cuál sea, además, las técnicas de aprendizaje automático
son bastante nuevas , los primeros proyectos de aprendizaje automático datan de
la década de los ochentas , y los de técnicas más complejas basadas en el
aprendizaje automático como el Deep learning son aún más recientes , por lo tanto
existe la oportunidad de aportar en el desarrollo de estas.
9

4. OBJETIVOS:

4.1 General:
Desarrollar un sistema automático de análisis de imágenes que permita el
reconocimiento de un conjunto limitado de objetos

4.2 Específicos:

Construir un conjunto de imágenes de ejemplo (Dataset) que permitan la


construcción de un modelo de clasificación de objetos.
Diseñar una metodología de clasificación basada en distintas categorías de
objetos dependiendo de su similitud o de su contexto.
Crear un modelo de clasificación de imágenes para cada categoría de objetos
con alta capacidad de generalización.
Implementar el sistema como un servicio web con el fin de validar su desempeño
con usuarios reales.
Realizar un conjunto de aplicaciones específicas que permitan la interacción del
usuario con el servicio web
10

5. MARCO TEÓRICO

Para el desarrollo de este proyecto ha sido necesario conceptualizar varios términos


que ayudarán a entender mejor el propósito de esta investigación. Siendo estos
explicados desde los aspectos más generales hasta llegar a los conceptos más
específicos que se han de necesitar para la realización de esta tesis:

Ciencias de la computación: Son ciencias enfocadas y aplicadas principalmente


al estudio del almacenamiento, transformación y transferencia de información en las
computadoras [12]. Las ciencias de la computación pueden ser divididas en dos
perspectivas; una parte teórica donde se comprende el diseño de algoritmos
siguiendo técnicas matemáticas como optimización, técnicas probabilísticas. La
parte práctica será entonces la implementación de estos algoritmos que
conjuntamente para formar un software que operará en un hardware especifico.
Machine learning: También llamado aprendizaje automático o aprendizaje
máquina, es una técnica derivada de las ciencias de la computación donde el
objetivo principal es lograr que los equipos de cómputo sean capaces de aprender.
En este contexto el aprendizaje hace referencia a identificar patrones en millones
de datos y a través de ellos predecir comportamientos futuros de un ambiente o
situación [13] utilizando algoritmia estadística y teorías de probabilidad.
En el aprendizaje automático se pueden identificar dos subáreas principales; el
aprendizaje supervisado y el aprendizaje no supervisado.
A través del primer método, se busca por medio de la recolección significativa de un
conjunto de ejemplos de los cuales se conocen la respuesta, generar una ecuación
descriptiva del sistema (hipótesis) para dar una posible solución a una nueva
entrada. De este mismo método se pueden reconocer dos tipos de problemas:
 Problemas de regresión: Su propósito es generar un valor continuo de
acuerdo con una serie de ejemplos con sus respectivas respuestas, por
ejemplo, el valor de una casa teniendo en cuenta su área, o su ubicación
 Problemas de clasificación: De igual manera que en los problemas de
regresión, con unos datos de entrenamiento lo que se intenta predecir es un
valor discreto, Si o No, Es o No es, por ejemplo, con una serie de ejemplos y
características es posible estimar si un tumor es benigno o maligno, o si
lloverá o no lloverá.
Por otro lado, el aprendizaje no supervisado trabaja comúnmente con entradas
aleatorias al sistema y la salida representa el grado de familiaridad o similitud entre
la información que se le está presentando a la entrada y las informaciones que se
le han mostrado hasta entonces
11

Redes neuronales artificiales: Las redes neuronales han tomado relevancia en


aplicaciones de aprendizaje automático por su capacidad de resolver ecuaciones
no lineales y su habilidad de aprendizaje cognitivo [14]. Su propósito es emular el
comportamiento del sistema nervioso y la forma en que este puede procesar
información a través de las neuronas en conjunto con el cerebro.
Se tiene entonces en este paradigma de la inteligencia artificial una unidad análoga
a la neurona biológica; el perceptrón [15]. Siendo este un elemento con varias
entradas que emulan las dendritas de la neurona y una variable de salida
representando el axón, las entradas que son multiplicadas por un vector de pesos,
son combinadas con una suma básica para luego ser comparadas o analizadas por
una función que determinara la salida. Tal como se puede apreciar en la Figura 1

Figura1. Modelo de un perceptrón básico: Tomada de Redes neuronales artificiales y sus


aplicaciones de Xabier Basogain

Una red neuronal artificial será entonces un conjunto de unidades elementales


(Perceptrón) conectadas de una forma concreta [16].
La arquitectura de estas redes neuronales se compone básicamente de grupos de
perceptrones agrupados por niveles o capas; una capa de entrada en donde se
ingresan los datos a la red, una capa escondida una capa final donde se presentan
las salidas de la red. Las capas que se encuentran entre las dos mencionadas
anteriormente se conocen comúnmente como capas ocultas.
Máquinas de soporte vectorial: Las máquinas de soporte vectorial (Support Vector
Machines SVM) reúnen una serie de algoritmos desarrollados en la década de los
90 por Vladimir Vapnik. Inicialmente las máquinas de soporte fueron concebidas
para dar solución a problemas de clasificación binario, con el tiempo fueron también
prestándose para desarrollar problemas de regresión y clasificación multiclase [17].
El objetivo principal de los SVM´s es construir un hiperplano que funcione como
línea de separación entre ejemplos de distintas clases [18], de forma similar como
lo realizan las fronteras limites que fabrican las redes neuronales artificiales
(decision boundaries). La mayor diferencia entre los hiperplanos que construyen los
12

SVM´s y las fronteras de las redes neuronales tradicionales, está en que los SVM´s
buscan maximizar el margen entre las clases, es decir, la frontera de decisión debe
estar a la mayor distancia posible de las clases que este separando.

Figura 2. Ejemplo del hiperplano construido por un SVM para separar dos clases, imagen tomada
LAS MÁQUINAS DE SOPORTE VECTORIAL, Gustavo A. Betancourt

El hiperplano es un subespacio unidimensional descrito por la siguiente ecuación:


𝑏 + 𝑊1 ∗ 𝑋1 + 𝑊2 ∗ 2 + 𝑊3 ∗ 𝑥3 … = 0 (1). O como se puede observar en la figura
2; simplemente un vector de pesos (W) transpuesto por un vector de características
(X).
De igual manera como se puede ver en la figura 2, el valor del hiperplano puede
tomar valores positivos o negativos, haciendo referencia esto a cada una de las
clases. Es aquí donde surge el concepto de confiabilidad, entre más positivo sea el
valor tendrá más confiabilidad de ser de una clase y entre más negativo, más
confiabilidad habrá de que sea de la otra, tal como se puede apreciar en la figura 3

El hiperplano de máximo margen es el subespacio


óptimo deseado, este depende de determinar la
máxima distancia que existe entre las distancias
que se crean con todos los posibles hiperplanos y
los puntos más cercanos a este. Estos puntos son
llamados puntos de soporte vectorial [19].

Figura 3. Imagen representativa de la confiabilidad de


acuerdo con el resultado arrojado por la ecuación del hiperplano, tomada del video “Maquina de
soporte vectorial”
13

Figura 4. Imagen ejemplificando la determinación del mejor hiperplano, tomada del video “Maquina
de soporte vectorial”

Uno de los componentes más importantes en la construcción de los SVM´s es el


Kernel a utilizar. Las máquinas de soportes son comúnmente conocidas como
separadores lineales, pero existen casos en los que una línea recta no es suficiente
para hacer la separación entre categorías. Casos como por ejemplo donde la
separación de los datos no puede hacerse completamente, o donde sea necesario
clasificar más de dos categorías. En estas situaciones es necesario hacer curvas
no lineales de separación. Agregar Kernel permite hacer más flexible el hiperplano
construido.

Figura 5. Figura representativa de un caso No linealmente separable tomada Tutorial sobre


Máquinas de Vectores Soporte, Enrique Carmona

Las funciones Kernel más populares y sus ecuaciones características son:


14

Kernel Polinomial: Su parámetro característico d, hace referencia al grado del


polinomio.

(2)
Kernel gaussiano: La forma del hiperplano depende del parámetro 𝜎

(3)
Kernel sigmoide:

(4)
Deep learning: El aprendizaje profundo es un subconjunto del aprendizaje máquina
(Machine Learning). Es utilizado para problemas donde los métodos tradicionales
de aprendizaje no logran un desempeño apropiado, el aprendizaje profundo se
inspira en el cerebro para crear redes neuronales con un gran número de capas
ocultas en comparación a las redes neuronales tradicionales. Este tipo de topología
permite a estas “Redes neuronales profundas” obtener patrones o características
simples a partir de entradas complejas.
Generalmente cada una de las capas ocultas se encarga de nivel de abstracción
diferente. Por ejemplo, en el caso de detección de rostros las primeras capas se
encargan de reconocer niveles de intensidad de luz, las capas posteriores se
encargarían de características un poco más complejas como lo serían los bordes y
los contornos, las siguientes capas escondidas se encargan de objetos más
complejos como ojos, cejas, boca, nariz, etc., toda esta información es brindada a
la capa final que es la encargada de la detección del rostro.
Figura 6. Imagen
representativa del
funcionamiento del Deep
learning para la
identificación de rostros,
15

Imagen tomada dehttps://www.quora.com/What-is-deep-learning

Las técnicas de aprendizaje profundo no solo son usadas para problemas de


clasificación, también tienen gran desempeño en problemas de aprendizaje no
supervisado, como por ejemplo el reconocimiento de patrones. Por otra parte, el
procesamiento de voz y de textos también son áreas de interés para los
investigadores de estas prometedoras técnicas [20].

Figura 7. Imagen representativa del funcionamiento del Deep learning para la clasificación de
animales, Imagen tomada dehttps://www.quora.com/What-is-deep-learning

Servicios web: Los servicios web permiten la comunicación entre aplicaciones que
fueron desarrolladas en diferentes lenguajes e incluso que trabajan diferentes
sistemas operativos, los servicios web necesitan una arquitectura bien estructurada
para permitir dicha interacción en la web, cuentan con protocolos bien definidos para
el intercambio de información como son el SOAP el WS-addressing y el MTOM, que
básicamente son los encargados de hacer el intercambio de información de una
manera óptima. Otro componente fundamental en los servicios web son los
descriptores de servicios conocidos como WSDL y WS-CDL que son los encargados
de describir los servicios como tal que deben hacer los servicios WEB. En la
actualidad son ampliamente usado por su versatilidad y generalmente son usados
por aplicaciones móviles, sin embargo, también es posible acceder a ellos desde un
ordenador [21].
16

6. DISEÑO Y EJECUCIÓN DEL PROYECTO

6.1 DISEÑO DE LA SOLUCIÓN

La herramienta que se propone desarrollar para la clasificación de objetos debe en


primera medida permitir a un usuario proporcionar una imagen a un sistema de
inteligencia. Dicho sistema se fundamenta en la filosofía de Deep learning, donde
existen redes neuronales convolucionales encargadas de extraer las características
de las ya mencionadas imágenes. Posterior a ello, debe existir una etapa de
clasificación, la cual arroje al usuario el objeto que se encuentra en la imagen. Si el
sistema falla a la hora de hacer el reconocimiento, se debe permitir al usuario indicar
cuál es realmente el objeto que debe ser reconocido, ayudando al proyecto a ser
cada vez más inteligente.
El siguiente diagrama de bloques enseña de manera más técnica la idea planteada.

Figura 8. Imagen representativa del funcionamiento que debe seguir el proyecto

Un usuario debe poder capturar una


Recepción de una imagen de la cual desee conocer que
imagen suministrada objeto existe en ella, es decir a que
por un usuario categoría pertenece. De manera sencilla
el usuario enviara dicha imagen al
sistema de inteligencia
17

Todas las imágenes deben ser pre-


Pre-Procesamiento procesadas de tal manera que tengan un
de las imágenes de tamaño de 227x227x3 el cual
entrada corresponde a el tamaño de la capa de
entrada de Alex Net.

Alex Net cuenta con más de 15 capas ocultas


cuya función es la extracción de características.
El resultado de dicho proceso se ve reflejado en
Extracción de
los valores de activación de la segunda capa
características
“fully connected”. Por lo tanto, en este punto el
utilizando Alex
sistema propaga las imágenes ingresadas por
Net
la red y almacena los valores correspondientes
a sus características para su posterior
procesamiento.

Cada una de las máquinas de soporte


vectorial One-Class, previamente entrenada
Clasificación de
con características de alguna de las
datos utilizando
categorías del sistema, Procesa los datos
el arreglo de
resultantes de la etapa anterior.
SVM
A partir de ellos cada SVM retorna su decisión
de clasificación (si pertenece o no a dicha
clase) y de igual manera la confianza que
tiene sobre dicha decisión.

Cada una de las clases tiene una naturaleza


muy distinta de las demás, es por esto que es
de vital importancia normalizar los datos de
Normalización confianza.
de confianzas
Durante el proceso de entrenamiento, el
sistema almacena la confianza máxima
encontrada en dicho proceso. Dicho es valor
es utilizado para normalizar la confianza de
las nuevas imágenes.
𝑐𝑜𝑛𝑓 ∗ 100
𝐶𝑜𝑛𝑓𝑛 =
𝑚𝑎𝑥𝑐𝑜𝑛𝑓
18

Esta etapa debe ser ejecutada en cada


ocasión que el sistema no logre
reconocer el objeto existente en la
imagen o lo haga de manera errónea.
Cuando esto sucede, la imagen debe
Realimentación ser almacenada en la categoría correcta
del Sistema. en la base de datos creada para el
entrenamiento del sistema.
Esto permite incrementar la cantidad de
ejemplos por categoría y de ser
necesario crear nuevas categorías para
que aprenda el sistema
19

6.2 EJECUCIÓN DEL PROYECTO


El proyecto se compone de tres partes fundamentales. La primera consta de todo el
sistema de inteligencia encargado de hacer la clasificación y reconocimiento de las
imágenes que sean procesadas. Dicho sistema fue desarrollado utilizando los
toolbox de Matlab y cuenta con la arquitectura y algoritmos de Deep learning
pertinentes para lograr el objetivo de clasificar.
La segunda parte está conformada por el sistema de interacción con el usuario. El
cual está desarrollado como una aplicación móvil para sistema operativo Android,
que se comunica con el sistema de inteligencia mediante un servidor Web.
Por último, el proyecto cuenta con la ventaja de ser auto-entrenable, en donde el
usuario puede hacer crecer el sistema indicando la etiqueta de las imágenes que no
pudieron ser reconocidas. El diagrama de flujo que se encuentra en la figura 9,
explica de mejor manera la estructura del proyecto y la manera como fue
desarrollado.

Figura 9. Diagrama de flujo con las actividades del proyecto


20

6.2.1 SISTEMA DE INTELIGENCIA

6.2.1.1 RECOLECCIÓN PARA LA BASE DE DATOS

Los problemas de aprendizaje automático se caracterizan por predecir


comportamientos futuros o clasificar categorías. Esto se logra a partir de la
recolección significativa de un conjunto de ejemplos.
Al ser el Deep learning una vertiente del machine learning, es necesario construir
una base de datos con todos los ejemplos de los cuales serán extraídos los patrones
y características para lograr el aprendizaje del sistema y así clasificar las categorías
existentes.
El “ImageNet Large Scale Visual Recognition Challenge” (ILSVRC) es un concurso
internacional donde equipos de investigación en Deep learning presentan
algoritmos que clasifican y detectan objetos y escenas. ImageNet es la gran base
de datos que reúne millones de imágenes de las miles de categorías que se han
registrado por parte de los equipos competidores a lo largo de los diferentes
concursos (2010-2017). Es por ello que la plataforma ImageNet (http://image-
net.org) es la principal fuente de imágenes para a la construcción de la base de
datos de este proyecto.
Se ha decidido para este trabajo construir un dataset de 50 clases constituido en
Objetos generales, Animales, Frutas y Señales de tránsito como se verá a
continuación:
Objetos generales:
Audífonos Helicóptero Resistencia
Bombillo Impresora Rostro
Botella Lápiz Silla
Calculadora Laptop Smartphone
Carro Llave Teclado
Corbata Maleta Tijeras
Fuente de voltaje Moto TV
Grapadora Mouse Zapato
Guitarra Reloj /////////////////////////////////
Tabla 1. Tabla correspondiente a las clases que corresponden a Objetos generales

Animales:
Águila Hámster Tiburón
Cocodrilo Mariposa Tigre
Elefante Oso León
Gorila Pingüino Vaca
Tabla 2. Tabla correspondiente a las clases que corresponden a Animales
21

Frutas:
Aguacate Fresa Naranja
Banano Manzana Sandia
Tabla 3. Tabla correspondiente a las clases que corresponden a Frutas

Señales de tránsito:
Ceda el paso Prohibido parquear Semáforo
Pare Restaurante cerca Zona escolar
Tabla 4. Tabla correspondiente a las clases que corresponden a Señales de transito

Como se mencionó anteriormente, la mayoría de las diferentes clases fueron


construidas descargando imágenes de la base de datos de ImageNet donde en
general se tienen entre 800 y 1200 imágenes por cada una de las clases.
Posteriormente se hizo una elección para que las categorías finalmente constaran
de 500 imágenes, ya que no todas cuentan con una buena representación del objeto
en interés. Finalmente, la base de datos cuenta con 25000 ejemplos,
En particular, todas las categorías pertenecientes a las señales de tránsito a
excepción de la de semáforos, fueron extraídas de Google y completadas utilizando
métodos propios de la librería de OpenCV para Visual Studio, en donde se les
agregaba cierto ruido o características diferentes a las imágenes como
redimensionamientos y rotaciones, ya que no existían entre las imágenes del
ILSVRC

6.2.1.2 PROCESO DE APRENDIZAJE

El sistema de inteligencia artificial está compuesto de tres partes fundamentales a


través de los cuales fluyen los datos suministrados por los usurarios: El proceso de
extracción de características, el arreglo de máquinas de soporte vectorial y
finalmente el análisis de confianzas del sistema.

Figura 10. Diagrama de flujo con las actividades del proceso de aprendizaje
22

El proceso de extracción de características es realizado con la red pre-entrenada


Alex Net. El cual es un modelo de red convolucional que cuenta con 25 capas entre
las cuales se destacan las capas de convolución, capas de normalización ReLU,
capas de reducción de dimensionalidad “Max Pooling” y capas completamente
conectadas. La capa de entrada de Alex Net espera una imagen de 227 por 227
pixeles, mientras que su capa de salida cuenta con 1000 neuronas donde cada una
de ellas corresponde a una de las clases con las que fue pre entrenada la red.
La primera capa completamente conectada de Alex Net se conoce como la capa
“fc7”, en dicho punto todas las capas de convolucion habrán terminado con el
proceso de la extracción de características, por lo tanto, al almacenar los valores de
activación de dicha capa se obtiene un vector con las características extraídas por
la red, dicho vector es por supuesto un vector unidimensional con un total de 4096
dimensiones gracias a la arquitectura de la red. Esta metodología que consta en
utilizar una red pre entrenada solamente para extraer las características de las
imágenes a evaluar se conoce como “Transferencia de aprendizaje” en la literatura.
Arreglo de máquinas de soporte vectorial
La segunda parte del sistema de inteligencia consta de un arreglo de máquinas de
soporte vectorial encargadas de realizar la clasificación de las imágenes recibidas.
Esta es la parte más importante del sistema. Cada una de las máquinas de soporte
vectorial es de tipo One-Class. A cada SVM se le fue asignada una categoría
diferente, y fue entrenada utilizando el 70% de la totalidad de características
extraídas con la red convolucional de imágenes correspondientes a la clase, el 30%
restante fue utilizado como datos de prueba, sin embargo, a la hora de crear un
conjunto de datos de prueba el sistema de auto-entrenamiento busca de manera
autónoma y uniforme imágenes almacenadas en la base de datos las demás
categorías para después extraer las características de las mismas. En total el
sistema reúne una cantidad de datos exactamente igual al 30% tomado
anteriormente de la categoría a entrenar y de esta manera es posible evaluar su
desempeño con datos que no pertenecen a dicha clase.
Como se menciona en el marco teórico, las máquinas de soporte vectorial cuentan
con un Kernel y cada Kernel tiene a su vez asociados unos parámetros que deben
ser sintonizados para obtener el mejor desempeño del mismo.
Sin importar el tipo de Kernel, es necesario realizar lo que se conoce como una
búsqueda de grilla para encontrar los valores apropiados de los parámetros,
La grilla es un espacio discreto en dos dimensiones, con N valores para el parámetro
del Kernel y M valores para el parámetro de regularización del SVM, el cual para el
caso de SVM one-class se llama Nu. Teniendo entonces un total de MN
combinaciones de valores. Cada una de estas combinaciones es utilizada para
entrenar las máquinas de soporte vectorial.
23

El proceso de búsqueda de grilla se realiza con cada uno de los Kernel, y para cada
una de la clases, al hacer esto se evidencia que el Kernel Gaussiano es el que tiene
un mejor desempeño en todas las clases, es por esto que se toma la decisión de
elegir dicho Kernel como el Kernel que usara el sistema para todos los SVM.
Cuando el sistema esté listo para aprender una nueva clase, elegirá el Kernel
Gaussiano por defecto y realizara una búsqueda automática de grilla para así
determinar los valores apropiados de los parámetros. Logrando de esta manera
obtener una selección automática del mejor modelo para cada una de las clases.
Este tipo de arquitectura le permitió al sistema entrenar las categorías nuevas y a
aquellas que necesiten un refuerzo de manera individual y así poder mejorar el
sistema sin necesidad realizar un proceso de entrenamiento completo. Además de
permitir que cada clase pueda tener una cantidad diferente de datos de
entrenamiento.
La tercera y última parte del sistema de inteligencia consta del análisis de confianzas
obtenidas de las máquinas de soporte vectorial. Una vez las imágenes
suministradas pasan por el proceso de extracción de características nombrado
anteriormente dichas características son evaluadas por cada una de las máquinas
de soporte vectorial y cada una de estas retorna una etiqueta y un valor de
confianza. La etiqueta solo toma dos valores 1 en caso de que los datos procesados
correspondan a la clase de la maquina o -1 en caso contrario. Por otro lado, la
confianza retornada tomara un valor positivo en caso de que los datos correspondan
a la categoría de la máquina evaluada y un valor negativo en caso contrario, dicho
valor será más positivo o más negativo de acuerdo con la confianza que tenga de
etiqueta.
Es posible que ningún SVM indique que los datos corresponden a su categoría, en
este caso el sistema retornara el mensaje “No lo sé”. Sin embargo, también es
posible que más de un SVM indique que es su categoría. En este caso el sistema
retornara el nombre de las categorías correspondientes a los SVM con mayor
confianza. Ej. “Rostro o Zapato”. Pero para esto es necesario normalizar dichas
confianzas; La confianza de un SVM corresponde al margen existente entre los
datos de la entrada y el hiperplano creado por el entrenamiento, sin embargo, la
disposición de dichos hiperplano varía de acuerdo con los datos de entrenamiento
y debido a que los datos son diferentes de acuerdo con la categoría es necesario
hacer un proceso de normalización.
Para esto durante el proceso de entrenamiento de las máquinas de soporte vectorial
es necesario almacenar el valor de la confianza máxima encontrada en los datos de
entrenamiento del modelo elegido durante la búsqueda de grilla para así en el
momento de realizar las predicciones del sistema tomar en cuenta dichos valores
únicos por clase para normalizar las confianzas de cada uno de los SVM y ahora
así poder ordenar dichas confianzas de mayor a menor. La ecuación utilizada para
normalizar las confianzas se presenta a continuación:
24

𝑐𝑜𝑛𝑓 ∗ 100
𝐶𝑜𝑛𝑓𝑛 = (5)
𝑚𝑎𝑥𝑐𝑜𝑛𝑓
Donde, 𝐶𝑜𝑛𝑓𝑛 es la confianza nueva, 𝑐𝑜𝑛𝑓 es la confianza del dato actual y
𝑚𝑎𝑥𝑐𝑜𝑛𝑓 es la confianza máxima de la categoría.

6.2.2 INTERACCIÓN CON EL USUARIO

6.2.2.1 REQUERIMIENTOS PARA LA INTERFAZ CON EL


USUARIO

Como ya se ha comentado, se quiere crear en este proyecto un método de evaluar


el sistema de manera global y de tal forma que se pueda poner a prueba su
funcionamiento desde cualquier situación cotidiana. Es por ello que la opción de
crear una aplicación móvil capaz de hacer la identificación de un objeto hace que
cualquier persona pueda tener acceso al sistema de inteligencia.
La aplicación es en realidad intuitiva y fácil de manejar por cualquier usuario. Es
capaz de acceder a la cámara del celular teniendo como vista principal un stream
de lo que está viendo la cámara.
Es en dicha vista que existe la opción de tomar la foto y determinar si se usa o no
el flash. La siguiente vista debe determinar si el usuario está conforme con la foto
que ha tomado, así que existen dos botones, uno para confirmar y llevar al proceso
de identificación y otro si desea repetir la foto,
Por último, el usuario debe ser dirigido a una vista donde se obtiene el resultado o
categoría correspondiente al objeto que existe en la imagen para luego volver a
tomar una nueva foto.
Como ya se mencionó, la aplicación es intuitiva y agradable al usuario, sus botones
son acordes a las acciones que cada uno realiza y está desarrollada en un sistema
operativo comercial y de alto uso por la población.

6.2.2.2 DESARROLLO DE LA APLICACIÓN MÓVIL

Android es un sistema operativo para móviles desarrollado por Google. Su


popularidad ha ido creciendo constantemente desde el momento en que fue lanzado
al mercado. En 2014 logró consolidarse como el S.O preferido en Estados Unidos;
25

registrando el 50,6% de las ventas frente al 43,9 % de iOS y el restante 5,5 %


generado por Windows Phone y BlackBerry [22]. Con el paso del tiempo Android
se impuso incluso como el S.O más usado entre los dispositivos inteligentes
incluyendo los equipos de cómputo. En 2017 se determinó que el 37,93% de los
internautas del mundo navega desde un dispositivo Android, superando el 37,91%
de Microsoft con un Windows que tenía el rotulo de ser el S.O más importante desde
hace 40 años [23].
Estas estadísticas demuestran que desarrollar la aplicación con la que interactúa el
usuario para móviles Android, mejora la distribución y crecimiento del proyecto en
la población.
Por otro lado, Xamarin es un complemento ajustado a la suite de Visual Studio, sus
SDK´s permiten desarrollar aplicaciones nativas para Android, iOS y Windows
Mobile programando en C#. Esta herramienta acopla de buena manera el hecho de
querer hacer la aplicación en Android y la experiencia con la que cuentan los
creadores de este proyecto de grado de trabajar en ambientes de desarrollo de .Net,
específicamente el desarrollo de aplicaciones en Windows forms.
De acuerdo con los requerimientos mencionados anteriormente se procede a
implementar la aplicación de Android utilizando Visual Studio y Xamarin.
Trabajar en este ambiente permite crear interfaces gráficas de manera similar a
como se hace en aplicaciones de Windows forms y WPF, donde en los formularios
se pueden utilizar controles como cuadros de texto, botones, cuadros desplegables,
botones de radio etc.
Dichos controles cuentan con atributos y eventos asociados; atributos como las
dimensiones, color y forma y eventos como pulsar, arrastrar o mantener. Son estas
propiedades que permiten el funcionamiento de la aplicación de acuerdo con las
indicaciones del usuario.
Vista o form principal:
Proyecta la primera etapa de interacción del usuario (MainActivity) con el sistema
por lo que se busca inicialmente que haya un stream de lo que está viendo la cámara
del celular. Para ello, en el manifiesto de la aplicación es necesario otorgar permisos
de acceso como lo son el acceso a cámara y a memoria si se desea almacenar
cada foto que se tome.
Para ver el stream de buena manera es necesario en los atributos de la cámara
ajustar la rotación, el centro de gravedad y el autoenfoque.
26

Figura 11. Imagen representativa de la Figura 12. Captura de pantalla de la primera


primera vista en el diseñador de visual Studio vista en funcionamiento

Como se puede observar en las figuras 11 y 12, en este formulario existen dos
botones, el superior permite activar o desactivar el flash de la cámara, mientras que
el botón inferior mediante el evento de pulsar toma la foto y redirige al usuario a la
siguiente actividad (PictureActivity)
PictureActivity es el formulario que aparece una vez se haya tomado la foto. Aquí el
usuario debe decidir si está conforme o no con la foto tomada. Para ello se cuenta
con dos botones. En la parte superior existe el botón de cancelar, el cual retornara
a la actividad anterior permitiendo al usuario realizar la foto de nuevo
27

Figura 13. Imagen representativa del Figura 14. Imagen representativa de


PictureActivity vista en el diseñador de visual Actividad en funcionamiento
Studio

El botón inferior corrobora la acción del usuario indicando que se está conforme con
la foto tomada y que se tiene claridad del elemento a evaluar, enviándola al sistema
de inteligencia.
La imagen se encuentra almacenada como un mapa de bits desde el momento que
es tomada. Dicho mapa se sobrescribe si es necesario tomar una nueva foto, de lo
contrario es pasado como parámetro entre las siguientes actividades para hacer el
procesamiento de la imagen
Form de resultado
De ser elegido el botón de enviar, el usuario se encontrará con la vista encargada
de decirle cual es el objeto que se encuentra en la imagen. (CNNResult). Es en este
punto donde la aplicación debe hacer la comunicación con el sistema de
inteligencia.
Como se mencionó anteriormente, se hace cierto procesamiento al mapa de bits
que contiene la imagen. Inicialmente se hace un resized (redimensionamiento de la
imagen) a 350*350 pixeles utilizando las funciones propias de C# y de la librería
Android.Graphics.
El mapa de bits resultante contiene la información de las capas R, G y B de la
imagen. Por facilidades de comunicación con el sistema de inteligencia, lo mejor es
hacer un “desenrrollamiento” de la información. Convertir cada capa en un buffer
28

unidimensional. Y que sea el sistema de inteligencia el encargado de convertir


nuevamente ese buffer en una matriz para recrear la imagen.
Como se verá en la figura 15, CNNresult cuenta con un textbox y un botón. Dicho
textbox que contiene el mensaje inicial “Cargando la imagen…” Es reemplazado por
otra cadena de texto con el resultado del objeto reconocido una vez se halla
procesado la imagen. El botón “Atrás” devuelve en cualquier momento al usuario a
la actividad anterior.

Figura 15. Imagen representativa de Actividad en funcionamiento

6.2.2.3 IMPLEMENTACIÓN DE UN SERVICIO WEB

La idea de hacer una aplicación móvil., nace con la motivación de que el proyecto
pueda ser utilizado por cualquier persona con alcance a un Smartphone. El sistema
de reconocimiento se encuentra implementado en un computador y debe ser capaz
de recibir la información de los celulares que cuenten con la aplicación. Por ello la
opción elegida fue utilizar Eclipse neón como ambiente de desarrollo, y en el hacer
un proyecto web dinámico en Java.
En el proyecto de Java cuenta con un método que recibe como parámetros tres
buffers de enteros con la información de las capas R, G y B de una imagen, y otros
dos enteros con las dimensiones de la misma; ancho y alto
Con estas variables, el método de Java puede llamar Matlab (en donde está el
programa de reconocimiento), pasarle los ya mencionados parámetros con la
información de la imagen para que sea en el mismo programa de Matlab que se
haga la reconstrucción matricial de la imagen y el posterior reconocimiento.
Este método de Java debe publicarse como un Web Servicie. Generando una
dirección IP pública a la cual deben direccionarse como referencia los teléfonos con
29

la aplicación móvil. Todo el proceso será explicado con mayor detalle a


continuación.
Comunicación Eclipse Matlab:
Como es sabido, es en Matlab donde existen los toolbox y las librerías que facilitan
el desarrollo de sistemas de aprendizaje profundo. Por ello es necesario realizar un
puente con otra aplicación que pueda generar sus métodos como servicios web.
Siendo a través de Java y eclipse que se reciba la información de la imagen y que
Matlab siga encargado de la inteligencia. La comunicación entre estos dos
ambientes de desarrollo se logra a través de una herramienta creada por Mathworks
“Matlab Engine”.
Matlab Engine consta de una serie de librerías para lenguajes como Java, C++, C#
y Python, que les permite hacer llamados a rutinas de Matlab. Para este proyecto
se hace el llamado de la función de Matlab (CNNPredictColor) que recibe los
parámetros de la imagen y retorna el resultado a la misma aplicación de Java
Web Service:
Los métodos de Java encargados de recibir los parámetros con la información de la
imagen se encuentran en un proyecto web dinámico.
La forma de hacer públicos estos métodos, es mediante servidores web con soporte
de servlets. Apache Tomcat 8.5 es el software utilizado en este proyecto. Está
desarrollado en java y funciona como el servidor el necesario para recibir peticiones
de cualquier referencia web y redireccionar dicho peticiones a los objetos que este
publicando.
Por otro lado, junto al apache Tomcat es necesario instalar un complemento también
perteneciente a la suite de Apache; Axis2. El Axis2 es el que permite hacer la debida
comunicación entre un cliente y un Servidor de servicios web de clases Java
mediante protocolos SOAP (Simple Object Acces Protocol). Generando la interfaz
pública que describe los servicios web y la manera que deben ser usados (WSDL)
Una vez instalado el Apache Tomcat y su complemento, es posible crear el Servidor
Web con sus respectivos Servicios. El servidor a acceder es llamado Servidor Tesis,
el cual contiene la clase Servicios y en ella el servicio principal; CNNPredictColor.
Dicho servicio está dispuesto para recibir como ya se ha mencionado, los tres
canales o capas de una imagen y mediante el Engine, hacer llegar estas variables
a una función de Matlab con el mismo nombre. El funcionamiento correcto del
Engine depende de la inclusión en el proyecto web dinámico del complemento
descrito para java, siendo este un “external jar” que se encuentra en los documentos
y archivos que trae Matlab.
30

La aplicación debe ser ejecutada como un Servidor, mediante la opción de Run on


server, allí se especifica el contenedor que lo mantendrá y el puerto por el cual se
publicara; en este caso son Apache Tomcat y el puerto 8085
El despliegue exitoso del servidor gracias al axis2, muestra una interfaz como la que
se verá en la siguiente imagen, la cual como se puede observar contiene la opción
de servicios, validación; donde existen las librerías necesarias y administración con
documentación extra sobre el complemento de axis2.

Figura 16. Imagen representativa del servidor desplegado

La opción de servicios redirige a una interfaz donde se puede apreciar el nombre de


la clase que contiene los servicios web (Servicios) y la lista de los mismos. En este
caso únicamente existe el servicio de CNNPredictColor. Al seleccionar la opción del
nombre de la clase se puede obtener la dirección wsdl del local host que contiene
el servidor

Figura 17. Imagen representativa del servidor con el listado de servicios web
31

Inicialmente la mejor manera de poner a prueba el servidor, es consumir sus


servicios desde una aplicación local hecha también en eclipse y Java. Por ello se
ha creado un nuevo proyecto web dinámico con especificación de cliente. Al hacer
esto el cliente solicita una referencia wsdl a la que debe apuntar. Seleccionando la
dirección local que generó el servidor, el cliente crea las clases necesarias con las
referencias de los métodos a los que tiene acceso.
La figura 18 evidencia el explorador de proyectos de eclipse. Donde en primera
instancia se ve el proyecto web Servidor Tesis, y en él la clase Servicios. También
se puede observar el nuevo proyecto creado para consumir el servidor de manera
local; Cliente Tesis. En el existen la clase Cliente y las clases que se generan al
implementar la referencia wsdl que apuntan a la clase Servicios;
ServiciosCallBackHandler, ServiciosException y ServiciosStub

Figura 18. Imagen del explorador de proyectos de eclipse.

Al hacer la referencia, es posible entonces desde el cliente (y en general desde


cualquier cliente que contenga la referencia web) crear objetos de la clase Servicios,
para instanciar los métodos y valores de los parámetros que estos necesitan.
Es así como en la Clase Cliente se hace una aplicación que leyera una imagen
contenida en una carpeta del computador, y haga el procesamiento de crear los tres
buffers con la información R, G y B de la misma. Como se verá a continuación, el
cliente es entonces capaz de comunicarse con el servidor el cual debe retornar el
reconocimiento de una imagen, en esta prueba, la ruta contiene la imagen de un
hámster.
32

Figura 19. Imagen representativa del cliente local consumiendo el servicio Web y mostrando el
resultado

La figura 19 muestra como el código del cliente es capaz de ver los parámetros de
CNNPredictColor, el cual le retorna la etiqueta obtenida en Matlab, como se puede
observar, efectivamente corresponde a un Hámster.
De acuerdo a lo anterior, es posible ahora generar una dirección pública para hacer
de la aplicación móvil el cliente que consuma el servicio web.
Visual Studio permite de igual manera como se hizo en eclipse, implementar una
referencia Web para poder crear objetos que instancien los métodos de la clase
Servicios indicando la url de la dirección pública.
33

Figura 20. Interfaz de Visual Studio para agregar la referencia web

De esta manera la aplicación ya puede comunicarse con el sistema de inteligencia,


accediendo al servidor y pasándole la información que se genera en la actividad
CNNResult de la imagen para obtener el resultado de la imagen reconocida.

Figura 21. Imagen de la aplicación móvil obteniendo el resultado de la imagen


34

6.2.3 REALIMENTACIÓN Y AUTO ENTRENAMIENTO

Se puede pensar entonces que la aplicación cumple con su objetivo de tomar una
foto e indicar al usuario la categoría a la que corresponde el objeto que se encuentre
en la imagen. Dicha interacción con el usuario puede ser provechosa para el mismo
sistema, aportando las imágenes que no pueden ser reconocidas y asignándoles la
categoría a la que pertenecen.
De esta manera gracias a los usuarios se puede incrementar la base de datos.
Obteniendo más ejemplos por cada categoría e incluso permitiendo que el usuario
sea gestor de nuevas categorías.
Se necesita entonces que el sistema sea reentrenado con las nuevas imágenes y
las categorías añadidas. Para ello se hacen modificaciones en las vistas existentes
en la aplicación más la inclusión de una nueva. Así mismo, es necesario
implementar nuevos métodos en el Servidor para poder crear las nuevas categorías,
guardar imágenes y programar el auto entrenamiento del sistema
La actividad de la aplicación móvil CNNResult es la encargada de entregar el
resultado al usuario una vez la imagen es procesada. Es por ello que en dicha
actividad deben existir dos botones de selección para que el usuario pueda
determinar si la categoría que arroja el sistema corresponde al resultado esperado.

Como se puede observar en la figura 22, CNNResult


cuenta con un nuevo textbox que pregunta al usuario
si el resultado es el esperado. Cuenta también con los
botones de selección. El primer botón aprueba la
decisión del sistema de inteligencia retornando al
usuario a la actividad principal. El botón que
desaprueba desplegará la vista final donde el usuario
realimentara el sistema con la imagen que ha tomado.

Figura 22. Imagen representativa de la vista CNNResult modificada


35

Una vez el usuario se encuentra en la interfaz de Realimentación, se deben


contemplar dos posibilidades; la primera en donde el sistema fallo al reconocer la
imagen, y la categoría que se considera ya existe, por lo que el usuario debe poder
ver con que categorías ya cuenta el sistema, seleccionar la correspondiente y enviar
la imagen al sistema para que pueda ser almacenada en la base de datos.
La segunda situación se da cuando la imagen (la cual no fue correctamente
identificada) pertenece a una categoría completamente nueva. En este caso es el
usuario quien debe proporcionar la etiqueta de la nueva categoría en la que se
almacenará la nueva imagen.
El sistema debe ser capaz de identificar cambios en su base de datos, para asi
poder entrenar las nuevas imágenes de las categorías existentes o esperar a que
exista el mínimo de imágenes necesarias para entrenar la nueva categoría. El
proceso es explicado con mayor detalle en la figura 23:

Figura 23. Diagrama de flujo con el algoritmo de auto entrenamiento


36

La realimentación por parte del usuario y auto


entrenamiento del sistema comienza una vez se
oprima el botón que desaprueba el resultado
obtenido en CNNResult. Abriendo la última vista
de la aplicación; Realimentación.
Tal como indica el anterior diagrama de flujo, lo
primero que se debe hacer en esta etapa es
enseñar al usuario que categorías existen, ya que
es probable que el sistema haya fallado en
reconocer alguna categoría ya entrenada, por lo
que se busca seguir incrementando la cantidad de
ejemplos de las categorías que fallen.
Es por eso que la vista cuenta con un Spinner; un
control que proporciona una lista desplegable de
ítems el cual se llena al consumir un nuevo
servicio web que ha sido adherido al servidor.
Figura 24. Imagen representativa de la vista Realimentación

Dicho servicio al ser consumido debe listar el contenido de dos carpetas que se
encuentran en el computador; Dataset y DataSetnoOfi. La primera carpeta contiene
las categorías existentes que cuentan con más de 100 imágenes, es decir,
categorías ya entrenadas. La siguiente carpeta contiene categorías que han sido
recientemente creadas, por eso la cantidad de imágenes no es considerada
suficiente como para que sea entrenada por el sistema.
Si la categoría se encuentra entre las opciones de la lista, mediante el botón Enviar,
se podrá enviar a un nuevo servicio, la imagen tomada por el usuario y la categoría
que ha sido seleccionada y que puede ser observada en un textbox que se
encuentra bajo el text que dice Selección
Cuando la selección de la categoría proviene del Spinner, y dicha categoría se
encuentra en la carpeta Dataset, se anota en un block de notas que categoría tiene
una nueva imagen y debe ser entrenado.
De no existir entre las opciones del Spinner la consideración del usuario, se utiliza
el botón de ingresar nueva categoría. Dicho botón habilita un cuadro de texto donde
el usuario puede digitar la categoría, la cual se ve reflejada nuevamente en el
textbox de selección. De esta manera se puede enviar la imagen y la etiqueta
correspondiente al sistema. Al ser dicha etiqueta enviada desde el cuadro de texto,
el sistema debe crear en la carpeta de DataSetnoOfi una nueva categoría con el
nombre recibido y almacenar la imagen que ha tomado el usuario. Si la carpeta
37

alcanza la cantidad mínima de 100 imágenes debe ser entrenada y re ubicada en la


carpeta de Dataset.
Lo anterior se logra a través de un servicio adicional llamado SaveNewImage el cual
recibe como parámetros los tres canales que describen la imagen (R, G, B), el ancho
y alto, además de un booleano con el cual se identifica si la categoría proviene del
Spinner o del cuadro de texto para así saber dónde almacenar la imagen.
Ha sido creada también una aplicación de escritorio AutoTrain, que se encarga de
entrenar las categorías que lo necesitan. Este programa es el encargado de revisar
el archivo de texto plano donde se anotan las categorías que han registrado nuevas
imágenes. Y mediante el Engine llamar la función de Matlab que hace el
entrenamiento, pasándole como parámetro el nombre especifico de lo que debe
entrenar.
Por otra parte, AutoTrain debe revisar las carpetas que existen en DataSetnoOfi y
revisar la cantidad de ejemplos que existen en cada una, si alguna de las carpetas
contiene al menos 100 imágenes, debe ser movida a Dataset y ser entrenada.
El auto entrenamiento de las categorías se hace diariamente utilizando la
herramienta de Quartz Scheduler. El Quartz es una librería desarrollada para
aplicaciones Java y de .Net con capacidad de agendar y calendarizar tareas, las
cuales pueden ser ejecutadas a una hora específica y durante un periodo de tiempo
determinado. Gracias a esto, se logra que la aplicación de escritorio AutoTrain
pueda ser ejecutada todos los días a las 23:59.

Figura 25. Imagen ejemplificando el proceso de realimentación

En la imagen anterior se puede ver como desde la aplicación se intenta hacer el


reconocimiento de un pocillo. Esta es una categoría que jamás ha sido entrenada,
por ello en la etapa dos se puede ver como falla el sistema a la hora de clasificar.
38

El procedimiento conlleva a indicar la mala decisión del sistema, invitando al usuario


a realimentar el sistema. En la fase tres se puede ver como la categoría no existe
entre las opciones del Spinner, requiriendo como se aprecia en la fase 4 que se
digite la respuesta que debería ser correcta.

Figura 26. Imagen ejemplificando el proceso de realimentación

Al tomar una nueva foto de un pocillo, el sistema no debe ser capaz de reconocerlo
correctamente aún pues no hay la cantidad suficiente para hacer el entrenamiento.
Pero la opción de pocillo se encuentra entre las opciones del Spinner al haber sido
creada la categoría en la carpeta DataSetnoOfi
39

7. RESULTADOS DEL PROYECTO

Las pruebas realizadas para poner a prueba el funcionamiento del proyecto se han
constituido en tres etapas. Inicialmente se debe evaluar el sistema de inteligencia
desarrollado en Matlab, evidenciando los resultandos que arrojan las matrices de
confusión y las gráficas de superficie a la hora de clasificar imágenes.
Posterior a ello, es necesario poner a prueba el comportamiento de la
realimentación del sistema; incrementando sustancialmente la cantidad de ejemplos
de una de las categorías, comparando su eficiencia antes y después de agregar las
nuevas imágenes tomadas por la aplicación.
Por último, continuando con la evaluación del auto entrenamiento y realimentación
del sistema, se quiere con ayuda de algunos usuarios, crear nuevas categorías
completando la cantidad mínima de ejemplos necesarios para que el sistema haga
el entrenamiento y sea capaz de identificarlas en un posterior test de las mismas.

7.1 Prueba 1: Validación del software de reconocimiento

En machine learning (especialmente en problemas de clasificación), una de las


maneras más utilizas para medir el desempeño del sistema es utilizando las
matrices de confusión. Las matrices de confusión generalmente tienen igual
cantidad de filas como de columnas, y la cantidad de estas depende del número de
clases que es capaz de evaluar el sistema. En el caso de este proyecto ese número
son 50 categorías, pero debido a que el sistema es capaz de decir que los datos
ingresados no corresponden a ninguna de estas categorías el tamaño final de la
matriz de confusión es de 50 filas por 51 columnas.
La matriz de confusión fue creada utilizando 1000 imágenes tomadas de internet
que el sistema jamás había visto, 20 de cada una de las categorías. La diagonal de
la matriz nos muestra entonces los verdaderos positivos en los datos de prueba.
Esta matriz fue normalizada con el objetivo de que solo tomará valores entre 0 y 1.
La media de la matriz de confusión será entonces la exactitud media del sistema,
que en este caso es de 0.799 lo cual es equivalente a un 79.9%. Vale la pena aclarar
que para la obtención de esta matriz solo se toma en cuenta la categoría en la cual
el sistema de inteligencia tiene más confianza
40

Exactitud Categoría Exactitud Categoría


0,9 'Aguacate' 0,4 'Manzana'
0,9 'Águila' 0,75 'Mariposa'
0,75 'Audífonos' 0,95 'Moto'
0,85 'Banano' 0,4 'Mouse'
0,8 'Bombillo' 0,95 'Naranja'
1 'Botella' 0,85 'Oso'
1 'Calculadora' 0,75 'Pare'
0,9 'Carro' 0,75 'Pingüino'
0,85 'Ceda_el_paso' 0,85 'Prohibido parquear'
0,95 'Cocodrilo' 0,75 'Reloj'
0,7 'Corbata' 0,45 'Resistencia'
0,95 'Elefante' 0,35 'Restaurante cerca'
0,95 'Fresa' 0,95 'Rostro'
0,85 'Fuente Voltaje' 0,55 'Sandia'
0,8 'Gorila' 0,7 'Semáforo'
0,75 'Grapadora' 0,95 'Silla'
0,75 'Guitarra' 0,8 'Smartphone'
0,95 'Hámster' 0,8 'TV'
0,9 'Helicóptero' 0,6 'Teclado'
0,85 'Impresora' 0,75 'Tiburón'
0,7 'Lápiz' 0,7 'Tigre'
0,65 'Laptop' 0,5 'Tijeras'
0,85 'León' 0,85 'Vaca'
0,85 'Llave' 0,8 'Zapato'
0,85 'Maleta' 0,55 'Zona escolar'

Tabla 5. Tabla correspondiente a los datos arrojados por la matriz de confusión, indicando la
exactitud de cada una de las categorías existentes.

Cada una de las categorías requirió de una búsqueda de grilla individual, gracias a
esto y a la diferencia de datos entre las clases los valores de los parámetros del
SVM son diferentes en todas las categorías. Dichos valores son mostrados en la
tabla 6.

Categoría Nu Gamma
'Aguacate' 0,037162722 3,05E-05
'Aguila' 0,015625 3,05E-05
'Audifonos' 0,015625 3,05E-05
41

'Banano' 0,015625 8,63E-05


'Bombillo' 0,052556026 0,000145167
'Botella' 0,088388348 0,000145167
'Calculadora' 0,015625 8,63E-05
'Carro' 0,052556026 8,63E-05
'Ceda_el_paso' 0,022097087 8,63E-05
'Cocodrilo' 0,037162722 3,05E-05
'Vaca' 0,015625 8,63E-05
'Corbata' 0,148650889 0,000145167
'Elefante' 0,015625 3,05E-05
'Fresa' 0,015625 5,13E-05
'FuenteVoltaje' 0,022097087 8,63E-05
'Gorila' 0,037162722 5,13E-05
'Grapadora' 0,052556026 0,000145167
'Guitarra' 0,015625 8,63E-05
'Hamster' 0,015625 3,05E-05
'Impresora' 0,015625 0,000145167
'Lapiz' 0,015625 0,000244141
'Laptop' 0,015625 3,05E-05
'Leon' 0,015625 3,05E-05
'Llave' 0,018581361 0,000145167
'Helicoptero' 0,026278013 8,63E-05
'Maleta' 0,052556026 8,63E-05
'Manzana' 0,044194174 5,13E-05
'Mariposa' 0,022097087 0,000145167
'Moto' 0,015625 3,05E-05
'Mouse' 0,088388348 0,000145167
'Naranja' 0,015625 0,000145167
'Oso' 0,015625 5,13E-05
'Pare' 0,022097087 0,000145167
'Pinguino' 0,044194174 3,05E-05
'Prohibido_parquear' 0,015625 8,63E-05
'Reloj' 0,148650889 8,63E-05
'Resistencia' 0,052556026 0,000244141
'Restaurante_cerca' 0,015625 0,000145167
'Rostro' 0,015625 3,05E-05
'Sandia' 0,015625 8,63E-05
'Semaforo' 0,015625 8,63E-05
'Silla' 0,015625 0,000244141
'Smartphone' 0,052556026 8,63E-05
'TV' 0,022097087 5,13E-05
42

'Teclado' 0,074325445 0,000145167


'Tiburon' 0,026278013 8,63E-05
'Tigre' 0,015625 8,63E-05
'Tijeras' 0,015625 0,000244141
'Zapato' 0,015625 0,000244141
'Zona_escolar' 0,015625 0,000145167

Tabla 6. Valores para los parámetros Nu y Gamma de cada uno de los Support Vector Machine
correspondiente a cada una de las 50 clases originales.

Una manera más cómoda e intuitiva de visualizar el resultado de una búsqueda de


grilla es por medio de las gráficas de superficie, con ayuda de dichas graficas
podemos ver el cómo cambia error con diferentes combinaciones de parámetros
Nu y Gamma, como lo muestran las figuras de la 27 a la 30.

Figura 27. GS “Águila” Figura 28. GS “Aguacate”

Figura 29. GS “Audífonos” Figura 30. GS “Banano


43

7.2 Prueba 2: Validación de la realimentación de una categoría


existente

Se determina para esta evaluación, incrementar significativamente la cantidad de


ejemplos existentes en la categoría “Llave” únicamente con imágenes provenientes
de la aplicación móvil. Para ello, se hace la recopilación de 125 nuevas imágenes
de llaves, indicándole al sistema (independientemente del resultado) que el
reconocimiento no fue el esperado, para así realimentar el sistema con las imágenes
obtenidas.
Antes de efectuar el entrenamiento de las nuevas imágenes (el cual se hace
automáticamente a las 23: 59 pm), se realiza un test de 30 imágenes para evaluar
el comportamiento del sistema cuando son obtenidas directamente desde la
aplicación.
En dicha evaluación se presentan 5 situaciones; cuando el sistema reconoce el
objeto como primera opción, cuando lo hace como segunda opción, si es capaz de
hacerlo como opción definitiva, si el sistema falla y por último cuando el sistema no
es capaz de reconocerlo. Los resultados obtenidos se muestran en la Tabla 2
Opción 1ra 2da Def Fallo No sabe
Cantidad 13 4 1 11 1
Porcentaje 43,3 13,3 3,3 36,7 3,3
Tabla 7. Tabla correspondiente a los datos recopilados al evaluar 30 nuevas llaves.

Sumando la totalidad de aciertos (primera opción, segunda opción y opción


definitiva), se puede determinar que el sistema acierta en 18 oportunidades, siendo
este el 60 % de los datos evaluados.
Al ser ejecutado el algoritmo de auto entrenamiento, es posible nuevamente probar
el sistema con 30 nuevos ejemplos, cuantificando los datos obtenidos en las mismas
5 situaciones que se evaluaron en la tabla 2.
Opción 1ra 2da Def Fallo No sabe
Cantidad 13 6 3 7 1
Porcentaje 43,33 20 10 23,3 3,3
Tabla 8. Tabla correspondiente a los datos recopilados al evaluar 30 nuevas llaves después del
entrenamiento.

Sumando de igual manera en los nuevos datos la totalidad de aciertos, se obtiene


un total de 22 aciertos de 30, siendo esto el 73,3% de los datos evaluados.
44

7.3 Prueba 3: Validación de la creación de nuevas categorías

Con la ayuda de ciertos usuarios seleccionados, es posible obtener la cantidad


suficiente de ejemplos para realizar el entrenamiento (100 ejemplos c/u) de 3
nuevas categorías. Siendo estas pertenecientes a la sección de objetos; Cuchara,
Mano y Pocillo. Una vez hecho el entrenamiento de estas, es posible evaluar el
desempeño de cada una, utilizando nuevas imágenes provenientes de la aplicación
móvil. Analizando su comportamiento y tasa de aprendizaje de acuerdo con los días
en los que se les fue adicionando nuevos ejemplos

Figura 31.. Imagen representativa de la inclusión de las tres nuevas categorías en el Spinner de la
aplicación
45

Resultados Mano
Mano
Día Malas Buenas
Jueves 6 Julio 2017 1 0
Viernes 7 Julio 2017 0,36486 0,635135
Sábado 8 Julio 2017 0,25 0,75
Domingo 9 Julio 2017 0,16666 0,83333
Lunes 10 Julio 2017 0,1888 0,8112
Miércoles 12 Julio 2017 0,17 0,83
Tabla 9. Tabla correspondiente a los datos recopilados de efectividad a través de los días en la
categoría “Mano”

Categoría: Mano
100%
80%
Efectividad

60%
40%
20%
0%
Jueves 6 Viernes 7 Sábado 8 Domingo 9 Lunes 10 Miercoles
Julio 2017 Julio 2017 Julio 2017 Julio 2017 Julio 2017 12 Julio
2017
Días

Malas Buenas
Logarítmica (Malas) Logarítmica (Buenas)

Figura 32. Imagen representativa de la gráfica de barras con el comportamiento del sistema a través
de los días en la categoría “Mano”
46

Resultados Cuchara

Cuchara
Día Malas Buenas
Sábado 8 Julio 2017 1 0
Domingo 9 Julio 2017 0,532 0,468
Lunes 10 Julio 2017 0,2105 0,7895
Martes 11 Julio 2017 0 1
Miércoles 12 Julio 2017 0 1
Tabla 10. Tabla correspondiente a los datos recopilados de efectividad a través de los días en la
categoría “Cuchara”

Categoría: Cuchara
100%
90%
80%
70%
Efectividad

60%
50%
40%
30%
20%
10%
0%
Sábado 8 Julio Domingo 9 Julio Lunes 10 Julio Martes 11 Julio Miercoles 12
2017 2017 2017 2017 Julio 2017
Días

Malas Buenas Logarítmica (Malas) Logarítmica (Buenas)

Figura 33. Imagen representativa de la gráfica de barras con el comportamiento del sistema a través
de los días en la categoría “Cuchara”
47

Resultados Pocillo

Pocillo
Día Malas Buenas
Lunes 10 Julio 2017 1 0
Martes 11 Julio 2017 0,95 0,05
Miércoles 12 Julio
0,4722 0,5278
2017
Jueves 12 Julio 2017 0,3333 0,667
Tabla 11. Tabla correspondiente a los datos recopilados de efectividad a través de los días en la
categoría “Pocillo”

Categoría: Pocillo
100%
90%
80%
70%
Efectividad

60%
50%
40%
30%
20%
10%
0%
Lunes 10 Julio 2017 Martes 11 Julio 2017 Miercoles 12 Julio Jueves 12 Julio 2017
2017
Días

Malas Buenas Logarítmica (Malas) Logarítmica (Buenas)

Figura 34. Imagen representativa de la gráfica de barras con el comportamiento del sistema a través
de los días en la categoría “Pocillo”
48

8. IMPACTO SOCIAL

Este proyecto sienta las bases teóricas para futuros trabajos que tengan la misma
motivación. El reconocimiento de objetos se volvería importante para superar las
barreras expuestas en la introducción del proyecto. Ayudando de diferentes
maneras a las personas como en situaciones en las que no se reconozca bien el
significado en un texto, por ejemplo, en letreros, anuncios y señalizaciones, o
situaciones en donde sea complicado reconocer objetos necesarios de la vida
cotidiana que se encuentren en entornos de trabajo o en una vivienda.
Uno de los aportes principales se puede ver al acoplar la aplicación y el sistema de
inteligencia para personas invidentes o con problemas serios de visión, en donde
se vean beneficiados al tener conocimiento de todo lo que se encuentre a su
alrededor al implementar un sintetizador de texto a voz.
Incluso se puede pensar en procesos educativos, donde igualmente con ayuda de
un sintetizador de texto a voz, los niños puedan aprender a reconocer los objetos
que existen en sus casas y en los ambientes en los que se encuentren.
49

9. CONCLUSIONES

Durante el desarrollo del proyecto se vio como la eficiencia del sistema mejoraba
notablemente al incrementar la cantidad de ejemplos que existen en cada categoría.
Inicialmente el sistema se entrenó con 150 imágenes, los resultados obtenidos en
la prueba 1 sugirieron que la exactitud de cada SVM mejoraría al incrementar
significativamente la base de datos. Por ello ImageNet se convirtió en una
herramienta útil para la creación de la mayor parte la base de datos, permitió realizar
las pruebas variando la cantidad de ejemplos. Aun cuando no todos los ejemplos
que contiene dicho repositorio sean imágenes consideradas buenas para el
entrenamiento.
Por otro lado, también se pudo (a través de la prueba 2) ver que la realimentación
no solo mejora la eficiencia del sistema por el hecho de incrementar la cantidad
ejemplos. Realizar entrenamiento con imágenes tomadas directamente con la
aplicación es beneficioso para el reconocimiento de las categorías entrenadas; ya
que es con la cámara de los celulares que realmente se pondrá a prueba el sistema.
El diseño de múltiples máquinas de soporte vectorial One class como sistema de
clasificación, demostró ser muy eficiente para el desarrollo de este proyecto, pues
le otorgo gran versatilidad el hecho de asociar un SVM a cada una de las categorías.
De esta manera el entrenamiento de cada una de ellas (tanto nuevas como
existentes) se puede realizar de manera autónoma sin depender del resto del
sistema. Además del hecho de que esta arquitectura permite que cada clase crezca
a su propio ritmo y que la calidad del clasificador no se vea afectada por un
desbalance en cuanto al número de ejemplos por cada una de las categorías
(situación que si afectaría en caso de elegir otro tipo de arquitectura como lo sería
One vs All).

Una búsqueda de grilla automática es un factor clave a la hora de entrenar cada


una de las clases del sistema. Pues el valor óptimo de los parámetros de los SVMs
usados cambia de clase en clase. Esto sumado al diseño de múltiples SVM (uno
por clase) permite que el sistema sea completamente autónomo y sea capaz de
mejorar continuamente gracias a los datos proporcionados por los usuarios. Este
mejoramiento continuo no solo hace referencia al aumento de precisión en las
clases existentes a medida del aumento de sus datos de entrenamiento, sino
también la capacidad de aprender clases nuevas suministradas por los usuarios.

La implementación de servicios web permite la comunicación de cualquier


dispositivo que pueda acceder a su referencia Web con el sistema encargado de
realizar la identificación y clasificación de las imágenes. Dicha implementación se
comportó de la manera esperada, ya que al consumir los servicios se hace posible
retornar al usuario el resultado obtenido, además de permitir la realimentación del
sistema y la creación de nuevas categorías tal como lo demuestran las pruebas 2 y
3 de la sección 7.
50

Inicialmente se buscó diseñar una metodología de clasificación basada en la


similitud y contexto de los objetos. A lo largo del desarrollo del proyecto se pudo
concluir que la inclusión de la red pre entrenada de Alex Net permitiría generalizar
todos los objetos que conforman la base de datos creada. Esto se debe gracias que
la ya mencionada red, fue entrenada con 1 millón de imágenes repartidas entre 1000
categorías diferentes, permitiendo obviar la agrupación de objetos de acuerdo con
la similitud y el contexto. Por ello también se determinó cambiar la implementación
de un conjunto de aplicaciones que permitan la interacción usuario-servidor por una
única aplicación capaz de reconocer cualquier tipo de objeto.

10. TRABAJO FUTURO

El mayor desafío a futuro es continuar mejorando la eficiencia del sistema


clasificador. De acuerdo como se ha visto, continuar con la expansión de la base de
datos (incrementando la cantidad de ejemplos por cada categoría) disminuyó el
error de generalización para cada categoría. Es por ello que se pretende con
ImageNet junto a las imágenes con las que los usuarios realimentan el sistema,
llegar a tener entre 1500 y 2000 imágenes por cada una de las 50 categorías
originales.
Por otro lado, se plantea también para mejorar la eficiencia probar el sistema
reemplazando la red neuronal pre entrenada de Alex Net por las redes VGG-16 y
VGG-19, las cuales son también redes neuronales convolucionales pre entrenadas
con más de un millón de imágenes y capaces de clasificar al menos 1000 categorías
[24]. Siendo ambas redes, modelos implementados por el Visual Geometry Group
Team desde el 2014 pero que hasta hace poco han sido aplicadas a los toolbox de
Matlab.
Dicho grupo se ha encargado de estudiar y demostrar que existe una mejora
significativa aumentando las capas de las redes tradicionales con 16 y 19 capas
extra destinadas a hacer filtros y convoluciones de más a la imagen en cuestión
[25].
Otro de los retos planteados es lograr que el sistema sea más robusto en cuanto a
la identificación de más de un objeto en una imagen. Siendo esta una situación
problemática a la hora de extraer las características y ajustar los pesos de los
clasificadores. Pues el resultado no convergerá propiamente a alguna de las
categorías existentes. Esto se logra implementando un R-CNN (regions with
51

convolutional neural networks) que permite hacer la detección de objetos acotando


la imagen por regiones. Afortunadamente estas redes convolucionales han sido
agregadas recientemente a los toolbox de Matlab

Figura 35. Imagen representativa de una Figura 36. Imagen representativa de una
situación con más de una categoría situación con más de una categoría

Por último, la recopilación de los datos y las pruebas realizadas, demostraron que
la manera como se hace la transmisión de datos y la clasificación de las imágenes
hace que el proyecto dependa de la calidad del internet donde esté operando,
haciendo que el sistema sea más rápido o más lento. Es por lo que se ve necesario
replantear la cantidad y funciones de los Web services, ya que la forma para hacer
un sistema más veloz seria extrayendo el modelo de Deep learning que existe en
Matlab e implementarlo en el celular. Siendo en el mismo dispositivo móvil que se
haga la evaluación y clasificación requerida.
52

11. BIBLIOGRAFÍA

[1]. Laura Viviana Castrillón, Memoria natural y artificial, México 1990. Capitulo II;
Historia de la computación
[2]. J. Gleen Brockshear, Introducción a la computación, Estados unidos, 11ª
edición; La historia de la computación.
[3]. Redes Neuronales Instituto tecnológico de Nuevo Laredo, Jesús Martín
Buentello, México Agosto del 2005;
[4]. Universidad Nacional abierta y a distancia, Visión general de la inteligencia
artificial y los sistemas expertos, Lección 5

[5]. Soraya Paniagua, Inteligencia artificial: de machine learning al inquietante Deep


learning, Colombia Agosto del 2015
[6]. Licheng Zhang, Xihong Wu and Dingsheng Luo, Real-time Activity Recognition
on Smartphones Using Deep Neural Networks, Key Lab of Machine Perception,
China 2015
[7]. Miguel Bordallo Lopez, Samy Ait-Aoudia, Xiayi Feng, Kinship verification from
Videos Using Spatio-Temporal Texture Features: Deep Learning, Universidad de
Finlandia, Centro de desarrollo de tecnologías Algeria, 2015
[8]. Meiyin Wu and Li Chen, Image Recognition Based on Deep Learning, College
of Computer Science and Technology, Wuhan University of Science and Technology
2015
[9]. Yi Sun, Xiaogang Wang and Xiaoou Tang,Hybrid Deep Learning for Face
Verification,China 2016
[10].Ioannis Mariolis, Georgia Peleka, Andreas Kargakos , Sotiris Malassiotis,
Pose and Category Recognition of Highly Deformable Objects Using Deep Learning,
nformation Technologies Institute, Centre for Research & Technology Hellas, 2015
[11]. Richard Socher, Brody Huval, Bharath Bhat, Christopher D. Manning, Andrew
Y. Ng Computer Science Department, Stanford University, Stanford, Convolutional-
Recursive Deep Learning for 3D Object Classification, 2012
[12]. Julio A. Garibay Ruiz, Las ciencias computacionales, Mundo Digital. México
Octubre del 2013
[13]. Clever Data Big Data Prediction, Que es el Machine learning?, rescatado en
Septiembre del 2016 desde http://cleverdata.io/que-es-machine-learning-big-data/
53

[14]. Predicting the Motion of a Robot Manipulator with Unknown Trajectories Based
on an Artificial Neural Network, Sai Hong Tang, Chun Kit Ang, Mohd Khairol Anuar
Bin Mohd Ariffin and Syamsiah Binti Mashohor, Septiembre del 2014
[15]. Redes neuronales artificiales y sus aplicaciones, escuela superior de
ingeniería de Bilbao, Xabier Basogain Olabe
[16]. Redes neuronales artificiales y sus aplicaciones, escuela superior de
ingeniería de Bilbao, Xabier Basogain Olabe
[17] Tutorial sobre Máquinas de Vectores Soporte (SVM), Dpto. de Inteligencia
Artificial, ETS de Ingeniería Informática, Universidad Nacional de Educación a
Distancia, Enrique J. Carmona Suárez
[18] Neural Networks: A Comprehensive Foundation, 2nd edition, 1998, Simon
Haykin
[19]. Máquina de soporte vectorial multiclass, Ledvir Chávez Valderrama, Julio del
2017, desde
https://www.youtube.com/watch?v=Ot3xexd3H8w
[20]. Tomado de Deep Learning.TV en Octubre del 2016, desde
https://www.youtube.com/channel/UC9OeZkIwhzfv-_Cb7fCikLQ
[21]. Microsoft developers, Web services, un ejemplo práctico. Tomado en Octubre
del 2016 de https://msdn.microsoft.com/es-es/library/bb972248.aspx
[22] Android se convierte en el sistema operativo móvil más usado de Estados
Unidos, Enero del 2014.
Tomado desde: https://www.xatakandroid.com/mercado/android-se-convierte-en-
el-sistema-operativo-movil-mas-usado-de-estados-unidos
[23] Android destrona a Windows como el sistema operativo más usado, Redacción
Tecnosfera, Abril del 2017,
Tomado desde http://www.eltiempo.com/tecnosfera/novedades-tecnologia/android-
destrona-a-windows-como-el-sistema-operativo-mas-usado-en-red-74448
[24] Pretrained VGG-16 and VGG-19 convolutional neural networks,
Tomado desde https://www.mathworks.com/help/nnet/ref/vgg19.html
[25] Very Deep Convolutional Networks for Large-Scale Visual Recognition, Visual
Geometry Group, Department of Engineering Science, University of Oxford Karen
Simonyan and Andrew Zisserman.
54

Imágenes y tablas:
Figura 1. Representación de un perceptrón básico. Tomada de Redes neuronales
artificiales y sus aplicaciones, escuela superior de ingeniería de Bilbao, Xabier
Basogain Olabe
Figura 2. Ejemplo del hiperplano construido por un SVM para separar dos clases,
imagen tomada LAS MÁQUINAS DE SOPORTE VECTORIAL, Gustavo A.
Betancourt
Figura 3. Imagen representativa de la confiabilidad de acuerdo con el resultado
arrojado por la ecuación del hiperplano, tomada del video “Maquina de soporte
vectorial”
Figura 4. Imagen ejemplificando la determinación del mejor hiperplano, tomada del
video “Maquina de soporte vectorial”
Figura 5. Figura representativa de un caso No linealmente separable tomada
Tutorial sobre Máquinas de Vectores Soporte, Enrique Carmona
Figura 6. Imagen representativa del funcionamiento del Deep learning para la
identificación de rostros, Imagen tomada dehttps://www.quora.com/What-is-deep-
learning
Figura 7. Imagen representativa del funcionamiento del Deep learning para la
clasificación de animales, Imagen tomada dehttps://www.quora.com/What-is-deep-
learning
Figura 8. Imagen representativa del funcionamiento que debe seguir el proyecto
Figura 9. Diagrama de flujo con las actividades del proyecto
Figura 10. Diagrama de flujo con las actividades del proceso de aprendizaje
Figura 11. Imagen representativa de la primera vista en el diseñador de Visual
Studio
Figura 12. Captura de pantalla de la primera vista en funcionamiento
Figura 13. Imagen representativa del PictureActivity vista en el diseñador de Visual
Studio
Figura 14. Imagen representativa de Actividad en funcionamiento
Figura 15. Imagen representativa de Actividad en funcionamiento
Figura 16. Imagen representativa del servidor desplegado
Figura 17. Imagen representativa del servidor con el listado de servicios web
Figura 18. Imagen del explorador de proyectos de eclipse.
55

Figura 19. Imagen representativa del cliente local consumiendo el servicio Web y
mostrando el resultado
Figura 20. Interfaz de Visual Studio para agregar la referencia web
Figura 21. Imagen de la aplicación móvil obteniendo el resultado de la imagen
Figura 22. Imagen representativa de la vista CNNResult modificada
Figura 23. Diagrama de flujo con el algoritmo de auto entrenamiento
Figura 24. Imagen representativa de la vista Realimentación
Figura 25. Imagen ejemplificando el proceso de realimentación
Figura 26. Imagen ejemplificando el proceso de realimentación
Figura 27. Imagen correspondiente a la Gráfica de Superficie de la categoría
Aguacate
Figura 28. Imagen correspondiente a la Gráfica de Superficie de la categoría Águila
Figura 29. Imagen correspondiente a la Gráfica de Superficie de la categoría
Audífonos
Figura 30. Imagen correspondiente a la Gráfica de Superficie de la categoría
Banano
Figura 31. Imagen representativa de la inclusión de las tres nuevas categorías en
el Spinner de la aplicación
Figura 32. Imagen representativa de la gráfica de barras con el comportamiento del
sistema a través de los días en la categoría “Mano”
Figura 33. Imagen representativa de la gráfica de barras con el comportamiento del
sistema a través de los días en la categoría “Cuchara”
Figura 34. Imagen representativa de la gráfica de barras con el comportamiento del
sistema a través de los días en la categoría “Pocillo”
Figura 35. Imagen representativa de una situación con más de una categoría,
tomada en internet desde http://www.soloparamadres.com/601-mascotas-para-los-
ninos-los-gatos
Figura 36. Imagen representativa de una situación con más de una categoría,
tomada en internet desde http://laterceravenezuela.blogspot.com.co/2011/07/las-
mujeres-y-las-computadoras.html
Figura 37. Imagen correspondiente a la Gráfica de Superficie de la categoría
Bombillo
Figura 38. Imagen correspondiente a la Gráfica de Superficie de la categoría Botella
56

Figura 39. Imagen correspondiente a la Gráfica de Superficie de la categoría


Calculadora
Figura 40. Imagen correspondiente a la Gráfica de Superficie de la categoría Carro
Figura 41. Imagen correspondiente a la Gráfica de Superficie de la categoría Ceda
el paso
Figura 42. Imagen correspondiente a la Gráfica de Superficie de la categoría
Cocodrilo
Figura 43. Imagen correspondiente a la Gráfica de Superficie de la categoría
Corbata
Figura 44. Imagen correspondiente a la Gráfica de Superficie de la categoría
Elefante
Figura 45. Imagen correspondiente a la Gráfica de Superficie de la categoría Fresa
Figura 46. Imagen correspondiente a la Gráfica de Superficie de la categoría Fuente
de voltaje
Figura 47. Imagen correspondiente a la Gráfica de Superficie de la categoría Gorila
Figura 48. Imagen correspondiente a la Gráfica de Superficie de la categoría
Grapadora
Figura 49. Imagen correspondiente a la Gráfica de Superficie de la categoría
Guitarra
Figura 50. Imagen correspondiente a la Gráfica de Superficie de la categoría
Hámster
Figura 51. Imagen correspondiente a la Gráfica de Superficie de la categoría
Impresora
Figura 52. Imagen correspondiente a la Gráfica de Superficie de la categoría Lápiz
Figura 53. Imagen correspondiente a la Gráfica de Superficie de la categoría Laptop
Figura 54. Imagen correspondiente a la Gráfica de Superficie de la categoría León
Figura 55. Imagen correspondiente a la Gráfica de Superficie de la categoría Llave
Figura 56. Imagen correspondiente a la Gráfica de Superficie de la categoría Maleta
Figura 57. Imagen correspondiente a la Gráfica de Superficie de la categoría
Manzana
Figura 58. Imagen correspondiente a la Gráfica de Superficie de la categoría
Mariposa
57

Figura 59. Imagen correspondiente a la Gráfica de Superficie de la categoría Moto


Figura 60. Imagen correspondiente a la Gráfica de Superficie de la categoría Mouse
Figura 61. Imagen correspondiente a la Gráfica de Superficie de la categoría
Naranja
Figura 62. Imagen correspondiente a la Gráfica de Superficie de la categoría Oso
Figura 63. Imagen correspondiente a la Gráfica de Superficie de la categoría Pare
Figura 64. Imagen correspondiente a la Gráfica de Superficie de la categoría
Pingüino
Figura 65. Imagen correspondiente a la Gráfica de Superficie de la categoría
Prohibido Parquear
Figura 66. Imagen correspondiente a la Gráfica de Superficie de la categoría Reloj
Figura 67. Imagen correspondiente a la Gráfica de Superficie de la categoría
Resistencia
Figura 68. Imagen correspondiente a la Gráfica de Superficie de la categoría
Restaurante cerca
Figura 69. Imagen correspondiente a la Gráfica de Superficie de la categoría Rostro
Figura 70. Imagen correspondiente a la Gráfica de Superficie de la categoría Sandia
Figura 71. Imagen correspondiente a la Gráfica de Superficie de la categoría
Semáforo
Figura 72. Imagen correspondiente a la Gráfica de Superficie de la categoría Silla
Figura 73. Imagen correspondiente a la Gráfica de Superficie de la categoría
Smartphone
Figura 74. Imagen correspondiente a la Gráfica de Superficie de la categoría TV
Figura 75. Imagen correspondiente a la Gráfica de Superficie de la categoría
Teclado
Figura 76. Imagen correspondiente a la Gráfica de Superficie de la categoría Tigre
Figura 77. Imagen correspondiente a la Gráfica de Superficie de la categoría Tijeras
Figura 78. Imagen correspondiente a la Gráfica de Superficie de la categoría
Tiburón
Figura 79. Imagen correspondiente a la Gráfica de Superficie de la categoría Vaca
Figura 80. Imagen correspondiente a la Gráfica de Superficie de la categoría Zapato
58

Figura 81. Imagen correspondiente a la Gráfica de Superficie de la categoría Zona


escolar
Figura 82. Imagen correspondiente a la Gráfica de Superficie de la categoría
Helicóptero

Tablas:
Tabla1. Tabla correspondiente a las clases que corresponden a objetos generales
Tabla 2. Tabla correspondiente a las clases que corresponden a Animales
Tabla 3. Tabla correspondiente a las clases que corresponden a Frutas
Tabla 4. Tabla correspondiente a las clases que corresponden a Señales de
transito
Tabla 5. Tabla correspondiente a los datos arrojados por la matriz de confusión,
indicando la exactitud de cada una de las categorías existentes.
Tabla 6. Valores para los parámetros Nu y Gamma de cada uno de los Support
Vector Machine correspondiente a cada una de las 50 clases originales.
Tabla 7. Tabla correspondiente a los datos recopilados al evaluar 30 nuevas llaves
Tabla 8. Tabla correspondiente a los datos recopilados al evaluar 30 nuevas llaves
después del entrenamiento.
Tabla 8. Tabla correspondiente a los datos recopilados de efectividad a través de
los días en la categoría “Mano”
Tabla 10. Tabla correspondiente a los datos recopilados de efectividad a través de
los días en la categoría “Cuchara”
Tabla 11. Tabla correspondiente a los datos recopilados de efectividad a través de
los días en la categoría “Pocillo”
59

ANEXOS
Gráficas de superficie de las demás categorías

Figura 37. GS “Bombillo” Figura 38. GS “Botella”

Figura 39. GS “Calculadora” Figura 40. GS “Carro”


60

Figura 41. GS “Ceda el paso” Figura 42. GS “Cocodrilo”

Figura 43. GS “Corbata” Figura 44. GS “Elefante”

Figura 45. GS “Fresa” Figura 46. GS “Fuente de Voltaje”


61

Figura 47. GS “Gorila” Figura 48. GS “Grapadora”

Figura 49. GS “Guitarra” Figura 50. GS “Hámster”

Figura 51. GS “Impresora” Figura 52. GS “Lápiz”


62

Figura 54. GS “León”


Figura 53. GS “Laptop”

Figura 55. GS “Llave” Figura 56. GS “Maleta”

Figura 57. GS “Manzana” Figura 58. GS “Mariposa”


63

Figura 59. GS “Moto” Figura 60. GS “Mouse”

Figura 61. GS “Naranja” Figura 62. GS “Oso”

Figura 63. GS “Pare” Figura 64. GS “Pingüino”


64

Figura 65. GS “Prohibido parquear” Figura 66. GS “Reloj”

Figura 67. GS “Resistencia” Figura 68. GS “Restaurante cerca”

Figura 69. GS “Rostro” Figura 70. GS “Sandia”


65

Figura 71. GS “Semáforo” Figura 72. GS “Silla”

Figura 73. GS “Smartphone” Figura 74. GS “TV”

Figura 75. GS “Teclado” Figura 76. GS “Tigre”


66

Figura 77. GS “Tijeras” Figura 78. GS “Tiburón”

Figura 79. GS “Vaca” Figura 80. GS “Zapato”

Figura 81. GS “Zona escolar” Figura 82. GS “Helicóptero

Das könnte Ihnen auch gefallen