Está en la página 1de 102

MONITOREO DE AFLUENCIA DE PERSONAS UTILIZANDO APRENDIZAJE

PROFUNDO

LUCAS BECHARA ECHEVERRY


2136925
STEVEN PARRA GIRALDO
2141430

UNIVERSIDAD AUTÓNOMA DE OCCIDENTE


FACULTAD DE INGENIERÍA
DEPARTAMENTO DE AUTOMÁTICA Y ELECTRÓNICA
INGENIERÍA MECATRÓNICA
SANTIAGO DE CALI
2019
MONITOREO DE AFLUENCIA DE PERSONAS UTILIZANDO APRENDIZAJE
PROFUNDO

LUCAS BECHARA ECHEVERRY


STEVEN PARRA GIRALDO

Proyecto de grado para optar al título de


Ingeniero Mecatrónico

Director
JESÚS ALFONSO LÓPEZ SOTELO
Ph. D. Ingeniero electricista

UNIVERSIDAD AUTÓNOMA DE OCCIDENTE


FACULTAD DE INGENIERÍA
DEPARTAMENTO DE AUTOMÁTICA Y ELECTRÓNICA
INGENIERÍA MECATRÓNICA
SANTIAGO DE CALI
2019
Nota de aceptación:

Aprobado por el Comité de Grado en


cumplimiento de los requisitos exigidos
por la Universidad Autónoma de Occi-
dente para optar al título de Ingeniero
Mecatrónico.

Juan Carlos Perafan

Jurado

William Gutiérrez Marroquin

Jurado

Santiago de Cali, 13 de Agosto de 2019

3
AGRADECIMIENTOS

Agradezco a mi madre y a mi padre por su apoyo incondicional a lo largo de estos


últimos años con el fin de motivarme en el alcance de esta meta. Así mismo, gracias
a toda mi familia por sus buenos deseos. Y, sobretodo, gracias a Dios por permitir
que este trabajo fuese dispuesto de la mejor manera para su cumplimiento.

Lucas Bechara Echeverry

Agradezco a mi madre y abuela por los sacrificios que han venido haciendo todos
estos años con el objetivo de apoyarme en el transcurso de mi carrera profesional.

Steven Parra Giraldo

Se agradece de manera conjunta a nuestro director de tesis Jesús Alfonso López


Sotelo por brindarnos la teoría durante las asignaturas de Redes Neuronales Ar-
tificiales y Deep Learning, y Control Inteligente, ya que, gracias a estas, logramos
tomar la decisión de solucionar el problema mediante el uso de inteligencia artificial.
Por otro lado, agradecemos profundamente a Zeida Solarte, por darnos las bases,
además de las asesorías desde la perspectiva del Internet de las Cosas, puesto que
gracias a esto se pudo hacer un sistema de monitoreo continuo y con acceso a la
información de manera remota. Además, se les agradece a los profesores que tu-
vimos durante la vida universitaria, debido a que gracias a ellos logramos tener las
bases que permitieron realizar este trabajo de grado, teniendo en cuenta la calidad
que exige ser parte de la Universidad Autónoma de Occidente.

4
CONTENIDO

Pág.

GLOSARIO 12

RESUMEN 14

INTRODUCCIÓN 15

1 PLANTEAMIENTO DEL PROBLEMA 16

2 JUSTIFICACIÓN 17

3 OBJETIVOS 18
3.1 OBJETIVO GENERAL 18
3.2 OBJETIVOS ESPECÍFICOS 18

4 ANTECEDENTES 19

5 TEORÍA DE LAS REDES NEURONALES ARTIFICIALES 31


5.1 NEURONA ARTIFICIAL 31
5.2 REDES NEURONALES ARTIFICIALES 34
5.3 RED NEURONAL MONOCAPA 35
5.3.1 Red neuronal multicapa 36
5.3.2 Redes Multicapa profundas 36
5.3.3 Redes convolucionales 37
5.3.4 Transfer Learning 38
5.4 TIPOS DE OPTIMIZADORES 38
5.4.1 Gradiente descendente 39
5.4.2 Momentum 39
5.4.3 AdaGrad 40
5.4.4 AdaDelta 41
5.4.5 Adam 42
5.4.6 Ftrl 42

5
5.5 TASA DE APRENDIZAJE 43
5.6 LOTES 43
5.7 TUNING DE ENTRENAMIENTO (HIPERPARAMETROS) 43
5.8 PROPAGACIÓN INVERSA (BACKPROPAGACIÓN) 44
5.9 DATASET 47
5.9.1 Tipos de Dataset 47
5.9.2 Variables Cualitativas o Categóricas 49
5.9.3 Escala Nominal 49
5.9.4 Escala Ordinal 50
5.10 Extracción de características 50
5.10.1 Aprendizaje profundo (Deep Learning) 51
5.10.2 Aprendizaje supervisado 52
5.10.3 Visión por Computador 53

6 SOFTWARE REQUERIDO Y TEORÍA IOT 54


6.1 LENGUAJES DE PROGRAMACIÓN 54
6.1.1 Python 54
6.1.2 Lenguaje C 55
6.2 LIBRERIAS PARA VISIÓN COMPUTARIZADA 55
6.2.1 Matplotlib 55
6.2.2 Numpy 56
6.2.3 Opencv 56
6.3 ENTORNOS 57
6.3.1 Anaconda 57
6.4 TENSORFLOW 58
6.4.1 Tensorboard 58
6.5 YOLO DETECTION 60
6.5.1 Darkflow 60
6.6 GOOGLE COLABORATORY 60
6.6.1 Máquinas virtuales 60
6.6.2 CPU - Google Cloud Platform 61
6.6.3 GPU - Google Cloud Platform 61
6.7 INTERNET DE LAS COSAS (IoT) 62
6.7.1 Objetos de IoT 62
6.7.2 Sensores 63

6
6.7.3 Plataformas de IoT 64

7 METODOLOGÍA 66
7.1 OBTENCIÓN DE DATOS 66
7.2 PREPARACIÓN DE DATOS 66
7.3 DETECCIÓN DE PERSONAS 67
7.4 PREPACIÓN DE LOS DATOS CON YOLO 67
7.5 PLATAFORMAS EN LA NUBE 67
7.6 GRAFO 68
7.7 SOFTWARE DE VISUALIZACIÓN DE INFORMACIÓN 69
7.8 VALIDACIÓN 69

8 RESULTADOS 70
8.1 EJECUCIÓN DE LA OBTENCIÓN DE DATOS 70
8.2 EJECUCIÓN DE LA PREPARACIÓN DE DATOS 76
8.3 ENTRENAMIENTO DE RED PARA CLASIFICACIÓN DE NIVELES DE
OCUPACIÓN EN LA UAO 79
8.4 TESTEO DE LA RED NEURINAL PROFUNDA 83
8.5 BASE DE DATOS 87
8.6 PROCESAMIENTO Y ALMACENAMIENTO DE DATOS 89
8.7 INTERFAZ GRAFICA ADMINISTRADOR 90
8.8 INTERFAZ GRAFICA USUARIO 91

9 CONCLUSIONES 93

REFERENCIAS 96

7
LISTA DE FIGURAS

Pág.
Fig. 1 Cafetería llena 16
Fig. 2 Mejores resultados del desafió ImageNet 2012.[6] 20
Fig. 3 Representación de AlexNet .[5] 20
Fig. 4 Infraestructura de sensores en el estadio Croke Park .[8] 22
Fig. 5 Detección de objetos con TensorFlow MobileNet.[10]. 23
Fig. 6 Vista desde un Celular. [13] 24
Fig. 7 Metodología de conteo de personas utilizando extracción de
colores y segmentación para la detección de rostros 25
Fig. 8 Ejemplo de imagen procesada [16]. 26
Fig. 9 Diagrama del parqueadero con indicaciones [15]. 26
Fig. 10 Prototipo [15]. 27
Fig. 11 Aplicación del prototipo [15]. 27
Fig. 12 Imagen de escala de grises y su máscara correspondiente y c)
ejemplo de subdivisión de imagen [17]. 28
Fig. 13 Imágenes sintéticas: a) imagen inicial, c) inicial más 5 % y d)
inicial más 10 % de información, b), d) y f) los resultados del método
propuesto, respectivamente. [17]. 29
Fig. 14 Etiquetado de imágenes de drones en sabana africana [18]. 29
Fig. 15 Resultados de detección de animales en África [18]. 30
Fig. 16 Neurona Artificial. [20]. 32
Fig. 17 Red Neuronal Monocapa [22]. 35
Fig. 18 Red Neuronal Multicapa. [23]. 36
Fig. 19 Red Neuronal Multicapa Profunda. [23]. 37
Fig. 20 Ejemplo de red convolucional [24]. 37
Fig. 21 Re-entrenar ultima capa Softmax. [25]. 38
Fig. 22 Tasa de entrenamiento según sus hiperparametros [28]. 44

8
Fig. 23 Previsualización de dataset MNIST [31]. 49
Fig. 24 Ejemplo de Visión de Computador [38]. 53
Fig. 25 Tensorboard [51]. 59
Fig. 26 Ejemplo de lente ojo de pez.[60]. 64
Fig. 27 Diagrama cliente - servidor.[61]. 65
Fig. 28 Cámara 360. 70
Fig. 29 Cámara seguridad cafetería. 71
Fig. 30 Cámara Cafetería Primer Piso. 71
Fig. 31 Cámara laboratorio Electrónica. 72
Fig. 32 Cámara laboratorio Automática. 73
Fig. 33 Base de Datos Entrenamiento. 74
Fig. 34 Base de Datos Entrenamiento: 9 videos representativos de 7
minutos y medio en donde se ilustran cada uno de los estados de
ocupación por parte de personas en cafetería primer piso, laborato-
rio de electrónica y laboratorio de automática. 75
Fig. 35 Diagrama de flujo Entrenamiento: Vista general de entrenamiento. 76
Fig. 36 Carpetas de 9 niveles de ocupación con cuadros delimitadores
generados por Yolo Detection. 77
Fig. 37 Carpeta Electrónica Vacía con cuadros delimitadores genera-
dos por Yolo Detection. 78
Fig. 38 Grafo general de la red de clasificación de niveles de ocupación. 80
Fig. 39 Cuellos de botella generados por la red para el entrenamiento
(Bottlenecks). 81
Fig. 40 Entrenamiento con 1000 iteraciones a una tasa de aprendizaje
(learning rate) de 0.01. 82
Fig. 41 Evolución de la Exactitud (accuracy) respecto a las iteraciones. 82
Fig. 42 Evolución del Cruce de entropía cruzada (cross entropy) res-
pecto a las iteraciones. 83
Fig. 43 Base de Datos Testeada. 87

9
Fig. 44 Tabla de MySQL. 88
Fig. 45 Diagrama de flujo IoT. 89
Fig. 46 Interfaz Administrador 90
Fig. 47 Interfaz Administrador 91
Fig. 48 Interfaz usuario Móvil 92

10
LISTA DE TABLAS

Pág.
TABLA I Nomenclatura del Algoritmo BackPropagation 33
TABLA II Tarifas de Taxi en New York 2018 48
TABLA III Resultados DNN MobileNet V1.0 (Primera Parte) 85
TABLA IV Resultados DNN MobileNet V1.0 (Segunda Parte) 86

11
GLOSARIO

ACCURACY: Nivel de acierto en el entrenamiento, teniendo en cuenta los archivos


de validación vs los archivos de entrenamiento, entre más cerca de 1 esté mejor, es
un buen indicador para saber que la red neuronal quedó bien entrenada.68
ARRAY: Un array es un medio de guardar un conjunto de objetos de la misma clase,
conocido como un vector.56
BITS: Bit es el acrónimo de Binary digit y un bit es un dígito del sistema de numera-
ción binario.55
BYTES: Byte es la unidad de información de base utilizada en computación y en te-
lecomunicaciones, y que resulta equivalente a un conjunto ordenado de ocho bits.55
CO: Capa Oculta.36,45
CS: Capa de Salida.45
CUALITATIVA: Representa cualidad o atributo.49
CUANTITATIVA: Numérico.49
FRAMES: Imágenes que conforman un vídeo.66
GRAFO: El Grafo es un diagrama donde se ilustran las conecciones o los nodos de
las capas.32
IOT: “Red de objetos cotidianos interconectados a través de Internet”.6, 62
IP: Una dirección IP es un número que identifica, de manera lógica y jerárquica, a
una Interfaz en red.62, 63
LOSS: Pérdida en el entrenamiento, entre más cerca a cero esté, mejor resultado
de entrenamiento se obtiene.68
MLP: Red Multicapa.36
NEURONA ARTIFICIAL: Es la representación matemática de la neurona biológi-
ca.31
NFC: Tecnología inalámbrica de corto alcance (Near Field Communication).62
OPTIMIZADOR: Buscar tener la mejor cantidad de neuronas y la mejor precisión.39,
42

12
PESO SINÁPTICO: Representan la intensidad de interacción entre cada neuro-
na.32.
RFID: Identificador por radio frecuencia (Radio Frequency Identification).62
RNA: Las redes neuronales artificiales son un modelo computacional vagamente
inspirado en el comportamiento observado en su homólogo biológico. 34, 51-53
SCRIPT: En informática, un script, archivo de órdenes, archivo de procesamiento
por lotes o, cada vez más aceptado en círculos profesionalesy académicos, es un
programa usualmente simple, que por lo regular se almacena en un archivo de texto
plano [1]. 54
TIPADO DINÁMICO: Un lenguaje de programación es dinámicamente tipado si una
misma variable puede tomar valores de distinto tipo en distintos momentos. La ma-
yoría de lenguajes de tipado dinámico son lenguajes interpretados, como Python o
Ruby. [2].54 .
XOR: Compuerta lógica no lineal, si le entra un 1, saca un 0, si le entra un 0 saca
un 1.44

13
RESUMEN

