Luces, cámara, drones

Hola a todos. Mi nombre es Eduardo y voy en 9no semestre de ISC. No deben saber mucho de mi aparte de los detalles que estoy a punto de contarles. Me graduaré en mayo del 2016. Estudié el semestre enero-mayo 2015 en Finlandia. Y en este blog les compartiré mi día a día en mi proyecto anual llamado ‘luces, cámara, drones’.

En mi estancia en Finlandia decidí enfocar mis estudios al estudio más intensivo de machine learning. Dado que el año pasado había comenzado con el estudio de los drones decidí continuar y comenzar un proyecto relativo al reconocimiento de patrones utilizando al dron.

A lo largo de estos dos semestres realizaré tres tipos de actividades:

  • investigación del estado del arte: lectura de journals de lo que está sucediendo en el mundo de la inteligencia artificial. Debido a la poca experiencia que tengo en el área, las investigaciones al inicio serán extensivas e incluirán la investigación de distintos conceptos con los cuales no estoy familiarizado.
  • Implementación de experimentos: dado lo que exista en el estado del arte de la inteligencia artificial, implementaré experimentos que me puedan ayudar con el proyecto que decida hacer al final
  • Trabajo de campo con dron: trabajaré en equipo con otros dos colaboradores de este blog para un proyecto que buscará integrar la tecnología del dron con el reconocimiento de patrones, más específicamente hablando de la cámara del mismo.

A lo largo de este tiempo estaré escribiendo reportes semanales con lo que vaya aprendiendo y vaya aplicando para que pueda ser consultado por cualquier persona y sea de utilidad.

En la próxima entrega, entrare a fondo con un journal que llevo leyendo e investigando acerca de un proceso genérico de reconocimiento en tiempo real de la posición de la mano con motivos interactivos.

Manténganse al pendiente.

Advertisements

Reconocedor de Letras de la Lengua de Senas Mexicana

Durante el semestre pasado trabajamos en un reconocedor de señas del lenguaje de sordos y logramos hacer que reconociera entre 6 distintas letras. Yo me dedique al área del pre procesamiento de imágenes, mi trabajo era tomar imágenes previamente tomadas y descubrir cuál era la mejor forma para resaltar la mano de toda la imagen y cortarla. Con esto logramos obtener un dataset para las 6 señas y con esa técnica se procesaba una imagen tomada y se clasificaba entre las del dataset.

Este semestre toca ampliar el conocimiento del reconocedor para que sea capaz de diferenciar entre todas las letras de la lengua de señas mexicana (LSM), con la excepción de las letras que incluyen movimiento como son las letras: J, K, Ñ, Q, X, Z. Existe la posibilidad de que un grupo (Q, X, Z) si sea reconocidas ya que su pose inicial no es parecida a la pose de alguna otra letra.

Inicialmente el dataset se construyó con 100 fotos de cada letra tomadas manualmente por 4 manos distintas. Estoy trabajando en una forma de cortar y procesar imágenes para el dataset adquiriendo imágenes de una fuente de video en vivo. Esto da la posibilidad de sacar cerca de 100 imágenes cada 10 segundos de video y así conseguir muchas imágenes con un mejor filtrado y procesado para alimentárselas al reconocedor.  A continuación se muestra la diferencia en las imágenes obtenidas.

miniAunque se requería de este tamaño, la técnica de pre procesado dejaba imperfecciones.

138

El enfoque para el procesamiento cambio y ahora la máscara se crea con base en los colores. Este enfoque también lo estaremos utilizando para otro proyecto el cual es un dron que detectara objetos de color rojo y se dirigirá hacia ellos.  Explicado aquí.

Obteniendo este dataset de más opciones, mayor tamaño, y mejor calidad se le pueden aplicar otras técnicas de machine learning para así lograr reconocer una mayor cantidad de señas.

Erick Ibarra

Día 0: Detector de Sentimientos (Erithacus pardus)

Día 0: El despertad.

Soy Miguel Angel de último semestre de sistemas computacionales, me encuentro desarrollando una versión alterna de Erithacus pardus, un proyecto de Inteligencia artificial con el profesor Benjamin.

