Mostrando entradas con la etiqueta Redes neuronales. Mostrar todas las entradas
Mostrando entradas con la etiqueta Redes neuronales. Mostrar todas las entradas

martes, 20 de noviembre de 2012

Reporte Speaker Recognition

Como reporte final de la materia de Redes Neuronales Artificiales de la Dra. Elisa Schaeffer en el semestre Ago-Dic 2012, voy a exponer en lo que he colaborado en el equipo de Speaker Recognition System, en donde básicamente lo que estamos implementando es una red neuronal que pueda clasificar entre si es una persona, o no en base a su voz, validando mediante una serie de pasos y entrenando la red neuronal para poder saber si esta persona es la que está utilizando el sistema, para posteriormente realizar algún otro tipo de acción, en este caso estamos solamente trabajando de lado de la validación.

Este es el Repositorio de nuestro proyecto.

Para esta mitad después de medio curso estuve contribuyendo con el proyecto haciendo una integración de la interfaz que habiamos desarollado anteriormente con la que utilizamos en nuestro prototipo final, ahora las ventanas van en cadena y están relacionadas según los datos que obtenemos en la red neuronal  y así detectar si es o no una persona.

Estas serían las capturas actualizadas del prototipo final.




Esta sería la interfaz de salida que tendría el usuario con unos script integrados con la grabadora, que en donde utilicé TK con python y desplegamos si la persona es identificada o no.

Después, trabajé en base a lo que estuvimos haciendo en equipo, decidimos hacer un análisis de compomtentes principales (PCA), por lo que yo estuve a cargo de desarrollarla y hacer pruebas para saber si esta forma de obtener los datos nos pudiera servir para tener un mejor resultado, basicamente lo que hice fue seguir los pasos del análisis y luego hice un archivo de prueba en donde utilizo el array de las frecuencia de MEL obtenidas anteriormente.

Este análisis es un proceso matemático que calcula los datos más significativos por medio de una descomposición de valores en la matriz de covarianza.

Estos son los resultados que obtuvimos de este análisis.



Como pueden ver entre Ramón y yo no tenemos mucha diferencia, cuando con Cecilia tenemos un valores completamente diferentes, de hecho también hice el análisis gráfico y vemos que el vector de coeficientes y el vector de puntuación se posiciona de manera contraria.

CECILIA

RAMON

ROBERTO

Después de algunas pruebas, utilizando el PCA, determinamos que los valores que obtuvimos eran muy parecidos entre Ramon y Roberto, por lo que decidimos utilizar los valores obtenidos del análisis de audio.

Los códigos del análisis y un código de prueba lo pueden ver en el repositorio, este sería mi reporte de la materia de redes neuronales, si tienen alguna duda acerca del proyecto, pueden dejar un comentario en el blog.

Por último muestro las diapostivas grupales, en donde exponemos el prototipo en equipo:

martes, 13 de noviembre de 2012

Aplicación de red neuronal


Para esta entrada voy a hablar acerca de alguna aplicación en la industria usando redes neuronales, por lo que busque algun texto en el cual estuviera estrechamente ligado a mi proyecto que hemos estado desarrollando duerante este semestre, por lo que voy a hablar hacerca de Speaker Recognition Using Neral Networks and Conventional Classifiers Liga, escrito por Kevin R. Farrell, Richard Mammone.

En este documento se hace una evaluación de diferentes clasificadores de renocimiento del hablante y proponen un clasificador llamado modified neural tree network (MNTN), el cual es un clasificador que combina las propiedades de un árbol de desición y la retroalimentación de las redes neuronales, existe ya un estandar NTN, esta versión modificada fue hecha especificamente para el reconocimiento del hablante, haciendo una verificación y una identificación usando datos de 38 personas que hablan el mismo idioma y en la misma región.

Como sabemos en la identificación del hablante es determinar quien está hablando en donde un sistema común y a grandes rasgos tiene como entrada la voz, en donde se hace un cierto preprocesamiento para extraer características importantes para ahora clasificarlo en si la persona es o no la identificada, la versión en la que ellos se enfocan es un sistema en donde depende de cierto texto para saber si esa persona es la que está hablando.

Basicamente lo que hace este MNTN es comparar con el metodo de clasificación del vecino más próximo, cuyo objetivo es estimar el valor de la función de densidad de probabilidad y tener por otra parte un arbol estructurado según su vector de cuantificación, una red multicapa y arboles de decisión para evaluar la comparación.

Nos hablan de la importancia de poder extraer las características del habla para poder identificar a la persona, en donde ellos proponen una seleccion de una herramienta la cual consideran clave para la clasificación de la voz en cuestión de la persona este se llama coeficiente Cepstral, estos se generan sacando la transformada inversa de Fourier del logaritmo del espectro de señal, son utilizandos para aplicaciones de este tipo, estos los podemos calcular con una pequeña porcion de audio, se saca del estracto la transformada de Fourier, después se hace un mapeo de la energía del espectro, se calcula el logaritmo de esa energia para obtener nuestro resultado a clasificar.

La clasificación se hace referencia a varios formas que se han hecho a lo largo del tiempo, como la distancia Euclidean, la clasificación Mahalanobis, usando el discriminante Bayesiano, pero la alternativa que ellos proponen es utilizar una red neuronal multicapa basada en entrenamento no supervisado, proponen utilizar el modelo discreto de Markov, la cual saca las probabilidades de cada transición entre estados, o la sumatoria de mezclas gausianas, la cual uiliza información temporal para ir mejorando cada iteración.