En el presente proyecto se desarrolló una aplicación de aprendizaje profundo (Deep


Learning) la cual identifica el nivel de ocupación en lugares comunes con afluencia
de personas en la Universidad Autónoma de Occidente, haciendo uso de la técnica
transfer Learning para identificar de forma cualitativa el estado de ocupación. Para
llevar a cabo este proyecto, se utilizó una red neuronal pre-entrenada (Yolo Detec-
tion) para clasificar el objeto(Persona). Con base en dicha información se creó el
dataset compuesto de 9 clases, las cuales representan los estados (vacío, medio y
lleno) de la cafetería primer piso, laboratorio de electrónica y laboratorio de automá-
tica. La aplicación fue desarrollada en TensorFlow, en donde se usó Yolo Detection
para añadir la característica de los cuadros delimitadores a las imágenes. Una vez
se obtuvieron las representaciones de las imágenes procesadas por Yolo Detection,
posteriormente se entrenó una capa clasificadora mediante transfer learning usan-
do Mobilenet V1.0 para realizar de forma cualitativa la representación de ocupación
por parte de personas en los lugares. El sistema de interfaz gráfica está compuesto
por 2 componentes; Aplicación desarrollada en Java para administradores y el desa-
rrollo de una aplicación de Android Studio para usuarios. Se hizo de esta manera
para evitar de que el usuario final tenga acceso a las imágenes capturadas por el
sistema, y con ello solo puede acceder a la información de los estados de niveles
de ocupación, por otro lado, el administrador cuenta con una aplicación Web, en la
cual puede interactuar con toda la información del sistema, modificar y eliminar da-
tos de la base de datos en caso de ser necesario. El sistema de monitoreo funciona
en tiempo real teniendo como sensor una cámara tipo (Ojo de pez), obteniendo el
nivel de ocupación actualizado cada 5 minutos, este es almacenado en una base de
datos MySQL para su registro.

Palabras Claves: Redes neuronales, capas convolucionales, Deep learning, Goo-


gle colab, Detección de objetos, Yolo detection, TensorFlow, transfer learning, da-
taset, Gradiente descendente, redes, ReLU, BackPropagation, momentum, Cámara
tipo(Ojo de pez), parámetros de entrenamiento, IoT.

14
INTRODUCCIÓN

En el presente documento se mostrarán los procesos desarrollados para poder tener


el monitoreo de afluencia de personas utilizando aprendizaje profundo, se muestran
técnicas de detección de objetos como Yolo Detection en su versión traducida a
TensorFlow como lo es Darkflow, además del uso de la red neuronal convolucional
de Mobilenet v1.0, con la cual se clasificaron los estados vacío, medio y lleno de la
cafetería primer piso, los laboratorios de electrónica y automática. Posteriormente
se usará IoT para poder hacer una conexión en tiempo real de las imágenes cap-
turadas por la cámara y la base de datos para almacenar un histórico de: id, lugar,
imagen, nivel de ocupación, hora y fecha.

Por lo tanto el objetivo del proyecto es poder tener un monitoreo de afluencia en


es-tablecimientos públicos, en tiempo real mediante la implementación de técnicas
de aprendizaje profundo (Deep Learning), teniendo como prioridad el hecho de
poder tomar decisiones respecto al nivel de ocupación (vacío, medio y lleno) de
personas en lugares con afluencia de público, para así optimizar tiempos de
espera y evitar en lo posible la congestión; Este tipo de tecnología es escalable, y
puede implemen-tarse para otros proyectos como por ejemplo en las estaciones
y buses del MIO, así los usuarios tienen conocimiento del estado de ocupación de
los buses; también que se tenga información acerca de qué tan llenos se
encuentran los laboratorios, biblioteca o la cafetería de la Universidad Autónoma
de Occidente.

15
1. PLANTEAMIENTO DEL PROBLEMA

¿A la hora de desplazarse, se considera que es una pérdida de tiempo pasar por un


lugar lleno de personas? ¿Alguna vez se le ha dificultado encontrar una mesa libre
en cafetería para poder almorzar?

Fig. 1. Cafetería llena

La afluencia excesiva de personas en un lugar determinado puede provocar pérdi-


das deliberadas de tiempo, lo que se traduce en dificultad para encontrar un sitio de
reunión o en su defecto un lugar tranquilo para poder estudiar. Esto se ve reflejado
en el interior de la Universidad Autónoma de Occidente, debido a la gran cantidad
de personas que hacen uso de los espacios con mayor cantidad de público, como
la cafetería, biblioteca y el área de “mesas”. Por otro lado, existen entidades o em-
presas que les gusta tener un monitoreo de las personas que entran y salen de
sus establecimientos, esta es una tarea tediosa puesto que requiere una importan-
te cantidad de tiempo hacer este conteo mediante observadores o las facturas del
lugar; Más aún si el establecimiento dispone de varias puertas de acceso; Lo cual
puede reflejar un porcentaje de error significativo puesto que el hecho de que una
persona tenga una factura, no quiere decir que sea una sola persona comprando,
en su lugar pueden haber varias. Lo anterior genera el siguiente interrogante:
¿Cómo diseñar un sistema que permita monitorear la afluencia y visualizar el nivel
de ocupación de personas en sitios públicos usando aprendizaje profundo?

16
2. JUSTIFICACIÓN

La importancia del presente proyecto radica en la capacidad de analizar datos


en tiempo real, con el objetivo de dar una estimación del nivel de ocupación en
strea-ming debido al análisis de la afluencia en las diferentes áreas con mayor
presencia de gente en la UAO.

La intención de trabajar con técnicas de Inteligencia Artificial (IA) es para


resolver problemas que afectan el bienestar de las personas en su vida
cotidiana. Este tipo de tecnología a futuro podrá beneficiar a las personas al
interior de la UAO porque permitirá ser más eficientes con la organización del
tiempo, al momento de ir a co-mer a cafetería o estudiar en alguna otra área
del campus con la certeza de que estará vacía o llena. Depende de las
aplicaciones, porque es probable que sea útil saber si la biblioteca está llena
para ir a desarrollar alguna actividad, o algo por el estilo y es información que
sirva para realizar tamaños de mercado los cuales permi-ten poder determinar la
viabilidad de un producto o servicio a partir de un mercado primario (Clientes
potenciales), normalmente estos análisis del mercado se realizan haciendo uso de
encuestas, por ello sería de gran utilidad saber si el sitio en donde se requiere
hacer las encuestas se encuentra lleno, puesto que se tendrán mayores
probabilidades de éxito en dicho estudio. A partir del modelo se podría estimar
el número de personas que se encuentran en cafetería a las horas de almuerzo,
etc. Por ende, el alcance del proyecto es bastante amplio, sin mencionar por
supuesto las aplicaciones en la movilidad de la ciudad y en la industria. El
hecho de poder saber si un bus o estación del MIO se encuentra congestionada
serviría para que se le pueda dar más prioridad a la ruta o estación en cuestión,
suministrando más cantidad de buses o en su defecto evitar dicha congestión
utilizando otro medio de transporte, en caso de que la persona deseé llegar con
urgencia a su destino.

17
3. OBJETIVOS

3.1. OBJETIVO GENERAL

Desarrollar un sistema de monitoreo con aprendizaje profundo que permita


analizar la afluencia de personas en las áreas o lugares con mayor flujo de
público de la Universidad Autónoma de Occidente, pudiendo determinar y
visualizar el nivel de ocupación en lugares críticos como biblioteca, lugares de
talleres y laboratorios, cafeterías, entre otros.

3.2. OBJETIVOS ESPECÍFICOS

Desarrollar dataset para entrenamiento de red neuronal.


Seleccionar el modelo de aprendizaje profundo a utilizar.
Entrenar el modelo seleccionado para detección de afluencia.
Validar la propuesta con un prototipo del sistema para el monitoreo de afluencia
de personas y visualizar el nivel de ocupación en la UAO.

18
4. ANTECEDENTES

Algunas tareas que son naturales para el ser humano y utilizadas comúnmente
co-mo lo es la visión, el reconocimiento de la voz o el procesamiento del
lenguaje, son procesos que resultan complicados de llevar a cabo de manera
artificial. Esta es un área que ha estado en constante desarrollo dentro del
campo de la IA por déca-das. Sin embargo, a partir del 2006 se han logrado
unos avances importantes en el desarrollo de estas y otras tareas, gracias a la
utilización del Deep Learning (DL), por respetar su nombre en inglés, o
“Aprendizaje Profundo”.[3]

En el apartado de visión, las redes neuronales convolucionales (CNN) fueron


muy populares desde 2012, prueba de ello son los resultados obtenidos en
diferentes competencias como por ejemplo el ILSVRC (Concurso de
Reconocimiento Visual de Gran Escala de ImageNet) en 2012. ImageNet es un
conjunto de datos de más de 15 millones de imágenes etiquetadas de alta
resolución con alrededor de 22,000 categorías. ILSVRC utiliza un subconjunto de
ImageNet de alrededor de 1000 imá-genes en cada una de las 1000 categorías.
En total, hay aproximadamente 1.2 mi-llones de imágenes de entrenamiento,
50,000 imágenes de validación y 150,000 imágenes de prueba en donde se
debía clasificar desde platos de comida hasta las razas de perros [4], esta
competencia es famosa, porque fue en la primera que se presentó un modelo de
aprendizaje profundo; Este modelo se denominó ”AlexNet” y tenía la particularidad
de ser más preciso que otros modelos que no usaban redes neuronales,
logrando una tasa de error entre el 5 % y el 15.3 % lo cual superaba al 26 % del
mejor modelo anterior [5].

19
Fig. 2. Mejores resultados del desafió ImageNet 2012.[6]

el llamado ”AlexNet” es lo que se puede considerar hoy en día como una arquitectura
simple con cinco filtros convolucionales consecutivos, capas de agrupación máxima
y tres capas totalmente conectadas [4].

Fig. 3. Representación de AlexNet .[5]

Si bien son bastantes las tareas en las que se ha tenido éxito con el uso de redes
neuronales profundos, lo que tienen en común, es que requieren de una red convo-
lucional (CNN) como parte fundamental. Por ejemplo, para la detección de objetos
(como peatones y vehículos) en imágenes o vídeo, se requiere de dos secciones: la
primera es la red convolucional (CNN) con la que se hace la clasificación de objetos
de interés, y la segunda es en la que se asignan las coordenadas de la ubicación de
dichos objetos en la imagen. Por otra parte, se encuentran las ciudades inteligen-
tes, en las cuales es primordial el uso del internet de las cosas para permitir que se
faciliten herramientas útiles para mejorar el nivel de vida de los ciudadanos. Según
los autores de Global Perspective of Smart Cities [7], las ciudades inteligentes se

20
deben concebir como ”Un sistema urbano que utiliza tecnología de la información
y la comunicación (TIC) para hacer que tanto su infraestructura como sus servicios
públicos sean más interactivos, más accesibles y más eficientes.” Un objetivo de la
ciudad inteligente es mejorar la calidad de vida de los ciudadanos al tiempo que
proporciona un entorno sostenible y reduce el costo de la vida.

Son bastantes los desafíos que enfrentan las ciudades inteligentes, al-
gunos de ellos son poder procesar los datos generados a raíz de los
múltiples sensores instalados alrededor de toda la infraestructura tec-
nológica de la misma, entre esos sensores se encuentran los disposi-
tivos con la capacidad de grabar video, en especial para salvaguardar
la seguridad de los ciudadanos. Sin embargo, lo referente a la captura
de video y el posterior procesamiento conlleva a los siguientes retos:

- Optimizar el ancho de banda de la red.


- Capacidad de respuesta en tiempo real.
- Preservación de la privacidad de los datos personales.

Diferentes aplicaciones de procesamiento de imágenes y visión compu-