El proyecto originalmente estaba en idioma inglés, y se está trabajando ahora en idioma español. Actualmente ya se tiene un sistema de registro donde se puede invitar a las personas a ser parte del proyecto de manera anónima. (http://mgonzalez.me/erithacuspardus/register/)

Se están analizando varias alternativas que pueden ayudar a mejorar el rendimiento del sistema, algunas de estas son:

  • Naive Bayes
  • PART
  • k-Nearest Neighbors
  • Support Vector Machines
  • kNN

Incluso, reemplazar el sistema actual para que sea robusto y ligero. Para aprovechar el tiempo, me he dedicado a realizar varios tutoriales que realizan análisis de manera más rápida usando WEKA. Por lo cual, WEKA es una alternativa para el mejorar sistema.

El siguiente paso es: realizar el seguimiento de las cuentas de Twitter para tener una base de datos extensa mientras se encuentra alguna alternativa que mejore el rendimiento del sistema.

Nuevo miembro

Mi nombre es Sergio Franco. Estoy terminando el primer año de la Ingeniería en Sistemas Computacionales.

Este es el comienzo para lo que yo espero sea un productivo e inmersivo camino en el universo de las ciencias computacionales, la IA y el dominio del mundo. Sin embargo, por el momento no tengo los conocimientos necesarios para hacer algo relevante.

Es por eso que en los próximos meses estaré estudiando teoría acerca de diversos temas, platicando con gente, leyendo libros y viendo algo de anime antes de empezar a involucrarme en uno que otro proyecto. Así al final tendré una propuesta más sólida de algo que quisiera desarrollar.

Poco a poco iré publicando cosas acerca de mis avances, así cuando llegue a ese estado astral de conocimiento infinito ustedes puedan ser parte de eso y compartirlo conmigo. ;)))))

frabz-power-unlimited-power-42e9d8

Naive Bayes

Como vimos anteriormente, las redes bayesianas son modelos probabilísticos que nos permiten razonar bajo incertidumbre. En este post, veremos una aplicación del razonamiento bayesiano en un simple clasificador de correos electrónicos.

Recordando un poco, las redes bayesianas son modelos gráficos probabilisticos que nos permiten calcular la probabilidad de un evento, basándose en alguna evidencia dentro del grafo. Las redes bayesianas “naive”, también conocidas como “stupid bayes” (bayes ingenuo o estúpido), utilizan el mismo principio de las redes bayesianas pero hacen fuertes suposiciones de independencia.

Para entender estos conceptos, consideremos una red bayesiana como la siguiente:

Screen Shot 2015-02-20 at 5.39.16 PM

En ésta, se modela el hecho de que un correo electrónico puede ser escrito por un remitente, cuyos mails sólo contienen las palabras “Hola”, “Chau” y “Bueno”. Obviamente en la realidad un mail contiene muchas más palabras, pero  se utiliza esta representación por fines prácticos.

Mas concretamente, esta red representa una distribución de probabilidad conjunta de nuestras variables “remitente”, “hola”, “chau” y “bueno”. Es decir, que tenemos una probabilidad para cada posible estado de remitente (para cada posible remitente), y probabilidades de la ocurrencia de cada palabra dado el remitente.

Por ejemplo, podemos asumir que sólo existen dos remitentes:

Screen Shot 2015-02-20 at 5.47.45 PM

La imágen representa que hay la misma probabilidad de que un correo sea de Oscar o de Juan; pero que el uso de cada palabra cambia según su autor.

Por ejemplo, la probabilidad de que la palabra “Hola” aparezca en un mensaje dado que lo envió Juan es de 0.3, mientras que es de 0.2 si lo envía Oscar.

De la misma forma, cada variable dependiente (palabra) obtiene distintos valores para cada posible estado del remitente.

Se dice que éste es un modelo Naive Bayes, ya que la forma del grafo nos indica que existe independencia entre cada posible palabra, cuando conocemos al remitente. Es decir, al saber que un correo es de Oscar y que contiene la palabra “Hola”, nuestro valor de 0.6 para la probabilidad de “Bueno” no cambia. Sin embargo, si no supieramos que el correo es de Oscar, el saber que existe la palabra “Hola”, si modificaría el valor de “Bueno” en nuestra tabla de probabilidad condicional. Para entender mejor esta idea, puedes visitar el siguiente link o algúno de los provistos en las referencias posteriormente.

Un pequeño análisis en esta suposición de independencia que se modela a partir de nuestra red, nos llega a la obvia conclusión de que no siempre aplica. Es decir, a pesar de que sepamos que el correo es de Oscar, la probabilidad de la palabra “Hola” debería ser dependiente de “Bueno” considerando por ejemplo la ubicación de cada una dentro de una oración.

Es por este motivo que se llama a éste tipo de redes “ingenuas”; no permiten modelar la realidad con exactitud, pero aún así se pueden obtener muy buenos resultados. A partir de su concepto existen los denominados naive classifiers (clasificadores ingenuos), que -oh sorpresa- fueron utilizados en los primeros filtros de spam de correo electrónico.

