SEP DGIT Instituto Tecnológico de Apizaco “Clasificación de Llanto de Bebés para Identificación de Hipoacúsia y Asfixia por medio de un Sistema Híbrido (Genético – Neuronal)” TESIS DE GRADO POR PROYECTO DE INVESTIGACIÓN PARA OBTENER EL GRADO DE Maestro en Ciencias en Ciencias de la Computación PRESENTA Orion Fausto Reyes Galaviz Asesores: Dr. Federico Ramírez Cruz Dr. Carlos Alberto Reyes García Apizaco Tlaxcala 2005 Agradecimientos Agradezco con la misma importancia a: Al Dr. Carlos Alberto Reyes García, por ser mi padre, guía, y asesor, de no ser por sus invaluables consejos, no hubiera llegado hasta este punto. Al Dr. Federico Ramírez Cruz, por su invaluable colaboración durante el desarrollo de esta tesis. Al Dr. Sergio Cano por las atenciones brindadas durante mi estancia en Cuba para la investigación relacionada con el llanto del bebé. A mi mamá por haberme soportado en las buenas y en las malas. A toda mi familia y novia por todo el apoyo que me brindaron. A todos mis amigos y compañeros, por haber compartido tantas experiencias juntos. A todos los bebés que ofrecieron sus llantos para realizar este trabajo. Su aportación ayudará a conocer más sus mensajes. A COSNET por el apoyo brindado a lo largo de este periodo, sin el cual no hubiera podido llegar hasta aquí. Este trabajo es parte de un proyecto financiado por CONACYT (número 37914-A). Agradeciendo el apoyo brindado durante mis estudios. ÍNDICE Capítulo 1. INTRODUCCIÓN……………………………………….……….1 1.1 Importancia del Proyecto……………………………………..……1 1.2 Justificación……………………………………..………………………3 1.3 Hipótesis………………………………………………………..………..3 1.4 Procesamiento Acústico……………………….……………………3 Capítulo 2. CONCEPTOS FUNDAMENTALES DEL ÁREA Y ESTADO DEL ARTE………………………………………………..…………..5 1.5 Análisis de Componentes Principales….………………………8 1.6 Computación Evolutiva………………………..……………..……..9 1.7 Clasificación de Patrones………………………..………………11 Capítulo 3. PREPARACIÓN DEL CONJUNTO DE DATOS E IMPLEMENTACIÓN DE LA FASE EXPERIMENTAL………….…....12 3.1 Colección de Muestras……………………..……………………..13 3.1.1 Segmentación en 1 o 3 segundos………………………………..………….14 3.1.2 Segmentación en unidades de llanto……………………………………….15 3.1.3. Segmentación por Unidades de Llanto Unidas………………...……...….17 3.2 Extracción de Características…………………….……………….18 3.2.1 Segmentos de 1 o 3 segundos (sin incluir Unidades de llanto Unidas)…..18 3.2.2 Unidades de Llanto………………………………………………...……….21 3.2.3 Unidades de Llanto Unidas……………………………..………………….22 3.2.4 MFCC…………………………………...……………..……………………22 3.2.5 LPC……………………………………………….…………………………23 3.3 Estrategias Evolutivas………………………….………..…………..24 3.4 Redes Neuronales Artificiales (RNA)..…..………………………26 3.4.1 Red Neuronal, Feed-forward (Alimentación hacia adelante)………...….27 3.4.2 Red Neuronal, Feed-forward Input Delay (Alimentación hacia adelante con retraso en la entrada)…………………………………………….……28 3.4.3 Red Neuronal LVQ (Cuantificación Vectorial Lineal)…………..………29 3.4.4 Entrenamiento (Gradient descent with adaptive learning rate back propagation)………………………………………...…………………...….30 3.4.5 Entrenamiento (Scaled conjugate gradient backpropagation)….……….31 3.4.6 Validación Cruzada...………………………………………………………31 3.5 Proceso de Experimentación……………..………………………..32 3.5.1 Sistema Híbrido…………………………………………..…………………32 3.5.2 Entrenamiento de las Redes Neuronales……………..……………...……35 3.5.3 Entrenamiento con bebés diferentes…………………...………………….37 Capítulo 4. DESARROLLO DE LA FASE EXPERIMENTAL……....40 4.1 Primeros Experimentos de Selección de Parámetros….41 4.1.1 Retrasos en la Red con Retraso en el Tiempo......………………………..41 4.1.2 Número de Componentes Principales…………………..………………....43 4.2 Experimentos con Parámetros Seleccionados……..…….45 4.2.1 1 Segundo………………………………………………...………………….45 4.2.2 3 Segundos………………………………………...……...…………………48 4.2.3 Unidades de llanto…………………………………………………………..50 4.2.4 Unidades de Llanto Unidas…………………...……………………………51 4.3 Validación del Sistema……………………..…………………..…53 Capítulo 5 ANÁLISIS DE RESULTADOS………………..………..…..57 Capítulo 6 CONCLUSIONES Y TRABAJOS FUTUROS………..….60 BIBLIOGRAFÍA…………………………………………………………..…….61 ANEXOS………………………………………………………………………….65 ÍNDICE DE FIGURAS Figura 1.1. Análisis de Componentes Principales……………………………...…..9 Figura 3.1. Proceso de Reconocimiento Automático del Llanto del Bebé…........12 Figura 3.2. Segmentación en n segundos………………………………..………...15 Figura 3.3. Segmentación en unidades de llanto………………………………….16 Figura 3.4. Unidades de Llanto unidas a una sola onda de llanto……………….17 Figura 3.5. Mutación Gaussiana de padre a para formar descendiente b………25 Figura 3.6. Recombinación intermediaria de padres a & b para formar descendiente c……………………………………………….………………25 Figura 3.7. Entrenamiento de una red neuronal………………….………………26 Figura 3.8. Red Neuronal con Retraso en el Tiempo (TDNN)……………...……29 Figura 3.9. Arquitectura de la red LVQ…………………………..………………29 Figura 3.10. Inicialización de individuos………………………….………………33 Figura 3.11. Selección de los mejores individuos………………...……………….33 Figura 3.12. Generación de la nueva población, con los mejores individuos…...34 Figura 4.1. Precisiones resultantes de cada Retraso probado en la red con retraso en el tiempo……………………………………………………...….42 Figura 4.2. Comportamiento de entrenamientos con diferentes retrasos…...….43 Figura 4.3. Precisiones dadas por la Red con Retraso en el Tiempo con muestras de 1 segundo y diferente número de PCs………………………………….43 Figura 4.4. Precisiones dadas por la Red con Retraso en el Tiempo con muestras LPC de 3 segundos y diferente número de PCs…………………………..44 Figura 4.5. Precisiones dadas por la Red con Retraso en el Tiempo con muestras MFCC de 3 segundos y diferente número de PCs………………………..44 Figura 4.6. Entrenamiento usando características LPC contra características MFCC, sin reducción, ninguno alcanza 1x10-8……………………………47 Figura 4.7. Entrenamiento usando características LPC contra características MFCC y 50 PCs………………………………………………………..……47 Figura 4.8. Entrenamiento usando características LPC contra características MFCC, sin reducción……………………………………….………………49 Figura 4.9. Entrenamiento usando características LPC contra características MFCC, con reducción, 70 y 20 PCs respectivamente…………………….49 Figura 4.10. Comportamiento de entrenamiento usando Unidades de Llanto con características LPC y MFCC…………………………...………………….51 Figura 4.11. Comportamiento del entrenamiento usando Unidades de Llanto Unidas con Características LPC y MFCC…………….…………………..53 Figura 4.12. Comportamiento de entrenamiento usando muestras de bebés diferentes con características LPC y MFCC……………………..……….56 ÍNDICE DE TABLAS Tabla 3.1. Relación de muestras obtenidas por cada bebé, en segmentos de 1 o 3 segundos………………………………………..……………………………20 Tabla 4.1. Resultados utilizando muestras de 1 segundo………………………...46 Tabla 4.2. Resultados utilizando muestras de 3 segundos………….…………….48 Tabla 4.3. Experimentos con Unidades de Llanto probando cada RNA………..50 Tabla 4.4. Experimentos con Unidades de Llanto Unidas probando cada red neuronal………………………………………………..……………………52 Tabla 4.5. Resultados de las mejores configuraciones, usando muestras de bebés diferentes……………………………………………...……………………..55 Capítulo 1. INTRODUCCIÓN 1.1 Importancia del Proyecto El sonido del llanto producido por un infante, es el resultado de su condición física y psicológica y/o de estímulo externo/interno. Ha sido probado que las causas del llanto tales como dolor, hambre, miedo, estrés, etc. exhiben diferentes patrones de llanto. Una madre experimentada puede ser capaz de reconocer el significado de diferentes tipos de llanto, y con esto reaccionar de una manera adecuada a las necesidades del infante. Se ha reportado en la literatura que el análisis del llanto de bebés, era realizado principalmente por análisis visuales de espectrogramas de llanto. Este método es una evaluación subjetiva y no es muy apropiado para su uso generalizado en clínicas. Desde los principios del siglo XX, se han hecho esfuerzos de investigar el llanto de los infantes para poder descubrir cuanta información está ‘oculta’ dentro del sonido. Por lo tanto, era necesario desarrollar un método objetivo que nos permita realizar una clasificación automática del llanto. Los neurolingüistas consideran al llanto del bebé como la primera manifestación del habla. El llanto es la primera experiencia en la producción del sonido, el cual es seguido por movimientos de la laringe y la cavidad oral, todo esto con la retroalimentación en la capacidad de escuchar, la cual, deliberadamente, muy pronto será usada para la producción de fonemas. La adquisición y la selección de fonemas se logran a través de la discriminación entre las emisiones de actividad vocal espontánea y su refuerzo auditivo. Von Monakow y Morgue en 1928 enfatizaron la necesidad de actividades natas tales como la succión, tragar, y el llanto como pasos previos para el desarrollo del habla [1]. Los niños con pérdida auditiva, identificados antes de los 6 meses de edad, tienen una mejora significante en el desarrollo del lenguaje que aquellos niños cuya pérdida auditiva fue identificada después de los 6 1 meses de edad. Los niños con desarrollo normal cognitivo, cuyas pérdidas auditivas fueron detectadas antes de los seis meses de edad, pueden desarrollar el lenguaje en el mismo rango o similar que un niño sin problemas auditivos [2]. Los niños identificados con pérdida auditiva entre el nacimiento y los seis meses de edad tienen un lenguaje receptivo de 200 palabras y lenguaje expresivo de 117 palabras, mientras que aquellos identificados entre los 7 y los 18 meses de edad, tienen un lenguaje receptivo de 86 palabras y lenguaje expresivo de 54 palabras. Cuando se prueban a los 26 meses de edad, aquellos identificados antes de los 6 meses de edad tienen crecimiento en las medidas de lenguaje “significativamente” altas, y mejor desarrollo social personal [3]. En estudios recientes, los análisis subjetivos auditivos de la voz y el habla, han sido reemplazados por análisis objetivos espectrales fonográficos, con la ayuda de grabaciones de audio y análisis computarizados, recibiendo atención especial los análisis espectrales fonográficos del llanto del bebé recién nacido. Los reportes preliminares se enfocan en los análisis de bebés recién nacidos de término completo, prematuros, recién nacidos con alteraciones neurológicas, metabólicas, o en los cromosomas, así como aquellos con anomalías congénitas entre otros. Los estudios sugieren una variabilidad objetiva del llanto relacionada al estado de salud y la integridad neuropsicológica. En el caso de los infantes que han pasado a través de un periodo de asfixia al nacer, están expuestos a posibles cambios o disturbios a nivel neurológico, dependiendo del grado de asfixia que sufrieron. De acuerdo a la Academia Americana de Pediatría (AAP), 2 a 6 de 1000 bebés recién nacidos presentan asfixia, y el índice es del 60% en bebés prematuros con bajo peso, de ellos, del 20 al 50% mueren durante sus primeros días de vida; de los sobrevivientes, el 25% desarrolla secuelas neurológicas permanentes. Existe una relación cercana entre el sistema nervioso central y las vías respiratorias que incluyen el aparato fono articulador. Cuando esta función no es la propia, se detectan cambios a nivel intrínsico laringe muscular así como en los músculos que intervienen en el proceso respiratorio, estos cambios se traducirán posiblemente en alteraciones o modificaciones en el llanto del bebé. La importancia en el estudio del llanto en el bebé recién nacido durante los primeros meses está relacionada con la información 2 psicológica y neuropsicológica que éste provee del infante, su interpretación correcta proveerá información complementaria la cual podría soportar los diferentes diagnósticos clínicos. 1.2 Justificación La detección de patologías en etapas tempranas del bebé ha sido uno de los grandes retos a vencer para las ciencias médicas. La falta de medios de interpretación de las manifestaciones normales del recién nacido ha hecho que esta labor sea sumamente complicada. El descubrimiento de que la onda de llanto, como único medio de comunicación de un bebé, contiene información acerca de su estado físico y anímico y ha abierto la posibilidad de poder diagnosticar patologías desde los pocos días de nacimiento. Debido a esto, el desarrollo de un sistema que permita la extracción de la información presente en el llanto, de manera automática, facilitará grandemente el trabajo de los pediatras y médicos especialistas. Un sistema con tales capacidades, desarrollado con métodos de vanguardia, que además le permitan mostrar cierto comportamiento inteligente, será de mayor utilidad ya que podrá ser utilizado por prácticamente cualquier persona. 1.3 Hipótesis La hipótesis inicial para este proyecto es que si existe este tipo de información relevante en el llanto de un bebé, puede ser posible la extracción, reconocimiento y clasificación de este mismo por medio de mecanismos automáticos, que de ser implementados por medio de modelos híbridos inteligentes, pueden ofrecer ventajas como simplificación de desarrollo y procesamiento así como altos índices de eficiencia en la clasificación. 1.4 Procesamiento Acústico El análisis acústico implica la selección y aplicación de técnicas de normalización y filtrado, segmentación de la señal, extracción de características, y compresión de datos. Con la aplicación de las técnicas seleccionadas tratamos de 3 describir la señal en términos de algunos de sus componentes fundamentales. Una señal de llanto es compleja y codifica más información que la que es necesaria para ser analizada y procesada en aplicaciones de tiempo real [4]. Por esta razón, en nuestro sistema de reconocimiento de llanto usamos una función de extracción como un procesador de primer plano. Su entrada es una señal de llanto, y su salida es un vector de características que caracterizan los elementos clave de la onda de llanto. Todos los vectores obtenidos de esta forma son después alimentados a nuestro modelo de reconocimiento, primero para entrenarlo, y después para clasificar el tipo de llanto. En el capítulo 2 veremos una breve reseña de los trabajos que se han hecho en el campo de reconocimiento de llanto de bebés, así como algunos resultados experimentales de algunos de ellos. También haremos un breve repaso a algunos conceptos fundamentales, usados en esta tesis, tales como el Análisis de Componentes Principales (PCA por sus siglas en inglés), Computación Evolutiva y Clasificación de Patrones. En el capítulo 3 observaremos una descripción de nuestra base de datos, la cantidad de muestras usadas, la forma de captura de las mismas, la metodología usada para la segmentación de las grabaciones y la extracción de características usadas para los experimentos propuestos. Asimismo dentro de este capítulo conoceremos los métodos propuestos para la solución del problema propuesto, tales como las Estrategias Evolutivas, y las Redes Neuronales usadas para realizar los experimentos. Finalmente repasaremos de manera detallada el proceso de experimentación. En el capítulo 4 se encuentra el desarrollo de la fase experimental, donde se empieza por la selección de parámetros de los experimentos. Una vez seleccionados estos parámetros, se inicia el proceso de experimentación con todas las segmentaciones establecidas en esta tesis. Posteriormente validaremos el sistema usando los mejores resultados de todos nuestros experimentos. En el capitulo 5 realizaremos un análisis de resultados y acabáramos en el capitulo 6 donde veremos las conclusiones y los trabajos futuros propuestos para la continuación de este trabajo. 4 Capítulo 2. CONCEPTOS FUNDAMENTALES DEL ÁREA Y ESTADO DEL ARTE En los 60’s, se realizaron una serie de experimentos llamados “Finnish Experiments”. El objetivo era crear ‘espectrogramas’, que son visualizaciones del sonido del llanto, para poder visualmente inspeccionar el comportamiento de sonidos de llanto de diferentes bebés [5]. Más tarde, el profesor Howard Golub de Hospital Infantil de Boston, Massachussets, llevó a cabo una serie de pruebas llamadas los ‘Primeros Análisis Auditivos” [6]. En otro experimento noventa y tres madres y sus bebés fueron entrenados por dos semanas para que después a las madres se les pidiera identificar a sus propios bebés desde una colección de diferentes llantos. El resultado de esta prueba fue de más del 95% de las madres fueron capaces de identificar a su propio infante. Zeskind y Lester [7] demostraron que, por medio del sonido del llanto, los observadores entrenados podían diferenciar entre bebés recién nacidos con alto riesgo de los que no sufrían ningún riesgo. Toda esta información hacía creer a los investigadores que podía ser posible extraer cierta información del sonido del llanto y usarla para saber si el infante tenía dolor o estaba en algún riesgo. Con el avance de la tecnología, hemos sido capaces de precisar la estimación de características y de la clasificación automática del sonido, imágenes y otros tipos de datos en categorías predefinidas, este tipo de tecnologías se volvieron deseables en el área de la clasificación de llanto. La idea de una máquina capaz de diagnosticar automáticamente ciertos problemas en un infante, sin lastimarlo y sin tener que esperar resultados de laboratorios de prueba era muy atractiva para los científicos y médicos; por lo tanto, se enfocaron algunas investigaciones para ver cómo describir numéricamente el sonido del llanto de los bebés, y como clasificar esta información 5 para ayudar en el establecimiento de diagnósticos confiables. El área de investigación llamada “Análisis de Llanto de Bebés” había nacido. Existe un Grupo de Procesamiento de Voz (GPV) de la Universidad de Oriente (UO), en Santiago de Cuba, Cuba; el cual es uno de los grupos más grandes e importantes dedicados al estudio del llanto de infantes. Este grupo dirigido por Sergio D. Cano Ortiz [8], [9], [10] usa, entre otros mapas auto-organizados de Kohonen para la clasificación de unidades de llanto infantil. En 1984 fue propuesto un sistema de clasificación por Cohen y Zmora [11], y fue demostrada una clasificación exitosa en una base de datos preliminar que consistía de llantos de hambre y dolor de bebés totalmente sanos. El sistema estaba basado en “Modelos Ocultos de Markov de Densidad Continua”, el cual ha sido aplicado de manera exitosa en el reconocimiento automático del habla. En 1995 Petroni [12] usó redes neuronales para diferenciar entre llantos de dolor y de no-dolor. En 2002 Dror Lederman [13] usó Modelos Ocultos de Markov (HMM) para clasificar diferentes tipos de llanto, incluyendo bebés prematuros; infantes expuestos a cocaína mientras estaban dentro del útero; y bebés que sufren de fisura palatina mostrando resultados que van desde 40% hasta un 63% en reconocimiento. También en 2002 Taco Ekkel [17] intentó clasificar sonido de llanto neonato en categorías llamadas normal y anormal (hipoxia), y reporta un resultado de clasificación correcta de alrededor de 85% basado en una red neuronal de base radial. En 2003 Reyes y Orozco [15] clasifican muestras de llantos de niños sordos y normales, obteniendo resultados de reconocimiento que van de 79.05% hasta 97.43%. Existen varios modelos que pueden resolver este problema, a continuación se mencionaran algunos de los que pudieran resolver este problema y estarían propuestos para trabajos futuros. Los Sistemas Clasificadores (CSs por sus siglas en inglés), son sistemas de reglas que automáticamente generan poblaciones de reglas que cooperan para lograr una tarea deseada. Los CSs [16] fueron inspirados por el enfoque Michigan (Michigan Approach) cuyos fundamentos fueron puestos por Holland (1975). A 6 diferencia de los sistemas expertos tradicionales donde las reglas eran hechas a mano por los ingenieros de conocimiento, los CSs usan algoritmos genéticos (GA por sus siglas en inglés) como un operador de descubrimiento para generar clasificadores. Cada clasificador son reglas “IF-THEN” con una parte de condición y otra parte de acción. La organización del prototipo propuesto se componía de las tres siguientes partes principales: i) El sistema de actuación; ii) El sistema de asignación de crédito; y iii) El sistema descubridor de clasificadores [17]. Mientras que el enfoque Michigan tiene que ver principalmente con aprendizaje continuo (en línea) en problemas no inductivos, existe otro tipo de enfoque llamado el Enfoque Pittsburg (Pittsburg Approach), el cual es particularmente adaptado para entrenar en problemas tanto inductivos como no inductivos. Los conceptos detrás de esto son realmente diferentes también, mientras que el enfoque Michigan está más cercano a la idea de representar el conocimiento de una sola entidad que aprende a través de su interacción con el ambiente (y consecuentemente su adaptación a él), Pittsburg se acerca más a la idea de la evolución a través de la competencia entre individuos y adaptación en el ambiente. En este enfoque, cada individuo representa una entidad completa del conocimiento, y consecuentemente, no ocurre una interacción con otros individuos diferentes al evaluar dicho conocimiento. Esto evita la necesidad de crear algoritmos complejos para su propósito [17]. La computación neuro difusa, es un paradigma de un híbrido que ha sido adecuadamente investigado. Este nos permite incorporar las ventajas genéticas de las redes neuronales artificiales y lógica difusa con un paralelismo masivo, robustez, aprendizaje, y el manejo de incertidumbre e imprecisión, dentro del sistema. En el caso de la clasificación de patrones y generación de reglas, podemos explotar la capacidad de las redes neuronales de generar una decisión altamente no lineal, y modelar las incertidumbres en la descripción de entrada y la decisión de salida por medio del concepto de conjuntos difusos. Por lo general, los modelos neuro difusos funcionan mejor que las redes neuronales o los sistemas difusos considerados individualmente [18]. 7 2.1 Análisis de Componentes Principales El análisis de componentes principales, o PCA (por sus siglas en inglés), es muy usado en el procesamiento de señales, estadística, y computación neuronal. En algunas áreas de aplicación, éste es también llamado la transformada (discreta) de Karhunen-Loéve, o la transformada de Hotelling. El objetivo del PCA es el reducir la dimensión de un conjunto de p variables a un conjunto m de menor número de variables para mejorar la interpretabilidad de los datos. En muchas situaciones prácticas las observaciones se obtienen de un gran número de variables correlacionadas; en esos casos, es natural buscar varios caminos en los cuales la dimensión del problema (es decir, el número de variables que van a ser estudiadas) se reduzca, sin sacrificar demasiada información útil. El conjunto de variables o características originales, en ocasiones, son redundantes, por lo que también es útil reducir la dimensión de los datos originales, sin perder información relevante. El PCA trata de hallar componentes (factores) que sucesivamente expliquen la mayor parte de la varianza total. Ésta técnica tiene tres efectos: ortogonaliza los componentes (parámetros) de vectores de entrada; ordena los componentes ortogonales resultantes (componentes principales) para que aquellos que tengan una variación mayor estén primero; y elimina aquellos componentes que contribuyen menos en la variación en el conjunto de datos. Un conjunto reducido es mucho más fácil de analizar e interpretar. En el PCA, el primer factor o componente sería el que contiene una mayor parte de la varianza total, el segundo factor sería el que tiene la mayor parte de la varianza restante, es decir, de la que no contenía el primero y así sucesivamente. Para estudiar el conjunto de datos de coeficientes extraídos de la señal de llanto, sería difícil y lento el proceso, por la cantidad muy grande de variables, sin embargo reducir el conjunto de datos facilita el proceso del clasificador, ahorra tiempo de procesamiento, y reduce la demanda en los recursos de cómputo. 8 Tal reducción en la dimensión tiene beneficios importantes. Primero, el costo computacional de las etapas de procesos subsecuentes es reducido. Segundo, el ruido puede ser reducido, esto por los datos que no están contenidos en los n primeros componentes pueden ser en la mayoría de los casos debido a ruido. Tercero, una proyección dentro de un subespacio de muy baja dimensión, por ejemplo dos, es útil para visualizar los datos [19]. Una simple ilustración de PCA se encuentra en la Figura 1.1, en la cual el primer componente principal de un conjunto de dos dimensiones es mostrado. Figura 1.1. Análisis de Componentes Principales de una nube de datos bidimensional. La línea mostrada es la dirección del primer componente principal, la cual da una reducción de dimensiones óptima (en el sentido de los medios cuadrados) desde 2 a 1 dimensiones. 2.2 Computación Evolutiva Un área importante en investigaciones actuales, es el desarrollo y aplicación de técnicas de búsqueda basadas en los principios de la evolución natural. Muchos de los lectores, a través de la literatura popular y experiencia típica de la educación occidental, probablemente saben los conceptos básicos de la evolución. En particular, el principio de la ‘supervivencia del más apto’ propuesta por Charles Darwin (1859) ha capturado la imaginación popular especialmente. Podemos tomar esto como un punto de origen para introducir la computación evolutiva. 9 La teoría de la selección natural propone que las plantas y animales que existen hoy día son el resultado de millones de años de adaptación a las demandas del medio ambiente. En cualquier momento, un número diferente de organismos diferentes pudieran coexistir y competir por los mismos recursos en un ecosistema. Los organismos que son más aptos para conseguir recursos y de procrearse de manera exitosa son los que tendrán descendientes más numerosos en el futuro. Los organismos que sean menos aptos, por cualquiera que sea la razón, tenderán a tener pocos o ningún descendiente en el futuro. Estos se dice que son menos capaces que los anteriores, y las características distintivas que causaron que los anteriores sean más aptos son seleccionados sobre las características de los actuales. A través del tiempo, la población entera del ecosistema “evoluciona” para contener organismos que, en promedio, son más aptos que aquellos de previas generaciones de la población porque exhiben más de aquellas características que tienden a promover supervivencia. Las técnicas de la computación evolutiva contienen estos principios de evolución en algoritmos que pueden ser usados para buscar soluciones óptimas a un problema. En un algoritmo de búsqueda, un número de soluciones posibles a un problema están disponibles, y la tarea es encontrar la mejor solución posible en un periodo estimado de tiempo. Para un espacio de investigación, con solo un número pequeño de soluciones posibles, todas las soluciones pueden ser examinadas en un tiempo razonable, y la óptima puede ser encontrada. Esta búsqueda exhaustiva, por otro lado, se vuelve impractica muy rápido cuando el espacio de búsqueda crece en tamaño. Los algoritmos tradicionales de búsqueda ejemplifican de manera aleatoria (e.g. camino aleatorio) o de manera heurística (e.g. gradiente descendente) el espacio de búsqueda una solución a la vez, tratando de encontrar la solución óptima. El aspecto clave que distingue a un algoritmo evolutivo de búsqueda de los algoritmos tradicionales de búsqueda es que está basado en una población. A través de la adaptación de generaciones sucesivas de un gran número de individuos, un algoritmo evolutivo realiza una búsqueda eficiente y directa. La búsqueda evolutiva es generalmente mejor que la búsqueda aleatoria y no es susceptible a comportamientos basados en gradientes o en escalamiento de montañas [20]. 10 2.3 Clasificación de Patrones Por el lado de los métodos de reconocimiento de patrones, se han utilizado tradicionalmente cuatro enfoques principales: comparación de patrones, modelos estadísticos, sistemas basados en conocimientos y modelos conexionistas. Los modelos conexionistas también conocidos como redes neuronales debido al parecido que tiene su estilo de computación, con el estilo de computación del sistema nervioso humano. Estos sistemas conexionistas han permitido hacer sólidos avances en varias de las áreas de visión, vehículos autónomos, reconocimiento de patrones, y síntesis de habla continua. En la etapa de clasificación se toman los parámetros de características como patrones para entrenar la red neuronal y una vez entrenado el modelo se procede a la clasificación de nuevos patrones, dando una decisión sobre el tipo de clase detectada. [21]. 11 Capítulo 3. PREPARACIÓN DEL CONJUNTO DE DATOS E IMPLEMENTACIÓN DE LA FASE EXPERIMENTAL El modelo para solucionar el problema de reconocimiento de llanto, está dado en la Figura 3.1, donde vemos el proceso desde la obtención de las muestras hasta el reconocimiento. Vector de Características Seleccionadas Llanto infantil Digitalización (Transductor) Microfono Extracción de Características (Análisis Acústico) Selección de Caractrísticas (Ea’s) Entrenamiento del Clasificador de Patrones Modelo Entrenado Clasificación de Patrones Figura 3.1. Proceso de Reconocimiento Automático del Llanto del Bebé Decision Tipo de Llanto o Patología Detectada En la figura 3.1, primeramente se obtiene el sonido del llanto del bebé, esto por medio de micrófonos o grabadoras digitales, con el fin de digitalizar la señal en un archivo de sonido, posteriormente se realiza una extracción de características acústicas, lo cual ayuda a extraer los patrones de la señal digitalizada. Una vez obtenidas las características de la señal, se realiza una selección de características por medio de Estrategias Evolutivas, esto para obtener la información más relevante dentro de los patrones extraídos. Cuando se llega a la selección de las mejores características, se continúa con el entrenamiento del clasificador de patrones, para obtener un modelo entrenado. Para reconocer nuevos tipos de llanto, se seguirá la misma metodología mencionada, desde la digitalización hasta la selección de características, para clasificar los patrones. Al final, con una regla de decisión, se obtiene el tipo de llanto o patología que nuestro sistema detecte en los patrones de llanto extraídos. 12 3.1 Colección de Muestras Las grabaciones de llantos fueron obtenidas en México y en Cuba, los experimentos que se realizan para la investigación de este trabajo los hacemos primordialmente con las muestras recolectadas en México, otras con las muestras recolectadas en Cuba y finalmente usando ambos conjuntos de las muestras. Las muestras Cubanas fueron recolectadas durante una estancia de investigación en la Universidad de Oriente (UO) en Santiago de Cuba, Cuba. Mas adelante se describe el procesamiento completo del llanto realizado en México y después la metodología usada en Cuba. Las muestras de llanto fueron y siguen siendo recolectadas en México por medio de grabadoras de casetes y grabadoras digitales (SONY® ICD-67) y fueron digitalizadas usando Sonic Foundry Sound Forge® Ver. 6.0 (Build 132) y un cable estereo. Los registros de llanto de Cuba fueron realizados en el Hospital de Maternidad Este de Santiago de Cuba por el Grupo de Procesamiento de Voz, constituido por especialista de la UO y el Centro de Lingüística Aplicada del CITMA, para esto se usó una grabadora de casetes AKAI® PM-R55 y fueron digitalizadas por el sistema de adquisición PCVOX A/D [9]. Al momento de realizar experimentos de este trabajo, se tenía una colección de muestras mexicanas de 98 bebés, siete de ellos son de bebés que sufren de asfixia, seis con sordera, y el resto de bebés normales. En el caso de sordera, se cuenta con varias muestras de un mismo bebé, solo en diferentes etapas de sus primeros meses de vida. Estas grabaciones van desde 7 segundos hasta 3 minutos y medio de duración. Para la recolección de estas muestras, se les indicó a los doctores que graben el llanto del bebé y que al final de cada grabación graben con su propia voz la causa del llanto, esto es para que nosotros podamos identificarla y etiquetarla al momento de digitalizarla en la computadora. Una vez que tenemos las muestras de llanto, estas se etiquetan y se guardan en una carpeta donde están todos los llantos de bebés ordenados por número de bebe. Posteriormente se quita digitalmente el segmento 13 donde está la voz grabada del doctor y se almacena dicho llanto a su carpeta correspondiente, solamente con la etiqueta del número del bebe. La colección de datos existente de los bebés cubanos era de 35 casos de llantos. Diecinueve de estos casos eran bebés sanos y los otros 16 bebés sufrían de mal funcionamiento del cerebro por hipoxia u otras patologías. La duración de estas muestras de llantos es de más o menos doce segundos. Una muestra consistía de la expiración e inspiración de los pulmones de los bebés y por esta razón pudimos dividir una sola muestra en periodos de llantos respiracionales y periodos de inspiraciones, o silencios. Los datos fueron recolectados infligiendo dolor al bebé con un pequeño golpe con los dedos del doctor en la planta del pié del infante, al hacer esto, el doctor decía la palabra “ya” y grababan los doce segundos de llanto del bebé. Las condiciones de la habitación fueron en cuarto cerrado y lo único contaminando la muestra era el ruido del aire acondicionado, el cual fue removido digitalmente una vez capturadas las muestras en archivos de sonido [10]. 3.1.1 Segmentación en 1 o 3 segundos Las muestras Mexicanas se dividen, en segmentos de 1 ó 3 segundos, como se muestra en la Figura 3.2, cada segmento es guardado en su carpeta correspondiente y es etiquetado con un código propuesto por nosotros. Obteniendo con esto hasta ahora, para las muestras de llanto Mexicanas 1,049 de llanto normal, 879 de llanto hipoacúsico (sordo) y 340 de llanto de asfixia, todas de 1 segundo. Además se dividen en segmentos de 3 segundos, obteniendo así 329 muestras de llanto normal, 291 de llanto hipoacúsico y 111 de llanto con asfixia. Para los llantos de Cuba, se utiliza otro tipo de etiqueta, mas adelante mostraremos como se etiquetaron las muestras. Para las muestras de llanto cubanas, solo se dividieron en segmentos de 1 segundo, ya que existen relativamente pocas muestras, y por otro lado los investigadores en Cuba le dan más importancia a la segmentación en unidades de llanto, lo que a continuación explicamos. Pero dividiendo en segmentos de 1 segundo, obtenemos 125 muestras de bebés normales y 106 muestras de bebés con alguna patología referente a la asfixia. 14 n segundos m segundos Figura 3.2. Segmentación en n segundos. 3.1.2 Segmentación en unidades de llanto La segmentación y extracción de unidades de llanto para el reconocimiento de patologías dentro del llanto de bebés es la metodología usada por el GPV de la Universidad de Oriente. Esto por que se tenían muy pocos casos de llanto de bebés, y con la información que ellos extraían por cada muestra de llanto, terminaban con solamente 35 vectores de 12 características, estas características eran las siguientes; 1. F0min, el valor mínimo de la frecuencia fundamental sobre todas las ventanas; 2. F1min, el valor mínimo del primer formante sobre todas las ventanas; 3. F0max, el valor máximo de la frecuencia fundamental sobre todas las ventanas; 4. F1max, el valor máximo del primer formante sobre todas las ventanas; 5. F0mean, el valor promedio de la frecuencia fundamental sobre todas las ventanas; 6. F1mean, el valor promedio del primer formante sobre todas las ventanas; 7. F0amp, la amplitud de la frecuencia fundamental sobre todas las ventanas; 8. F1amp, el valor de amplitud de primer formante sobre todas las ventanas; 15 9. F0s, la desviación estándar de la frecuencia fundamental sobre todas las ventanas; 10. F1s, la desviación estándar del primer formante sobre todas las ventanas; 11. F0s2, la varianza de la frecuencia fundamental sobre todas las ventanas; 12. F1s2, la varianza del primer formante sobre todas las ventanas. Donde una ventana es la muestra de llanto a ser estudiada. Por lo que decidieron hacer una nueva propuesta donde se producían los mismos vectores, pero esta vez sin usar un caso de llanto completo, si no, una unidad de llanto como la fuente del vector. Con una unidad de llanto, se quiere decir que es un llanto respiracional de un caso de llanto (Figura 3.3). Un caso que consistiese de tres unidades de llanto, ahora produciría tres en vez de un solo parámetro, y de esta forma, se producirían alrededor de 120 vectores [10]. Este número de vectores es suficiente para entrenar y probar una red neuronal. Para recolectar este tipo de datos, se hizo de manera manual, seleccionando las unidades de llanto una a una. Cabe mencionar, que nosotros no nos enfocamos en la frecuencia fundamental, ni en el primer formante, nos enfocamos a extracción de características LPC y MFCC, lo que más a delante explicaremos. Figura 3.3. Segmentación en unidades de llanto 16 3.1.3. Segmentación por Unidades de Llanto Unidas Otra propuesta para poder sacarle provecho a las unidades de llanto, y queriendo seguir con la primer metodología propuesta para la segmentación de las ondas de llanto (en 1 o 3 segundos), fue la de unir las unidades de llanto a un solo archivo de sonido (ver Figura 3.4), como resultado obtenemos una onda de llanto similar a la original, solo que en este caso sin segmentos “silenciosos” o sin segmentos que no tengan información acústica de llanto. Una vez unidas las unidades de llanto, lo que se propuso, fue segmentar esa señal en fragmentos de 1 segundo, para así poder extraer las características acústicas de cada segmento, y nuevamente obtener vectores de igual tamaño por cada muestra. Al hacer esto, obtenemos 64 segmentos de 1 segundo de llanto de bebé normal, y 60 segmentos de llanto patológico. Figura 3.4. Unidades de Llanto unidas a una sola onda de llanto. Para las muestras de llanto de bebés mexicanos, se hizo lo mismo con las unidades de llanto, unimos todas las pertenecientes a un mismo bebé y después las segmentamos en 1 segundo, para así finalmente poder extraer las características MFCC y LPC y finalmente poder entrenar la red neuronal con estas muestras. Con esto, se obtuvimos 76 segmentos de 1 segundo de llantos de bebés con asfixia, 86 17 muestras de bebés normales y 73 de bebés con sordera. Cabe mencionar que para este tipo de experimentos no pudimos aplicar la técnica de reducción por componentes principales, ya que para poder hacer esto, se necesita tener más columnas que renglones. Es decir, que como tenemos en total 304 renglones (características), y como máximo 86 columnas (muestras), no se puede aplicar la reducción por PCA. 3.2 Extracción de Características 3.2.1 Segmentos de 1 o 3 segundos (sin incluir Unidades de llanto Unidas) Las muestras son procesadas una a una extrayendo sus características acústicas LPC de auto correlación y MFCC, por medio del programa de distribución libre Praat 4.0, luego cada documento generado se guarda con la misma etiqueta en una carpeta de muestras con características LPC y las otras en otra carpeta con características MFCC en formato de texto plano. Las características acústicas se extraen de la siguiente forma: Cada muestra de 1 segundo es dividida en segmentos o ventanas de 50 y 100 milisegundos, con objeto de comparar cual era la mejor alternativa, dado que el tamaño de la ventana ha sido utilizado anteriormente, en otros trabajos de investigación [15]. • Se extraen 16 características para cada 100 milisegundos, generando con esto 145 datos por segundo de muestra. • Se extraen 16 características para cada 50 milisegundos, generando con esto 304 datos por segundo de muestra. • Se extraen 21 características para cada 100 milisegundos, generando con esto 189 datos por segundo de muestra. • Se extraen 21 características para cada 50 milisegundos, generando con esto 399 datos por segundo de muestra. Por cada segmento de 3 segundos 18 • Se extraen 16 características para cada 100 milisegundos, generando con esto 448 datos por segmento de muestra. • Se extraen 16 características para cada 50 milisegundos, generando con esto 928 datos por segmento de muestra. • Se extraen 21 características para cada 100 milisegundos, generando con esto 588 datos por segmento de muestra. • Se extraen 21 características para cada 50 milisegundos, generando con esto 1218 datos por segmento de muestra. Como estos documentos tienen mucha información “adicional” (encabezados, identificadores, etc. añadidos por Praat), en otras palabras, datos que no son relevantes para el reconocimiento de la onda, tenían que ser limpiados uno por uno, para así obtener archivos de texto con la información importante. Como son muchas muestras, en total 2,268 muestras de 1 segundo y 731 muestras de 3 segundos, realizamos una serie de algoritmos que nos ayudaron a limpiar las muestras una a una de manera automática. Cuando obtenemos todas las muestras, se utiliza la plataforma Matlab 6.5 para unir una a una las columnas y así obtener matrices diferentes para cada combinación de extracción de características, después se realiza una técnica de reducción por medio de Análisis de Componente Principal (PCA por sus siglas en inglés). Finalmente, a cada matriz se le agrega una línea de etiquetas con el número 1, el cual indica que son de asfixia obteniendo así una matriz de n + 1 datos (n = No. de datos por configuración de extracción de características), los niños normales tienen una etiqueta de 2 y los niños sordos tienen una etiqueta de 3. Para los llantos de bebés cubanos, se etiquetó 1 para bebés normales y 2 para bebés con patología. La Tabla 3.1 muestra los segmentos obtenidos por cada bebé (Mexicano), en ella se pueden apreciar las diferentes clases obtenidas, número de bebé grabado, y número de muestras obtenidas por cada bebé tanto de 1 segundo como de 3 segundos: 19 Tabla 3.1. Relación de muestras obtenidas por cada bebé, en segmentos de 1 o 3 segundos Sordos Normales Dolor Hambre Asfixia Normal No. de bebé 1 seg 3 seg No. de bebé 1 seg 3 seg No. De bebé 1 seg 3 seg No. De bebé 1 seg 3 seg No. De bebé 1 seg 3 seg 1 2 3 6 7 8 9 10 13 14 15 17 19 20 22 24 32 45 49 50 72 8 8 8 4 5 5 5 8 12 3 5 3 3 6 3 8 8 4 13 10 12 3 2 2 1 1 1 1 3 4 1 2 1 1 2 1 2 2 1 4 3 4 4 5 11 12 16 18 21 23 31 33 34 35 36 37 38 39 40 41 42 43 44 7 3 6 5 6 5 7 7 17 13 12 9 9 8 12 9 18 16 9 8 10 2 1 2 1 2 1 2 2 5 4 4 3 3 2 4 3 6 5 3 2 3 52 53 70 71 78 359 88 30 21 10 507 115 28 10 7 3 163 25 26 27 28 29 30 121 56 158 234 70 240 879 43 20 50 76 22 78 289 63 64 65 66 67 68 53 64 57 58 53 55 340 17 21 19 19 17 18 111 73 74 12 39 192 4 13 59 46 47 48 51 75 76 77 79 80 81 83 88 17 9 5 9 17 13 12 9 11 14 26 12 5 3 1 3 5 4 4 3 3 4 8 4 350 107 20 3.2.2 Unidades de Llanto Las unidades de llanto son de tamaño variable, esto debido a que un bebé no emite la misma cantidad de sonido en cada llanto respiracional, hablando en términos de tiempo. Por esto es imposible hacer una extracción de características de la misma manera en la que se hace para segmentos completos de llanto, en otras palabras, segmentos de 1 o 3 segundos, principalmente por que son pocas las unidades de llanto que duran 1 segundo o más. Tampoco podemos extraer las características acústicas de cada unidad de llanto, ya que cada unidad de llanto arrojaría un número diferente de coeficientes, dependiendo del tiempo de duración de la unidad de llanto, y obtendríamos vectores de tamaños diferentes lo cual Matlab no permite. Por esto para tomar en cuenta una unidad de llanto esta tenía que tener una duración mayor a 0.4 segundos, con esto las unidades de llanto que tuvieran duración menor a 0.4 segundos eran inservibles, ya que tenían muy poca información acústica. Cuando tenemos estas unidades de llanto, ya separadas de las muestras originales, a su vez las segmentamos en partes de exactamente 0.4 segundos, por ejemplo, si se tiene una unidad de llanto que dure 0.9 segundos, se le podían extraer dos segmentos de 0.4 segundos. Para los segmentos de las unidades de llanto solamente se extrajeron 16 coeficientes por cada ventana de 50 milisegundos, obteniendo así vectores de 112 coeficientes por cada segmento de 0.4 segundos. Teniendo con esto, para las muestras cubanas, 154 segmentos para los llantos de bebés normales y 139 segmentos para llantos de bebés con alguna patología. En el caso de las muestras de llanto de bebés mexicanos, obtuvimos 180 segmentos de 0.4 segundos para los llantos de bebés normales, 157 segmentos de bebés con sordera, y 164 segmentos para bebés con asfixia. Una vez obtenidos estos vectores en archivos de texto plano, se procesan los vectores de la misma manera en la que se procesan los vectores provenientes de segmentos de 1 segundo. Es decir, que se cargan los vectores uno a uno en la plataforma de Matlab para unirlos a una matriz, y después de les etiqueta con un número que los identifique como una clase 21 de llanto, por lo tanto, las matrices que obtenemos tienen 113 líneas y tantas columnas como se tengan segmentos de unidades de llanto por cada clase. 3.2.3 Unidades de Llanto Unidas Para este tipo de unidades, debido a la gran cantidad de experimentos que hasta este punto existen, decidimos solamente extraer 16 características por ventanas de 50 milisegundos, de ambos, MFCC y LPC, obteniendo con esto vectores de 304 características por muestra de llanto. 3.2.4 MFCC El procesador de primer plano más común extrae los coeficientes cepstrales de frecuencia Mel (MFCC). Estos se obtienen por una Transformada de Fourier en segmentos cortos de llanto dentro del dominio de las frecuencias, una computación del algoritmo del espectro de amplitud, y una transformada inversa de Fourier que lo regrese al dominio del tiempo. Los MFCC extraen características acústicas muy útiles para el reconocimiento del habla, y estos son usados frecuentemente en medios comerciales y de investigación. La mayoría de los sistemas de reconocimiento están basados en esta técnica de MFCC y sus derivadas de primero y segundo orden. Las derivadas normalmente se aproximan por medio de un ajuste en la línea de regresión lineal hacia un segmento de tamaño ajustable de marcos consecutivos de información. La resolución de tiempo y la suavidad de la derivada estimada dependen en el tamaño del segmento [22]. En resumen, los MFCC pueden ser calculados mediante: 1. Dividir la muestra en segmentos pequeños 2. Calcular la DFT para cada segmento 3. El espectro se convierte a la escala logarítmica 4. La escala se transforma al espectro suave de MEL 5. La transformada discreta de coseno se calcula (para reducir al espectro) 6. Típicamente, los primeros 13 coeficientes se usan 22 3.2.5 LPC El objetivo de la aplicación de estas técnicas es describir la señal en términos de sus componentes fundamentales. El análisis de predicción lineal (LP) ha sido una de las técnicas de análisis del dominio del tiempo más usadas durante los últimos años. El análisis LP intenta predecir “lo mejor posible” una muestra de habla por medio de una combinación lineal de varias muestras de señal. Así, la envoltura espectral puede ser eficientemente representada por un número pequeño de parámetros, en este caso, coeficientes LP [15]. El modo en particular en el cual los datos son segmentados, determina ya sea el método de covarianza, método de auto correlación, o cualquier método de análisis de LP que sea usado. El primer método que se está usando es el de auto correlación, donde la función de auto correlación, para la señal de tamaño finito s(n) se define por [23]: rj = N −1−l ∑ s(n )s(n + 1) n =0 (l ≥ 0) (1) Donde, l es el retraso entre la señal y su versión de retraso, N es el número total de ejemplos. La función de predicción de error entre el segmento de datos s(n) y la predicción s(n) se define como: M e(n ) = ∑ ai s (n − 1) a0 = 1 (2) i =0 for n = 0, 1, ...,N + M - 1 Como el orden del modelo LP se pueden aproximar más detalles del espectro de potencia de la señal [15]. 23 3.3 Estrategias Evolutivas Las estrategias evolutivas (ES) son algoritmos que imitan los principios de la evolución natural, como un método para resolver problemas de optimización de parámetros. Estos fueron desarrollados en Alemania durante los 60s. Como dice textualmente en [24] “En 1963 dos estudiantes en la Universidad Técnica de Berlín estaban colaborando en experimentos que usaban el túnel de viento del Instituto de Ingeniería de Flujos. Durante la búsqueda de formas óptimas de cuerpos en un flujo, que en aquel entonces era un caso de experimentación intuitiva de laboratorio, la idea era proceder estratégicamente. Pero, los intentos con las coordenadas y simples estrategias de gradiente no fueron exitosos. Luego, uno de los estudiantes, Ingo Rechenberg, ahora profesor de Biónica e Ingeniería Evolutiva, dio con la idea de tratar cambios aleatorios en los parámetros que definirían la figura, siguiendo el ejemplo de mutaciones naturales. Las estrategias evolutivas habían nacido.” (El segundo estudiante era Hans-Paul Schwefel, ahora profesor de Ciencias Computacionales y Coordinador de Análisis de Sistemas) [25]. Las estrategias evolutivas son un planteamiento para resolver determinados problemas continuos de una forma eficiente. Su nombre viene del alemán “Evolutionstrategien”, por lo que, frecuentemente, las veremos mencionadas como “ES”. Su origen fue en un método estocástico de escalada (es decir, siguiendo la dirección del gradiente) mediante paso adaptable, mas con el tiempo se ha convertido en uno de los algoritmos evolutivos más poderosos, dando buenos resultados en determinados problemas paramétricos sobre dominios reales. La nomenclatura que se emplea para denominarlas es (a + b) - ES (caso que el reemplazo sea determinista por inclusión) y (a, b) - ES, en el caso de que el reemplazo sea por inserción. Aquí, a es un número correspondiente al tamaño de la población y b otro correspondiente al tamaño de la descendencia. La idea básica es codificar la tasa de mutación como parte del genoma, junto con los parámetros del sistema. Las estrategias evolutivas hacen búsquedas más exploratorias que los algoritmos genéticos [26]. 24 En las estrategias evolutivas, la representación usada es un vector de números reales. Es diferente a los algoritmos genéticos, los cuales usan cadenas de bits para representar a un individuo, ya que cada posición del vector corresponde a una característica del individuo [27]. El principal operador de reproducción en estrategias evolutivas es la mutación Gaussiana, en el cual un valor aleatorio de una distribución Gaussial se añade a cada elemento de un vector de un individuo para crear un nuevo descendiente (ver Figura 3.5). Otro operador que se usa es la recombinación intermediaria, en la cual los vectores de dos padres son promediados juntos, elemento por elemento para formar un nuevo descendiente (ver Figura 3.6), por el momento no estamos usando esta técnica de recombinación de padres, solo nos enfocamos en la mutación. Los efectos de estos operadores reflejan un cambio del comportamiento de los vectores resultantes [20]. Figura 3.5. Mutación Gaussiana de padre a para formar descendiente b. Figura 3.6. Recombinación intermediaria de padres a & b para formar descendiente c. La selección de padres para formar descendientes es menos estricta que como lo es en algoritmos genéticos y programación genética. Por ejemplo, debido a la naturaleza de la representación, es muy fácil promediar vectores desde muchos individuos para formar un solo descendiente. En una estrategia evolutiva, N padres son seleccionados uniformemente de manera aleatoria (Ej. no está basado en aptitud), mas de N descendientes son generados a través del uso de recombinación, y después N sobrevivientes son seleccionados de manera determinista. Los sobrevivientes son seleccionados ya sea del mejor N descendiente (e.g., ningún padre sobrevive) o de los mejores N padres [28]. 25 3.4 Redes Neuronales Artificiales (RNA) Las RNA son programas de computadora que emulan la estructura y el comportamiento del cerebro humano, específicamente a las redes neuronales biológicas. Estos programas son algunas veces llamadas redes neuronales artificiales para distinguirlas unas de otras. Ya que las referencias en esta tesis van a ser de RNA, nosotros simplemente usaremos el término red neuronal o simplemente redes [29]. Las redes neuronales son modelos computacionales definidos por cuatro componentes: neuronas, algoritmo de aprendizaje, algoritmo de recuerdos y arquitectura conexionista. Estas son un intento de imitación de simples partes del sistema nervioso. Las redes neuronales están compuestas de simples elementos operando en paralelo. Estos elementos como se mencionó anteriormente, están inspirados en sistemas nerviosos biológicos. Como en la naturaleza, la función de la red se determina en su mayor parte por las conexiones entre dichos elementos. Podemos entrenar una red neuronal para realizar una función en particular, ajustando los valores de las conexiones (pesos) entre los elementos. Por lo general, las redes neuronales se ajustan o se entrenan para que una entrada en particular lleve a una salida específica de meta. Dicha situación se muestra en la Figura 3.7. Aquí, la red se ajusta, basada en una comparación entre la salida y la meta, hasta que la salida de la red iguale a la meta. Por lo general muchos de dichos pares de salidas/metas son usados, en este aprendizaje supervisado, para entrenar una red. ` Figura 3.7. Entrenamiento de una red neuronal El entrenamiento de una red se hace por medio de cambios en los pesos y gradientes basados en un conjunto entero de vectores de entrada. El entrenamiento 26 cambia los pesos y las gradientes de una red como se necesite después de la presentación de cada uno de los vectores de entrada. Este tipo de entrenamiento es algunas veces conocido como entrenamiento “en línea” o “adaptable”. Las redes neuronales han sido entrenadas para realizar funciones complejas en varias áreas de aplicación incluyendo el reconocimiento de patrones, identificación, clasificación, habla, visión y sistemas de control. Hoy en día las redes neuronales pueden ser entrenadas para resolver problemas que son difíciles para computadoras convencionales o seres humanos. Los métodos de entrenamiento supervisado son los que más comúnmente se usan, pero otras redes pueden ser obtenidas de técnicas de entrenamiento no supervisado o desde métodos de diseño directo. Las redes sin supervisión pueden ser usadas para identificar grupos de datos. Ciertos tipos de redes lineales y redes de Hopfield son diseñadas directamente. En resumen, existen muchos tipos de técnicas de diseño y de aprendizaje que enriquecen las opciones que un usuario pueda tomar [30]. El área de las redes neuronales tiene una historia de casi seis décadas, pero sólo han encontrado una aplicación sólida en lo últimos 25 años, y esta área se está desarrollando rápidamente [31]. Las redes neuronales son sistemas de clasificación excelentes. Éstas se especializan en clasificar datos ruidosos, con patrones, o variables que contiene pautas múltiples, sobrelapadas, interactivas e incompletas. El reconocimiento del llanto es una tarea de clasificación que tiene todas estas características, haciendo a las redes neuronales una alternativa atractiva para realizar esta tarea de clasificación [29]. 3.4.1 Red Neuronal, Feed-forward (Alimentación hacia adelante) La red neuronal feed-forward es una de las redes utilizadas para este trabajo, consiste en N1 capas que usan la función de pesos por medio de producto punto. La primera capa tiene pesos que vienen de la entrada. Cada capa subsiguiente tiene un peso que proviene de la capa anterior. Todas las capas tienen un bias. La última capa es la salida de la red. Todos los pesos y bias son inicializados de manera aleatoria. La 27 adaptación de los pesos se hace con algún entrenamiento, el cual actualiza los pesos con la función de aprendizaje especificada. El entrenamiento termina cuando se ha alcanzado la meta definida por el usuario [30]. 3.4.2 Red Neuronal, Feed-forward Input Delay (Alimentación hacia adelante con retraso en la entrada) Las redes neuronales convencionales son estructuras que tratan con patrones estáticos. Como es de suponerse, el llanto es indiscutiblemente dinámico por naturaleza. Consecuentemente, se requieren hacer algunas modificaciones a las estructuras de las redes neuronales convencionales. Hasta ahora, no existe o no sabemos de una manera correcta de tratar con la dinámica del llanto, más que simplemente extraer las características acústicas para obtener ciertos patrones; sin embargo, se han propuesto algunas estructuras para poder tratar con esta dinámica [32]. “Input Delay” o “Retraso en el Tiempo” es un concepto viejo en el procesamiento de señal adaptable. Si nosotros retrasamos la señal de entrada por una unidad de tiempo y dejamos a la red recibir ambas señales, la original y la retrasada, tenemos una red neuronal con retraso de tiempo simple. Por supuesto que podemos construir una más complicada retrasando las señales en varias longitudes. Si la señal de entrada es n bits y es retrasada por m diferentes longitudes, entonces tendremos nm unidades de entrada para codificar la entrada total. Cuando llega nueva información, esta es puesta en un extremo de los nodos y la vieja información intercambia hacia abajo de las series de nodos como una registradora de cambios controlada por un reloj. Se presenta una arquitectura general en la Figura 3.8. Esta red fue desarrollada para clasificar fonemas en 1987 por Waibel y Lang en Carnegie Mellon University (CMU) [33]. Los retrasos en el tiempo permiten a la Red Neuronal con Retraso en el Tiempo o TDNN descubrir una relación temporal directamente en la señal de entrada y en una representación aun más abstracta de la capa oculta. Esto lo hace usando los mismos pesos para cada paso en el tiempo. 28 La TDNN es invariante a cambios: las características dentro de la señal de audio pueden ser detectadas independientemente de su posición. Figura 3.8. Red Neuronal con Retraso en el Tiempo (TDNN) 3.4.3 Red Neuronal LVQ (Cuantificación Vectorial Lineal) La arquitectura de la red LVQ se muestra en la figura 3.9, Figura 3.9. Arquitectura de la red LVQ Una red LVQ tiene una primera capa competitiva y una segunda capa lineal. La capa competitiva aprende a clasificar vectores de entrada en una manera muy similar a la de las capas competitivas de las redes de Cuantificación Vectorial AutoOrganizadas y de aprendizaje. La capa lineal transforma las clases de las capas competitivas en clasificaciones meta definidas por el usuario. Nosotros nos referimos a las clases aprendidas por la capa competitiva como subclases y las clases de la capa lineal como las clases meta. 29 Ambas, la capa competitiva y la capa lineal, tienen una neurona por clase (sub o meta). Por eso, la capa competitiva puede aprender hasta S1 subclases. Estas, a su vez, son combinadas por una capa lineal para formar S2 clases meta. (S1 siempre es más grande que S2). Por ejemplo, suponga que todas las neuronas 1, 2 y 3 en la capa competitiva aprendan subclases del espacio de entrada que pertenecen a la clase de la capa lineal meta número 2. Entonces las neuronas competitivas 1, 2 y 3, tendrán LW2,1 pesos de 1.0 a la neurona n2 en la capa lineal, y los pesos de 0 a todas las demás neuronas lineales. Por lo tanto, la neurona lineal produce un 1 si cualquiera de las tres neuronas competitivas (1, 2 y 3) gana la competencia y la salida es 1. Así es como las subclases de la capa competitiva son combinadas a clases meta en la capa lineal. En resumen, un 1 en la fila i de a1 (el resto de los elementos de a1 será cero) efectivamente toma la columna i de LW2,1 como la salida de la red. Cada columna contiene un solo 1, correspondiente a una clase en específico. Por lo tanto, la subclase 1s de la capa 1 se pone dentro de varias clases, por la multiplicación de LW2,1a1 en la capa 2. Sabemos de antemano cual fracción de las neuronas de la capa 1 deberán ser clasificadas dentro de las varias clases de la capa 2, por lo tanto debemos especificar los elementos de LW2,1 al principio. Pero, tenemos que hacer todo el proceso de entrenamiento para hacer que la primera capa produzca la subclase correcta de salida para cada vector del conjunto de entrenamiento [34]. 3.4.4 Entrenamiento por Gradiente Descendiente con Retro-Propagación y Rango de aprendizaje Adaptable El entrenamiento por medio de alimentación hacia adelante de gradiente descendiente con rango de aprendizaje adaptable, propuesto para este proyecto, puede entrenar cualquier red que tenga funciones de derivación en sus pesos, entradas de la red y funciones de transferencia. Las cuales tiene la red propuesta en este proyecto. La retro propagación se usa para calcular derivadas de rendimiento con respecto a las 30 variables de pesos y de inclinaciones X. Cada variable se ajusta por medio de gradiente descendiente. En cada época, sí el rendimiento disminuye en dirección de la meta, entonces el rango de aprendizaje se incrementa. Si el rendimiento aumenta, el rango de aprendizaje se ajusta por medio de factor de decremento y el cambio, el cual aumentó el rendimiento, no se realiza [30]. El entrenamiento se detiene cuando ocurre cualquiera de estas condiciones: • Se alcanza el número máximo de épocas (repeticiones). • El rendimiento ha sido minimizado a la meta. 3.4.5 Entrenamiento por Retro-Propagación y Gradiente Escalado Conjugado El entrenamiento de retropropagación por gradiente conjugado escalado, puede entrenar cualquier red neuronal, siempre y cuando sus pesos, la entrada de la red, y la función de transferencia tengan funciones que puedan ser derivadas. La retropropagación es usada para calcular derivadas de desempeño con respecto a los pesos y bias de las funciones. El algoritmo de gradiente conjugado escalado está basado en direcciones conjugadas, pero este algoritmo no realiza búsquedas en línea en cada iteración [30]. El entrenamiento se detiene cuando cualquiera de estas condiciones ocurra: • El número máximo de épocas (repeticiones) sea alcanzado. • La máxima cantidad de tiempo ha sido excedida. • El desempeño ha sido minimizado a la meta. 3.4.6 Validación Cruzada Para evaluar el desempeño de la red neuronal, en términos de precisión, eficiencia, y fiabilidad se usó la técnica 10-fold cross validation (Validación Cruzada de 10 Particiones) [35]. El conjunto de muestras fue aleatoriamente dividido en 10 subconjuntos, cada vez dejando un subconjunto para su clasificación y los otros 31 restantes para entrenamiento. Este proceso se repite hasta que todos los conjuntos han sido clasificados una vez. Al final de todo este proceso se suman todos los resultados obtenidos por cada subconjunto, y se promedian para obtener un resultado, dado que cada grupo es del mismo tamaño, la red obtenida en la última vuelta se prueba ahora con el subconjunto separado previamente y se obtiene de esta manera un resultado final que se compara con el resultado promedio. 3.5 Proceso de Experimentación 3.5.1 Sistema Híbrido El sistema híbrido fue diseñado para seleccionar las mejores características, del vector de entrada, que pudieran entrenar a un sistema de Redes Neuronales. Esto para saber qué características dentro de un vector, funcionan mejor para obtener los mejores resultados en cuanto al entrenamiento y prueba de una red neuronal. Para hacer esta selección, hicimos uso de las técnicas de Estrategias Evolutivas, las cuales usan números reales para la representación de sus individuos. El sistema funciona de la siguiente forma: Si tenemos una matriz de tamaño p x q, donde p es el número de características acústicas que tiene cada muestra y q es el número de muestras que existen, y queremos reducir dicha matriz a una matriz a m x q, donde m es el número de características seleccionadas, realizamos lo siguiente; se inicializa una población de n individuos, cada uno de longitud m; cada uno de estos individuos representa n matrices de tamaño m x q, ver Figura 3.10. 32 Figura 3.10. Inicialización de individuos. Una vez obtenidas las matrices, se inicializan n redes neuronales, y se entrenan cada una con una matriz, al final de cada entrenamiento se prueba la eficiencia de la red neuronal por medio de matrices de confusión. Una vez obtenidos estos datos, se seleccionan las matrices que mejor resultado dieron, ver Figura 3.11. Figura 3.11. Selección de los mejores individuos. Cuando se tienen seleccionadas las mejores matrices, se hace un torneo, donde se generan l números aleatorios que van desde 0 hasta el número de matrices seleccionadas, como se muestra en la Figura 3.12, donde solamente se seleccionaron 2 matrices, entonces se generan 3 números aleatorios del 0 al 2. Cabe mencionar que el número 1 tiene dos veces más probabilidad de ser generado aleatoriamente, ya que cuando el número aleatorio generado es 0, éste automáticamente se convierte en 1, esto lo veremos como una premiación al mejor lugar, y mayores posibilidades de ser seleccionado. 33 Figura 3.12. Generación de la nueva población, con los mejores individuos Una vez generada la nueva población de individuos, estos pasan por una mutación aleatoria, en cada época, primeramente se pide un factor de mutación (se utiliza 0.2, esto debido a varios experimentos efectuados), cuando entra un individuo, se genera un número aleatorio que va de 0 a 1, sí es menor que 0.2 el individuo se muta, sí es mayor, se deja intacto. Cuando el individuo es seleccionado para ser mutado, se genera un número aleatorio que va desde 1 hasta m, esto es para seleccionar cual cromosoma va a ser mutado, una vez hecho esto, se genera un número aleatorio que va desde 1 hasta el número total de la longitud de las matrices originales (Ej. 1 – p), esto representa una nueva característica a ser seleccionada. Cuando el individuo no es seleccionado para ser mutado, pasa a la nueva población a competir con los demás individuos sin ser alterado. El usuario al principio tiene la opción de elegir el número de épocas que irá a realizar el sistema (r). Al finalizar las r épocas definidas por el usuario, se debería de contar con un individuo que arroja el mejor resultado, y también se muestra los mejores individuos en cada una de las r épocas, y con esto sabemos cuales son las mejores características que pueden ser seleccionadas, dependiendo de la población inicial. Se implementará este tipo de selección en los experimentos que obtengan mejores resultados, para hacer en parte una comparación del sistema híbrido, con el sistema simple usando reducción de vectores por componente principal. Por otro lado para ver si es posible tener una buena selección de características, y un mejor resultado en cuanto a las pruebas con bebés diferentes ya en tiempo real. El algoritmo puede ser encontrado en los anexos de este reporte. 34 Cabe mencionar que al ya tener seleccionadas las mejores características, por medio de las estrategias evolutivas, se debe de entrenar el sistema con dichas características seleccionadas por el sistema híbrido, esto para corroborar si el sistema realmente funciona mejor con este selector de características, o reduciendo los vectores por medio de componentes principales. 3.5.2 Entrenamiento de las Redes Neuronales El sistema de redes neuronales se programó de forma tal, que se pudiera entrenar con cualquier base de datos, siempre y cuando los vectores de características estén en forma de columnas. Es decir que cada columna represente una muestra de llanto de una clase determinada. Como cada muestra está en su carpeta correspondiente, en formato de texto plano, se diseñó el programa de manera que pudieran ser invocadas una a una por medio de otro documento de texto plano que tuviera la ruta de la carpeta donde se encuentra dicha muestra. Así el algoritmo lee uno a uno los archivos de las carpetas donde se encuentran las muestras, y con esto genera por si mismo las matrices, para entrenar la red neuronal y para probar la red neuronal. También, mientras está recopilando cada una de las clases, al final de cada columna le pone una etiqueta, dependiendo del orden como va leyendo las clases. En otras palabras, supongamos que se quiere entrenar una red neuronal con tres clases, siendo las siguientes: Asfixia, Normales y Sordera; el programa primeramente recopilará la información de las muestras de asfixia y al final le pondrá la etiqueta número 1, después recopilará las muestras de bebés normales, y le pondrá la etiqueta número 2, y a las clases de sordera la etiqueta número 3. Cabe mencionar que el usuario le indica al algoritmo con cuantos vectores se quiere probar el sistema, puede ser por ejemplo con el 20%, esto quiere decir que el algoritmo toma los vectores de asfixia, normal y sordera, las etiqueta y separa el 80% de estas para entrenar la red neuronal y el 20% para probarla. Al hacer esto, con las tres clases, al final se recopilan las tres matrices de entrenamiento y se revuelven las columnas entre si internamente de forma aleatoria, así obtenemos la matriz que servirá para entrenar nuestro sistema. También se recopilan las tres matrices de prueba y estas se dejan de 35 forma ordenada, estas no se revuelven debido a que de esta forma es más fácil, si se desea, ver exactamente cuales vectores fueron clasificados de manera errónea. Una vez obtenidas las matrices de entrenamiento/prueba, el algoritmo reduce los vectores por medio de componente principal, si el usuario lo requiere, se separan las matrices de entrenamiento de las etiquetas, y se procede a entrenar la red neuronal, al finalizar, la red neuronal se prueba con la matriz de prueba y finalmente se comparan las etiquetas separadas de la matriz de prueba, con la salida de la red neuronal. Esto se contabiliza por medio de una matriz de confusión y se obtiene la precisión del sistema. Con el sistema programado de esta manera, ya no importa el tamaño de los vectores de entrada, hasta ahora se ha probado con vectores que van desde 112 características (segmentos de 1 seg con 16 coef por cada 100 ms) hasta 1218 características (segmentos de 3 seg con 21 coef y 50 ms), al igual que el número de clases, se ha probado el sistema con 2 clases (muestras cubanas) hasta 5 clases (muestras cubanas y mexicanas). Destacando que estas pruebas solo fueron hechas para probar el sistema y no son reportadas en este trabajo. Así mismo la red neuronal tiene una arquitectura de n nodos de entrada donde n es el número de características que tienen las muestras con las que se va a experimentar, o el número de características que se obtienen en caso de usar PCA; la capa oculta tiene 40% menos nodos que la capa de entrada (n x 0.4) y la capa de salida depende del número de clases con el que se esté entrenando. El algoritmo necesita los siguientes parámetros de entrada: • file = Nombre del archivo donde se encuentran las clases a entrenar. • porc = Porcentaje de prueba, puede ser desde 0.1 hasta 0.9 • ncp = Número de componentes principales (Especificado por el usuario) • del = Retraso en la red neuronal que se usa • redu = Para entrenar, 36 1. Con Reducción por PCA ó 2. Sin Reducción • RedNA = Entrenamiento por, 1. Red Feed Forward Time Delay entrenamiento por Scaled conjugate gradient backpropagation 2. Red Feed Forward entrenamiento por Scaled conjugate gradient backpropagation 3. Red LVQ 4. Red Feed Forward Time Delay entrenamiento por Gradient descent with adaptive learning backpropagation 5. Red Feed Forward entrenamiento por Gradient descent with adaptive learning backpropagation Y entrega como salida: • net = Red Neuronal entrenada • matc = Matriz de confusión • prec = Precisión obtenida • tam = Tamaño de los datos de entrenamiento • numpru = Tamaño de los datos de prueba Como se puede observar, se pueden entrenar 3 diferentes configuraciones de redes neuronales, y se tiene la posibilidad de decirle al algoritmo si se requiere reducción o no. Esto para las unidades de llanto unidas, que son más filas que columnas. El retraso de la red neuronal, es por si se está entrenando la red Time Delay, o con retraso en la entrada. Se puede encontrar el algoritmo en los anexos de esta tesis. 37 3.5.3 Entrenamiento con bebés diferentes Para hacer entrenamientos con bebés diferentes, es decir, entrenar las redes neuronales con muestras de una cantidad seleccionada de bebés, y probar la red con otros bebés cuyas muestras no hayan sido usadas para entrenar la red neuronal, se le hicieron algunos cambios al algoritmo explicado anteriormente, en este caso no se pide un porcentaje de prueba, y se piden dos archivos, el que contiene las clases con las que se va a entrenar el sistema, y el que contiene las clases con las que se probará el sistema. El algoritmo en este caso pide como parámetros de entrada lo siguiente: • file1 = Nombre del archivo donde se encuentran las clases a entrenar • file2 = Nombre del archivo donde se encuentran las clases a probar • ncp = Número de componentes principales • del = Retraso en la red neuronal que se usa • redu = Para entrenar 1. Con Reducción por PCA ó, 2. Sin Reducción • RedNA = Entrenamiento por 1. Red Feed Forward Time Delay entrenamiento por Scaled conjugate gradient backpropagation 2. Red Feed Forward entrenamiento por Scaled conjugate gradient backpropagation 3. Red LVQ 4. Red Feed Forward Time Delay entrenamiento por Gradient descent with adaptive learning backpropagation 38 5. Red Feed Forward entrenamiento por Gradient descent with adaptive learning backpropagation Obtenemos • net = Red Neuronal entrenada • matc = Matriz de confusión • prec = Precisión obtenida • tam = Tamaño de los datos de entrenamiento • numpru = Tamaño de los datos de prueba El algoritmo se comporta de manera similar que el anterior, una vez obtenidas las matrices de entrenamiento/prueba. El algoritmo se puede encontrar en los anexos de esta tesis. 39 Capítulo 4. DESARROLLO DE LA FASE EXPERIMENTAL Se han hecho diferentes tipos de experimentos desde que se inició con la investigación del llanto de bebés. Ya que éste es un sistema híbrido, pensado como un sistema que usa Estrategias Evolutivas combinado con Redes Neuronales, se inició por realizar la parte del Clasificador, el cual era mediante una Red Neuronal con Retraso en el Tiempo programada usando la caja de herramientas de Redes Neuronales de Matlab 6.5. La primera versión del algoritmo tenía algunas fallas, tales como mala selección de las muestras, y mala medición de la precisión, e inicialmente se empezó clasificando solamente 2 clases de llanto, sordera y normal. Se contaba solamente con una base de datos de 157 muestras de llanto de niño normal y 879 muestras de llanto de niño sordo. Todos estos llantos provenientes de 61 bebés normales, 6 bebés con asfixia y 6 bebés que presentan sordera. Como se siguieron recolectando más muestras de llanto se obtuvieron algunas de bebés que reportaron asfixia al nacer, con las cuales llegamos a juntar 340 muestras de un segundo de llanto de asfixia, y se agregó la tercera clase de llanto para clasificarla por medio de redes neuronales. Las muestras de llanto siguieron agregándose a nuestra base de datos, y se programó una segunda versión del algoritmo clasificador, corrigiendo los errores antes mencionados y mejorando algunas rutinas, tales como la selección de muestras de entrenamiento y prueba, y el conteo de las muestras clasificadas correctamente. Ahora contábamos con 1049 muestras de niño normal, 879 muestras de niños sordos y 340 muestras de niños con Asfixia. Y se empezó a extraer varias combinaciones de características, concertando la segmentación de cada segundo (50ms o 100ms) con la extracción de características de cada segmentación (16 o 21 características), obteniendo por cada segundo 4 diferentes extracciones de características, también usamos dos tipos diferentes de coeficientes, Coeficientes de Predicción Lineal (LPC) y Coeficientes Cepstrales de Frecuencia Mel (MFCC), obteniendo con esto 8 40 diferentes tipos de características, y finalmente experimentamos segmentando las muestras no solo en 1 segundo, también en 3 segundos. Con esto nos daba 16 diferentes tipos de extracciones de características. Como cada combinación de extractores de características se hacía en forma de algoritmo dentro del programa Praat, se tuvieron que hacer 16 diferentes algoritmos para extraer las características deseadas. Así como 16 macros diferentes para limpiar cada una de las 2268 muestras que teníamos, y tenerlas listas para experimentar con ellas en nuestro sistema (como se explica en la sección 3.2.1). Ya teniendo nuestra base de datos limpia y lista, se tuvieron que programar 16 diferentes redes neuronales, cada una para clasificar las tres clases de llanto y poder comparar resultados y ver cual tipo de características resultaba en una mejor clasificación. 4.1 Primeros Experimentos de Selección de Parámetros Después de haber programado los algoritmos para segmentar, extraer, y experimentar con las muestras de llanto, se empezaron a buscar métodos alternativos para facilitar todo este procedimiento. Por lo que se programó una nueva versión del algoritmo clasificador (Red Neuronal) de tal forma que se adaptara a cualquiera de nuestras 16 bases de datos, y aparte se implementó el algoritmo de componente principal (PCA) para reducir nuestra información y reducir el tiempo de entrenamiento. También se encontró la manera de extraer los coeficientes de cada muestra y obtener vectores más limpios que los originales, haciendo con esto que solamente usáramos un solo macro para limpiar todas los diferentes tipos de muestras. Todo esto se usó para extraer las muestras de manera más fácil y rápida y no tardar tanto tiempo en experimentar con nuevos llantos de bebés. Para estos experimentos se usó retro-propagación con gradiente descendiente adaptable. 4.1.1 Retrasos en la Red con Retraso en el Tiempo Los primeros experimentos que se hicieron fueron con la finalidad de ver cuanto retraso se necesita para tener un buen desempeño de reconocimiento de llantos. Se probó la red neuronal con retrasos que iban desde 1 hasta 10 retrasos, de ahí saltando hasta de 25 en 25 hasta 100 unidades de retraso, y lo que se notó es que no había 41 mucha variación en los resultados como se muestra en la Figura 4.1, donde la precisión mínima fue de 95.75% y la máxima de 97.38%. 97.4 97.2 97 Precisión 96.8 96.6 96.4 96.2 96 95.8 95.6 0 2 4 6 8 10 12 14 Retrasos, de 1 a 10, después de 25 en 25 hasta llegar a 100 16 18 Figura 4.1. Precisiones resultantes de cada Retraso probado en la red con retraso en el tiempo. Con esto podemos decir que podemos usar cualquier retraso en el tiempo, ya que esto no modificaría en mucho nuestro resultado final. Cabe aclarar que se usaron las muestras de llanto con características MFCC, 16 características y 50ms. En la Figura 4.2 podemos apreciar el comportamiento de cada entrenamiento, el cual no difiere mucho uno del otro. Con estos resultados decidimos usar un retraso de 1 unidad de tiempo para los siguientes experimentos. 42 0 10 -1 10 -2 10 -3 Error 10 -4 10 -5 10 -6 10 -7 10 -8 10 -9 10 0 200 400 600 800 1000 1200 Épocas Figura 4.2. Comportamiento de entrenamientos con diferentes retrasos. 4.1.2 Número de Componentes Principales También se hicieron experimentos para ver cual número de componentes principales arrojaría los mejores resultados, para ambas segmentaciones, de 1 y 3 segundos, se hicieron experimentos desde 5 componentes principales (PCs) hasta 100, saltando de 5 en 5 el número de PCs, esto lo podemos ver en la Figura 4.3. 98 97 96 Precisión 95 94 93 92 91 90 89 88 0 2 4 6 8 10 12 14 16 18 20 Retrasos en unidades de Tiempo que van de 5 en 5 hasta 100 retrasos. Figura 4.3. Precisiones dadas por la Red con Retraso en el Tiempo con muestras de 1 segundo y diferente número de PCs 43 Con este experimento, se puede ver que la precisión más alta fue dada cuando se usaron 50 componentes principales (97.07%), por lo tanto para los experimentos usaremos 50 componentes principales, esto para muestras de 1 segundo. Se hizo lo mismo para segmentos de 3 segundos, haciendo el mismo procedimiento anteriormente explicado, esto puede verse en la Figura 4.4. 88 86 Precisión 84 82 80 78 76 74 0 2 4 6 8 10 12 14 16 18 20 Retrasos en unidades de Tiempo que van de 5 en 5 hasta 100 retrasos. Figura 4.4. Precisiones dadas por la Red con Retraso en el Tiempo con muestras LPC de 3 segundos y diferente número de PCs El mejor desempeño de la red neuronal fue detectado en 70 PCs (87.87%) esto cuando se utilizaban las características LPC en todas sus configuraciones, pero no funcionó igual con las características MFCC, por lo que se hizo otra búsqueda del mejor desempeño, esto puede verse en la Figura 4.5. 94 92 Precisión 90 88 86 84 82 0 2 4 6 8 10 12 14 16 18 20 Retrasos en unidades de Tiempo que van de 5 en 5 hasta 100 retrasos. Figura 4.5. Precisiones dadas por la Red con Retraso en el Tiempo con muestras MFCC de 3 segundos y diferente número de PCs 44 En este caso la mejor precisión fue encontrada a los 20 PCs (93.93%), por lo que cuando se hicieron experimentos con características MFCC de muestras de 3 segundos, se usó esta cantidad de componentes principales. En las tablas 4.1 y 4.2 de las siguientes secciones se pueden ver resultados de los primeros experimentos usando ya los datos que anteriormente seleccionados. En estos experimentos se hizo una comparación, las tablas muestran las diferentes configuraciones de características usadas, también resultados de segmentos de 1 y 3 segundos, y de estos, resultados obtenidos usando vectores originales (sin reducción), vectores reducidos por PCA y reducidos con Validación cruzada. Todo esto con el fin de seleccionar las características que mejor resultados nos den, con el fin de hacer los siguientes experimentos. 4.2 Experimentos con Parámetros Seleccionados 4.2.1 1 Segundo Para estos experimentos se usaron los siguientes parámetros, 70% de las muestras de cada clase para entrenar y el 30% para probar, es decir se usan 238 muestras de cada clase para entrenar al sistema y 102 para probarlo. Para todas las pruebas se usa un Delay de 1 unidad de retraso. Cuando se reducen los vectores se usan 50 componentes principales, y finalmente cuando se usa Validación Cruzada se usan 10 particiones, mostrando al final el resultado promedio de todas las particiones y el resultado que se hace al probar la red entrenada con el 30% de cada clase que previamente se separó para probar al sistema. Los resultados pueden verse en la Tabla 4.1. 45 Tabla 4.1. Resultados utilizando muestras de 1 segundo. Sin Reducción Épocas Precisión LPC 16c 100ms LPC 16c 50ms LPC 21c 100ms LPC 21c 50ms MFCC 16c 100ms MFCC 16c 50ms MFCC 21c 100ms MFCC 21c 50ms Con Reducción Validación Cruzada Épocas Precisión Resultado Resultado Promedio Final 2000 79.41% 87.91% 86.93% 2000 88.89% 2000 86.60% 2000 84.31% 86.31% 75.49% 2000 90.85% 2000 87.25% 86.09% 62.41% 2000 86.27% 2000 86.60% 84.49% 84.31% 2000 96.40% 871 97.05% 98.10% 96.08% 2000 95.42% 1016 97.05% 96.28% 95.42% 2000 93.46% 462 94.77% 97.73% 96.73% 1461 94.77% 732 95.09% 96.83% 95.75% Con esto vemos que los resultados son mucho mejores cuando se usan características MFCC, también que el mejor desempeño de reconocimiento es cuando se usan 16 coeficientes MFCC por cada 100ms. En la figura 4.6 podemos ver el comportamiento del entrenamiento cuando se usan coeficientes LPC contra MFCC. Aquí podemos ver como se llega al error establecido de 1x10-8 solamente cuando se usan las características MFCC reducidas, a diferencia de las características LPC, donde no se llegó ni siquiera a un error de 1x10-2. Los gráficos se comportan de manera diferente cuando se usa reducción por medio de componentes principales, ya que los entrenamientos son más rápidos, cuando se usan características MFCC, y en la mayoría de los casos se obtiene un mejor resultado. Esto puede observarse en la Figura 4.7. 46 0 10 -1 10 -2 Error 10 -3 10 -4 10 -5 10 -6 10 -7 10 0 500 1000 1500 2000 2500 Épocas Figura 4.6. Entrenamiento usando características LPC (línea punteada) contra características MFCC (línea continua), sin reducción, ninguno alcanza 1x10-8 0 10 -1 10 -2 10 -3 Error 10 -4 10 -5 10 -6 10 -7 10 -8 10 -9 10 0 500 1000 Épocas 1500 2000 2500 Figura 4.7. Entrenamiento usando características LPC (línea punteada) contra características MFCC (línea continua) y 50 PCs Los siguientes experimentos son ahora para muestras de 3 segundos. Con esto podremos ver si la red tiene mejor desempeño con poca o mucha información, esto lo veremos en la siguiente sección 47 4.2.2 3 Segundos En estos experimentos, se hizo el mismo procedimiento anterior, solo que en la parte de reducción de vectores, se usaron 70 PCs para las características LPC y 20 PC’s para las características MFCC. El retraso sigue siendo de 1 unidad de tiempo, pero ahora se usa el 80% de cada clase para entrenar el sistema (89 muestras) y el 20% para probar al sistema (22 muestras). Los resultados pueden verse en la Tabla 4.2. Tabla 4.2. Resultados utilizando muestras de 3 segundos. Sin Reducción Épocas Precisión LPC 16c 100ms LPC 16c 50ms LPC 21c 100ms LPC 21c 50ms MFCC 16c 100ms MFCC 16c 50ms MFCC 21c 100ms MFCC 21c 50ms Con Reducción Validación Cruzada Épocas Precisión Resultado Resultado Promedio Final 2000 83.33% 83.68% 43.93% 2000 80.30% 2000 80.30% 2000 86.36% 85.55% 27.27% 2000 89.39% 2000 84.84% 80.66% 65.15% 2000 84.84% 2000 80.30% 78.58% 68.18% 336 92.42% 533 92.42% 94.63% 75.75% 486 90.90% 699 95.45% 91.86% 66.66% 392 93.93% 640 92.42% 93.89% 45.45% 1466 90.90% 769 92.42% 94.33% 27.27% Nuevamente se puede ver el comportamiento cuando usamos muestras con características MFCC y LPC, también se nota una diferencia del sistema cuando se usan muestras reducidas, no tanto en los resultados, sino en cuanto a la duración de entrenamiento, el cuál es mucho más rápido cuando se usa reducción que cuando se usan las muestras completas, en la Figura 4.8 podemos ver el entrenamiento usando muestras sin reducción, y en la Figura 4.9 cuando se usa reducción. Se nota un comportamiento bastante raro cuando se usa entrenamiento por medio de Validación 48 Cruzada, ya que el reconocimiento es muy bajo al final, esto lo discutiremos en la sección de conclusiones. 0 10 -1 10 -2 10 -3 Error 10 -4 10 -5 10 -6 10 -7 10 -8 10 -9 10 0 500 1000 1500 2000 2500 Épocas Figura 4.8. Entrenamiento usando características LPC (línea punteada) contra características MFCC (línea continua), sin reducción. 0 10 -1 10 -2 10 -3 Error 10 -4 10 -5 10 -6 10 -7 10 -8 10 -9 10 0 500 1000 1500 2000 2500 Épocas Figura 4.9. Entrenamiento usando características LPC (línea punteada) contra características MFCC (línea continua), con reducción, 70 y 20 PCs respectivamente. 49 4.2.3 Unidades de llanto En la estancia de investigación que se hizo en la Universidad de Oriente de Santiago de Cuba, se aprendimos a manejar una nueva metodología de segmentación, la de separar las unidades de llanto de cada muestra que se tiene, esto se explica en la sección 3.1.2 de este trabajo. Una vez obtenido esto, se empezó entrenando el sistema con las muestras de llanto mexicanas, las cuales consisten de 180 segmentos de 0.4 segundos para los llantos de bebés normales, 157 segmentos de bebés con sordera, y 164 segmentos para bebés con asfixia. Como ahora se tenía el sistema programado de manera tal que pudiéramos entrenar varios tipos de redes neuronales, se obtuvieron varios datos, dependiendo del uso de la red neuronal. Para esta etapa se tuvo que implementar la red LVQ, la cual es la que usan los investigadores cubanos para reconocer llanto, y con fines comparativos. A continuación en la Tabla 4.3 mostramos los resultados obtenidos, por cada red, sin usar reducción, usando reducción por PCA (a 50 componentes), y finalmente validación cruzada. Tabla 4.3. Experimentos con Unidades de Llanto probando cada red neuronal Sin Reducción Con Reducción FF Scg LPC 91.39% MFCC 98.92% LPC 86.02% MFCC 97.84% Validación Cruzada LPC MFCC 82.94% 98.14% FFTD Scg 91.39% 94.62% 82.79% 98.92% 81.98% 98.66% LVQ 33.33% 88.17% 33.33% 94.62% 29.30% 87.52% FF Gda 86.02% 97.84% 90.32% 97.84% 85.77% 98.62% FFTD Gda 88.17% 98.92% 81.72% 97.84% 89.91% 97.31% A saber: FF = Red Neuronal Feed Forward, FFTD = Red Neuronal Feed Forward Time Delay, 50 Scg = Entrenamiento por Scaled conjugate gradient backpropagation, Gda = Entrenamiento por Gradient descent with adaptive learning backpropagation. En la Figura 4.10 podemos ver el comportamiento cuando se entrena una red neuronal con características LPC y con MFCC, sin reducción y con reducción, estas tomadas del entrenamiento de la red neuronal con retraso en el tiempo entrenada por Scg, ya que fue la que mejor desempeño tuvo en la mayoría de los casos. En dicha figura vemos que esta vez todas las características llegaron al error establecido, y se ve una gran diferencia en el entrenamiento de características MFCC, sin reducción (línea sólida) y con reducción (línea discontinua), el cual fue mucho más rápido. En cuanto LPC, sin reducción (línea punteada y discontinua), el entrenamiento es muy similar que con reducción (línea punteada). 0 10 -1 10 -2 10 -3 Error 10 -4 10 -5 10 -6 10 -7 10 -8 10 -9 10 0 50 100 150 200 250 300 350 400 Épocas Figura 4.10. Comportamiento de entrenamiento usando Unidades de Llanto con características LPC (línea delgada) y MFCC (línea gruesa) 4.2.4 Unidades de Llanto Unidas Una vez obtenidos los resultados de los segmentos extraídos de las unidades de llanto de 0.4 segundos, intentamos otro tipo de experimentos, en los cuales uníamos las unidades de llanto de cada bebé para formar un archivo más grande, de tal forma 51 que solo contuviera información sonora del llanto sin segmentos de sonido, esto para poder segmentar muestras de 1 segundo y compararlas con los experimentos que se hicieron originalmente, cuando segmentábamos 1 o 3 segundos, sin tomar en cuenta las unidades de llanto. Como habíamos explicado antes en la sección 3.1.3, para estos experimentos no se puede utilizar la reducción por componentes principales, por lo que solo se hacen experimentos de las muestras sin reducción, como se muestra en la Tabla 4.4. Usamos 16 características LPC o MFCC por cada 50 milisegundos y una unidad de retraso cuando se usa la red neuronal Time Delay. Se muestran experimentos por cada red neuronal. Tabla 4.4. Experimentos con Unidades de Llanto Unidas probando cada red neuronal Sin Reducción LPC MFCC 88.09% 97.77% Validación Cruzada LPC MFCC 74.32% 82.95% FFTD Scg 92.85% 93.33% 80.40% 86.58% LVQ 38.09% 93.33% 41.52% 89.60% FF Gda 92.85% 97.77% 82.77% 91.92% FFTD Gda 93.33% 98.09% 78.63% 95.02% FF Scg El la Figura 4.11 se muestra el comportamiento del entrenamiento de la red con retraso en el tiempo, la cual fue la que tuvo mejor comportamiento para las unidades de llanto unidas. Se ve un comportamiento similar al visto en los segmentos de 1 segundo, donde LPC (línea discontinua) nunca converge y MFCC (línea continua) si llega al error establecido, y aparte tiene mayor precisión. 52 0 10 -1 10 -2 10 -3 Error 10 -4 10 -5 10 -6 10 -7 10 -8 10 -9 10 0 500 1000 1500 2000 2500 Épocas Figura 4.11. Comportamiento del entrenamiento usando Unidades de Llanto Unidas con Características LPC (línea discontinua) y MFCC (línea continua) Ahora se tienen entrenamientos y resultados con muestras de 1 segundo, de 3 segundos, de unidades de llanto segmentadas en 0.4 segundos, de unidades de llanto unidas segmentadas en muestras de 1 segundo. Hasta este punto se tienen las extracciones de características que mejores resultados dieron, tanto LPC y MFCC, de cada uno de los experimentos propuestos. Con esto podremos ahora validar el sistema. 4.3 Validación del Sistema Para poder validar realmente el sistema se inició una nueva forma de experimentación, una donde nos permitiera ver si el sistema funciona correctamente, que reconozca no solo las clases con las cuales son alimentadas, sino que también reconozca a bebés diferentes, con esto queremos decir, que el sistema esté listo para hacer diagnósticos confiables, que pueda ser creíble para un médico al hacer un diagnóstico acertado de alguna patología que pudiera tener el bebé. Para esto, se hicieron pruebas, donde se entrenan las redes neuronales con una cantidad seleccionada de bebés (46 de bebés normales, 5 con asfixia y 5 con sordera), y finalmente se pruebe con una cantidad diferente de muestras de bebés (16 bebés normales, 1 con asfixia y 1 con sordera). 53 Para esto seleccionamos las características que mejor resultado nos dieron en la mayor parte de los experimentos, estas son las siguientes: • Muestras de 1 segundo, o LPC 16 coeficientes 100ms o MFCC 16 coeficientes 100ms • Muestras de 3 segundos o LPC 16 coeficientes 50ms o MFCC 16 coeficientes 100ms • Unidades de Llanto o Red Neuronal FFTD entrenada con Scg y muestras MFCC • Unidades de llanto unidas o Red Neuronal FFTD entrenada con Gda y muestras MFCC Ahora para hacer estas pruebas, es tiempo de poner en marcha nuestro sistema híbrido para comparar los resultados obtenidos solamente por el sistema de redes neuronales. En esta ocasión usaremos solamente la red neuronal “Feed Forward Time Delay”, con los parámetros de entrada usados en los experimentos seleccionados. Y como estamos buscando la solución más óptima en un espacio de varias soluciones, solo se hará una sola prueba por cada experimento realizado con anterioridad, ya que se usarán 20 individuos como la población inicial, 20 generaciones para hacer la búsqueda y el tamaño de los individuos será de 50, para comparar los resultados con los entrenamientos hechos con 50 componentes principales, en caso de los segmentos de 3 segundos se usaran individuos de tamaño 70 y 20 para LPC y MFCC respectivamente. Tomamos esto ya que con estos datos de entrada, se generan 200 entrenamientos diferentes, y esto toma mucho tiempo máquina para ser efectuado. Más adelante tendremos que hacer pruebas variando el número de individuos, 54 generaciones y tamaño de los individuos, haciendo un muestro comparativo para ver cuales serían los parámetros más óptimos para hacer este tipo de experimentos de búsqueda, pero esto queda como trabajo futuro y no será considerado para los fines de esta tesis. Tabla 4.5. Resultados de las mejores configuraciones, usando muestras de bebés diferentes. Reducción por PCA Reducción por Sistema Híbrido Épocas Precisión Precisión 1 Seg. LPC 16c 100ms 1 Seg. MFCC 16c 100ms 3 Seg. LPC 16c 50ms 3 Seg. MFCC 16c 100ms FFTD Scg MFCC 2000 55.15% 86.75% 395 93.33% 96.79% 2000 68.79% 85.72% 351 92.33% 95.56% 439 93.33% 96.67% FFTD Gda MFCC 527 92.00% 94.66% Como se puede ver en todos los casos, se puede apreciar una mejora en el desempeño final del sistema, esto quiere decir que tenemos un mejor reconocimiento, o sea un sistema más confiable y robusto. Aparte en esta sección también vemos un comportamiento similar a los anteriores, donde las características MFCC tienen mayor eficiencia que las características LPC, esto lo podemos ver en la figura 4.12, donde se ve un comportamiento de entrenamiento similar a los anteriores entrenamientos. 55 0 10 -1 10 -2 10 -3 Error 10 -4 10 -5 10 -6 10 -7 10 -8 10 -9 10 0 500 1000 1500 2000 2500 Épocas Figura 4.12. Comportamiento de entrenamiento usando muestras de bebés diferentes con características LPC (línea discontinua) y MFCC (línea continua). 56 Capítulo 5 ANÁLISIS DE RESULTADOS Como se puede ver, en las muestras de 1 segundo se empezó a observar poca convergencia de error en las muestras de llanto con características LPC, como se muestra en las figuras de comportamiento (4.6-9 y 4.11-12), nunca se llega a la convergencia de 1×10-8 que se tenía anteriormente. Pero por otro lado, con características MFCC se obtuvo en la mayoría de los casos una convergencia más rápida obteniendo el error que se tenía anteriormente, y podemos ver este comportamiento en las mismas figuras, por lo que se muestra un comportamiento bajo en la eficiencia de la Red Neuronal al usar características LPC. También podemos notar que la red neuronal muestra mejores resultados cuando se entrena con un mayor número de muestras, es decir usando los segmentos de 1 o 3 segundos, contra las unidades de llanto, y que es confiable usar el método de reducción de vectores por medio de análisis de componente principal, ya que los resultados son muy similares y el entrenamiento es significativamente más rápido que usando vectores sin reducción, ya que sin reducción el sistema tarda cerca de 28 minutos en entrenar y con reducción el entrenamiento va desde 1 a 4 minutos. Pero en general puede decirse que la mayoría de los resultados son muy aceptables, esto porque tenemos resultados en su mayoría arriba del 85% y que se está llegando a una muy buena solución para la clasificación de muestras de llanto. Cuando se empezó a trabajar con unidades de llanto, se observaron comportamientos muy curiosos, cuando se usaron características de llanto LPC las unidades de llanto tenía una convergencia muy rápida y se llegaba al error establecido. Pero realmente no se puede ver mucha diferencia, para las muestras cubanas, cuando se entrena el sistema usando vectores LPC o MFCC, como la que está marcada cuando se comparan los entrenamientos usando características MFCC contra LPC de bebés mexicanos. Algo mas curioso, con las muestras mexicanas, fue cuando entrenamos la red LVQ, usando características LPC, donde no existía ni convergencia, ni reconocimiento, simplemente tomaba todas las muestras de llanto como normales, y otros casos como 57 sordera. Lo que si podemos mencionar, es que había una gran variabilidad en resultados entre cada experimento, esto se debe a que cada experimento es iniciado de una manera altamente aleatoria, por lo que modificamos la manera de recolectar las muestras de llanto. Primero se recolectaban todas las muestras y con esas mismas muestras se efectuaban los experimentos correspondientes, esto para evitar posibles variabilidades. Dicho en otras palabras, pensamos en implementar la selección de características acústicas como primer plano, para poder tener resultados similares, sin importar que tipos de características se seleccionen al principio. Podemos mencionar que las muestras de llanto mexicanas, fueron de llantos totalmente espontáneos, no eran afectados por medios exteriores, claro está que para obtener llanto de dolor, eran de bebés recibiendo inyecciones. Pero en algunas muestras existe un poco de ruido exterior. Aparte debemos aclarar que el fin de este trabajo es la búsqueda de algoritmos efectivos para reconocer llanto, no el de hacer una comparación de resultados de entrenamientos con llantos cubanos y entrenamientos con llantos mexicanos. Para las unidades de llanto unidas, los resultados son muy similares a los resultados obtenidos por unidades de llanto normales, solo que en estos experimentos se omitió la reducción por componentes principales, ya que no vimos diferencia alguna, entre entrenamientos con vectores sin reducción o con reducción. En esta parte de los experimentos, las muestras LPC se comportaron de manera similar a cuando se usaron segmentos de 1 segundo. Lo interesante viene cuando empezamos a reconocer bebés diferentes, ya que el reconocimiento baja mucho. Se dice que viene la parte interesante ya que exactamente esta es la parte que queremos mejorar con el sistema híbrido. En los experimentos donde comparamos los resultados ya con el sistema híbrido, se puede ver que los resultados si son mejores, en el mejor de los casos el reconocimiento aumenta hasta 31.6 puntos porcentuales, cuando se realizan experimentos con bebés diferentes. Cuando se realizan experimentos de manera normal, sin definir los llantos para hacer las pruebas, hay veces que el sistema tiene mayor precisión, y hay veces que no mejora esa precisión. Pero podemos ver en esta parte que sí se ve una mejora al reconocer no solo la clase de llanto, sino también al bebé. Por esto podemos decir, que al buscar características más fuertes, obtenemos 58 una mejora en los resultados, cuando se quiere reconocer cualquier llanto de bebé, sin importar el bebé al cual estamos tratando de diagnosticar. Finalmente podemos mencionar que el mejor resultado de todos los experimentos fueron dados por, las muestras de 1 segundo con características MFCC con 16 coeficientes por cada 100ms, obteniendo un resultado de 93.33% en el sistema de redes neuronales normal y 96.79% con el sistema híbrido. En cuanto a las muestras con características LPC, las que mejor dieron resultado fueron las de 3 segundos con 16 características por cada 50 milisegundos, obteniendo un resultado de 68.79% usando la red neuronal simple, y un 85.72% usando el sistema híbrido. Observando una gran diferencia entre ambos tipos de características, aparte de que el sistema híbrido es el que mejores resultados arroja en cuanto a reconocimiento. 59 Capítulo 6 CONCLUSIONES Y TRABAJOS FUTUROS A lo largo de este trabajo, se puede observar como hemos hecho para escoger la mejor extracción de características, y tratamos de comparar los resultados obtenidos por métodos de reducción contra los que no tienen reducción, lo cual no había mucha diferencia. Por lo que podemos concluir que las mejores características acústicas hasta el momento son los coeficientes MFCC. También podemos concluir que para reconocer tanto la clase de llanto, como al bebé cuyo llanto nunca estuvo en las muestras de entrenamiento, es mucho mejor usar un sistema de selección de características, en este caso las estrategias evolutivas, que con la manera tradicional de solamente entrenar las redes neuronales. Pero faltan todavía algunas cosas por hacer, la cual es optimizar la mutación, ya que en algunos casos, existe un mejor resultado en épocas intermedias, y posteriormente ese resultado se pierde y luego vuelve a aumentar, lo que indica que hay veces que no se mantiene en los hijos la información del padre “más apto”. Esto se cree que está en la mutación. Y también tenemos que trabajar en estandarizar el grabado de las muestras de llanto, desde su forma de captura del sonido, hasta la digitalización y procesamiento de las muestras, para esto se debe establecer cual es la mejor forma de grabar el llanto de los niños. También es importante decidir si es mejor segmentar las muestras en segmentos de n segundos, o si debemos primero extraer las unidades de llanto para después segmentarlas y trabajar explícitamente la intermitencia de la señal. 60 Bibliografía [1] Monakow C, Morgue R., Introduction a l’étude de la neurologie et de la sychopathologie. Integration et désintégration de la function, Paris: Alcan 1928. [2] Yoshinaga-Itano, quoted in ‘The High Cost Of Hearing Lost; What Our Publics Need to Know’, Donald Radcli.e, The Hearing Journal, May 1998, vol 51 no. 5. [3] Yoshinaga-Itano, C. & Appusso, M L., The development of deaf and hard of hearing children identified through the high-risk registry, in The American Annals of the deaf, 143, 416-424. 1998. [4] Reyes-García C. A. & Reyes-Galaviz O. F., Classification of Infant Crying to Identify Pathologies in Recently Born Babies with ANFIS. ICCHP Transactions, Lecture Notes in Artificial Intelligence, Springer-Verlag. 2004. [5] Wasz-Höckert O., Lind J., Vuorenkoski V., Partenen T., Valanne E., The infant cry: a spectrographic and auditory analysis, Clin. Dev. Med. 29 (1968) pp. 1-42 [6] Golub H., Corwin M., Infant cry: a clue to diagnosis, Pediatrics, vol. 69 (1982), pp. 197-201. [7] Zeskind P.S., Lester B., Acoustic features and auditory perceptions of the cries of newborns with prenatal and perinatal complications, Chils development, 49 (1978), pp. 580-589. [8] Sergio D. Cano, Daniel I. Escobedo y Eddy Coello, El Uso de los Mapas AutoOrganizados de Kohonen en la Clasificación de Unidades de Llanto Infantil, Grupo de Procesamiento de Voz, 1er Taller AIRENE, Universidad Católica del Norte, Chile, 1999, pp 24-29. [9] Sergio D. Cano Ortiz, Daniel I. Escobedo Beceiro, Miguel Torres Alberto, Alexander Castillo Lombart. Análisis preliminar de los resultados de una clasificación de unidades de llanto infantil según tres arquitecturas de redes 61 neuronales. Proyecto Multidiciplinario Ramal Análisis de Llanto Infantil orientado al Diagnóstico Neonatal, código MINSAP 09. 2000 [10] Pieter Mulder, Matthijs. A Clue Using Self Organizing Maps: A final report of a practical period on Computer Science. Infant Cry Analysis. February 22, 2001. Santiago de Cuba [11] Cohen, A. and Zmora, E. “Automatic classification of infants’ hunger and pain cry”. In Proc. Int. Conf. Digital Signal Processing, Cappellini, V. and Constantinides, A.G., Eds., Elsevier, Amsterdam, (1984), pp. 667-672. [12] Marco Petroni, Alfred S. Malowany, C. Celeste Johnston, Bonnie J. Stevens, (1995). Identification of pain from infant cry vocalizations using artificial neural networks (ANNs), The International Society for Optical Engineering. Volume 2492. Part two of two. Paper #: 2492-79. [13] Lederman, D., Automatic Classification Of Infants’ Cry, Ben-Gurion University Of The Negev Faculty Of Engineering Sciences Department Of Electrical And Computer Engineering, (2002), Thesis. [14] Ekkel, T, “Neural Network-Based Classification of Cries from Infants Suffering from Hypoxia-Related CNS Damage”, Master Thesis. University of Twente, the Netherlands. 2002. [15] Orozco García, J., Reyes García, C.A. (2003), Mel-Frequency Cepstrum Coefficients Extraction from Infant Cry for Classification of Normal and Pathological Cry with Feed forward Neural Networks, ESANN 2003, Bruges, Belgium. [16] Holland, J. H. Progress in Theorical Biology IV. Adaptation. In R. Rosen and F. M. Snell (Eds.), pp. 263-293. Academic Press. 1976. [17] Oscar Cordón, Francisco Herrera, Frank Hoffmann, Luis Magdalena. Genetic Fuzzy Systems: Evolutionary Tuning and Learning of Fuzzy Knowledge Bases. Ed. World Scientific. 2001. 62 [18] Sankar K. Pal, Sushmita Mitra. Neuro-Fuzzy Pattern Recognition: Methods in Soft Computing. Ed. Wiley Inter-Science. 1999 [19] Orozco-García, José. Extracción y Análisis de Características Acústicas del Llanto de Bebés para su Reconocimiento Automático Basado en Redes Neuronales. Tesis. INAOE Febrero 2004. [20] Hussain, Talib S., An Introduction to Evolutionary Computation, Department of Computing and Information Science Queens University, Kingston, Ont. K7L 3N6. 1998. [21] Francisco Casacubierta & Enrique Vidal, Reconocimiento Automático del Habla, pp 19. Marcombo, Boixareu Editores, 1987. [22] Gold, B., Morgan, N. Speech and Audio Signal Processing. Processing and perception of speech and music. John Wiley & Sons, Inc. 2000. [23] Markel, John D., Gray, Augustine H. Linear prediction of speech. New York: Springer-Verlag. 1976. [24] Schwefel, H.-P., Numerical Optimization for Computer Models, John Wiley, Chichester, UK, 1981. [25] Zbigniew Michalewicz, Genetic Algorithms + Data Structures = Evolution Programs, Springer Verlag, 1999. [26] Santo Orcero, David. Estrategias evolutivas, http://www.orcero.org/irbis/disertacion/node217.html. 2004. [27] Angeline, P.J. (1996) “Genetic programming continued evolution,” Chapter 1 in K.E. Kinnear, Jr. and P.J. Angeline (Eds.), Advances in Genetic Programming 2. Cambridge, MA: MIT Press, p. 1 -20. [28] Spears, W.M., DeJong, K.A., Back, T., Fogel, D.B., & deGaris, H. “An overview of evolutionary computation “Proceedings of the 1993 European Conference on Machine Learning. 63 [29] Markowitz, Judith A., Using Speech Recognition, Prentice Hall, 1996. [30] Neural Network Toolbox, Matlab V.6.0.8, Developed by Math Works, Inc. [31] Caudill, M., and C. Butler. Understanding Neural Networks: Computer Explorations, Vols. 1 and 2, Cambridge, MA: the MIT Press.1992. [32] Lawrence Rabiner, Biing-Hwang Juang. Fundamentals of Speech Recognition. Prentice Hall Signal Processing Series. 1993. [33] A. Weibel, T. Hanazawa, G. Hinton, K. Shikano, and K.J. Lang, “Phoneme Recognition Using Time Delay Neural Networks,” IEEE Trans. Acoustics, Speech, Signal Proc., ASSP-37: 328-339, 1989. [34] Escritorio en línea de Math Works, sept. 6, 2004. http://www.mathworks.com/access/helpdesk/help/toolbox/nnet/selfor17.html [35] Haykin, Simon S. “Neural networks: A comprehensive foundation”. New York: Macmillan College Publishing Company, Inc., 1994. 64 Anexos Algoritmo Principal Redes Neuronales function [net,matc,prec,tam,numpru]=proyecto(file,porc,ncp,del,redu,RedNA) fid=fopen(file); if fid < 0 mat=[]; return; end; datos=fgetl(fid); i=1; Yy=[]; entrena=[]; prueba=[]; while datos ~= -1 nombre=strrep(datos,'.txt',''); [Y]=leearch(datos,i); eval([ nombre , '=Y']); datos=fgetl(fid); i=i+1; [X1,Y1]=size(eval(nombre)); Yy=[Yy Y1]; [a,b]=min(Yy); T=randperm(Y1); nombre2=strcat('entrena',nombre); nombre1=strcat('prueba',nombre); ap=round(a*porc); for k=1:(a-ap) Temp(:,k)=Y(:,T(k)); end for j=1:(a-k) Temp1(:,j)=Y(:,T(j+k)); end eval([nombre2,'=Temp']); eval([nombre1,'=Temp1']); entrena=[entrena eval(nombre2)]; prueba=[prueba eval(nombre1)]; end fclose(fid); [entrena,prueba,etiquetas,etiquetas2,tam] = etiqu(entrena,prueba,i); if redu == 1 [pcaEntrena,pcaPrueba]=comprimir(entrena,prueba,ncp); elseif redu == 2 pcaEntrena=entrena; pcaPrueba=prueba; [Ll,Mm]=size(pcaEntrena); ncp=Ll; end if RedNA == 1 [net,meta] = redEntrena(etiquetas,pcaEntrena,ncp,(i-1),del); elseif RedNA == 2 [net,meta] = redEntrena2(etiquetas,pcaEntrena,ncp,(i-1)); elseif RedNA == 3 [net,meta] = redEntrena3(etiquetas,pcaEntrena,ncp,(i-1)); elseif RedNA == 4 [net,meta] = redEntrena4(etiquetas,pcaEntrena,ncp,(i-1),del); elseif RedNA == 5 [net,meta] = redEntrena5(etiquetas,pcaEntrena,ncp,(i-1)); end Y = sim(net,pcaPrueba); a Anexos [AAa,BBb]=max(Y); numpru=a-k; [matc,prec] = matconf(numpru,i,BBb,etiquetas2); Algoritmo Principal, Bebés Diferentes function [net,matc,prec,tam,numpru,BBb]=diferentes(file1,file2,ncp,del,redu,RedNA) [entrena,prueba,i,t] = invocadif(file1,file2); [entrena,prueba,etiquetas,etiquetas2,tam] = etiqu(entrena,prueba,i); if redu == 1 [pcaEntrena,pcaPrueba]=comprimir(entrena,prueba,ncp); elseif redu == 2 pcaEntrena=entrena; pcaPrueba=prueba; [Ll,Mm]=size(pcaEntrena); ncp=Ll; end if RedNA == 1 [net,meta] = redEntrena(etiquetas,pcaEntrena,ncp,(i-1),del); elseif RedNA == 2 [net,meta] = redEntrena2(etiquetas,pcaEntrena,ncp,(i-1)); elseif RedNA == 3 [net,meta] = redEntrena3(etiquetas,pcaEntrena,ncp,(i-1)); elseif RedNA == 4 [net,meta] = redEntrena4(etiquetas,pcaEntrena,ncp,(i-1),del); elseif RedNA == 5 [net,meta] = redEntrena5(etiquetas,pcaEntrena,ncp,(i-1)); end Y = sim(net,pcaPrueba); [AAa,BBb]=max(Y); numpru=t/(i-1); [matc,prec] = matconf(numpru,i,BBb,etiquetas2); Algoritmo Principal, Sistema Genético Neuronal function [soluc,maxind] = inpob(file,ind,tam,porc,del,mut,vueltas,corte) soluc=[]; A = zeros(ind,tam); [entrena,prueba,i,a,k] = invoca(file,porc); numero=i-1; [a,b]=size(entrena); for i=1:ind T=randperm(a-1); A(i,:)=T(1:tam); end A=A'; A=sort(A); A=A'; [entrena,prueba,etiquetas,etiquetas2,tam2] = etiqu(entrena,prueba,i); sol=[]; [Xx,Yy]=size(entrena); [Xxx,Yyy]=size(prueba); for cuenta=1:vueltas mat1=zeros(tam,Yy); mat2=zeros(tam,Yyy); res=[]; for i=1:ind b Anexos for j=1:tam mat1(j,:)=entrena(A(i,j),:); mat2(j,:)=prueba(A(i,j),:); end [net,meta] = redhib(etiquetas,mat1,tam,numero,del); Y = sim(net,mat2); [AAa,BBb]=max(Y); [matc,prec] = matconf((Yyy/3),4,BBb,etiquetas2); res=[res prec]; end [sol,maxim]=max(res); [c,d]=sort(res); cut=ind-corte; A2=[]; for l=(cut+1):ind A2((l-cut),:)=A(d(l),:); end [s,t]=size(A2); n2=[]; for i=1:ind n=round(s*rand(1,1)); if n==0 n=n+1; end n2=[n2;n]; end for u=1:ind A3(u,:)=A2(n2(u,:),:); end A=A3; [A2]=muta(A,mut,Xx-1); A2=sort(A2'); A=A2'; soluc=[soluc sol]; maxind=(A(maxim,:)); end Algoritmo Principal Sistema Genético Neuronal, Bebés Diferentes function [soluc,maxind] = inpobdif(file1,file2,ind,tam,del,mut,vueltas,corte) soluc=[]; A = zeros(ind,tam); [entrena,prueba,i,t] = invocadif(file1,file2); numero=i-1; [a,b]=size(entrena); for i=1:ind T=randperm(a-1); A(i,:)=T(1:tam); end A=A'; A=sort(A); A=A'; [entrena,prueba,etiquetas,etiquetas2,tam2] = etiqu(entrena,prueba,i); sol=[]; [Xx,Yy]=size(entrena); [Xxx,Yyy]=size(prueba); for cuenta=1:vueltas c Anexos mat1=zeros(tam,Yy); mat2=zeros(tam,Yyy); res=[]; for i=1:ind for j=1:tam mat1(j,:)=entrena(A(i,j),:); mat2(j,:)=prueba(A(i,j),:); end [net,meta] = redhib(etiquetas,mat1,tam,numero,del); Y = sim(net,mat2); [AAa,BBb]=max(Y); [matc,prec] = matconf((Yyy/3),4,BBb,etiquetas2); res=[res prec]; end [sol,maxim]=max(res); [c,d]=sort(res); cut=ind-corte; A2=[]; for l=(cut+1):ind A2((l-cut),:)=A(d(l),:); end [s,t]=size(A2); n2=[]; for i=1:ind n=round(s*rand(1,1)); if n==0 n=n+1; end n2=[n2;n]; end for u=1:ind A3(u,:)=A2(n2(u,:),:); end A=A3; [A2]=muta(A,mut,Xx-1); A2=sort(A2'); A=A2'; soluc=[soluc sol]; maxind=(A(maxim,:)); end Red FF, Entrenamiento SCG function [net,meta] = redEntrena2(etiquetas,pcaEntrena,ncp,Bb); O = ind2vec(etiquetas); meta = full(O); net = newff(minmax(pcaEntrena),[ncp round(ncp*.4) Bb],{'logsig', 'logsig', 'logsig'},'trainscg'); net.trainParam.show = 100; net.trainParam.epochs = 2000; net.trainparam.min_grad=1e-20; net.trainparam.goal=0.00000001; net = train(net,pcaEntrena,meta); Red FFTD, Entrenamiento SCG function [net,meta] = redEntrena(etiquetas,pcaEntrena,ncp,Bb,del) O = ind2vec(etiquetas); meta = full(O); d Anexos net = newfftd(minmax(pcaEntrena),[0 del],[ncp round(ncp*.4) Bb],{'logsig', 'logsig', 'logsig'},'trainscg'); net.trainParam.show = 200; net.trainParam.epochs = 2000; net.trainparam.min_grad=1e-20; net.trainparam.goal=0.00000001; net = train(net,pcaEntrena,meta); Red LVQ function [net,meta] = redEntrena3(etiquetas,pcaEntrena,ncp,Bb) O = ind2vec(etiquetas); meta = full(O); net = newlvq(minmax(pcaEntrena), round(ncp*0.4) ,[0.4 0.3 0.3],0.03,'learnlv1'); net.trainParam.show = 5; net.trainParam.epochs = 50; net.trainparam.min_grad=1e-20; net.trainparam.goal=0.1; net = train(net,pcaEntrena,meta); Red FF, Entrenamiento GDA function [net,meta] = redEntrena5(etiquetas,pcaEntrena,ncp,Bb); O = ind2vec(etiquetas); meta = full(O); net = newff(minmax(pcaEntrena),[ncp round(ncp*.4) Bb],{'logsig', 'logsig', 'logsig'},'traingda'); net.trainParam.show = 100; net.trainParam.epochs = 2000; net.trainparam.min_grad=1e-20; net.trainparam.goal=0.00000001; net = train(net,pcaEntrena,meta); Red FFTD, Entrenamiento GDA function [net,meta] = redEntrena4(etiquetas,pcaEntrena,ncp,Bb,del) O = ind2vec(etiquetas); meta = full(O); net = newfftd(minmax(pcaEntrena),[0 del],[ncp round(ncp*.4) Bb],{'logsig', 'logsig', 'logsig'},'traingda'); net.trainParam.show = 200; net.trainParam.epochs = 2000; net.trainparam.min_grad=1e-20; net.trainparam.goal=0.00000001; net = train(net,pcaEntrena,meta); Matriz de Confusión function [matrizconfu,precision] = matconf(numpru,i,BBb,etiquetas2) matrizconfu=zeros(i-1,i-1); for st=1:(numpru*(i-1)) matrizconfu(etiquetas2(st),BBb(st))=(matrizconfu(etiquetas2(st),BBb(st)))+1; end precision=0; for t=1:(i-1) precision=precision+matrizconfu(t,t); end precision=(precision*100)/(numpru*(i-1)); e