tacional requieren una alta calidad en sus datos por lo que aumentan el
volumen de datos (píxeles) que deben transferirse desde la cámara a
un servidor de procesamiento central o sistema en la nube. Esto lo que
provoca es que sea de vital importancia optimizar el ancho de banda
de red y por supuesto incrementar la capacidad computacional para
procesar dicha información. En una aplicación de monitoreo de multi-
tudes basada en video, los cuadros capturados pueden transformarse
en información relevante como por ejemplo determinar la cantidad de
personas en la escena, determinar comportamientos, etc. En el pre-
sente artículo se menciona que durante las pruebas realizadas en un
estadio (el cual emula el comportamiento de una ciudad inteligente,
debido a que tiene que lidiar con multitudes, organización de los espa-
cios y brindar confort a sus usuarios.

21
Fig. 4. Infraestructura de sensores en el estadio Croke Park .[8]

Se pudo determinar que la experiencia en el estadio se puede mejo-


rar al monitorear a la multitud para evitar la congestión y mejorar la
administración de emergencias [8].

El aprendizaje profundo (Deep Learning) busca emular la forma en la que el cerebro


humano trabaja, logrando realizar el entrenamiento de neuronas artificiales distri-
buidas en una serie de capas profundas para poder procesar una gran cantidad de
datos; Es por ello que el apogeo del aprendizaje profundo en esta época ha tenido
una relevancia importante, puesto que se cuenta con una capacidad de procesa-
miento bastante alta, gracias al hardware que se puede encontrar en el mercado.

Por otro lado, existen avances en software que permiten mediante el uso de redes
neuronales artificiales poder detectar y clasificar diferentes objetos en tiempo real.
Esto se realiza haciendo uso de redes ya pre-entrenadas (Transfer Learning) con
el objetivo de clasificar diferentes objetos en el entorno que se encuentren en el
campo de visión de la cámara. Estos algoritmos son usados por compañías que
desarrollan vehículos autónomos para poder evitar colisiones, desvíos de carril y
predecir a partir de parámetros, posibles accidentes [9].

22
Fig. 5. Detección de objetos con TensorFlow MobileNet.[10].

Actualmente Google realiza el monitoreo de afluencia de personas haciendo uso de


su ubicación por GPS de los celulares de usuarios obteniendo información, de esta
manera el sistema ubica muchos dispositivos en un mismo lugar, este indicara el
nivel de congestión. Sin embargo, esta aplicación no tiene en cuenta a las personas
que no dispongan de un Smartphone o que no utilicen servicios Google, por otro
lado, si las personas se encuentran en un edificio, el sistema no puede determinar
exactamente en qué lugar se encuentra el usuario; piso, local, sótano, etc. Esto
limita al sistema, además de que cabe mencionar que se necesita una conexión
a internet para enviar la ubicación, y esto es algo que no todos los usuarios de
celulares cuentan. Finalmente si las personas se encuentran en sótanos, el GPS
tiende a fallar, lo cual también se traduce en pérdidas de precisión [11].

Google cuenta con Search y Maps, los cuales indican que tan lleno puede estar un
establecimiento dada la hora y el día mediante el uso de la opción "Popular Times".
Esta función es útil si se está planeando un itinerario de cosas para hacer en un
día. Por ejemplo, ir a un restaurante y luego ir una función de cine. Se puede revisar
cuánto tiempo suelen demorarse las personas en ese restaurante y organizar el
tiempo necesario para llegar a tiempo a una película, los niveles de ocupación de
los establecimientos dependiendo del horario, esto se puede observar en la figura 6
[12].

23
Fig. 6. Vista desde un Celular. [13]

Por otro lado, se han hecho implementaciones para el conteo de personas utilizando
otras técnicas de detección como es el procesamiento de imágenes, en donde uno
de los artículos relacionados se denomina ”Crowd Density Estimation using Image
Processing [14]” lo que traduce en español; Estimación de la densidad de multitudes
usando procesamiento de imágenes. En este trabajo los autores buscan clasificar
personas y hacer conteo de las mismas, para hacerlo lo hacen a través de modelos
de colores como por ejemplo el RGB, HSV, YCbCr. Además usan metodologías para
extraer los contornos de las cabezas de las personas usando propiedades circulares
en las imágenes. Con ellos logran extraer diferentes características como son; Color
de piel, contornos de las personas, y las partes de las mismas como las cabezas y

24
brazos. En resumen, lo que realizan es un procesamiento de imágenes para extraer
la segmentación de las personas respecto a otros objetos que existan en la imagen
original.

(a) Imagen original (b) Binarización de la (c) Binarización de la ima-


imagen usando modelo gen usando modelo de co-
de color HSV. lor YCbCr.

(d) Imagen original 2 (e) Remoción de infor- (f) Segmentación de


mación no relevante en brazos
la imagen

(g) Segmentación de (h) Detección de rostros


rostros utilizando cuadros deli-
mitadores

Fig. 7. Metodología de conteo de personas utilizando extracción de colores y seg-


mentación para la detección de rostros [14].

En la Universidad Distrital Francisco José de Caldas se hizo un "Prototipo de


sistema para la gestión de ocupación de parqueaderos en un centro
comercial""por ingenieros de control, que consiste en solucionar el problema en los
parqueaderos cuando se deja libre a la decisión del usuario el lugar donde va a
estacionar. Esta situación genera congestión dentro del parqueadero, por esta
razón aplican un prototipo que permite gestionar la ocupación de parqueaderos por
medio de una red neuronal artificial, asignando de manera óptima la ubicación de

25
parqueo y genera una dirección web en donde se muestra una guía de ruta que
permite llegar al parqueadero libre asignado [15].

Fig. 8. Ejemplo de imagen procesada [16].

El prototipo hace uso de una (Raspberry pi 2) la encargada de detectar y asignar al


nuevo usuario un código QR el que contiene la vista superior del parqueadero con
la ruta de su posición a el lugar asignado, como se ve en la siguiente imagen :[15]

Fig. 9. Diagrama del parqueadero con indicaciones [15].

El prototipo tiene las siguientes dimensiones y ha sido usado en una maqueta de un


parqueadero como se ve en la siguiente imagen [15]:

26
Fig. 10. Prototipo [15].

También se hace usó una aplicación para visualizar el parqueadero asignado y como
llegar a esa ubicación [15].

Fig. 11. Aplicación del prototipo [15].

27
Por otra parte un artículo llamado ”Estimación automática de la medida de ocupa-
ción de playas mediante procesamiento de imágenes digitales” utilizando otro mé-
todo para determinar la densidad de ocupación con procesamiento de imágenes, el
cual tiene 2 etapas de proceso, en el primero preprocesamiento se utilizan métodos
de corrección de color, subdivisión de la imagen y aplicación de la máscara como
en la figura 12, posteriormente la estimación de densidad de ocupación con uso de
segmentación y binarización como se muestra en la figura 13, en el que obtienen
mediante sus resultados un error aproximado del 2,6 % lo que sugiere una medida
adecuada a una estimación[17].

Fig. 12. Imagen de escala de grises y su máscara correspondiente y c) ejemplo de


subdivisión de imagen [17].

28
Fig. 13. Imágenes sintéticas: a) imagen inicial, c) inicial más 5 % y d) inicial más 10 %
de información, b), d) y f) los resultados del método propuesto, respectivamente.
[17].

En otro contexto, se ha usado la estimación de densidad de objetos en imágenes


para poder detectar cantidad de animales mamíferos en África utilizando drones.
En el artículo denominado "Detecting animals in African Savanna with UAVs and the
crowds"lo que traduce en español; Detección de animales en la sabana de África con
vehículos aéreos no tripulados (drones) y aglomeraciones. Para lograrlo un grupo de
voluntarios realizó el etiquetado de las imágenes como se ve a continuación:

Fig. 14. Etiquetado de imágenes de drones en sabana africana [18].

29
La parte de clasificación la hicieron en algoritmos de machine learning para clasifi-
cación; (SVM) Una máquina de vectores de soporte. Con este modelo se obtuvieron
los siguientes resultados:

Fig. 15. Resultados de detección de animales en África [18].

Con esto se deja claro que la problemática de determinar el nivel de ocupación y


cantidad de objetos en un lugar, es algo que se ha venido trabajando con múlti-
ples arquitecturas y el problema más común para abordarlo es la aglomeración de
objetos en una imagen, puesto que, es difícil para cualquier modelo hacer una indi-
vidualización y esto a su vez que genera una gran cantidad de falsos positivos en
la imagen, esto provoca de que detecte menos o más objetos de los que existen en
ella.

30
5. TEORÍA DE LAS REDES NEURONALES ARTIFICIALES

5.1. NEURONA ARTIFICIAL

Si se habla de NA quiere decir que la misma proviene de una neurona biológica, es-
tas células se encuentran en el cerebro. Y el principal objetivo de la neurona artificial
es poder emular el comportamiento de la biológica. Al igual que en el cerebro, estas
neuronas están conectadas unas a otras, sin embargo el concepto de las neuronas
artificiales no es algo que apenas se haya descubierto en la actualidad, puesto que
desde los años 40’s se han venido desarrollando avances significativos que han per-
mitido su evolución hacia lo que se conoce hoy en día como el aprendizaje profundo
(Deep Learning) [19]. Ahora bien, se puede preguntar ¿Por qué se intentan emular
las neuronas biológicas? Porque las neuronas artificiales al igual que las biológicas
funcionan por estímulos o señales de entrada provenientes de un medio sensorial
u otra neurona, para poder emular el funcionamiento sináptico de las neuronas se
le nombra a un vector W por peso sináptico encargado de dar importancia a su
señal de entrada. El parámetro θj mostrado en la figura 16 simboliza el bias (b) o
umbral de la neurona encargada de priorizar ciertas neuronas cuando se forman en
red, con ello se forman las Redes neuronales, al agrupar cada neurona se aumenta
las posibilidades de comunicación y aprendizaje, lo que nos lleva a lo mencionado
anteriormente como Deep Learning. Se puede concluir que para el funcionamiento
correcto de una neurona artificial, esta debe contar con las siguientes característi-
cas; Deben ser capaces de percibir entradas, estas señales deben ser modificadas
por los pesos sinápticos, se genera una neta con todas las entradas, transmite da-
tos sí y solo sí, se presenta la circunstancia adecuada, finalmente la salida de la
neurona se transmite hacia las demás[19].

Pero matemáticamente ¿qué hace una neurona artificial? ya se pudo dimensionar


de manera conceptual el funcionamiento de las neuronas artificiales, teniendo claro
eso, se procede entonces a explicar en realidad cuales son los cálculos que ha-
cen las diferentes unidades de procesamiento y también explicar a menor medida

31
por qué hoy en día el Deep learning es tan popular. El primer paso es identificar la
sintaxis de una neurona artificial, según lo mencionado anteriormente las neuronas
biológicas transmiten información, en el caso de las neuronas artificiales le llamare-
mos entradas (X) y en prácticamente todos los casos, estas entradas será un vector
con n cantidad de entradas Xn, la información que llega a la neurona artificial es
modificada por los pesos sinápticos (w) los cuales igualmente son vectores, con el
objetivo de emular la sinapsis presente en las neuronas biológicas. Luego se tiene
un parámetro adicional el cual es el bias (b) el cual tiene un comportamiento similar
a un peso sináptico w, por lo tanto, brinda un estado. Esto se explicará más ade-
lante. Los diferentes valores que recibe la neurona son modificados por los pesos
sinápticos, los sumamos para producir lo que hemos denominado la entrada neta.

Esta entrada neta es la que va a determinar si la neurona se activa o no [19].


La activación o no de la neurona depende de lo que llamaremos Función de Activa-
ción. La entrada neta la evaluamos en esta función y obtenemos la salida de la red.
Si por ejemplo, esta función la definimos como un escalón unitario, la salida será
1 si la entrada neta es mayor que cero, en caso contrario, la salida será 0 [19]. En
la siguiente figura se puede apreciar de forma esquemática lo que es una neurona
artificial.

Fig. 16. Neurona Artificial. [20].

Si se observa el gf de izquierda a derecha, se puede apreciar que lo que entra a


la neurona (bolita) son las entradas [X1 , X2 . . . . Xn ] multiplicadas por los snp [Wj1
Wj2 . . . . Wjn ] y a esa operación se le adiciona el bias [θj ]. A ese resultado se le
conoce como entrada neta (Netj ).

32
TABLA I
Nomenclatura del Algoritmo BackPropagation

Nota: Se representan las diferentes notaciones para los cálculos matemáticos de la


Red Neuronal Artificial. [21].

Las ecuaciones (1)(2)(3):


N
X
N etj = Xi Wji + θj (1)
i=0

33
N etj = X1 Wj1 + X2 Wj2 + ......XN WjN + θj (2)

N etj = wT Xj + θj (3)

Finalmente se determina la salida (Y) la cual está determinada por la función de


activación (FACT) efectuada en la neta.

La ecuación (4):
Yj = F ACTj (N etj ) (4)

Existen diferentes tipos de funciones de activación, en Deep Learning las más co-
munes y además las que menos recursos computacionales gastan son las ReLU y
las Softmax.

Función ReLU (5):


f (x) = M ax(0, x) (5)

Función Softmax (6):


exi
f (xi ) = PN (6)
xi
i=0 e

Permite calcular la probabilidad de la i-ésima neurona

5.2. REDES NEURONALES ARTIFICIALES

Las redes neuronales artificiales ( RNA) s e p ueden c onsiderar u na t écnica d e inte-


ligencia artificial c lasificada de ntro de l ap rendizaje au tomático o ma chine learning.
Las RNA siguen una tendencia diferente a los enfoques clásicos de la inteligencia
artificial que tratan de modelar la inteligencia humana buscando imitar los procesos
de razonamiento que ocurren en nuestro cerebro [19].

34
5.3. RED NEURINAL MONOCAPA

En este tipo de configuración solo nos vamos a encontrar con un vector de entradas
Xn el cual no tiene ningún tipo de procesamiento, estos datos entran a una capa la
cual tiene la particularidad de compartir el mismo tipo de información (por ello, se le
conocen como capas). Antes de entrar a la capa, las entradas X son multiplicadas
por los pesos sinápticos W, esta única capa se comporta al mismo tiempo como
capa de entrada y salida, al tener solo una capa de procesamiento se le denomina
monocapa. A primera vista se puede apreciar una conectividad total entre el nivel de
entrada y la capa de salida, pues todas las neuronas de entrada están conectadas
con todas las neuronas de salida, por ejemplo, la neurona de entrada i-ésima se
conecta a las m neuronas de salida [19].

Existe una relación matemática entre la capa de salida y el espacio de dimensión


n, debido a que después del entrenamiento la salida que está compuesta por m
neuronas (espacio dimensional) toma dicha relación a partir de las entradas con
dimensión n. El esquema de una red neuronal monocapa se puede apreciar a con-
tinuación.

Fig. 17. Red Neuronal Monocapa [22].

35
5.3.1. Red neuronal multicapa

En este tipo de configuración de red neuronal ya se pasa a tener una capa oculta
( CO) y una capa de salida (CS), se sigue conservando la entrada n y la capa de
salida m. La CO contiene h cantidad de neuronas y es intermedia entre las entra-
das y la CS. La información fluye en única dirección al igual que la red monocapa,
desde la entrada a la capa oculta y finalmente, a la capa de salida, además existe
conectividad total entre las capas. Hay que aclarar que una red puede tener más
de una capa intermedia. En ese orden de ideas entonces ¿Por qué el nombre de
oculta? Simplemente porque esta capa no tiene contacto con los datos que modelan
el mundo real, es decir, los datos de entrada y salida. [19]. A continuación, se ilustra
el esquema de una red multicapa ( MLP) superficial.

Fig. 18. Red Neuronal Multicapa. [23].

5.3.2. Redes Multicapa profundas

Estas redes neuronales básicamente tienen el comportamiento de una red neuronal


multicapa superficial, sin embargo, como se venía hablando las redes multicapa

36
pueden tener k capas ocultas, es por ello que se llaman profundas, por la cantidad
de capas ocultas que tienen. Igualmente tienen un nivel de entrada con n neuronas
y una capa de salida con m neuronas. Su esquema se muestra a continuación.

Fig. 19. Red Neuronal Multicapa Profunda. [23].

5.3.3. Redes convolucionales

Las redes neuronales convolucionales son similares a las redes neuronales multi-
canal, su principal ventaja es que cada parte de la red se le entrena para realizar
una tarea, esto reduce significativamente el número de capas ocultas, por lo que el
entrenamiento es más rápido. Además, presenta invariabilidad en la traslación de
los patrones a identificar como se ilustra en la siguiente figura 20. [24].

Fig. 20. Ejemplo de red convolucional [24].

37
5.3.4. Transfer Learning

El Transfer Learning se usa como técnica del aprendizaje automático en la que un


modelo o arquitectura entrenada para una determinada tarea se usa para una nueva,
esto con el objetivo de reducir la capacidad de computo necesaria para hacer una
acción de clasificación de la imagen o tarea requerida, se puede usar la siguiente
arquitectura para el entrenamiento:

Re-entrenar la red en la capa Softmax, aprovechando la extracción de caracterís-


ticas del modelo pre-entrenado.

Fig. 21. Re-entrenar ultima capa Softmax. [25].

Esta estrategia de Transfer Learning es una de las más eficientes debido a que se
entrena la capa Softmax para clasificar l as c lases. L a R NA e xtrae l os bottlenecks
que serían las características de cada imagen para posteriormente re-entrenarse
con esos parámetros.