La gran ventaja de las mismas es que son mucho mas fáciles de modelar que una red completa, y cálculo de probabilidad para cualquier nodo se vuelve mucho más rápido y sencillo.

Si quieres saber más de las redes Naive Bayes, y la teoría detrás de las mismas, puedes visitar los siguientes links:

http://es.wikipedia.org/wiki/Clasificador_bayesiano_ingenuo

http://www.cs.cmu.edu/~tom/mlbook/NBayesLogReg.pdf

Y si quieres más diversion, aquí está una guía para implementar un clasificador naive:

https://www.bionicspirit.com/blog/2012/02/09/howto-build-naive-bayes-classifier.html

Fuentes:

Koller, D. & Friedman, N. (2009). Probabilistic graphical models : principles and techniques. Cambridge, MA: MIT Press.

Procesamiento de Imagenes

El procesamiento de imágenes es una herramienta ampliamente utilizada en muchas áreas, como la Visión Artificial. Consiste en procesar señales, la mayoría de veces digitales, aunque también pueden ser analógicas u ópticas (captación de luz), y realizar con ellas operaciones para tener como resultado una imagen mejorada que resulta más fácil de interpretar.

Existen distintos propósitos por los cuales se exploran y utilizan distintas técnicas para analizar y manipular las imágenes. Uno de los principales es el poder observar objetos que nos son distinguibles o que no se ven por el ojo humano, esto puede suceder porque no había suficiente luz, razones climatológicas, entre otras. Por otro lado este objeto puede ser distinguible, pero no claramente visible para rescatar sus características, en este caso, como en el anterior, el uso de técnicas de procesamiento nos puede regresar una imagen más visible y nítida.

Estos procesos son muy utilizados en el área de la seguridad, por ejemplo, es muy común que en las series policiacas nos muestren estos métodos en acción, supongamos que quieren capturar a un criminal y que todo lo que tienen es un video de su acto delictivo y como escapo. El procesamiento del video (serie de imágenes) regresa la placa del vehículo en el que escapo o en el mejor de los casos el rostro fácilmente identificable.  Esto es posible, y no solo en películas, en el siguiente video se puede observar distintas entradas de imágenes y sus salidas después de ciertas técnicas.

Otra de las aplicaciones es en la búsqueda automatizada de imágenes, en esta rama se buscan características únicas en las imágenes a través de técnicas de feature extraction, con esto se logra obtener valores únicos que describen a la imagen, con estos valores se inicia una comparación con otras imágenes tratando de encontrar los resultados obtenidos (o muy parecidos) en el resto de las imágenes. Uno de los mejores ejemplos es el buscador de imágenes de Google, en el cual se le da como entrada una imagen y los algoritmos de Google la procesan y llegan a imágenes muy parecidas.

Como estas aplicaciones existen muchas otras y en muchos campos laborales donde se utilicen imágenes, como en la medicina, donde se analizan imágenes como tomografías para llegar a resultados o pronósticos más acertados que un diagnostico humano.

Fuente:

http://books.google.co.in/books?id=smBw4-xvfrIC&lpg=PP1&dq=image%20processing%20ajoy%20ray&pg=PP1#v=onepage&q&f=false

http://www.disi.unige.it/person/RovettaS/rad/image-processing-wikipedia-book.pdf

Método de Montecarlo

El método Monte Carlo es otro método estocástico (ver Cadenas de Markov) que utiliza una serie de algoritmos para realizar simulaciones aleatoriamente, esto permite asignarle valores aleatorios a un conjunto A de variables independientes, para que el conjunto B de variables dependientes tome algún valor como resultado. Acción seguida, se toma la frecuencia de que B tome cierto resultado y se calcula la probabilidad de que ese evento suceda con base al total de eventos. Esto nos permite darnos una idea de que evento es

A diferencia de las cadenas de Markov, la distribución de probabilidad no está ligada al evento anterior inmediato, en este caso la probabilidad sigue una distribución seleccionada por quien realice la simulación.

El proceso puede variar, pero se busca seguir ciertos pasos base. Los métodos comienzan por asignarle valores aleatorios dentro de algún rango y distribución definidos. Tomando estos valores, se calculan las variables del conjunto B que dependen de nuestro primer conjunto. Estos eventos son almacenados y el proceso se repite hasta cierto número de iteraciones. De todas las iteraciones realizadas se busca el valor deseado o pronostico del conjunto B y se muestra que tan frecuente es que se llegue a esos resultados, tomando en cuenta un supuesto o valor esperado del conjunto A, pero sin saber exactamente qué valor puede tomar.