Después el MNTN como clasificador hace una medición en cada nodo del arbol junto con una etiqueta de la clase a la que pertenece, según la secuencia del vector de pesos, como speaker y como antispeaker, después se calcula el ratio acumulado de los hablantes con dicha etiqueta y se calcula una sumatoria de los ratios de los que tienen etiqueta speaker, ese mismo procedimiento se hace con los de etiqueta antispeaker para despues hacer una comparación de esa sumatoria y determinar si o no es el hablante.

Ellos realizar experimentos usando esta técnica y determinaron que de 20 personas a las cuales se les realizó el experimento para la validación del hablante, se obtuvo un 4% de error, proponen usar esta técnica ya que computacionalmente tiene ventaja al tener un arbol estructurado reducir una busqueda completa de si es o no el hablante, porque ya tenemos dicha información de cierto modo acomodado para su facilidad de uso.

Referencias.
Speaker Recognition Using Neral Networks and Conventional Classifiers Liga.

lunes, 8 de octubre de 2012

Reporte de Redes Neuronales: Medio Curso.

Como reporte de medio curso de la materia de Redes Neuronales Artificiales de la Dra. Elisa Schaeffer en el semestre Ago-Dic 2012, voy a exponer en lo que he colaborado en el equipo de Speaker Recognition System, en donde básicamente lo que estamos implementando es una red neuronal que pueda clasificar entre si es una persona, o no en base a su voz, validando mediante una serie de pasos y entrenando la red neuronal para poder saber si esta persona es la que está utilizando el sistema, para posteriormente realizar algún otro tipo de acción, en este caso estamos solamente trabajando de lado de la validación.

Este es el Repositorio de nuestro proyecto.

En las primeras semanas de la materia, estuvimos viendo teoría básica para poder empezar a programar una red neuronal, por lo que en la primera parte del proyecto pude contribuir en crear una primera versión de una neurona binaria simple, la cual documento en este post. Link, en donde utilizo el modulo numpy para multiplicar y generar los vectores para multiplicarlos y simplemente nos da la salida 0-1, en base a este programa pequeño script que hice en python pudimos empezar a programar nuestro primer programa agregando una funcionalidad de orientado a objetos, en colaboración con todo el equipo.


Después estuve desarrollando la interfaz, que obtendrá el usuario al momento de saber si es o no la persona que está hablando, es muy sencilla y simplemente estamos desplegando dicha información.





Esta sería la interfaz de salida que tendría el usuario con unos script sencillos, que están listos para integrarse al prototipo final en donde utilicé TK con python y desplegamos si la persona es identificada o no.


Después, trabajé en base a lo que estuvimos haciendo en equipo, desarrollando la neurona y moldelandola para recibiera como entrada valores no únicamente binarios, trabajando con el programa que realicé en la clase para generar los valores se necesitan y empecé a programar utilizando el módulo de tk de python, la interfaz gráfica de respuesta al usuario, al igual que la animación del comportamiento de la red neuronal, por lo que en la mayor parte del proyecto estuve trabajando en dichas interfaces de observación de la neurona y las del usuario de salida.


Para crear la interfaz para la observación del comportamiento de la neurona, utilicé la libreria tk de python en donde primero generé una ventana de 1000 pixeles x 1000 pixeles, programé un script en el cual pudiéramos obtener valores de -1:1 y tenerlos en sus planos correspondientes, por lo que dividí la ventana de manera que tuviéramos un plano de cuatro partes, en donde en la parte superior derecha tengamos los valores positivos de estos números, luego en la parte superior izquierda los valores negativos respecto al eje x y los valores positivos respecto al eje y, la parte inferior derecha los valores prositivos respecto al eje x y los valores negativos respecto al eje y, y en la parte inferior izquierda los valores negativos respecto a ambos ejes, por lo que por medio de la fórmula (1-x)*500, donde x es el número de entrada a neurona dado -1:1 y el menos uno para controlar la posición de pixeles, por lo que de esta manera podemos posicionar los elementos de manera correcta.


En la versión entregable, nuestros valores de entrada que tomamos de parámetros para nuestra primera versión, utilizamos valores de 0:1 por lo que ahora, tomé los valores directamente y los he multiplicado por el numero de pixeles para poderlos posicionar, en lo cual me he basado para poder unir mi script con el script de la neurona, en donde tenemos la siguiente simbología en la imagen de la derecha.


Como podemos ver en el siguiente video que he subido a youtube, ésta es la interfaz de observación del comportamiento de la neurona en base a como va corriendo nuestro script.





Obteniendo como resultado:



Este sería mi reporte de la materia de redes neuronales para el medio curso, si tienen alguna duda acerca de lo que se está haciendo con el proyecto, pueden dejar un comentario en el blog, esperamos que para final de semestre tengamos todo esto en conjunto y funcional.


Por último muestro las diapostivas grupales, en donde exponemos el avance en equipo:

Gracias

martes, 7 de agosto de 2012

Proyecto de redes neuronales

Reconocimiento de voz para desbloquear

 Realizar un sistema con una red neuronal en el cual al momento de hablarle a la computadora pueda reconocer tu timbre de voz para poder desbloquear la computadora, esto seria útil para aquellas personas.

















Poder medir por medio de algunos indicadores el procesamiento de voz, existen algunas librerias las cuales hacen ese procesamiento y me gustaria implementar.

 Ligas interesantes

Reconocimiento de frutas para supermercado

Realizar un sistema el cual por medio de alguna camara detecte una fruta y a partir de ese pueda saber cual es la fruta, para asi las cajeras no tengan que teclear el código, el cual las frutas y verduras no tienen, y puedan utilizar una red neuronal.
 

















Poder medir por medio de algunos indicadores la imagen por medio de OpenCV y luego procesarlas para entrenar la red.

Ligas interesantes