5.4. TIPOS DE OPTIMIZADORES

La optimización se refiere a l a t area d e m inimizar o m aximizar a lguna f unción f(x)


alterando x, existen diferentes tipos de optimizadores, los algoritmos para entrenar

38
redes profundas se basan en el gradiente aplicado a un lote de datos (gradien-
te estocástico) y las nuevas propuestas buscan mejorar el desempeño con este
enfoque[26], lo más utilizados son:

5.4.1. Gradiente descendente

Este op intenta encontrar la función de perdida al modificar aleatoriamente los valo-


res de los pesos W. En términos más técnicos, el gradiente descendente se aplica
a redes neuronales para la actualización de pesos sin embargo, para su cálculo lo
ideal es usar todos los patrones de entrenamiento o el lote completo de datos (batch)
[26]. Una de las desventajas que tiene este op, es que en caso de tener muchos
datos para entrenar la red, el cálculo del gradiente se puede hacer computacional-
mente dispendioso e inclusive prohibitivo [26]. Una de las posibles soluciones a este
problema es utilizando lotes con pequeñas muestras de datos [26].

La ecuación representante esta descrita en(7):


 
∂L
W (t + 1) = W (t) + α − (7)
∂W

5.4.2. Momentum

Cuando se usa este op, el gradiente se calcula respecto al valor actual de los pesos.
El momentum, también conocido como momento de Nesterov propone una sutil
variación que consiste en modificar el vector de pesos de acuerdo al momentum
que tiene el algoritmo, luego se calcula el gradiente respecto a ese vector de pesos
ya modificado [26]. Momentum reduce la tasa de aprendizaje cuando los valores del
gradiente son bajos.
Como se ilustran en las siguiente ecuaciones (8),(9):

39
 
∂L
∆w(t) = β∆w(t − 1) + −α (8)
∂(w(t) + βv(t))

w(t + 1) = w(t) + ∆w(t) (9)

5.4.3. AdaGrad

Algunas de las dificultades que presenta el gradiente descendente es que se trabaja


con una razón de aprendizaje fija, para el caso del algoritmo AdaGrad se busca que
la razón de aprendizaje se modifique en el transcurso del proceso de entrenamiento.
Esto se logra considerando la sumatoria durante el entrenamiento de las contribu-
ciones al gradiente de cada parámetro [26]. Asigna a los atributos frecuentes tasas
de aprendizaje más bajas.

Por ejemplo, las ecuaciones (10),(11),(12),(13):


 2
∂L
AG(t) = AG(t − 1) + (10)
wi (t)

α
αi (t) = p0 (11)
δ + AG(t)

 
∂L
∆wi (t) = −α(t) ∗ (12)
∂wi (t)

wi (t − 1) = wi (t) + ∆wi (t) (13)

40
5.4.4. AdaDelta

Mejora los resultados de AdaGrad, ya que evita que la tasa de aprendizaje se re-
duzca a cero.

Por ejemplo, las ecuaciones (14),(15),(15),(17):


 2
∂L
AG(t) = ρ ∗ AG(t − 1) + (1 − ρ) ∗ (14)
∂wi (t)

  
RM S [∆wi (t)] ∂L
∆wi (t) = − (15)
RM S [G(t)] ∂wi (t)

A∆w(t) = ρ ∗ A∆w(t − 1) + (1 − ρ) ∗ (∆wi (t))2 (16)

∆wi (t + 1) = wi (t) + ∆wi (t) (17)

Donde (18),(19):
p
RM S [∆wi (t)] = A∆wi (t − 1) (18)

p
RM S [G(t)] = δ + AG(t) (19)

41
5.4.5. Adam

Este op es un AdaGrad con diferentes mejoras. Usando las ecuaciones (20), (21),
(22), (23), (24), (25):

 
∂L
M1 (t) = ρ1 M1 (t − 1) + (1 − ρ1 ) (20)
∂wi (t)

 2
∂L
M2 (t) = ρ2 M2 (t − 1) + (1 − ρ2 ) (21)
∂wi (t)

M1 (t)
M C1 (t) = (22)
1 − ρ1

M2 (t)
M C2 (t) = (23)
1 − ρ2

α0 M C1 (t)
∆wi (t) = − p (24)
δ + M C2 (t)

wi (t + 1) = wi (t) + ∆w1 (t) (25)

5.4.6. Ftrl

En español es conocido como “seguir al lider regularizado”, funciona muy bien en


los modelos que son amplios.

42
En la actualidad los optimizadores Adam y Ftrl son muy buenas opciones predeter-
minadas para entrenar modelos de DNN y modelos lineales en Machine Learning
[27].

5.5. TASA DE APRENDIZJE

Este hiperparámetro es aquel que controla el tamaño del paso en el espacio del
peso W, algunos de los valores más comunes son; 0.1, 0.01, 0.001.

5.6. LOTES

Este es otro de los hiperparametros principales, se encarga de controlar la cantidad


de muestras para calcular el gradiente. Los valores más comunes son; 100, 30, 5.

5.7. TUNING DE ENTRENAMIENTO (HIPERPARAMETROS)

Cuando se habla de Tuning, se podría pensar en la afinación d e u n instrumento


musical, cambiar estos parámetros provoca una respuesta positiva o negativa en la
curva de aprendizaje, es por ello, que se podría asociar al arte de afinar un instru-
mento musical, debido a que una mala afinación p uede p rovocar u n r esultado no
óptimo [27]. Se podrían llegar a las siguientes conclusiones:

Si la tasa de aprendizaje es muy pequeña (pasos pequeños), el entrenamiento


tardará mucho.
Si la tasa de aprendizaje es muy grande (pasos grandes), la curva de aprendizaje
rebotará por todos lados y se podría llegar a ignorar el punto óptimo.
Si el tamaño del lote es muy pequeño, podríamos terminar rebotando porque el
lote puede no ser una buena representación de la entrada.

43
Si el tamaño del lote es muy grande, el entrenamiento tardará mucho [27].

Fig. 22. Tasa de entrenamiento según sus hiperparametros [28].

Como norma general, entre 40 y 100, serán un buen tamaño del lote, incluso en
datasets muy grandes, podría usarse hasta 500. También se debe considerar de
que el tamaño del lote debe ser representativo del tamaño total del dataset, otra
cosa a tener en cuenta, es que el gradiente se calcula dentro del lote, si el lote no
es representativo, la pérdida variará mucho de lote a lote [27]. No hay nada dicho
acerca de cuáles son los valores exactos para encontrar un modelo más óptimo,
la experiencia habla de que es mejor modificar l os v alores a leatoriamente hasta
encontrar la mejor respuesta, entre mayor cantidad de proyectos se realicen, se
podría llegar a estimar unos parámetros mejores que otros, ya que dependiendo del
problema, estos pueden cambiar considerablemente.

5.8. PROPAGACIÓN INVERSA (BACKPROPAGATION)

Inicialmente las RNA tenían el problema de la incapacidad de resolver problemas


que no fueran lineales como por ejemplo la compuerta xor, esto conllevo al primer
invierno, es decir un periodo en donde no hubo apoyo económico, ni gubernamental
para la investigación y desarrollo de las RNA, esto ocurrió durante los años 50’s y
60’s. Sin embargo, uno de los padres de las RNA Paul Werbos, en su tesis docto-
ral, propuso realizar un algoritmo que posibilita entrenar las redes multicapa, lo cual

44
posibilitó darle solución a una variedad de problemas complejos. La función de este
algoritmo es propagar el error desde la CS hacía las CO [29].

Antes de hablar de los algoritmos matemáticos, se deben tener en cuenta el sig-


nificado de las variables, revisar la tabla IV. El error de la capa de salida es el único
que puede calcularse de forma exacta, el algoritmo propone propagar hacia atrás
este error para estimar el error en las salidas de las neuronas de las capas ocultas,
con el fin modificar los pesos sinápticos de estas neuronas [26].

Los pasos para realizar BackPropagation [29]:

1) Inicializar los pesos de la RNA MLP.


2) Mientras la condición de parada sea falsa ejecutamos los pasos 3 al 12.
3) Aplicar un vector de entrada.

XP = [Xp1 , [Xp2 , ..., [Xpi , ..., [Xpn ]T . (26)

4) Calcular los valores de las entradas netas para la capa oculta.

N
X
N etahpj = Wjih Xpi + θjh (27)
i

5) Calcular la salida de la capa oculta.

ihP j = fjh (N etahP j ) (28)

6) Calcular los valores netos de entrada para la capa de salida.

L
X
N etaopk = Wklo iokl + θko (29)
j=1

45
7) Calcular la salida de la red.

ypK = fKo (N etaopK ) (30)

8) Calcular los términos de error para las unidades de salida.

o o 0
δpK = (dpk − ypK )fKo (N etaopK ) (31)

9) Estimar los términos de error para las unidades ocultas,

M
0
X
h
δpK = fjh (N etahpj ) o
δpk o
Wkj (32)
k=1

10) Actualizar los pesos en la capa de salida.

Wjih (t + 1) = Wjio (t) + αδpj


o h
ipi (33)

11) Actualizar pesos en la capa oculta.

Wjih (t + 1) = Wjih (t) + αδpj


h
xpi (34)

12) Verificar si el error global cumple con la condición de finalizar.

P M
1 XX
Ep = (dpk − ypk )2 (35)
2 p=1 k=1

46
5.9. DATASET

Es un conjunto o set de datos en el cual brinda información acerca de algo, por


ejemplo; Una base de datos de los estudiantes de la UAO, la información de inven-
tario en un supermercado, datos sísmicos recopilados en el volcán Nevado del Ruiz,
etc. Y tiene como objetivo principal, extraer características (features) las cuales sir-
van como indicios para poder definir una etiqueta (es decir lo que se quiere predecir
o inferir). Por ejemplo; si se quiere clasificar perros y gatos, se deben considerar
aquellas cosas que los diferencian:

Los gatos tienen bigotes.


Las orejas de los gatos.
Los ojos de los gatos.

Incluso se podría hablar de una diferencia de tamaño y contextura física, en este


caso, todas las anteriores fueron características, y la inferencia o predicción es poder
decir con base en aquellas características, si es un perro o un gato. En términos
generales, los datasets se componen de grandes cantidades de información que
sirven como referencias y entre más información se tenga acerca del objeto o la
etiqueta, más fácilmente se va a poder predecirla o inferirla.

5.9.1. Tipos de Dataset

• Tabulares

Los datasets tabulares son aquellos que incluyen variables cualitativas y cuantitati-
vas, un ejemplo de ello es la siguiente tabla II:

47
TABLA II
Tarifas de Taxi en New York 2018

Nota: Se representan las diferentes características que conllevan al precio final de la


tarifa de usar taxi, esto fue tomado de un dataset público en BigQuery, el cual hace
parte de Google Cloud Platform [30].

Por ejemplo, en este tipo de datasets, se pueden realizar predicciones del precio
final del recorrido, teniendo en cuenta que las características más relevantes son el
tiempo del trayecto, la distancia, zona (latitud) y la hora de recogida también puede
ser determinante para estimar un posible precio. Estos tipos de datasets son los más
comunes, puesto que, la recolección de información se facilita gracias a lo que se
conoce hoy en día como “BigData”, también son datasets sencillos de organizar y de
manejar mediante una buena gestión de los datos, por ejemplo, SQL (Lenguaje de
consultas estructurado) permite hacer un filtro de los datos que se quieren obtener
de una base de datos y trabajar con ellos para hacer alguna técnica de machine
learning.

• Imágenes

Los datasets de imágenes son aquellos que almacenan miles y millones de imá-
genes, las cuales permiten hacer ejercicios de clasificación, uno de los ejemplos
clásicos, es el dataset MNIST, el cual representa dígitos escritos a mano del 0 al
9, además está conformado por 60.000 imágenes de entrenamiento y 10.000 para

48
validación, el tamaño de las mismas es de 28x28 píxeles.

Fig. 23. Previsualización de dataset MNIST [31].

Normalmente, cuando se quiere afrontar un problema de clasificación con imágenes,


se crean datasets propios, ya sea usando imágenes tomadas de manera propia o
descargándolas directamente de internet.

5.9.2. Variables Cualitativas o Categóricas

Se entenderá por variable cualitativa aquella que representa una cualidad o atributo,
por ejemplo; Sexo, nacionalidad, color, raza, estrato social, etc. Las variables cua-
litativas presentan 2 escalas de medición, su conocimiento y comprensión es muy
importante desde el punto de vista práctico porque ayuda a identificar qué medidas
estadísticas es posible utilizar en los análisis [32].

5.9.3. Escala Nominal

En esta escala los diferentes valores que toma la variable, no se le puede definir un
orden natural, por ejemplo; Sexo, estado civil, raza, color, etc [32].

49
5.9.4. Escala Ordinal

En esta escala los diferentes valores que toma la variable categórica se pueden
clasificar de acuerdo a un orden natural predeterminado, pero las diferencias que se
representan entre ellos no tienen sentido cuantitativo, por ejemplo; Nivel educativo,
estrato social, nivel de satisfacción, etc [32].

5.10. Extracción de características

Los algoritmos que usa el Machine Learning para aprender no tienen


ningún conocimiento sobre el ámbito al que pertenecen los datos ni
contexto para utilizarlos. Por ejemplo, cuando un campo es numérico
sólo saben que los números que contiene siguen un orden. No saben
cuándo un número es par o impar, o primo, o si está dentro o fuera
de un rango determinado. El algoritmo recibe el valor de un campo tal
como está, y le aplica sus procedimientos para intentar aprender de él
sin más información. No obstante, las informaciones para agrupar un
campo edad podrían ser crear tres grupos: jóvenes, adultos y mayores,
o que en un campo número se puede distinguir entre pares e impares
y eso indicará la acera de la calle donde se ubica un edificio, estas
pueden ser importantes para que el modelo funcione. Por lo tanto, en
estos casos se deberá introducir esa información para ayudar al algo-
ritmo. La forma de hacerlo es crear nuevos campos transformados a
partir de los que haya en el Dataset y usar el nuevo Dataset extendido
para entrenar el modelo.

Hay transformaciones usuales, como la discretización de los valores de


un campo, reemplazar los valores ausentes por un valor fijo, normali-
zar, o utilizar valores elegidos al azar. Así pues, transformar el campo
edad en un campo categórico con tres rangos de edad se puede ha-
cer usando una discretización del campo por terciles. Normalmente,