Del método de Monte Carlo surgen algunas variables, entre las cuales se encuentran la Búsqueda de Arboles Monte Carlo o  Arboles de Juego Monte Carlo. Dicho algoritmo busca simular un árbol de juegos como en el Método Min-Max, tomando en cuenta la posición del árbol donde se encuentre realiza iteraciones y calcula aleatoriamente alguna rama del árbol y regresa los resultados al nodo raíz, es decir de donde nació el árbol y con estos resultados es posible llegar a conclusiones como que movimiento es más probable que termine en el juego ganado.

En la siguiente liga se encuentra una breve explicación del uso del método de Monte Carlo en árboles, así como un ejemplo donde un juego de Conecta-4, realiza un determinado número de iteraciones para saber cuál es el movimiento que es más probable que lo lleve a la victoria.

http://beej.us/blog/data/monte-carlo-method-game-ai/

En este caso el jugador determina el número de iteraciones que el método va a realizar antes de efectuar un movimiento. Entre mayor sea el número de iteraciones, se puede decir que aumenta la dificultad, debido a que se recorren más ramas del árbol y se llega a probabilidades más precisas.

Como esta aplicación del método en el área de los juegos, existen muchas otras en la mayoría de las áreas. Estas simulaciones llegan a ser más precisas que la intuición humana por lo que son muy utilizadas para pronosticar resultados en la industria o en las finanzas para el análisis de riesgos.

Otra de sus aplicaciones es para ayudar a la Visión Artificial para poder localizar una posible fuente de luz de alguna imagen y con ello poder ubicar los objetos de la imagen en un espacio.

Fuente:

http://sander.landofsand.com/publications/AIIDE08_Chaslot.pdf

https://dl.dropboxusercontent.com/u/13074288/Apunte_Teorico_MC_2005.pdf

Vision Artificial

La realidad para los seres humanos consta de 3 dimensiones espaciales, sin embargo nuestros ojos como las cámaras o sensores con las que las computadoras pueden tomar perspectiva del mundo real solo pueden recibir imágenes en 2 dimensiones. El ser humano al contar con visión binocular y un cerebro que puede lograr sin problema la fusión sensorial, es capaz de percibir las 3 dimensiones y así poder ubicase en un espacio.

Por otro lado, una computadora solo puede recibir imágenes en 2 dimensiones. Para las personas una imagen vale más que mil palabras, ya que puede percibir e interpretar muchas conclusiones a partir de una sola imagen. Para una computadora, una imagen solo consta de bits y esto reduce significativamente la posibilidad de una interpretación. Es por esto que surge la rama llamada Visión Artificial, también conocida como visión computacional o procesamiento de imágenes. Esta rama utiliza la captación y procesamiento de señales con el fin de que una computadora pueda entender y así poder describir y llegar a resultados.

Nuestro cerebro para percibir y reconocer objetos realiza una serie de tareas automáticamente, y por lo mismo aun no podemos descifrar que hace para así simular estos comportamientos. Es por esto que existen distintos técnicas para recuperar la dimensión que perdimos (profundidad).

Una técnica utilizada por Microsoft Live Labs, es la de analizar un conjunto de imágenes de algún objeto, y usando técnicas como el reconocimiento de patrones, reconocer las áreas comunes de las imágenes y así poder unirlas y crear un modelo en 3 dimensiones.

Otra técnica para recuperar la profundidad es la de utilizar los distintos tonos presentes en una imagen para localizar relieves (sombras). Con estos relieves poder localizar la fuente de luz en la imagen y así llegar a un modelo de la forma de los objetos.

Entre las principales aplicaciones se encuentran:

• Reconocimiento Facial: https://www.youtube.com/watch?v=mdhvRNYX0PI
• Reconocimiento de Objetos: https://www.youtube.com/watch?v=tlC2O9T9jks
• Seguimiento de Objetos: https://www.youtube.com/watch?v=whwsLjLjEiY
• Análisis de comportamiento: https://www.youtube.com/watch?v=o0GVUgTdxKg
• Robótica: https://www.youtube.com/watch?v=kKDd2vIjtEU
• Detección Remota: https://www.youtube.com/watch?v=Dwl6rli1EiY

Fuente:

Método min-max

Un método estándar para que una computadora juegue un juego de 2 participantes, es hacer uso de un “árbol de juego”. En el mismo, cada nodo representa una posición posible en el juego, y los arcos representan una movida o jugada posible.

En este ejemplo se considerará un juego de damas en un tablero 4×4, para simplificar la explicación.