50
una vez construidos estos campos derivados, se eliminará el campo
del cual proceden de nuestro dataset, o lo excluiremos del conjunto
de campos a usar en el aprendizaje. Tener dos campos directamente
dependientes como candidatos a predictores para un modelo podría
afectar negativamente, ya que ambos están aportando la misma infor-
mación y eso podría confundir al modelo.

Hay que recordar que el Dataset es la base de nuestro aprendizaje.


Una buena ingeniería de datos puede ser determinante en la solución
de nuestro problema. Para ello, es indudablemente necesario un buen
conocimiento del dominio en que se va a aplicar el Machine Learning.
Dado el gran número de transformaciones posibles, no existen todavía
soluciones automatizadas que permitan determinar cuál es la mejor
combinación de nuestros datos de cara al aprendizaje, aunque se está
empezando a avanzar en esta dirección [33].

5.10.1. Aprendizaje profundo (Deep Learning)

El enfoque de la RNA no es reciente, pero en los últimos años ha resurgido el interés


en ellas debido a una técnica que permite entrenar redes de muchas capas ocultas
denominada aprendizaje profundo o Deep Learning. El aprendizaje profundo es la
base en la cual se apoya la mayoría de los últimos avances en inteligencia artificial
[34].
El aprendizaje profundo es muy similar al proceso de aprendizaje humano y tiene
un proceso de abstracción de capa por capa. Cada una de ellas tendrá diferentes
“ponderaciones”, y estas a su vez se reflejan en lo que se aprendió sobre los “com-
ponentes” de las imágenes. Cuanto mayor sea el nivel de capa, más específicos son
los componentes. Al igual que el cerebro humano, una señal original en Deep Lear-
ning pasa a través de capas de procesamiento; después, pasa de una comprensión
parcial (superficial) a una abstracción total (profunda) donde puede percibir el objeto
[35].

51
Regresión: La regresión es básicamente el método nombrado para poder realizar
una predicción de una variable continua (fracciones o decimales), es decir una va-
riable aleatoria con infinitos valores. Por ejemplo, se puede aplicar regresión para
predecir; Peso de una persona, tiempo que tarda en hacer una actividad específica,
calcular el precio de una tarifa de taxi, etc.

Clasificación: Un problema de clasificación implica poder realizar una predicción


de una o varias variables discretas (Categóricas), es decir, variables que solo repre-
sentan valores enteros, en donde cada uno de sus valores representan una clase
u objeto. Por ejemplo, se puede aplicar clasificación para inferir; razas de perros,
detección de rostros, personas admitidas y no admitidas, tipos de vinos, cantidad de
objetos de cada una de las diferentes clases, etc.

5.10.2. Aprendizaje supervisado

El aprendizaje supervisado se caracteriza porque el proceso de entrenamiento es


controlado por un agente externo llamado supervisor o maestro. El Supervisor opera
como un “maestro” que guía el aprendizaje en la red y conoce las salidas deseadas
correspondientes a las respectivas entradas [36].

Los datos de entrada se le presentan al supervisor y a la red de neuronal simul-


táneamente, el supervisor propone la salida deseada para ser comparada con la
salida de la red neuronal artificial. Para que la labor del supervisor sea exitosa se
define el error de entrenamiento como la diferencia entre la salida deseada o espe-
rada y la salida que produce la RNA [36].

52
5.10.3. Visión por Computador

En este caso se tiene como información de entrada a la RNA una imagen. Las tareas
más representativas de la visión por computador son:

Clasificación: La tarea consiste en clasificar o etiquetar el objeto que hay en una


imagen.
Localización: La tarea consiste en localizar en una imagen a un determinado
objeto
Detección: La tarea consiste en detectar o encontrar los objetos que hay en una
imagen. Con los objetos detectados se puede proceder a su respectiva clasificación.
Segmentación: La tarea consiste en separar los píxeles de los objetos que hay
en una imagen [37].

Fig. 24. Ejemplo de Visión de Computador [38].

Esta es una breve introducción de lo que son las redes neuronales artificiales y
su aporte a diferentes campos de la ingeniería y sobre todo a la generación de
soluciones a problemas mediante datos de entrada y salidas deseadas. Con esto
finalmente se dejan sembradas las bases para poder profundizar en el desarrollo
del proyecto.

53
6. SOFTWARE REQUERIDO Y TEORÍA IOT

6.1. LENGUAJES DE PROGRAMACIÓN

Un Lenguaje de Programación es un conjunto de reglas, notaciones, símbolos y/o


caracteres que permiten a un programador poder expresar el procesamiento de da-
tos y sus estructuras en la computadora. Cada lenguaje posee sus propias sintaxis.
También se puede decir que un programa es un conjunto de órdenes o instruccio-
nes que resuelven un problema específico b asado e n u n L enguaje d e Programa-
ción. [39]. Los lenguajes de programación no son aplicaciones, sino herramientas
que permiten construir y adecuar aplicaciones. [40].

6.1.1. Python

Python es muy utilizado en la programación por su facilidad de programar con todas


sus librerías, así como lo indica en su página.

Python es un lenguaje de programación poderoso y fácil de aprender.


Cuenta con estructuras de datos eficientes de alto nivel y un enfoque
simple pero efectivo a la programación orientada a objetos. La elegante
sintaxis de Python y su td, junto con su naturaleza interpretada, hacen
de éste un lenguaje ideal para script y desarrollo rápido de aplicaciones
en diversas áreas y sobre la mayoría de las plataformas. El intérprete
de Python y la extensa biblioteca estándar están a libre disposición en
forma binaria y de código fuente para las principales plataformas des-
de el sitio web de Python, y puede distribuirse libremente. El intérprete
de Python puede extenderse fácilmente con nuevas funcionalidades
y tipos de datos implementados en C o C++ (u otros lenguajes acce-
sibles desde C). Python también puede usarse como un lenguaje de
extensiones para aplicaciones personalizables [41].

54
6.1.2. Lenguaje C

Es un lenguaje muy utilizado en la programación de microcontroladores y es muy


fácil de aprender, como se explica a continuación.

El lenguaje C reúne características de programación intermedia entre


los lenguajes ensambladores y los lenguajes de alto nivel; con gran
poderío basado en sus operaciones a nivel de bits (propias de ensam-
bladores) y la mayoría de los elementos de la programación estructu-
rada de los lenguajes de alto nivel, por lo que resulta ser el lengua-
je preferido para el desarrollo de software de sistemas y aplicaciones
profesionales de la programación de computadoras. Su diseño inclu-
ye una sintaxis simplificada, la aritmética de direcciones de memoria
(permite al programador manipular bits, bytes y direcciones de memo-
ria) y el concepto de apuntador; además, al ser diseñado para mejorar
el software de sistemas, se buscó que generase códigos eficientes y
una portabilidad total, es decir el que pudiese correr en cualquier má-
quina. Logrados los objetivos anteriores, C se convirtió en el lenguaje
preferido de los programadores profesionales [42].

6.2. LIBRERIAS PARA VISIÓN COMPUTARIZADA

6.2.1. Matplotlib

Matplotlib es una biblioteca de gráficos 2D en Python que produce ci-


fras de calidad de publicación en una variedad de formatos de copia
impresa y entornos interactivos en todas las plataformas. Matplotlib se
puede usar en scripts de Python, el shell de python e ipython, servido-
res de aplicaciones web y seis kits de herramientas de interfaz gráfica
de usuario. Matplotlib trata de hacer las cosas fáciles y las cosas difí-

55
ciles posibles. Puede generar gráficos, histogramas, espectros de po-
tencia, gráficos de barras, gráficos de error, diagramas de dispersión,
etc. Y con solo unas pocas líneas de código [43].

6.2.2. Numpy

Numpy es el encargado de añadir toda la capacidad matemática y vec-


torial a Python haciendo posible operar con cualquier dato numérico o
array. Incorpora operaciones tan básicas como la suma o la multiplica-
ción u otras mucho más complejas como la transformada de Fourier
o el álgebra lineal. Además incorpora herramientas que nos permiten
incorporar código fuente de otros lenguajes de programación como
C/C++ o Fortran lo que incrementa notablemente su compatibilidad e
implementación [44].

6.2.3. Opencv

OpenCV (Open Source Computer Vision) es una librería de visión por


computador de código abierto, La librería está escrita en los lenguajes
C y C++ y es compatible con Linux, Windows y Mac OS X. Cuenta con
un desarrollo activo en interfaces para Python, Ruby, Matlab y otros
lenguajes. OpenCV ha sido diseñado para ser eficiente en cuanto a
gasto de recursos computacionales y con un enfoque hacia las apli-
caciones de tiempo real. OpenCV está escrito y optimizado en C y
puede tomar ventaja de los procesadores con múltiples núcleos. [45].
OpenCV tiene una licencia BSD, lo que permite utilizar y modificar el
código, tiene una comunidad de más de 47000 personas y más de 7
millones de descargas. Es una librería muy usada a nivel comercial,
desde Google, Yahoo, Microsoft, Intel, IBM, Sony, Honda, Toyota, Ap-
plied Minds, VideoSurf, Zeiter [46].

56
6.3. ENTORNOS

Los entornos virtuales permiten aislar los paquetes que se usan para un proyecto en
específico y así evitar problemas como por ejemplo los bugs entre las versiones de
Python 2 y 3. También se pueden exportar una lista de paquetes en un archivo con
todas las dependencias del proyecto entre esos se encuentra el que se ha utilizado
de base en proyectos de manera aleatoria [47].

6.3.1. Anaconda

Anaconda una distribución de código abierto que abarca muchas aplicaciones, li-
brerías y conceptos diseñados para el desarrollo de la Ciencia de datos con Python.
”En líneas generales Anaconda Distribution es una distribución de Python que fun-
ciona como un gestor de entorno, un gestor de paquetes y que posee una colección
de más de 720 paquetes de código abierto [48]”.

Características generales de Anaconda Esta Suite cuenta con una gran canti-
dad de características. Entre ellas las más destacables serían las siguientes; Anacon-
da es libre, de código abierto y con una documentación bastante detallada y una
gran comunidad.

Se trata de una suite Multiplataforma (Gnu/Linux, macOS y Windows).


Permite instalar y administrar paquetes, dependencias y entornos para la ciencia
de datos con Python de una manera muy sencilla.
Ayuda a desarrollar proyectos de ciencia de datos utilizando diversos IDE como
Jupyter, JupyterLab, Spyder y RStudio.
Cuenta con herramientas como Dask, numpy y Numba para analizar Datos.
Permite visualizar datos con Bokeh, Datashader, Holoviews y Matplotlib.
Anaconda Navigator es una interfaz gráfica de usuario (GUI) bastante sencilla,
pero con un gran potencial.

57
Permite gestionar de manera avanzada paquetes relacionados a la Ciencia de
datos con Python desde la terminal.
Elimina problemas de dependencias de paquetes y control de versiones.
Está equipado con herramientas que permiten crear y compartir documentos que
contienen código con compilación,
ecuaciones, descripciones y anotaciones.
Permite compilar Python en código de máquina para una ejecución rápida.
Facilita la escritura de complejos algoritmos paralelos para la ejecución de tareas.
Brinda soporte para computación de alto rendimiento.
Los proyectos son portables. Esto permite compartir proyectos con otros y ejecu-
tar estos proyectos en diferentes plataformas. [49].

6.4. TENSORFLOW

TensorFlow es una biblioteca de código abierto dirigida al aprendizaje


automático a través de una serie de tareas. Ha sido desarrollado por
Google para satisfacer las necesidades de sistemas capaces de cons-
truir y entrenar redes neuronales para detectar y descifrar patrones y
correlaciones, análogos al aprendizaje y razonamiento usados por los
humanos. Actualmente es utilizado tanto para la investigación como
para la producción de productos de Google, remplazando el rol de su
predecesor de código cerrado [50].

6.4.1. Tensorboard

Los cálculos que utilizará TensorFlow para tarea como entrenar una
red neuronal profunda masiva, pueden ser complejos y confusos. Para

58
facilitar la comprensión, la depuración y la optimización de los progra-
mas TensorFlow, se ha incluido un conjunto de herramientas de visuali-
zación llamadas TensorBoard. Puede usar TensorBoard para visualizar
su gráfico TensorFlow, trazar métricas cuantitativas sobre la ejecución
de su gráfico y mostrar datos adicionales como imágenes que pasan
a través de él. Cuando TensorBoard está completamente configurado,
se ve así en la figura 25: [51].

Fig. 25. Tensorboard [51].

59
6.5. YOLO DETECTION

”(YOLO) es un sistema de detección de objetos en tiempo real y de vanguardia. En


una GPU Nvidia Titan X procesa las imágenes a 30 FPS y tiene un MAP del 57.9 %
en COCO test-dev [52]."

6.5.1. Darkflow

Es el port de Darknet a TensorFlow. Este es el sistema que más he estado utilizando,


principalmente porque inicié este proyecto sin contar con GPU para entrenar la red,
y al parecer usando solamente CPU Darkflow es mucho más rápido que el Darknet
original. En otras palabras Darkflow nos permite usar Yolo Detection con Tensorflow.
test-dev [53].

6.6. GOOGLE COLABORATORY

”Colaboratory es un entorno gratuito de Jupyter Notebook que no requiere configu-


ración y que se ejecuta completamente en la nube. Colaboratory te permite escribir
y ejecutar código, guardar y compartir tus análisis y tener acceso a recursos infor-
máticos muy potentes, todo de forma gratuita desde el navegador [54]."

6.6.1. Máquinas virtuales

Las máquinas virtuales de google están preconfiguardas en cualquier lenguaje des-


plegándose rápidamente aplicaciones en PHP, Java, JavaScript, SQL, Ruby, Go,
entre otros. Con las máquinas virtuales se pueden migrar datos a la nube sin preo-
cupación de las actualizaciones y solo se paga por lo que se usa, se puede acceder

60
a hardware como CPU y GPU [55].

6.6.2. CPU - Google Cloud Platform

Cuando inicia una instancia de máquina virtual en Compute Engine, la


instancia usa una de las plataformas de CPU disponibles en Compute
Engine. Si no especifica activamente una plataforma de CPU deseada,
la instancia usa la plataforma predeterminada para la zona donde se
ejecutará la instancia. Puede ver una lista de zonas y sus plataformas
de CPU predeterminadas en la página Regiones y zonas. Además,
cada plataforma de CPU solo está disponible para tipos de máquinas
específicos.

En Compute Engine, cada CPU virtual (vCPU) se implementa como


un único subproceso de hardware en una de las plataformas de CPU
disponibles. En los procesadores Intel Xeon, la tecnología Intel Hyper-
Threading permite que se ejecuten múltiples hilos de aplicación en ca-
da núcleo de procesador físico. Configura las instancias de máquina
virtual de Compute Engine con uno o más de estos hipervínculos co-
mo vCPU. El tipo de máquina especifica la cantidad de vCPU que tiene
su instancia [56].

6.6.3. GPU - Google Cloud Platform

Los científicos, artistas e ingenieros necesitan acceder a una capaci-


dad de computación paralela masiva. Google Cloud cuenta con máqui-
nas virtuales equipadas con GPU capaces de ofrecer un rendimiento
por instancia de hasta 960 teraflops. Gracias a las GPU NVIDIA Tesla
K80, P4, P100 y V100, se agilizan tareas como el aprendizaje profun-
do, la simulación física y la creación de modelos moleculares. GCP

61
ofrece la GPU que mejor se ajusta las necesidades de los usuarios,
sea cual sea el tamaño de la carga de trabajo.
Se puede conseguir específicamente el hardware necesario para una
tarea específica, independientemente de si la tarea requiere el uso de
GPUs durante horas o semanas. Se puede configurar una instancia
con la proporción exacta de procesadores, memoria y GPUs, en lu-
gar de adaptar la carga de trabajo a los límites de la configuración del
sistema local [57].

6.7. INTERNET DE LAS COSAS (IoT)

6.7.1. Objetos de IoT

Los objetos utilizados en iot son dispositivos que se clasifican e n l as s iguientes 3


categorías:

Objetos Etiquetados Estos objetos, utilizan la tecnología rfid o nfc que per-mite
tener la información de manera local como los que son códigos, identificación,
descripción, etc. También conocidos como “Objetos No ip” [58].

Objetos Inteligentes Son objetos que están dotados de ciertas capacida-des


de computo internas, almacenamiento, interfaz de comunicación por ( ip) lo cual
permite a este objeto el procesamiento de datos y la capacidad de enviar informa-
ción acerca de su estado [58].

Objetos Sociales Estos objetos heredan gran parte de los objetos inteligen-tes y
gracias a eso tienen la capacidad de interactuar con otros dispositivos for-

62
mando una comunidad de manera autónoma para cooperar y lograr determinadas
actividades [58].

6.7.2. Sensores

Las sensores son dispositivos utilizados para adquirir información del mundo que los
rodea transformando las señales diferentes dominios de energía al dominio eléctri-
co con una salida determinada, los cuales se utilizan para la adquisición de datos
para experimentación o incluso en el campo de iot llevar esa información a la nube
procesarla y almacenarla [59].

Cámaras Las cámaras son utilizadas en la seguridad, robótica, domótica, etc. Pa-
ra el análisis del entorno y estas a su vez funcionan como sensores para determinar
lo que se encuentra en el lugar.

Las cámaras actualmente se han convertido en objetos inteligentes porque poseen


internamente una capacidad de cómputo y almacenamiento, con el poder de comu-
nicarse teniendo una ip para identificarse, esto a llevado a la utilización de cámaras
ip en los ámbitos mencionados anteriormente por su facilidad de instalación y ma-
nejo y su capacidad de subir la información a la nube de una manera más óptima.

Cámara ojo de pez Es un lente que se utiliza en las cámaras para ampliar el
ángulo de visión de las cámaras y capturar 270 grados de visión o más, dependiendo
la capacidad o calidad del lente.

63
Fig. 26. Ejemplo de lente ojo de pez.[60].

6.7.3. Plataformas de IoT

Una plataforma de IoT se puede definir como un servicio software que reside en
la nube, estos se constituyen en puentes que permiten reunir todos los datos de
los sensores, actuadores para procesarlos, ya sea para almacenarlos en bases de
datos, para visualizarlos o para analizarlos y extraer de ellos información útil.

64
Protocolo

REST: (Representational State Transfer - Transferencia de Estado Representacio-


nal) es cualquier interfaz entre sistemas que use HTTP para obtener datos o generar
operaciones sobre esos datos en todos los formatos posibles, como XML y JSON.
[61].

Fig. 27. Diagrama cliente - servidor.[61].

GET: Solicitar la información de un servidor.


POST: Postear información en un servidor.
Java : Es un lenguaje de programación y una plataforma informática.

65
7. METODOLOGÍA

7.1. OBTENCIÓNDE DATOS

El presente proyecto está enfocado en los lugares públicos de la UAO. Es por ello
que los sitios seleccionados son el primer piso de cafetería por su alta concurrencia
de personas y variabilidad de ocupación durante el día, la sala de laboratorio de
electrónica puesto que es uno de los lugares en donde se reúnen estudiantes de
electrónica, eléctrica, biomédica y mecatrónica, por lo tanto también tiene un alto ni-
vel de ocupación y finalmente el laboratorio de automática en el cual se encuentran
estudiantes de asignaturas como control 1, 2 e inteligente, redes neuronales arti-
ficiales y d eep l earning, a ctuadores y a utómatas p rogramables, e tc., l o h acen ser
un lugar muy concurrido sobre todo en épocas de parciales. Para la captura de los
datos necesarios en la realización del proyecto se recolectan vídeos tomados por
una cámara con lente ojo de pez; Estos vídeos tienen una duración de 7.5 minutos
cada uno, con el nivel de ocupación correspondiente a vacío, medio y lleno en los 3
lugares, para un total de 9 vídeos.

7.2. PREPARACIÓN DE DATOS

Los primeros datos que se obtienen son vídeos, pero como tal, lo que se necesitan
son los frames para poder entrenar la red neuronal y es por ello que se usa un códi-
go escrito en lenguaje python para poderlos extraer; Se ingresa el vídeo y se elige
un periodo de muestreo que en el presente proyecto es de 30 imágenes por segun-
do (frames por segundo), dando un total 121.500 imágenes para el dataset. Hay que
tener en cuenta que los datos a utilizar deben estar normalizados o estandarizados
para poder obtener resultados óptimos en el entrenamiento; En el presente caso,
usando el software que permite hacer grabaciones con la cámara, se define la reso-
lución de 638x360 píxeles puesto que esta resolución permite entrenar la red más
rápido porque recibe menos información y se alcanza a distinguir correctamente a
las personas. Posteriormente se alojan las imágenes en carpetas en donde se les

66
asigna un nombre diferente a cada una y así se tendrían las 9 carpetas necesarias
para posteriormente añadirle la característica de detección de personas.

7.3. DETENCCIÓND DE PERSONAS

Para la detección de personas se usó YoloV2, el cual se descargó de github, en


donde además se implementó un filtro q ue c onsiste e n m odificar un os parámetros
internos del código, específicamente u n a rchivo l lamado ” predict.py” e l c ual s e en-
cuentra en la ruta ”darkflow-master\darkflow\net\yolov2”, en es te pr ograma python
se hizo un filtro de las clases para que solo se visualice la clase ”person”, se realizó
esto porque esta red neuronal ya viene adaptada para trabajar con el Dataset CO-
CO y con ello se ahorra bastante tiempo en hacer un dataset propio de detección de
personas. Esta clase aparece en la posición 0 del archivo COCO names, por ende
todas las clases que no correspondan a la 0, no mostrara su cuadro delimitador y
solo identificara personas.

7.4. PREPARACIÓN DE LOS DATOS CON YOLO

Los datos anteriores ya están divididos correspondientemente al lugar y nivel de


ocupación, pero no tienen los cuadros delimitadores que muestran donde están ubi-
cadas las personas. Pasando estos datos a las carpetas de manera ordenada y
utilizando Google Colaboratory y Yolo, se obtiene cada frame con detección de per-
sonas ó cuadro delimitador y asi se prepara el entrenamiento de la red neuronal.

7.5. PLATAFORMAS EN LA NUBE

Inicialmente se tenía pensado utilizar Amazon Web Services como proveedor en la


nube para el entrenamiento de las redes neuronales artificiales, sin embargo, no se

67
pudo obtener suficiente información de parte de la compañía y de un convenio que
existe con la UAO. Entonces, se decidió cambiar de opción y nos decantamos por
Google Cloud Platorm (GCP), la cual es una plataforma que cuenta con todas las
herramientas necesarias para hacer uso de la misma para el entrenamiento y vali-
dación de redes neuronales. Además, Google actualmente está haciendo eco en la
democratización de la inteligencia artificial, para ello, tiene a disposición de los usua-
rios herramientas como AutoML la cual permite por ejemplo hacer clasificadores de
imágenes de una forma sencilla, sin utilizar código alguno. Por último, se decidió
realizar este proceso en la nube ya que no se dispuso a tiempo de buenos recursos
(GPU’s) en la universidad para el desarrollo óptimo de este proyecto. Sin embargo,
se identificó que el uso de AutoML es bastante costoso (20 dólares la hora). Por lo
tanto, se llevó a cabo la exploración de Google Colaboratory, la cual es gratuita y
brinda la capacidad de computo necesaria para entrenar la red neuronal profunda
en un periodo de tiempo reducido a diferencia de usar CPU. La ventaja de Colab
es que se puede conectar con los servicios de google como Drive y esto facilita el
manejo y administración de la información puesto que el dominio de la universidad
permite tener en la nube aproximadamente 370 Gb de datos.

7.6. GRAFO

Los grafos permiten visualizar las operaciones y la arquitectura utilizada dentro de


una red neuronal artificial, es por ello que también se pueden identificar los lugares
en donde la red está fallando o esté mal conectada. Además se pueden observar
algunos resultados de entrenamiento como el Loss y el Accuracy, con estos valores
se identifica la mejor red a utilizar y así analizar la velocidad de respuesta, teniendo
en cuenta lo anterior, la red con mejor velocidad de respuesta es MobilnetV1.0, ya
que se necesita un tiempo de respuesta rápido para el cumplimiento del tiempo real.

68
7.7. SOFWARE DE VISUALIZACIÓN DE INFORMACIÓN

Se desarrollaron 2 plataformas (Netbeans y Android studios) ; Una para el admi-


nistrador (aplicación de escritorio en Java) y una aplicación móvil para usuarios en
donde se puede solicitar mediante un botón el nivel de ocupación de los diferente
lugares de la universidad (cafetería primer piso, laboratorio de electrónica y labora-
torio de automática), se pueden visualizar los datos (lleno, medio y vacío) según la
información enviada por el servidor. Se tuvieron en cuenta protocolos de IoT como
lo es REST para implementar el sistema de envío y recepción de datos, teniendo
como lugar de almacenamiento mysql.

7.8. VALIDACIÓN

Para poder darle validez al proyecto, se recurre a comparar la respuesta de la red


neuronal artificial, con la imagen original, en donde se evidencie que el lugar efecti-
vamente esté (lleno, medio o vacío) según la percepción humana y teniendo como
referencia la ubicación espacial y el área de ocupación.

69
8. RESULTADOS

8.1. EJECUCIÓN DE L OBTENCIÓN DE DATOS

Inicialmente se procedió a importar una cámara con lente ojo de pez, las carac-
terísticas técnicas de la misma es que debía dar una buena resolución (mínimo
1280x720 píxeles), además de tener una conectividad wifi para poder transmitir la
imagen a través de una de una red a un servidor (computador). La cámara adquirida
se puede observar en la figura 28:

Fig. 28. Cámara 360.

Luego de tener la cámara, se tomó la decisión de buscar los puntos estratégicos


para que la misma tuviera un gran campo de visión; Inicialmente se pensó en ubicar
al lado de las cámaras de seguridad como por ejemplo en la cafetería, en donde se
aprecia una cámara de seguridad (ver figura 29) con una ubicación bastante buena
(techo).

70
Fig. 29. Cámara seguridad cafetería.

Sin embargo, por cuestiones de logística y permisos del personal encargado de


la seguridad, no fue posible su instalación en cafetería. Como segunda opción se
escogió ubicarla en una de las paredes de segundo piso (cerca de donde están los
televisores que se aprecian desde el primer piso). Se puede apreciar su ubicación
en la figura 30.

Fig. 30. Cámara Cafetería Primer Piso.

71
Se tuvo como resultado unas imágenes con alta presencia de luminosidad durante
el día por contraste, impidiendo que el lente se enfocara bien; Pero con la ventaja
de que es el mejor lugar para obtener una buena visión de las personas en el primer
piso de cafetería. Por otra parte en la biblioteca fue muy complejo posicionar la
cámara ya que en el interior de la misma hay muchos puntos de visión y para lograr
esto serían necesarias varias cámaras en los diferentes lugares, para poder asi
realizar el análisis en este lugar. Por lo tanto fue descartado por la ausencia de los
recursos necesarios.

En el laboratorio de electrónica, se ubicó la camara cerca al área de los casilleros


(al lado de la entrada principal); Aquel lugar permite un buen rango de visión, pero
existe un inconveniente, y es que alli hay demasiadas columnas estructurales las
cuales provocan puntos ciegos y asi no se puede observar todo el laboratorio (ver
figura 31).

Fig. 31. Cámara laboratorio Electrónica.

Finalmente, en el laboratorio de automática, la cámara se ubicó entre el salón de


automática y la oficina del encargado del laboratorio, en donde se puede observar
gran parte del lugar sin problemas.

72
Fig. 32. Cámara laboratorio Automática.

Posteriormente, se eligieron los días y horarios más propensos para que los sitios
en cuestión estuviesen en estados lleno, medio y vacío; Con esa información se
procedió a grabar 7:30 minutos de video en cada uno de los 3 estados para los
puntos de grabación (cafetería primer piso, laboratorio de electrónica y laboratorio
de automática). Los 9 vídeos fueron almacenados en la nube (Google Drive) para
su posterior procesamiento.

73
Fig. 33. Base de Datos Entrenamiento.

74
Fig. 34. Base de Datos Entrenamiento: 9 videos representativos de 7 minutos y
medio en donde se ilustran cada uno de los estados de ocupación por parte de
personas en cafetería primer piso, laboratorio de electrónica y laboratorio de auto-
mática.

75
8.2. EJECUCIÓN DE LA PREPARACIÓN DE DATOS

Fig. 35. Diagrama de flujo Entrenamiento: Vista general de entrenamiento.