La siguiente imágen muestra el árbol de juego de nuestro tablero de damas. El primer nodo representa el punto inicial. Los nodos del segundo nivel representan las 3 posibles jugadas que realizamos “nosotros”, las fichas negras. Y los nodos del tercer nivel representan las posibles jugadas de las fichas rojas (en el gráfico, blancas).

arbolexpandido

Ahora supongamos que analizamos los hijos de cada nodo del tercer nivel para poder determinar qué pasa después. En el caso del hijo izquierdo del nodo que está a la izquierda, el negro está a punto de perder, por lo que le asignamos un -1. El del medio será un empate, por lo que le asignamos un 0. Y el derecho está a punto de ganar, por lo que le asignamos un 1. De la misma forma, asignamos números a cada nodo del tercer nivel.

A partir de estos numeros, podemos suponer que en el caso en que el negro mueva la ficha como el primer nodo del segundo nivel,  el rojo elegirá la opción que nos haga perder, es decir, el nodo con el valor -1. De esta forma asignamos el valor mínimo de los hijos a cada nodo del segundo nivel. Es decir, resultaría en una secuencia -1, 0, -1.

Por lo tanto, elegimos el nodo con el valor mayor, en este caso el del medio que tiene el valor 0. De esta forma en el peor de los casos empataríamos.

El procedimiento ilustrado es el conocido como método min-max. En 1962 Arthur Samuel escribió un programa que juega damas usando este método, y le pudo ganar a un campeón estatal.

Sin embargo, en juegos más complicados como el ajedrez, el método es ineficiente ya que el árbol crecería desmesuradamente. Para solucionar dicho problema, existen estrategias como el procedimiento alpha-beta, que permite reducir el numero de operaciones de forma significativa.

 

Fuente:

Dewdney, A. (2001). The (new) Turing omnibus : 66 excursions in computer science. New York: Henry Holt.

 

Teoría de Juegos

La teoría de juegos se se centra en el estudio estratégico de toma de desiciones. Específicamente, es el estudio de modelos matemáticos de conflicto o cooperación entre agentes racionales e inteligentes que toman desiciones. En un principio se desarrolló para entender la economía, pero se formalizó gracias a John von Neumman en 1944 y se popularizó gracias a su aplicación en estrategias militares. Un dato curioso es que ganó popularidad gracias a la película “Una mente brillante”, donde el protagonista es uno de los principales contribuidores a la teoría.

El dilema del prisionero es el ejemplo clásico para entender esta teoría. El mismo dice lo siguiente:

Dos personas cometieron un crimen, y se encuentran en dos cuartos separados en una estación policial. El fiscal se acerco a cada uno por separado y les dijo lo siguiente: “Si confiesas y delatas al otro prisionero, y el mismo no confiesa en contra tuyo, te dejaré ir. Si los dos confiesan, los enviaré a ambos a la prisión por 2 años. Si tu no confiesas y el otro prisionero si, te enviaré 3 años a prisión. Si ninguno confiesa, los enviare a ambos 1  año a prisión por un crimen menor”. ¿Cuál es la desicion más racional?

El problema se puede modelar en la siguiente tabla

Captura de pantalla 2014-04-26 a la(s) 21.04.57

La teoría de juegos nos da distintas estrategias para abordar dicho problema, por ejemplo el equilibrio de Nash nos indicaría que ambos prisioneros traicionarian al otro.

La teoría de juegos se ha convertido cada vez más importante en la lógica y la computación. Muchas teorías lógicas tienen de base la teoría, y la computación interactiva también se basa en la misma.

El internet ha propiciado el desarrollo de la teoría en el área computacional. Según Asuman Ozdaglar, una profesora de computación e ingeniería eléctrica en el MIT, antes los ingenieros en telecomunicaciones tenían que afrontar una serie de problemas técnicos, pero gracias al internet ahora tienen que lidiar con humanos. Debido a su naturaleza, la teoría de juegos permite encontrar el equilibrio entre partes en juegos, servicios p2p, y más.

En el siguiente post se ejemplificará la teoría en una estrategía aplicada a videojuegos.

Fuente:

Hardesty, L. (2013, junio 18). Game Theory Is No Longer Just for Economists. MIT Technology Review. Recuperado 27 de abril de 2014, a partir de http://www.technologyreview.com/article/515481/gaming-the-system/
Jackson, Matthew O., A Brief Introduction to the Basics of Game Theory (December 5, 2011). Available at SSRN: http://ssrn.com/abstract=1968579 or http://dx.doi.org/10.2139/ssrn.1968579