76
Posteriormente en la preparación de los datos se hace uso de la herramienta Google
Colaboratory (ver 6.6) en donde se puede implementar el código python. Además
de que se puede hacer uso de manera temporal (12 horas hasta que se restaure
la sesión) y gratuita de GPU’s Tesla T4 las cuales cuentan con 16 GB de memoria
GDDR5. Inicialmente lo que se quiere garantizar es que dentro de las imágenes
captadas por el sistema se detecten personas, para ello se usó YOLO (ver 6.5) co-
mo librería para añadir una característica (feature) adicional que son los cuadros
delimitadores (bounding boxes), los cuales otorgan información (píxeles blancos) a
la red de clasificación que se implementó (MobilenetV1.0).
En primera instancia se obtuvieron los frames de todos los vídeos con los respecti-
vos cuadros delimitadores y se separaron por carpetas. (ver figuras 36 y 37).

Fig. 36. Carpetas de 9 niveles de ocupación con cuadros delimitadores generados


por Yolo Detection.

77
Fig. 37. Carpeta Electrónica Vacía con cuadros delimitadores generados por Yolo
Detection.

78
8.3. ENTRENAMIENTO DE RED PARA CLASIFICACIÓN DE NIVELES DE
OCUPACIÓN EN LA UAO

En total se generaron 113.900 imágenes con los cuadros delimitadores; Estas imá-
genes posteriormente fueron usadas como dataset de la red neuronal profunda de
clasificación de estados, que para este caso se decidió usar la arquitectura de Mobi-
lenet debido a, que es una red liviana y que por experiencia ha brindado resultados
muy buenos. Los cuales son ilustrados a continuación.

79
Fig. 38. Grafo general de la red de clasificación de niveles de ocupación.

80
Fig. 39. Cuellos de botella generados por la red para el entrenamiento (Bottlenecks).

81
Fig. 40. Entrenamiento con 1000 iteraciones a una tasa de aprendizaje (learning
rate) de 0.01.

Fig. 41. Evolución de la Exactitud (accuracy) respecto a las iteraciones.

82
Fig. 42. Evolución del Cruce de entropía cruzada (cross entropy) respecto a las
iteraciones.

Respecto al Accuracy y al Cross Entropy se puede decir de que la red neuronal


quedó entrenada con una precisión bastante alta, prácticamente superior al 97 % y
la explicación a esto recae en los datos recopilados, que lograron representar de
manera muy exacta lo que se buscaba como objetivo que era la clasificación de los
niveles de ocupación por parte de personas en diferentes zonas de la UAO. Estos
datos aparte de ser muy variados, se recolectaron en gran cantidad y es por ello
que la red se logró entrenar teóricamente de manera excelente. Cabe aclarar que el
tiempo de entrenamiento fue de aproximadamente 48 horas en Google Colaboratory.

8.4. TESTEO DE LA RED NEIRONAL PROFUNDA

El solo hecho de que los resultados de entrenamiento-validación sean buenos, no


garantiza de que la red en la aplicación del mundo real vaya a funcionar, los resulta-
dos del testeo pueden llegar a ser malos en los siguientes casos:

83
No se entrenó con suficientes datos, y la cantidad de datos no es solo deter-
minante. Por ejemplo, si se tiene una gran cantidad de imágenes, pero estas no
representan la aplicación real, es probable que los resultados no sean los espera-
dos.
Una tasa de aprendizaje e iteraciones incorrectas pueden alterar de manera di-
recta los resultados, debido a que, si se usa una tasa de aprendizaje cercana a 1.0
el modelo se entrena con rapidez, pero puede ser inestable y por ende la red no se
entrenaría de forma correcta, es decir con un accuracy inferior al 50 % y un cross
entropy lejano a 0.

Es por ello que a continuación se muestran los resultados obtenidos por nuestro
modelo en situaciones reales; Es decir con datos que no fueron usados en el entre-
namiento.

84
TABLA III
Resultados DNN MobileNet V1.0 (Primera Parte)

Nota: Se representan en tablas los resultados obtenidos a partir del modelo de RNA
entrenado.

85
TABLA IV
Resultados DNN MobileNet V1.0 (Segunda Parte)

Nota: Se representan en tablas los resultados obtenidos a partir del modelo de RNA
entrenado. En los anexos se añade la dirección del repositorio en GitHub para que
se puedan apreciar los códigos necesarios con los que se obtuvieron estos resulta-
dos.

86
8.5. BASE DE DATOS

El código se dejaría ejecutando para que realice muestras cada minuto (hay que
tener en cuenta que está en Colab, por ende, la sesión se reiniciará cada cierto
tiempo, por lo tanto a nivel de escalabilidad, se necesitaría un servidor propio en
la nube como Google Cloud Platform o uno físico); El resultado del procesado se
almacena en una carpeta aparte, con su respectiva ubicación, nivel de ocupación,
fecha y hora. Esto se puede apreciar en la figura 43.

Fig. 43. Base de Datos Testeada.

La información se envía mediante el formato JSON hacía una base de datos de


MySQL que se llama ”monitoreo” y dentro de ella, almacena los datos en una tabla
nombrada ”uao”. Los datos que deseamos almacenar en la tabla son:

87
id: Identificador de los datos
nombre: Nombre de la imagen.
imagen: Imagen en formato Base64 (blob).
ocupación: Estado del nivel de ocupación del lugar por parte de personas detec-
tado (lleno, medio o vacío).
fecha: Día, mes y año en que se almacenó el dato.
hora: Horario en formato 24 horas en que se almacenó el dato.

Fig. 44. Tabla de MySQL.

88
8.6. PROCESAMIENTO Y ALMACENAMIENTO DE DATOS

Fig. 45. Diagrama de flujo IoT.

Inicialmente lo que se tiene que garantizar es el tiempo en que la imagen procesada


por Google Colab llegue a la carpeta de drive, el proceso se puede observar en la
sección 8.4. Después de que Colab procesa, se almacena la imagen en una carpe-
ta en Drive, que a su vez se puede acceder a ella a través de la conexión con File
Stream Drive; Ese tiempo que se tarda en aparecer en el computador, es de apro-
ximadamente 46 segundos. Hay que tener muy presente esto, porque el programa

89
de JAVA ira a esa carpeta buscando las imágenes. La carpeta es la que se observa
en la figura 43. En Colab se renombra la imagen resultante con la clasificación del
estado de ocupación estimado. Ahora que ya se tiene la imagen en la carpeta espe-
cificada, procedemos a agregar la información a la base de datos de MySQL. Esto
se hace haciendo uso del método POST del protocolo de comunicación REST.

8.7. INTERFAZ GRÁFICA ADMINSTRADOR

Para el caso del administrador, se realizó una aplicación en Java, en donde podrá
tener acceso a toda la información que se recolecta, es decir, imágenes, niveles de
ocupación, fechas y horas. Además, podrá limpiar y/o filtrar la base de datos cuando
desee. La interfaz se ve de la siguiente forma.

(a) Activar Apache y MySQL (b) Ejecutar programa en Java para adqui-
sición de datos

(c) Mensaje de
bienvenida.

Fig. 46. Interfaz Administrador

90
(a) Inicio de sesión. (b) Comenzar sincronización de base de datos MySQL

(c) Visualización de afluencia más reciente

Fig. 47. Interfaz Administrador

8.8. INTERFAZ GRÁFICA USUARIO

Luego tenemos a la interfaz de usuario, en donde solo tendrá acceso al nivel de


ocupación más reciente de los 3 lugares seleccionados.

91
(a) Inicio de sesión. (b) Selección de lugar

(c) Visualización de afluencia


más reciente

Fig. 48. Interfaz usuario Móvil

92
9. CONCLUSIONES

En el presente trabajo se logró evidenciar el poder de extracción de


característi-cas de las redes neuronales profundas (CNN) en donde a partir de
unas imágenes las cuales están conformadas por píxeles son representativas de
9 categorías dife-rentes, logró clasificarlas y por ende entrenarse de forma
correcta, sin embargo el poder computacional que se requiere para entrenarlas es
bastante importante, afor-tunadamente se exploró la herramienta de Google
Colaboratory, la cual de forma gratuita brinda uso de GPU de alto desempeño
ya sea Tesla T4 o Tesla K80, algo que no es para nada despreciable, teniendo
en cuenta de que no cobran por su uso (es por un periodo corto de tiempo).

Algunas de las cosas que logramos identificar de la Redes Neuronales


Convolucionales era la facilidad de clasificar objetos a partir de las imágenes, lo
cual fue contraproducente debido a que en primera instancia se habían grabado
video en cafetería en horas del día y la noche, en donde al medio día se podía
observar una gran estela de luz de fondo, en el momento ese estado
representaba la cafetería llena, sin embargo, cuando se hizo el testeo de la red
con imágenes nuevas en el nivel de ocupación "medio "vacío.en horarios de la
tarde en donde la luminosidad era alta, la red se confundía con el nivel de
2

ocupación "lleno". Esto se corrigió haciendo un reentrenamiento con imágenes


de estado medio en horarios con demasiada luz. Lo único que faltó por realizar
fue un dataset con la cafetería primer piso en estado lleno a horario nocturno,
no fue posible encontrar esta condición en los días que se tomaron los datasets,
sin embargo, no es normal que la cafetería se encuentre llena en otros
diferentes al de medio día, a pesar de la falta de información, el sistema funciona
muy bien. El problema de la luminosidad no se presentó en los laboratorios,
debido a que estos se encuentran en sótano 2, y las condiciones luminarias son
prácticamente las mismas en todo momento, por lo tanto, se puede decir que
hay que tener mucho cuidado con las imágenes con las que se entrenan, ya
que estas deben representar de manera total los posibles estados de ocupación
bajo diferentes condiciones ambientales y de luz.

Por otro lado, la solución IoT permite tener un monitoreo prácticamente en tiempo
real de lo que está ocurriendo, además permite almacenar la información para
un posterior estudio en el futuro, con esto se podrían generar estadísticas
relevantes para poder mejorar los servicios prestados en la cafetería y
laboratorios, puesto que se tendría el registro de los lugares y las fechas en
donde se presenta una gran

93
cantidad de congestión. Con esta información también se podrían hacer estudios
de mercado y/o redistribuciones de los espacios. Con este trabajo se grado se
puede comprobar de que no importa el lugar y las condiciones del mismo,
siempre y cuan-do existan imagen es, se pueden sacar los datasets de los
diferentes niveles de ocupación, por lo tanto, es un proyecto totalmente escalable
para aplicarlo en otras areas de la universidad, como el gimnasio, cafetería de
Villa Laurentino, segundo y tercer piso de cafetería, biblioteca, salas 1, área de
mesas, etc. En donde posi-blemente se puede sacar bastante información sobre
el nivel de ocupación y sería muy útil saber por ejemplo que el gimnasio no
tiene congestión para ir a practicar ejercicio.

El hecho de no contar con recursos económicos y técnicos para adquirir hardware


para entrenamiento de redes neuronales profundas no debe ser una limitante,
toda la parte computacional de cálculo de pesos de la red neuronal artificial se
hizo me-diante el uso de Google Colaboratory, herramienta bastante potente con
diferentes ventajas como por ejemplo; Una gran cantidad de paquetes pre-
instalados y la faci-lidad de instalarlos mediante comandos linux como Pip, La
integración con Google drive permite tener toda la información de forma segura y
sin riesgo de pérdida por reinicio de kernel, además en la UAO contamos con
una gran cantidad de espacio en la nube de google, lo que facilita el manejo de
la información, sobre todo cuando se tienen miles de imágenes, es demasiado
espacio. Otra cosa que cabe mencionar, es que no tuvimos que usar el servidor
del semillero de Inteligencia Artificial, debido a que en la nube contamos con
capacidad de computo similar y con una facilidad de uso bastante superior al
hecho de tener que manipular el servidor propio, puesto que hay que instalarle
los drivers y múltiples controladores para que funcione de forma correcta,
técnicamente fue una cuenta pendiente, dado a que por cuestiones de tiempo nos
estaba limitando bastante, sin embargo, la estabilidad del proyecto en la
universidad se puede hacer mediante el uso de dicho servidor, sobre todo para
hacer los testeos en él y no depender de Google Colaboratory el cual es
demasiado inestable por el hecho de ser una herramienta gratuita.

La cámara que usamos no fue la mejor opción dado a que el lente tipo ojo de
pez genera unas distorsiones en la imagen que producen que el detector de
objetos "YOLO", se confunda fácilmente con otros objetos diferentes a la clase
"Persona", para poder disminuir esos falsos positivos, tuvimos que hacer
corrección de ojo de pez en el software brindado por el fabricante, pero sin
embargo, a futuro se reco-

94
mienda el uso de otro tipo de cámaras con gran angular pero sin que
distorsionen de manera tan radical como la nuestra.

En este tipo de problemas predomina el dataset y no la complejidad del modelo,


es por ello que es mucho mejor tener una gran cantidad de imágenes
representati-vas, que como tal un modelo pre-entrenado complejo. En nuestro
caso usamos una de las redes convolucionales más livianas que existen
actualmente como es el caso de MobileNet y sin embargo los resultados fueron
precisos. Estamos convencidos que con otro tipo de arquitecturas más pesadas
como por ejemplo Inception es po-sible tener mejores resultados que los
obtenidos, pero la arquitectura que usamos es escalable a dispositivos móviles,
por lo tanto utilizan menor cantidad de recursos de hardware para poder realizar
cálculos, lo que a futuro se traduce en una ven-taja, por el hecho de que se
puede usar esta red en un embebido para que solo realice la función de testeo
y de esta manera no se estaría utilizando un hardware sobredimensionado para
dicha función.

Por ultimo, este sistema se puede utilizar en otros lugares a parte de la univer-
sidad en donde sea relevante tener un registro del nivel de ocupación, como
por ejemplo en centros comerciales, estaciones del MIO, parques, plazoletas de
comi-das, etc. Es información que somos conscientes que puede llegar a ser de
utilidad para empresas de mercadeo, por ejemplo. Adicionalmente, este proyecto
no termi-na aquí, la idea es poder seguir explorando más cosas, como por
ejemplo no solo clasificar nivel de ocupación de personas, sino de vehículos, o
utilizar las bonda-des de Yolo Detection para el conteo de personas y que no
solo se pueda medir la ocupación como algo cualitativo, sino que también de
forma cuantitativa, se pueden realizar múltiples proyectos con Yolo, por ejemplo;
detección de rostros, detección de placas de vehículos para identificar aquellos
que estén registrados y autorizados para usar los parqueaderos de la universidad,
detección de anomalías para detectar y/o predecir posibles robos, choques de
vehículos, se pueden detectar diferentes patologías a partir de imágenes
médicas. Definitivamente las redes neuronales arti-ficiales son un campo
fascinante el cual aún le falta mucho por ser explorado y las oportunidades que
ofrece la visión por computadora son prácticamente ilimitadas.

95
REFERENCIAS

[1] "Script", Es.wikipedia.org. [En línea]. Disponible:


https://es.wikipedia.org/wiki/Script.
[2] "Tipado dinámico", Es.wikipedia.org. [En línea]. Disponible:
https://es.wikipedia.org/wiki/Tipado_din %C3 %A1mico.
[3] Marr, B. Forbes Welcome. Forbes.com. 2016 Disponible: https://
www.forbes.com/sites/bernardmarr/2016/12/29/4-amazing-ways-facebook-
uses-deep-learning-to-learn-everything-about-
you/2/1d8933493090.
[4] A. Ouaknine, Review of Deep Learning Algorithms for Image Classification",
Medium, 2018. [En linea]. Disponible en: https://medium.com/zylapp/review-of-
deep-learning-algorithms-for-image-classification-5fdbca4a05e2.
[5] A. Krizhevsky, I. Sutskever y G. Hinton, ÏmageNet Classification
with Deep Convolutional Neural Networks", Papers.nips.cc, 2019. [En
linea]. Disponible: https://papers.nips.cc/paper/4824-imagenet-classification-
with-deep-convolutional-neural-networks.
[6] S. Tsang, Review: AlexNet, CaffeNet — Winner of ILSVRC 2012
(Image Classification) - Medium", Medium, 2018. [En linea]. Dispo-
nible: https://medium.com/coinmonks/paper-review-of-alexnet-caffenet-winner-
in-ilsvrc-2012-image-classification-b93598314160.
[7] S. Pellicer, G. Santa, A. L. Bleda, R. Maestre, A. J. Jara y A. G. Skarmeta, .A
Global Perspective of Smart Cities: A Survey,"2013 Seventh International Con-
ference on Innovative Mobile and Internet Services in Ubiquitous Computing,
Taichung, 2013, pp. 439-444.
[8] C. Bailas, M. Marsden, D. Zhang, N. E. O’Connor and S. Little, "Performance of
video processing at the edge for crowd-monitoring applications,"IEEE 4th World
Forum on Internet of Things (WF-IoT), Singapore, 2018, pp. 482-487.

[9] T. Eady, "Tesla’s Deep Learning at Scale: Using Billions of Mi-


les to Train Neural Networks", Medium, 2019. [En linea]. disponible:

96
https://towardsdatascience.com/teslas-deep-learning-at-scale-7eed85b235d3.
[Accedido: 08- Jul- 2019].
[10] YouTube. Jetson TX1 sorflow object detection with Ten-
SSD Mobilenet. línea] Disponible en:
https://www.youtube.com/watch?v=nd39Yz9CwgEt=102s

[11] ENTER.CO. (2019). [En línea] Disponible en:


https://www.enter.co/especiales/universoandroid/hub/apps/en-tiempo-real
[12] TechCrunch. Google can now tell you how busy a place is before you
arrive. [En línea] Disponible en: https://techcrunch.com/2016/11/21/google-can-
now-tell-you-how-busy-a-place-is-before-you-arrive-in-real-time/

[13] Google. (n.d.). Know before you go, with Google. [En línea] Disponible en:
https://blog.google/products/search/know-you-go-google/ [

[14] U. Dahake, B. Bakraniya, J. Thakkar y M. Soha-


ni, Çrowd Density Estimation using Image Processing",
Pdfs.semanticscholar.org, 2018. [En linea]. Disponible:
https://pdfs.semanticscholar.org/a463/04fb04b164513d71e86035af1ef91cb37c
6e.pdf.

[15] C.S. Garcia Valencia. Prototipo de sistema para la gestión de ocupación


de parqueaderos en un centro comercial. [ebook] Bogotá, Colombia:
Universidad Distrital Francisco José de Caldas. 2018 [en linea]
Disponible en: http://repository.udistrital.edu.co/bitstream/11349/7846/1/
monografia %202.pdf

[16] Ieeexplore.ieee.org. (n.d.). Application of modern architectures of deep neural


networks for solving practical problems - IEEE Conference Publication. [En li-
nea] Disponible en: https://ieeexplore.ieee.org/document/7970594

[17] G. Sánchez-Torres, yJ Taborda-Giraldo, Estimación au-tomática

de la medida de ocupación de playas mediante proce-

97
samiento de imágenes digitales.. 16th ed. 2014 [en linea]
Disponible en p.https://ezproxy.uao.edu.co/menu. Disponible: http://
ezproxy.uao.edu.co:2094/eds/pdfviewer/pdfviewer?vid=2sid=b2a4031d-
f87a-4246-b969-9fa24e721f10

[18] Rey, N., Volpi, M., Joost, S. y Tuia, D. (2017). Detecting ani-
mals in African Savanna with UAVs and the crowds. In: Remo-
te Sensing of Environment. MultiModal Remote Sensing, Depart-
ment of Geography, University of Zurich, Switzerland: ELSEVIER,
p.https://www.sciencedirect.com/science/article/pii/S0034425717303942.
[19] J. López Sotelo, Redes Neuronales Artificiales y Deep Learning. ( pp.
1-15-17-19). Cali.
[20] López Sotelo, Aprendizaje Profundo (Deep Learning). Cali, p. 7.
[21] López Sotelo y E. Caicedo, Una aproximación práctica a las redes
neuronales artificiales. Cali, 2009, p. 79.
[22] López Sotelo, Profundo (Deep Learning). Cali, p. 12.
[23] López Sotelo, Aprendizaje (Deep Learning). Cali, p. 13.
[24] “Convolutional Neural Network”, La.mathworks.com, 2018. [En línea]. Disponi-
ble: https://la.mathworks.com/discovery/convolutional-neural-network.html. [Ac-
cedido: 13- Mar- 2018].
[25] N. Diaz Salazar y G. Salazar Gómez, Reconocimiento de objetivos en
imágnes usando aprendizaje profundo. Ingeniería, Universidad Autónoma de
Occidente, 2018.
[26] J. López Sotelo, Aprendizaje Profundo (Deep Learning).
[27] F. Mahvar, ”Art and Science of Machine Learning en Español”, 2018.
Coursera.[En línea] Coursera. Disponible: https://www.coursera.org/learn/art-
science-ml-es/lecture/MSkrm/optimizacion [Accedido 11 Mar. 2019].
[28] Cs231n.github.io. (n.d.). CS231n Convolutional Neural Networks for Visual Re-
cognition. [En línea] Disponible en: http://cs231n.github.io/neural-networks-3/
[Accedido 15 Sep. 2018].
[29] J. López Sotelo y E. Caicedo, Una aproximación práctica a las redes
neurona-les artificiales. Cali, Colombia: Universidad del Valle, 2017, pp. 77-85.

98
[30] “Google Cloud Platform”, Console.cloud.google.com, 2018. [En línea].
Disponible: https://console.cloud.google.com/bigquery?project=wise-shell-
224405p=bigquery-public-datad=new_york_taxi_tripst=tlc_yellow_trips_
2018page=table. [Accedido: 17- Mar- 2019].
[31] ”TensorFlow: MNIST for beginners | basiafusins-
ka | Katacoda”, Katacoda.com. [En línea]. Disponible:
https://www.katacoda.com/basiafusinska/courses/tensorflow-getting-
started/tensorflow-mnist-beginner. [Accedido: 18- Mar- 2019].
[32] D. Cardona Salgado, Analisis Exploratorio de Datos. Diplomado: Métodos Es-
tadísticos utilizados en la Investigación de Mercado, pp. 15,16,17.
[33] M. Alonso Gimeno and M. Martín, ”Introducción al Machine Learning (2.a edi-
ción)”, MiríadaX, 2017.
[34] J. López Sotelo, Redes Neuronales Artificiales y Deep Learning. , p. 15
[35] H. Latinoamérica, 2018, p. 3.
[36] López Sotelo, J. Redes Neuronales Artificiales y Deep Learning. p. 17.
Cali.
[37] López Sotelo, J. Redes Neuronales Artificiales y Deep Learning. (., pp. 19).
Cali.
[38] F. Li, A. Karpathy y J. Johnson, Lecture 8: Spatial Localization and Detection.
Stanford, 2016, p. 8.
[39] Programación. (2019). . [ebook] Instituto Tecnológico de Celaya, p.2.[en linea]
Disponible en: http://www.citethisforme.com/es
[40] http://fcasua.contad.unam.mx/apuntes/interiores/docs/98/4/informatica_ 4.pdf .
informatica_4, 2019, pp. 2-3.
[41] Docs.python.org.ar, 2019. [En línea]. Disponible:
http://docs.python.org.ar/tutorial/pdfs/TutorialPython2.pdf. [
[42] Pablin.com.ar. [En línea]. Disponible: http://www.pablin.com.ar/computer/ cur-
sos/c3/man001.htm.

99
[43] S. Programacion en Castellano, “Introducción a la librería Matplotlib
de Python”, Programación en Castellano., 2019. [En línea]. Disponi-
ble: https://programacion.net/articulo/introduccion_a_la_libreria_matplotlib_de
_python_1599.
[44] 2019. [En línea]. Disponible:
http://webs.ucm.es/info/aocg/python/modulos_cientificos/numpy/index.html.

[45] A. Bazaga, “OpenCV: Librería de Visión por Computador - Oficina de Softwa-


re Libre (OSL)”, Oficina de Software Libre (OSL), 2019. [En línea]. Disponi-
ble: https://osl.ull.es/software-libre/opencv-libreria-vision-computador/.
[46] “¿Qué es OpenCV?”, Un poco de Java y +, 2019. [En línea]. Disponi-
ble: https://unpocodejava.com/2013/10/09/que-es-opencv/.
[47] 2019. [En línea]. Disponible: https://medium.com/@orwell.dark/anaconda-y-
entornos-virtuales-87ae6ff1761f http://lml.ls.fi.upm.es/ep/entornos.html.
[48] L. Toro, “Anaconda Distribution: La Suite más completa para la Cien-
cia de datos con Python”, Desde Linux, 2019. [En línea]. Disponible:
https://blog.desdelinux.net/ciencia-de-datos-con-python/. [
[49] D. Amoedo, “Anaconda, suite para la Ciencia de datos con Python desde Ubun-
tu 17.10”, Ubunlog, 2019. [En línea]. Disponible: https://ubunlog.com/anaconda-
datos-python-ubuntu/.
[50] “¿Qué es Tensorflow?”, OpenWebinars.net, 2019. [En línea]. Disponible:
https://openwebinars.net/blog/que-es-tensorflow/.

[51] “TensorBoard: Visualizing Learning | TensorFlow Core |


TensorFlow”, TensorFlow, 2019. [En línea]. Disponible:
https://www.tensorflow.org/guide/summaries_and_tensorboard.

[52] J. Redmon, “YOLO: Real-Time Object Detection”, Pjreddie.com, 2019. [En lí-
nea]. Disponible: https://pjreddie.com/darknet/yolo/.

100
[53] “Detección de objetos con YOLO: implementaciones y
como usarlas”, Medium, 2019. [En línea]. Disponible:
https://medium.com/@monocasero/detecci %C3 %B3n-de-objetos-con-yolo-
implementaciones-y-como-usarlas-c73ca2489246.

[54] Colab.research.google.com. (n.d.). Google Colaboratory. [En línea] Disponible


en: https://colab.research.google.com/notebooks/welcome.ipynb?hl=es
[55] Google Cloud. (n.d.). CPU Platforms | Compute Engine Documentation | Goo-
gle Cloud. [En línea] Disponible en: https://cloud.google.com/compute/
[56] Google Cloud. (n.d.). CPU Platforms | Compute Engine Do-
cumentation | Google Cloud. [En línea] Disponible en:
https://cloud.google.com/compute/docs/cpu-platforms
[57] Google Cloud. Unidad de procesamiento de gráficos (GPU) | Google Cloud.
[En línea] Disponible en: https://cloud.google.com/gpu/?hl=es

[58] Z. Solarte Astaiza, ”Curso de fundamentos de internet de las cosas” en la


Uni-versidad Autónoma de Occidente. Cali, Colombia.

[59] Profesormolina1.webcindario.com. Que


es un sensor [En línea] Disponible en:
https://profesormolina1.webcindario.com/tecnologia/sens_transduct/que_es.htm

[60] ”Anuncios Clasificados gratis - comprar y vender en México | CLASF”, Clasf.mx.


[En línea]. Disponible: https://www.clasf.mx/q/lente-ojo-pez-sony/.

[61] BBVAOpen4U. API REST: qué es y cuáles son sus ven-tajas


en el desarrollo de proyectos.2016[En línea] Disponible en:
https://bbvaopen4u.com/es/actualidad/api-rest-que-es-y-cuales-son-sus-
ventajas-en-el-desarrollo-de-proyectos
[62] A., N. Deep Learning: profundizando el valor de la videovigi-lancia.
Tecnoseguro.com.2017 Disponible

101
https://www.tecnoseguro.com/noticias/cctv/deep-learning-videovigilancia-
hikvision.html
[63] “Falabella.com”, FalabellaCO, 2018. [En línea]. Disponible:
https://www.falabella.com.co/falabella-co/category/cat4920940/Gamers.
[64] “Precios de las instancias EC2 – Amazon Web Services (AWS)”,
Amazon Web Services, Inc., 2018. [En línea]. Disponible:
https://aws.amazon.com/es/ec2/pricing/on-demand/.
[65] X Song, H Kanasugi, R Shibasaki, (2016). DeepTransport: Prediction and
Simulation of Human Mobility and Transportation Mode at a Citywide Level.
Disponible ; https://www.ijcai.org/Proceedings/16/Papers/372.pdf
[66] D. Calvo. Red neuronal Convolucional CNN 2018, Dsiponible ; http://
www.diegocalvo.es/red-neuronal-convolucional-cnn/

[67] “Jetson TX1 object detection with Tensorflow SSD


Mobilenet”, YouTube, 2018. [En línea]. Disponible:
https://www.youtube.com/watch?v=nd39Yz9CwgEt=102s.

102

También podría gustarte