Estudio de técnicas de caracterización de la figura humana, para su
Transcripción
Estudio de técnicas de caracterización de la figura humana, para su
Estudio de técnicas de caracterización de la figura humana, para su posible aplicación a problemas de reconocimiento de género Universitat Jaume I Autor: Alejandro Mateo Ingelmo Supervisado por: Raúl Montoliu Colás Castellón, 25 de mayo de 2009 Resumen Este proyecto consiste en el estudio y desarrollo de técnicas de reconocimiento de patrones para discernir el género de una persona. Partiendo de una fotografı́a en la cual la persona está centrada en la imagen, el algoritmo debe inferir el género de dicha persona mediante técnicas de reconocimiento de patrones. Los objetivos principales que motivan este proyecto son: El estudio de técnicas de extracción de caracterı́sticas para el reconocimiento de género y la elaboración de ideas para futuras investigaciones en este ámbito. El estudio de técnicas de extracción de caracterı́sticas consiste en utilizar algoritmos utilizados en problemas similares y adaptarlos y modificarlos a este problema. En base a la información obtenida del proyecto, se pueden idear vı́as de desarrollo que sirvan para orientar a trabajos posteriores. Para la consecución de dichos objetivos se siguió una metodologı́a cı́clica de desarrollo, que consiste en un proceso repetitivo de diseño, implementación, test y evaluación de resultados. Una vez implementada una versión del algoritmo, se realizan los test y se evalúan los resultados obtenidos. De esos resultados se extraen las conclusiones que permiten enfocar una mejora del algoritmo o una implementación de una técnica nueva, repitiendo el ciclo tantas veces como sea requerido. En concreto, en este proyecto se han implementado tres versiones: la primera, que usa histogramas de las orientaciones del gradiente para obtener las caracterı́sticas de la imagen; la segunda, que aplica un enfoque local al estudio de la imagen y por último; la tercera, que emplea el algoritmo Local Binary Patterns para obtener las caracterı́sticas de la imagen. Los resultados obtenidos muestran que con las versiones implementadas no se obtiene una solución efectiva al problema, pero si permiten alcanzar el objetivo marcado, que no es otro que verificar el uso de ambos algoritmos. Con el fin de evitar conclusiones erróneas, se sometió a las implementaciones diferentes pruebas para verificar su correcto funcionamiento, descartando errores de implementación. Descriptores Reconocimiento de patrones,Vision por computador, HOG, Knn, Biometrı́a iii iv Índice general 1. Introducción 1.1. Motivación . . . . . . . . . . . . . . . . . . . 1.2. Conceptos . . . . . . . . . . . . . . . . . . . 1.2.1. Visón por computador . . . . . . . . 1.2.2. Reconocimiento de patrones . . . . . 1.2.3. Biometrı́a . . . . . . . . . . . . . . . 1.2.4. Histograma de gradientes orientados 1.2.5. Algoritmo KNN . . . . . . . . . . . . 1.2.6. Editado de Wilson . . . . . . . . . . 1.2.7. Local Binary Patterns . . . . . . . . 1.3. Objetivos . . . . . . . . . . . . . . . . . . . 1.4. Consideraciones previas sobre el problema . 1.5. Vista previa del trabajo realizado . . . . . . 1.6. Antecedentes . . . . . . . . . . . . . . . . . 1.7. Organización del documento . . . . . . . . . 2. Planificación 2.1. A priori . . . . . . . . . . . . . . 2.1.1. Análisis y planificación . . 2.1.2. Proceso de desarrollo . . . 2.1.3. Revisión final del proyecto 2.2. A posteriori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. Matlab / PRTools 3.1. Introducción a Matlab . . . . . . . . . . . . . . . . . 3.2. Conceptos en el procesamiento de imágenes . . . . . 3.3. Rutinas de lectura y escritura de imágenes . . . . . . 3.4. Funciones dedicadas a la conversión de imágenes . . . 3.5. Funciones para la extracción de bordes . . . . . . . . 3.6. Librerı́a PRTools para el reconocimiento de patrones v . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 3 3 5 6 7 7 8 9 9 9 10 14 14 . . . . . 17 18 19 19 19 20 . . . . . . 25 26 26 27 29 29 30 vi ÍNDICE GENERAL 4. Descripción del proyecto 4.1. Analisis y planificación . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1. Determinar el ámbito del proyecto . . . . . . . . . . . . . . . 4.1.2. Definir herramientas a utilizar . . . . . . . . . . . . . . . . . 4.1.3. Definición de objetivos . . . . . . . . . . . . . . . . . . . . . 4.1.4. Estudio de investigaciones previas y tecnologı́as de desarrollo 4.1.5. Estudio y planificación temporal de tareas . . . . . . . . . . 4.1.6. Búsqueda e instalación del SW requerido . . . . . . . . . . . 4.2. Desarrollo versión inicial . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.2. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.3. Ejecución de los test y resultados . . . . . . . . . . . . . . . 4.3. Desarrollo mejora 1, editado de Wilson . . . . . . . . . . . . . . . . 4.3.1. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.2. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.3. Ejecución de los test y resultados . . . . . . . . . . . . . . . 4.4. Desarrollo mejora 2, enfoque local . . . . . . . . . . . . . . . . . . . 4.4.1. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.2. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.3. Ejecución de los test y resultados . . . . . . . . . . . . . . . 4.5. Desarrollo mejora 3, Local binary patterns . . . . . . . . . . . . . . 4.5.1. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.2. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.3. Ejecución de los test y resultados . . . . . . . . . . . . . . . 4.6. Revisión del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.1. Proceso de comprobación . . . . . . . . . . . . . . . . . . . . 4.6.2. Evaluación global de los resultados . . . . . . . . . . . . . . 4.6.3. Futuras vı́as de investigación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 37 37 37 37 38 38 39 40 40 49 53 59 59 60 61 63 63 65 69 75 75 75 78 81 81 82 83 5. Conclusiones 85 Bibliografı́a 87 Índice de figuras 1.1. Sistema de control biométrico por reconocimiento de rostro. . . . . . . 1.2. Identificación del protagonista mediante el iris, en Minority Report. . 1.3. Esquema de relaciones entre visión por computadora y otras áreas afines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4. Autentificación biométrica en la entrada de unas instalaciones de ocio. 1.5. Ejemplo del algoritmo Knn. . . . . . . . . . . . . . . . . . . . . . . . 1.6. Ejemplo conjuntos sin editado de Wilson. . . . . . . . . . . . . . . . . 1.7. Extracción de caracterı́sticas de una imagen . . . . . . . . . . . . . . 1.8. Ejemplo de imágenes ambiguas. . . . . . . . . . . . . . . . . . . . . . 1.9. Algunas imágenes utilizadas en el proyecto. . . . . . . . . . . . . . . . 1.10. Metodologı́a seguida en el proyecto. . . . . . . . . . . . . . . . . . . . 1.11. Diferencias fisiológicas entre hombres y mujeres. . . . . . . . . . . . . 1.12. Esquema del proceso entrenamiento. . . . . . . . . . . . . . . . . . . . 1.13. Esquema del proceso clasificación. . . . . . . . . . . . . . . . . . . . . 1.14. Ventanas de extracción. . . . . . . . . . . . . . . . . . . . . . . . . . . 2 3 4 6 7 8 10 11 11 12 13 13 14 15 2.1. Diagrama de Gantt a priori. . . . . . . . . . . . . . . . . . . . . . . . 21 2.2. Diagrama de Gantt a posteriori de las primeras 34 tareas. . . . . . . 22 2.3. Diagrama de Gantt a posteriori de las 29 tareas restantes tareas. . . . 23 3.1. 3.2. 3.3. 3.4. Representación de una imagen a escala de grises en Matlab Representación de una imagen a color RGB en Matlab . . Resultado de la aplicación del algoritmo canny . . . . . . . Gráfica de los distintos clasificadores. . . . . . . . . . . . . 4.1. 4.2. 4.3. 4.4. 4.5. 4.6. Tareas principales del proyecto. . . . . . . . . . . Muestra de imágenes de la BBDD . . . . . . . . . Esquema de módulos del proyecto . . . . . . . . . Conversión de una imagen a valores comprendidos Preproceso de una imagen. . . . . . . . . . . . . . Ejemplo de obtención del vector de caracterı́sticas. vii . . . . . . . . . . . . . . . . . . . . . . . . 27 33 34 34 . . . . . . . . . . . . . . . . . . . . . entre 0 y 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 41 42 44 45 46 viii ÍNDICE DE FIGURAS 4.7. Cálculo del valor de la imagen integral. . . . . . . . . . . . . . . . . 4.8. Normalización de una imagen. . . . . . . . . . . . . . . . . . . . . . 4.9. Variaciones del gradiente. . . . . . . . . . . . . . . . . . . . . . . . 4.10. Cálculo del gradiente. . . . . . . . . . . . . . . . . . . . . . . . . . . 4.11. Aplicación de un vector de pesos a los pixels de una determinada fila en al imagen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.12. Proceso detallado del proyecto. . . . . . . . . . . . . . . . . . . . . . 4.13. Resultados de la versión inicial sin pos-proceso del vector. . . . . . . 4.14. Resultados de la versión inicial con normalización del vector. . . . . 4.15. Resultados de la versión inicial con normalización y umbralización del vector. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.16. Resultado del editado de Wilson. . . . . . . . . . . . . . . . . . . . . 4.17. Selección del editado de Wilson. . . . . . . . . . . . . . . . . . . . . 4.18. Resultados con el conjunto de entrenamiento editado. . . . . . . . . 4.19. Transformación de la estructura de vectores. . . . . . . . . . . . . . 4.20. Procesado de los vectores en versiones anteriores. . . . . . . . . . . 4.21. Procesado de los vectores actualmente. . . . . . . . . . . . . . . . . 4.22. Resultados de la versión local para valores de sigma entre 0.5 y 4.5 4.23. Resultados de la versión local para valores de sigma entre 5.5 y 9.5 4.24. Resultados de la versión local para valores de tamVentanaX entre 12 y 18 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.25. Resultados de la versión local para valores de tamVentanaX entre 20 y 26 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.26. Resultados de la versión local para valores de desplazamiento entre 2 y8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.27. Resultados de la versión local para valores de desplazamiento entre 10 y 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.28. Procesado de pixeles con local binary patterns. . . . . . . . . . . . . 4.29. Esquema de módulos para la versión LBP. . . . . . . . . . . . . . . 4.30. Resultados de la versión LBP para valores de sigma entre 0.5 y 4.5 y de tamVentanaX entre 4 y 32 . . . . . . . . . . . . . . . . . . . . . 4.31. Resultados de la versión LBP para valores de desplazamiento entre 4 y 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.32. Gradiente medio de las imágenes en la BBDD. . . . . . . . . . . . . . . . . 47 48 49 50 . . . . 50 51 55 56 . . . . . . . . . 57 59 60 62 64 65 66 69 70 . 71 . 72 . 73 . 74 . 75 . 76 . 79 . 79 . 81 Capı́tulo 1 Introducción Contenido 1.1. Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2. Conceptos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2.1. Visón por computador . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2.2. Reconocimiento de patrones . . . . . . . . . . . . . . . . . . . . . . . 5 1.2.3. Biometrı́a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.2.4. Histograma de gradientes orientados . . . . . . . . . . . . . . . . . . 7 1.2.5. Algoritmo KNN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2.6. Editado de Wilson . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.2.7. Local Binary Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.3. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.4. Consideraciones previas sobre el problema . . . . . . . . . . . . . 9 1.5. Vista previa del trabajo realizado . . . . . . . . . . . . . . . . . . 10 1.6. Antecedentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.7. Organización del documento . . . . . . . . . . . . . . . . . . . . . . 14 1 2 CAPÍTULO 1. INTRODUCCIÓN Este proyecto consiste principalmente en el estudio de técnicas de extracción de caracterı́sticas para reconocer el género de una persona centrada en una imagen. Dichas técnicas serán las utilizadas en problemas similares, con sus pertinentes modificaciones. A continuación se realizará una aproximación para conocer “a grosso modo”los conceptos claves de este proyecto. 1.1. Motivación Las tecnologı́as biométricas han adquirido gran importancia en los últimos años, especialmente a raı́z de los acontecimientos del 11-S de 2001. La preocupación por la seguridad es un tema que ha ido creciendo desde entonces y son cada vez más los equipos de seguridad que utilizan la biometrı́a para paliar la falta de seguridad existente en ciertos entornos. Uno de los propósitos más destacables de la biometrı́a es la identificación automática de personas por medio del rostro (ver Figura 1.1), iris, voz, huellas dactilares, etc. Los sistemas biométricos también tienen un gran peso en cuestiones de seguridad como se ejemplifica seguidamente. Imaginemos por un momento que una organización terrorista desea atentar contra un edificio gubernamental. Si dicho edificio tuviese un sistema de detección de rostros integrado con una base de datos de terroristas, se podrı́a llegar a prever el atentado antes de producirse. Otro ejemplo, un preso se escapa de la cárcel, con un sistema biométrico en puntos clave de un ciudad, podrı́a facilitar el arresto de dicho individuo. Figura 1.1: Sistema de control biométrico por reconocimiento de rostro. Estos casos han sido llevados al cine de forma muy futurista, como es el caso de la pelı́cula Minority Report. Una escena de esta pelı́cula muestra como un fugitivo es identificado por cámaras de seguridad mediante el iris (ver Figura 1.2). Aunque 1.2. CONCEPTOS 3 parezca un caso impensable, todo apunta a que en un medio plazo no se estará tan lejos de ese nivel tecnológico. Figura 1.2: Identificación del protagonista mediante el iris, en Minority Report. Dentro de los distintos métodos biométricos, el campo de la identificación del género es muy novedoso. Los argumentos para desarrollar este ámbito son variados. A los directivos de unos grandes almacenes les puede interesar conocer el porcentaje de hombres y mujeres que entran en sus tiendas para hacer posteriores estudios de mercado. También se podrı́a integrar este sistema con pantallas dinámicas de anuncios, que pusiesen un anuncio en función del género de la persona que pasa por la pantalla. Lo que terminarı́a por repercutir directamente en la eficacia del anuncio. Otra aplicación para el uso de técnicas de identificación de género serı́a acotar las búsquedas en Bases de Datos para identificar a las personas. Hay que tener en cuenta que un sistema de identificación automático de personas integran Bases de datos de un tamaño muy considerable. Resulta especialmente útil reducir el tiempo de búsqueda prácticamente a la mitad si conseguimos identificar a priori el género del individuo a identificar. 1.2. Conceptos A continuación se explicarán algunos conceptos relacionados con el proyecto que ayudarán a la comprensión del resto del documento. 1.2.1. Visón por computador La Visión artificial, también conocida como Visión por Computador (del inglés Computer Vision) o Visión técnica, es un subcampo de la inteligencia artificial. El propósito de la visión artificial es programar un computador para que entienda una escena o las caracterı́sticas de una imagen. 4 CAPÍTULO 1. INTRODUCCIÓN Los objetivos tı́picos de la visión artificial incluyen: La detección, segmentación, localización y reconocimiento de ciertos objetos en imágenes (por ejemplo, caras humanas). La evaluación de los resultados (ej.: segmentación, registro). Registro de diferentes imágenes de una misma escena u objeto, i.e., hacer concordar un mismo objeto en diversas imágenes. Seguimiento de un objeto en una secuencia de imágenes. Mapeo de una escena para generar un modelo tridimensional de la escena; tal modelo podrı́a ser usado por un robot para navegar por la escena. Estimación de las posturas tridimensionales de humanos. Búsqueda de imágenes digitales por su contenido. En la Figura 1.3 se sitúa la visión por computador respecto a sus áreas afines. Figura 1.3: Esquema de relaciones entre visión por computadora y otras áreas afines. Estos objetivos se consiguen por medio de reconocimiento de patrones, aprendizaje estadı́stico, geometrı́a de proyección, procesado de imágenes, teorı́a de gráficos y otros campos. La visión artificial cognitiva está muy relacionada con la psicologı́a cognitiva y la computación biológica. 1.2. CONCEPTOS 1.2.2. 5 Reconocimiento de patrones El reconocimiento de patrones, también llamado lectura de patrones, identificación de figuras y reconocimiento de formas es el reconocimiento de patrones en señales. No sólo es un campo de la informática sino un proceso fundamental que se encuentra en casi todas las acciones humanas. El punto esencial del reconocimiento de patrones es la clasificación. Se requiere clasificar una señal dependiendo de sus caracterı́sticas. Señales, caracterı́sticas y clases pueden ser de cualquiera forma, por ejemplo se puede clasificar imágenes digitales de letras en las clases ((A)) a ((Z)) dependiente de sus pixels o se puede clasificar ruidos de cantos de los pájaros en clases de órdenes aviares dependiente de las frecuencias. El objetivo es clasificar patrones con base en un conocimiento a priori o información estadı́stica extraı́da de los patrones. Los patrones a clasificar suelen ser grupos de medidas u observaciones, definiendo puntos en un espacio multidimensional apropiado. Un sistema de reconocimiento de patrones completo consiste en un sensor que recoge las observaciones a clasificar, un sistema de extracción de caracterı́sticas que transforma la información observada en valores numéricos o simbólicos, y un sistema de clasificación o descripción que, basado en las caracterı́sticas extraı́das, clasifica la medición. La clasificación utiliza habitualmente uno de las siguientes procedimientos: clasificación estadı́stica (o teorı́a de la decisión), clasificación sintáctica (o estructural). El reconocimiento estadı́stico de patrones está basado en las caracterı́sticas estadı́sticas de los patrones, asumiendo que han sido generados por un sistema probabilı́stico. El reconocimiento estructural de patrones está basado en las relaciones estructurales de las caracterı́sticas. Para la clasificación se puede usar un conjunto de aprendizaje, del cual ya se conoce la clasificación de la información a priori y se usa para entrenar al sistema, siendo la estrategia resultante conocida como aprendizaje supervisado. El aprendizaje puede ser también no supervisado, el sistema no tiene un conjunto para aprender a clasificar la información a priori, sino que se basa en cálculos estadı́sticos para clasificar los patrones. Unos ejemplos de aplicaciones de reconocimiento de patrones serı́an: la clasificación de documentos (por ejemplo: spam/no spam), el reconocimiento de escritura, reconocimiento de caras humanas y muchas más. Los dos últimos ejemplos son representativos del análisis de imágenes, un subconjunto del reconocimiento de patrones que toma imágenes digitales como entradas del sistema. El reconocimiento de patrones es más complejo cuando se usan plantillas para generara variantes. Por ejemplo, en castellano, las frases a menudo siguen el patrón ”sujeto-predicado”, pero se requiere cierto conocimiento de la lengua para detectar 6 CAPÍTULO 1. INTRODUCCIÓN el patrón. El reconocimiento de patrones se estudia en muchos campos, incluyendo psicologı́a, etologı́a, informática y procesamiento digital de señales. 1.2.3. Biometrı́a La biometrı́a es el estudio de métodos automáticos para el reconocimiento único de humanos basados en uno o más rasgos conductuales o fı́sicos intrı́nsecos. El término se deriva de las palabras griegas ”bios”de vida y ”metron”de medida. La biometrı́a informática es la aplicación de técnicas matemáticas y estadı́sticas sobre los rasgos fı́sicos o de conducta de un individuo, para verificar identidades o para identificar individuos. En las tecnologı́as de la información (TI), la autentificación biométrica se refiere a las tecnologı́as para medir y analizar las caracterı́sticas fı́sicas y del comportamiento humanas con propósito de autentificación. Figura 1.4: Autentificación biométrica en la entrada de unas instalaciones de ocio. Las huellas dactilares, las retinas, el iris, los patrones faciales, las venas de la mano o la geometrı́a de la palma de la mano, representan ejemplos de caracterı́sticas fı́sicas (estáticas), mientras que entre los ejemplos de caracterı́sticas del comportamiento se incluye la firma, el paso y el tecleo (dinámicas). La voz se considera una mezcla de caracterı́sticas fı́sicas y del comportamiento, pero todos los rasgos biométricos comparten aspectos fı́sicos y del comportamiento. Un ejemplo del uso de la biometrı́a se muestra en la Figura 1.4, donde una mujer es identificada mediante sus huellas dactilares en unas instalaciones de ocio. 1.2. CONCEPTOS 1.2.4. 7 Histograma de gradientes orientados El algoritmo Histograma de gradientes orientados [7] se usa en ámbitos como la visión por computador y el procesamiento de imágenes con el propósito de detectar objetos en una imagen. La esencia de dicho algoritmo es que la forma de un objeto en una imagen puede ser descrito por medio de la distribución de los gradientes. El objetivo principal de esta técnica es la extracción de caracterı́sticas de una imagen. Las caracterı́sticas son extraı́das teniendo en cuenta los bordes. El proceso de obtener información de los bordes presentes en una imagen, se consigue calculando los gradientes y las orientaciones de los pixels. Este proceso será explicado más extensamente en capı́tulos posteriores. 1.2.5. Algoritmo KNN El algoritmo KNN (K nearest neighbors)[1] es un método de clasificación supervisada que sirve para estimar la probabilidad de que un elemento x pertenezca a la clase C(j) a partir de la información proporcionada por el conjunto de prototipos, donde k determina el número de vecinos que son contemplados para realizar la clasificación. En el reconocimiento de patrones, el algoritmo KNN es usado como método de clasificación de objetos basado en un entrenamiento mediante ejemplos cercanos en el espacio de los elementos. Figura 1.5: Ejemplo del algoritmo Knn. En la Figura 1.5 se muestra un ejemplo sencillo del funcionamiento de este algoritmo. Supongamos que el elemento que se desea clasificar es el cı́rculo verde. Para 8 CAPÍTULO 1. INTRODUCCIÓN k = 3 éste es clasificado con la clase triángulo, ya que de los 3 vecinos más cercanos al cı́rculo verde hay sólo un cuadrado y 2 triángulos. Si k = 5 éste es clasificado con la clase cuadrado, ya que entre los 5 vecinos más cercanos hay 2 triángulos y 3 cuadrados. Las relaciones de vecindad para K = 3 y K = 5 se han destacado en la Figura mediante dos circunferencias concéntricas. 1.2.6. Editado de Wilson Una vez se tenga el clasificador entrenado, con el algoritmo Knn por ejemplo. Cabe la posibilidad de que el conjunto de elementos que se han utilizado para entrenar al clasificador no sea el más conveniente. Es posible que algunos de esos elementos sean algo ambiguos y no sean apropiados para enseñar al clasificador a diferenciar entre un conjunto u otro. Un ejemplo es la Figura 1.6(a), en ella se puede ver como los conjuntos marcados en verde están fuera de lugar respecto a su clase. Si el clasificador los tiene en cuenta obtendrá peores resultados ya que se trata de un caso extremo. Otro ejemplo con más conjuntos es el 1.6(b), se pueden apreciar nueve conjuntos bien definidos y una serie de elementos que nos e ajustan a los elementos de su clase y están dispersos sin clase definida. Estos son los elementos que el editado de Wilson eliminarı́a. Figura 1.6: Ejemplo conjuntos sin editado de Wilson. Por lo tanto se puede resumir que el editado de Wilson [11] elimina del conjunto de entrenamiento todos los elementos que no representen fidelignamente a su clase. 1.3. OBJETIVOS 1.2.7. 9 Local Binary Patterns La técnica Local Binary Patterns [8] se ha empleado en multitud de ocasiones con éxito en problemas de reconocimiento de rostros. Es otro algoritmo para extraer caracterı́sticas de una imagen. Lo que diferencia una técnica de extracción de otra es el método que se sigue para extraer las caracterı́sticas. En este caso, se compara cada pixel con sus vecinos para conseguir detectar un cambio sustancial entre ellos, es decir, un borde. A lo largo de este documento se profundizará más en este método. 1.3. Objetivos El objetivo principal al que se quiere llegar con este proyecto es estudiar el uso de métodos de extracción de caracterı́sticas para la caracterización del género de humanos presentes en imágenes. En particular, los algoritmos Histograma de gradientes orientados [7] y Local Binary Patterns [8]. Para cada uno de estos algoritmos, se desarrollaran sus respectivas implementaciones y se evaluarán sus resultados. Con dichos resultados se valorará la conveniencia de diseñar mejoras para los algoritmos, o en caso contrario de implementar una técnica nueva. Con todos estos resultados se podrá realizar una valoración sobre si los algoritmos estudiados son aptos para el reconocimiento de género. Otro objetivo que se plantea para este proyecto es la elaboración de ideas y pautas que sirvan como guı́a para futuras investigaciones. Gracias a los datos extraı́dos en este proyecto se estará en disposición de redactar conclusiones que ayudarán al desarrollo de trabajos encaminados hacia este problema. 1.4. Consideraciones previas sobre el problema La medida del éxito de este trabajo depende de lo fidedignas que sean las caracterı́sticas extraı́das de las imágenes. Es decir, si en el caso de estudio se desea obtener información sobre el perfil de una persona, este método tendrá mayor éxito si esa información representa dicho perfil y además evita contener información superflua. En la Figura 1.9(a) se muestra una imagen de la que obtenemos un patrón de caracterı́sticas el cual representa inequı́vocamente el perfil de una persona y además, incluye poca información irrelevante para el propósito del proyecto. Por el contrario, en la Figura 1.9(b) se puede observar como la información que se obtiene no muestra el perfil de una forma tan obvia y presenta mucha más información superflua. Para que se entienda mejor este concepto se puede hacer una analogı́a sobre él: Dos profesores de instituto quieren hacer una estimación de los alumnos que aprobarán sus asignaturas al final de curso. El profesor A ha ido anotando (entrenamiento) por cada alumno de cursos anteriores, su estatura, color de pelo, las horas 10 CAPÍTULO 1. INTRODUCCIÓN Figura 1.7: Extracción de caracterı́sticas de una imagen que dedicó al estudio y su calificación (extracción de caracterı́sticas). El profesor B siguió el mismo procedimiento (entrenamiento) pero apuntó solo las horas de estudio y su calificación (extracción de caracterı́sticas). Al final de curso el profesor B consiguió un ı́ndice de aciertos en la estimación de alumnos aprobados más alto que el profesor A. ¿Por qué ha sucedido esto? La respuesta es muy simple, la estatura y el color de pelo no tienen relación alguna con la calificación del alumno. Por lo que el profesor A está teniendo en cuenta información superflua y eso empeora su estimación. Cabe la posibilidad de que ninguno de los algoritmos tratados sea el idóneo para el estudio de la discriminación del género. El problema que se intenta abordar no es sencillo, hay muchas probabilidades de que los algoritmos junto a sus variantes no obtengan un buen resultado. Hay que reflexionar sobre el hecho de que incluso en algunas ocasiones, los propios humanos no son capaces de diferenciar el género de una persona. No se puede ser utópico y pensar que se puede elaborar un proceso que mejore incluso la percepción humana. A esto hay que añadir que las imágenes que conformarán el experimento pueden ser personas de espaldas, personas agachadas, con ropa gruesa, entre multitudes etc. como se aprecia en la Figura 1.8. 1.5. Vista previa del trabajo realizado Como ya se ha explicado en apartados anteriores, el objetivo es la evaluación de algoritmos de reconocimientos de patrones para su uso en el reconocimiento del genero humano. Concretamente se han estudiado dos algoritmos, Histograma de gradientes orientados [7] y Local Binary Patterns [8] en sus diferentes variantes. 1.5. VISTA PREVIA DEL TRABAJO REALIZADO 11 Figura 1.8: Ejemplo de imágenes ambiguas. Figura 1.9: Algunas imágenes utilizadas en el proyecto. La metodologı́a seguida en el desarrollo del proyecto ha sido un proceso cı́clico, representado en la Figura 1.10. En primer lugar, se realiza la tarea de diseño, ya sea de un algoritmo nuevo o de una variación de uno ya implementado. Seguidamente, se implementa lo que se diseñó en la fase anterior. A continuación, se realizan pruebas para determinar la efectividad y se interpretan los resultados. Finalmente, teniendo en cuenta los resultados obtenidos, se plantean junto al tutor nuevas vı́as de mejora encaminadas a aumentar el porcentaje de aciertos del programa. El proceso de reconocimiento se puede separar en dos fases muy diferenciadas. Por una lado la extracción de caracterı́sticas de una imagen y por otro lado, la clasificación de una imagen en función de sus caracterı́sticas. A continuación se pasará a explicar más detalladamente estas tareas. La extracción de caracterı́sticas consiste en obtener ciertos valores de una imagen que puedan describir a la misma. En este caso en concreto, lo que se quiere lograr es que el perfil de la persona que aparece en una imagen quede definido por esos valores. Estadı́sticamente los hombres y las mujeres se pueden diferenciar por ciertas zonas del cuerpo. Por ejemplo, las mujeres suelen tener más caderas que los hombres, los hombres, hombros más anchos que las mujeres etc. (ver Figura1.11). Gracias a estas diferencias, las caracterı́sticas de la imagen de una mujer tendrı́an que ser diferentes a las de un hombre y a su vez similares a las caracterı́sticas de otra mujer y viceversa. Este es el punto clave para el éxito del proyecto. Si se consigue 12 CAPÍTULO 1. INTRODUCCIÓN Figura 1.10: Metodologı́a seguida en el proyecto. un algoritmo que extraiga las caracterı́sticas significativas que ayuden a diferenciar el genero de las personas, se habrá conseguido dar solución al problema. Para este fin es para lo que se utilizan el algoritmos de extracción de caracterı́sticas. Una vez que se tienen las caracterı́sticas de una foto surge el problema de como diferenciar una serie de números de otros para determinar el género. Aquı́ es donde entra en juego el algoritmo Knn mencionado con anterioridad. Este clasificador necesita de una información previa para lograr clasificar un conjunto de datos, el algoritmo necesita aprender que patrón siguen las imágenes de género masculino y que patrón siguen las de género femenino. Una vez el clasificador ha sido entrenado es capaz de inferir si una foto es de mujer o de hombre. En el Diagrama 1.12 se puede ver el proceso que seguirı́a el clasificador para su entrenamiento. Para que posteriormente el clasificador sea capaz de discriminar las imágenes según el genero (ver Figura 1.13). Como resultado de la metodologı́a seguida, se han desarrollado los siguientes algoritmos sujetos a diferentes modificaciones: 1. Implementación de la versión inicial del algoritmo Histograma de gradientes orientados y de algunas modificaciones del mismo. 1.5. VISTA PREVIA DEL TRABAJO REALIZADO 13 Figura 1.11: Diferencias fisiológicas entre hombres y mujeres. Figura 1.12: Esquema del proceso entrenamiento. 2. Aplicar el editado de Wilson al conjunto de imágenes de entrenamiento. 3. Variante de Histograma de gradientes orientados con un enfoque local respecto a las ventanas de extracción. 4. Implementación del algoritmo Local binary patters [8] para la extracción de caracterı́sticas. Más adelante se explicará con más detalles en que consisten estás mejoras y los resultados obtenidos de ellas. Los resultados obtenidos han sido satisfactorios desde el punto de vista de los objetivos marcados. Aún ası́, no ha conseguido ninguna versión del programa realmente efectiva. En un principio, se consiguió mejorar el ı́ndice de resultados gradualmente implementando las mejoras descritas recientemente. Pero cuando se probó la mejora con el enfoque local, la tasa de aciertos descendió considerablemente, idem para la técnica Local binary patters. 14 CAPÍTULO 1. INTRODUCCIÓN Figura 1.13: Esquema del proceso clasificación. Con estos resultados y para poder obtener unas conclusiones válidas, se elaboraron una serie de pruebas con el fin de descartar errores de programación. Y ası́ poder concluir con veracidad, que los métodos usados no son aptos para el reconocimiento del género humano. 1.6. Antecedentes Este proyecto se ha fundamentado en un proyecto previo, Detección de humanos en imágenes [10]. El cual ha consistido en el desarrollo de métodos para la detección automática de humanos en imágenes. A priori es un problema similar, pero con suficientes diferencias como para que la utilización de algoritmos contemplados en ese proyecto, no sean eficaces en éste. A su vez, el proyecto Detección de humanos en imágenes se fundamenta en el algoritmo Histograma de gradientes orientados. En el trabajo nombrado se contemplaron varias versiones respecto al algoritmo original. En una de ellas se mejoró el tiempo de ejecución de la fase de extracción de caracterı́sticas (la más costosa). En la tercera se modificó completamente la fase de extracción cambiando la filosofı́a original. En esta última modificación no se utiliza el histograma de gradientes orientados, se emplea otra medida cualitativa, el número bordes que aparecen en cada una de las filas de la imagen. El proyecto Detección de humanos en imágenes ha tenido una gran influencia para el desarrollo del que nos ocupa. Como base para este trabajo se empleó la segunda versión del trabajo previo pero con algunas modificaciones. En la segunda versión de dicho proyecto se utilizan ventanas de extracción con un ancho menor que el ancho de la imagen (ver Figura 1.14(a)), mientras que en este proyecto se utilizan ventanas con el mismo ancho que el de la imagen a procesar (ver Figura 1.14(b)). 1.7. Organización del documento Este documento se ha dividido en diversas secciones: Introducción: Tiene como objetivo hacer una presentación del proyecto al 1.7. ORGANIZACIÓN DEL DOCUMENTO 15 Figura 1.14: Ventanas de extracción. lector. Se introducen conceptos que en aras a la claridad no se desarrollan en su totalidad y que se incidirán en ellos en capı́tulos posteriores. Planificación: En este capı́tulo se pretende mostrar la planificación seguida en el proyecto. Por un lado la planificación inicial y por otro lado, la planificación real que se ha seguido. Matlab/PRTools: Una vista previa a las funcionalidades utilizadas en Matlab para este proyecto y a la librerı́a PRTools. Descripción del proyecto: Aquı́ se explica con detalle todo el proceso de desarrollo que ha seguido este trabajo. Conclusiones: Por último, en este capı́tulo se explican las conclusiones a las que se han llegado desde distintos puntos de vista. 16 CAPÍTULO 1. INTRODUCCIÓN Capı́tulo 2 Planificación Contenido 2.1. A priori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.1.1. Análisis y planificación . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.1.2. Proceso de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.1.3. Revisión final del proyecto . . . . . . . . . . . . . . . . . . . . . . . . 19 2.2. A posteriori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 20 18 CAPÍTULO 2. PLANIFICACIÓN 2.1. A priori Una vez determinado el proyecto a realizar con el tutor del proyecto, se procedió a hacer una planificación previa del proyecto a desarrollar. Se realizó una planificación temporal de cada tarea a desarrollar y del coste temporal que conllevarı́a. De dicho análisis se extrajo el diagrama de Gantt representado en la Figura 2.1. Según la planificación estimada, el proyecto comenzará el 16 de Octubre del 2008 y finalizará el 9 de Febrero del 2009. A la hora de planificar las tareas temporalmente se han tenido en cuenta los diferentes imprevistos que surgen en todo proyecto, dando la suficiente holgura a tareas crı́ticas. El proyecto contará con un total de 300 horas invertidas durante 80 dı́as laborables, manteniendo la siguiente distribución mensual: Octubre: 4 horas/dı́a Noviembre: 3 horas/dı́a Diciembre: 3.5 horas/dı́a Enero: 4.5 horas/dı́a Febrero: 3 horas/dı́a El proyecto se ha dividido en las siguientes tareas: 1. Proceso de análisis y planificación. a) Determinar el ámbito del proyecto. b) Establecer las herramientas a utilizar. c) Definición de objetivos. d ) Estudio de investigaciones previas. e) Estudio de tareas a realizar. f ) Planificación temporal de tareas. g) Búsqueda e instalación del SW requerido. h) Investigación de las tecnologı́as de desarrollo. 2. Proceso de desarrollo a) Desarrollo cı́clico. 3. Revisión final del proyecto a) Reunión con el profesor. 2.1. A PRIORI 19 b) Proceso de comprobación c) Evaluación global de resultados. d ) Definición de futuras mejoras. e) Conclusiones. f ) Realización de la memoria del proyecto. g) Preparación de la presentación. h) Realización de la presentación del proyecto. 2.1.1. Análisis y planificación En este apartado es donde se define junto al profesor qué alcance tendrá el proyecto, las herramientas a utilizar y qué objetivos se quieren llegar a conseguir. Una importante subtarea de este proceso es la fase de investigación previa. En ella se fundamentarán gran parte de las tareas de diseño e implementación. 2.1.2. Proceso de desarrollo Esta es la fase más importante del proyecto. Es donde se implementará el proyecto propiamente dicho. Como ya se ha descrito anteriormente, el proceso de desarrollo seguirá una metodologı́a cı́clica. A priori no se puede conocer el número de tareas que constituyen esta fase. Las tareas comprendidas para las nuevas implementaciones o modificaciones serán: diseño, implementación, evaluación de resultados y propuestas de mejora. 2.1.3. Revisión final del proyecto La última tarea principal y no por ello la menos importante es la revisión final del proyecto. En primer lugar, se realizará una serie de comprobaciones con el fin de validar las implementaciones realizadas. Seguidamente, una de las subtareas de este proceso es la evaluación global de resultados. En la que se hace un análisis cuidadoso sobre los resultados obtenidos en la fase anterior de desarrollo. Una vez reflexionado sobre los resultados obtenidos se ha planificado una tarea que consiste en buscar nuevas vı́as de desarrollo para trabajos futuros. La subtarea conclusiones tiene como objetivo hacer una valoración global del proyecto. Finalmente, como subtareas ineludibles, se planificaron los procesos de realización de memoria, preparación de la presentación y realización de la presentación. 20 CAPÍTULO 2. PLANIFICACIÓN 2.2. A posteriori Una vez establecida la planificación inicial se elaboró el proyecto. En dicho proceso surgieron inconvenientes que no se contemplaron en la planificación a priori. Uno de los principales contratiempos fue la dificultad en el proceso de implementación, en la práctica se tuvo que dedicar más tiempo a esas tareas de lo estimado. Se pasó de 6 dı́as de media a 8 dı́as por implementación. Otra dificultad encontrada fue el desarrollo de la memoria, se calculó que se tardarı́a en escribirla 13 dı́as, a posteriori fueron 18 dı́as. Teniendo en cuenta todos estos inconvenientes, el proyecto comenzó el 16 de Octubre del 2008 y finalizó el 23 de Febrero del 2009. Con un total de 93 dı́as laborables y 340 horas invertidas con la siguiente distribución mensual. Octubre: 4 horas/dı́a Noviembre: 3 horas/dı́a Diciembre: 3.5 horas/dı́a Enero: 4.5 horas/dı́a Febrero: 3 horas/dı́a En las Figuras 2.2 y 2.3 aparece el diagrama de Gantt real del desarrollo del proyecto. 2.2. A POSTERIORI Figura 2.1: Diagrama de Gantt a priori. 21 22 CAPÍTULO 2. PLANIFICACIÓN Figura 2.2: Diagrama de Gantt a posteriori de las primeras 34 tareas. 2.2. A POSTERIORI Figura 2.3: Diagrama de Gantt a posteriori de las 29 tareas restantes tareas. 23 24 CAPÍTULO 2. PLANIFICACIÓN Capı́tulo 3 Matlab / PRTools Contenido 3.1. Introducción a Matlab . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.2. Conceptos en el procesamiento de imágenes . . . . . . . . . . . . 26 3.3. Rutinas de lectura y escritura de imágenes . . . . . . . . . . . . . 27 3.4. Funciones dedicadas a la conversión de imágenes . . . . . . . . . 29 3.5. Funciones para la extracción de bordes . . . . . . . . . . . . . . . 29 3.6. Librerı́a PRTools para el reconocimiento de patrones . . . . . . . 30 25 26 CAPÍTULO 3. MATLAB / PRTOOLS Este capı́tulo introduce algunos de los conceptos básicos del lenguaje de programación Matlab. El capı́tulo pretende convertirse en un pequeño manual que facilite al lector la comprensión de las técnicas aplicadas, destacando exclusivamente aquellas funcionalidades directamente relacionadas con el proyecto. 3.1. Introducción a Matlab El lenguaje C++, por sus caracterı́sticas compartidas de alto y bajo nivel parece ser el más apropiado para la implementación de algoritmos de visión computacional, pero implementar algoritmos de visión artificial en C++ supondrı́a una gran inversión de tiempo en la fase de implementación y en la corrección de errores previo a la fase de pruebas. La inversión inicial de tiempo puede reducirse si la implementación de prueba es realizada en Matlab, utilizando su librerı́a toolbox para el procesamiento de imágenes, con la seguridad de utilizar algoritmos cientı́ficamente comprobados y sólidos. La librerı́a toolbox para el procesamiento de imágenes contiene un gran número de funciones para trabajar con imágenes binarias, trasformaciones cromáticas, geométricas y morfológicas que, junto con las funciones ya integradas en Matlab, permite realizar todo tipo de análisis y trasformaciones con imágenes. Además se dispone de otro toolbox para el reconocimiento de patrones en Matlab (PRtools) que suministra alrededor de 200 rutinas para el reconocimiento de patrones y otras tareas estadı́sticas. Incluye procedimientos para la generación de datos, la formación de clasificadores, la combinación de clasificadores, las caracterı́sticas de selección, lineales y no lineales, extracción de caracterı́sticas, la densidad de estimación, análisis de agrupamiento, la evaluación y la visualización. PRtools se inició en el grupo de investigación de reconocimiento de patrones de la Universidad Tecnológica de Delft en 1993. En esta sección se comentarán brevemente algunas de las funciones más utilizadas en el procesamiento de imágenes y que han sido de gran utilidad para el desarrollo de este proyecto. 3.2. Conceptos en el procesamiento de imágenes Una imagen a escala de grises en Matlab es representada por medio de una matriz bidimensional de m x n elementos, donde n representa el número de pı́xeles de ancho y m el número de pı́xeles de alto. El elemento v11 corresponde al elemento de la esquina superior izquierda (ver Figura 3.1). Cada elemento de la matriz de la imagen tiene un valor de 0 (negro) a 255 (blanco). Esta posibilidad de almacenamiento supone que trabajar con imágenes en Matlab 3.3. RUTINAS DE LECTURA Y ESCRITURA DE IMÁGENES 27 Figura 3.1: Representación de una imagen a escala de grises en Matlab sea similar a trabajar con cualquier otro tipo de dato matricial, por lo que es posible seleccionar un determinado pı́xel de la imagen mediante el formato tı́pico de acceso a un elemento de una matriz: I(123,56) Por otro lado, una imagen en color RGB es representada por una matriz tridimensional m x n x p, donde m y n tienen el mismo significado que para el caso de las imágenes a escala de grises mientras que p representa el plano, que para RGB puede ser 1 para el rojo, 2 para el verde y 3 para el azul. La ilustración 3.2 muestra algunos detalles sobre estos conceptos. 3.3. Rutinas de lectura y escritura de imágenes La lectura de imágenes contenidas en un archivo desde el entorno Matlab se realiza mediante la función imread, cuya sintaxis es: imread(‘nombre del archivo’) donde nombre del archivo es una cadena de caracteres conteniendo el nombre completo de la imagen con su respectiva extensión. 28 CAPÍTULO 3. MATLAB / PRTOOLS Si se desea almacenar la imagen perteneciente al archivo data.jpg en una variable para su procesamiento en Matlab, se deberı́a escribir la siguiente sentencia en lı́nea de comandos: image=imread(’data.jpg’); La variable image contendrá la representación matricial de la figura leı́da por la función imread(). Para el posterior procesamiento de las imágenes, Matlab necesita de dicha representación matricial. Para obtener el tamaño de la imagen se utiliza la función size(variable): [m, n]=size(image); Donde m y n contendrán los valores de las dimensiones de la imagen. Para almacenar el contenido de una imagen en un archivo se utiliza la función: Imwrite(image,´nombre del archivo’); Donde image representa la variable que contiene a la imagen y nombre del archivo el nombre del archivo con su respectiva extensión. Suponiendo que la variable image2 contiene la imagen que nos interesa grabar en el archivo dato2.jpg tendrı́amos que escribir: imwrite(image2, ’data2.jpg’); Después de realizar un procesamiento con la imagen, es interesante visualizar el resultado obtenido. Para ello se usa la función: imshow(variable); Permite desplegar la imagen en una ventana en el entorno de trabajo de Matlab. 3.4. FUNCIONES DEDICADAS A LA CONVERSIÓN DE IMÁGENES 3.4. 29 Funciones dedicadas a la conversión de imágenes Para cambiar una imagen de formato RGB a escala de grises se utiliza la función rgb2gray(). El formato de dicha función es: imagegray =rgb2gray(imageRGB); Del mismo modo, para pasar la imagen de escala de grises a blanco y negro, podrı́amos utilizar la siguiente sentencia: imNueva = double(imNueva)/256.0; Matlab permite también redimensionar imágenes mediante la función: B = imresize(A, [mrows ncols]); imresize() devuelve una imagen B con el número de filas y de columnas especificadas por [mrows ncols] a partir de la imagen original A. Si no se especifica el número de filas o el número de columnas, imresize calcula automáticamente el parámetro omitido preservando siempre las proporciones de la imagen. 3.5. Funciones para la extracción de bordes En visión por computador es especialmente útil la extracción de bordes de los objetos. La función edge de Matlab permite fácilmente su extracción a partir de una representación en escala de grises. Dicha función, permite encontrar los bordes mediante dos algoritmos diferentes: canny y sobel. El formato de la función es el siguiente: image = edge(imageGray, algoritmo); donde en la variable image se almacena la matriz resultado que representa los bordes extraı́dos, imageGray es la variable que contiene la imagen en escala de grises de la cual se pretenden extraer los bordes y finalmente, algoritmo especifica el tipo de algoritmo que se desee utilizar en el proceso de extracción. En nuestro caso de estudio se ha utilizado siempre el algoritmo canny. En la siguiente ilustración, se muestra la imagen original seguida de la imagen resultado. 30 CAPÍTULO 3. MATLAB / PRTOOLS 3.6. Librerı́a PRTools para el reconocimiento de patrones Disponibilidad, licencias y derechos de autor La librerı́a PRTools se puede descargar desde el sitio Web http://prtools.org/ y su uso está protegido por una licencia. Esta licencia es gratuita para fines no comerciales, académicos y de investigación. Motivación En el reconocimiento de patrones estadı́sticos se estudian técnicas para la generalización de datos y de reglas de decisión que se utilizarán para el reconocimiento de patrones en conjuntos de datos experimentales. Esta área de investigación tiene un fuerte carácter computacional, exigiendo un uso flexible de programas numéricos para el análisis de datos, ası́ como para la evaluación de los procedimientos. Es por ello que se necesita una plataforma de programación que permita una rápida y flexible aplicación. La librerı́a PRTools, debido a su carácter general en comparación con otros entornos de estadı́stica más especializados, ofrece una fácil integración con el preprocesamiento de datos de cualquier naturaleza. Este carácter general que ofrece la librerı́a queda por completo compensado por el gran conjunto de toolboxes disponibles en Matlab. Sin embargo, PRTools también tiene algunas limitaciones. Debido a la fuerte demanda de memoria de Matlab, surgen grandes problemas y dificultades con el aprendizaje de conjuntos que dispongan de decenas de miles de objetos ya que no pueden ser manipulados por computadores de prestaciones moderadas (en el cuarto capı́tulo, se comentarán las principales dificultades que surgieron en la fase experimental, en torno a este problema propio de Matlab). Conceptos esenciales PRTools hace uso de la posibilidad ofrecida por Matlab para definir el concepto de clases y objetos. Estos conceptos de programación no deben confundirse con las clases y objetos, tal como se definen en el reconocimiento de patrones. En PRtools se trabaja con los conceptos de dataset y mapping. Un gran número de operadores (como * o [ ]) y comandos de Matlab han sido sobrecargados y por lo tanto tienen un significado especial cuando se aplican a un dataset y / o a un mapping. La estructura central de datos de PRTools son los datasets. Se componen principalmente de un conjunto de objetos representados por una matriz de vectores 3.6. LIBRERÍA PRTOOLS PARA EL RECONOCIMIENTO DE PATRONES 31 de caracterı́sticas. Se adjunta a esta matriz un conjunto de etiquetas para cada objeto y un conjunto de nombres de función, también llamada función de las etiquetas. Las etiquetas pueden ser números o cadenas de caracteres. Por otra parte, se almacena un conjunto de probabilidades por cada clase. En la mayorı́a de los archivos de ayuda PRTools, un dataset se denota por A. Las estructuras de datos de las “clases”de tipo mapping almacenan datos de transformaciones (“mapping”), clasificadores, funciones de extracción de resultados, definiciones de datos de escala, las proyecciones no lineales, etc. Por lo general son denotados por W. Implementación La forma más fácil de aplicar un mapping W a un dataset A es mediante la operación W*A. El sı́mbolo de multiplicación de matrices * está sobrecargado para este fin. Es similar a la tuberı́a (‘|‘) en Unix. Esta operación puede escribirse también como map . Al igual que en cualquier otra operación en Matlab, las concatenaciones de las operaciones son posibles (por ejemplo, A*W1*W2*W3 ) y se ejecutan de izquierda a derecha. Ejemplo básico Como ejemplo, vamos a ver como entrenar a un clasificador y posteriormente, testear sus resultados. El primer paso consistirı́a en la conversión de los datos obtenidos en las fases de extracción de caracterı́sticas (FV Train Set y FV Test Set) en datasets para que Matlab pueda computarlos: Train = dataset(FV Train Set(:,1:756), FV Train Set(:,757)); Test = dataset(FV Test Set(:,1:756), FV Test Set(:,757)); La expresión FV Train Set(:,1:756) corta para todas las filas, las columnas de la 1 a la 756, es decir, los vectores caracterı́sticos de todas las imágenes, y la expresión FV Train Set(:,757) corta para todas las filas, la última columna, es decir, la que contiene las etiquetas que identifican la clase a la que pertenece cada imagen. Como se puede observar, disponemos de un conjunto de datos llamado “Train“ que se encarga de entrenar a los clasificadores en la fase de entrenamiento o “training“ y un conjunto de datos denominado “Test“ cuya misión consiste en testear los clasificadores entrenados previamente. Para este ejemplo, supondremos que FV Train Set y FV Test Set contienen vectores de 756 caracterı́sticas para cada objeto y que además están etique- 32 CAPÍTULO 3. MATLAB / PRTOOLS tadas en la componente 757 con un entero [0 ó 1] dependiendo si el objeto corresponde a una imagen humana (1) o no humana (0). La siguiente etapa se basa en el entrenamiento de los clasificadores. PRtools proporciona muchos tipos de clasificadores. En este capı́tulo se verán únicamente algunos de ellos. Cada una de las siguientes funciones encargadas de crear clasificadores: ldc, qdc, svc, knnc, parzenc y bpxnc se diferencian en el algoritmo utilizado para el cálculo de discriminantes. W1 W2 W3 W4 W5 W6 = = = = = = ldc(Train); qdc(Train); svc(Train); knnc(Train,1); parzenc(Train); bpxnc(Train,3); La función de clasificación lcd() utiliza un algoritmo lineal, qdc() se basa en cómputos cuadráticos, svc() utiliza una máquina de soporte vectorial como clasificador, basado en polinomios de 2 o orden, knnc() está implementado de acuerdo con el algoritmo del n vecino más cercano, parzenc() se basa en la estimación de Parzen que aplica una serie de ventanas o funciones base (una por cada muestra xi ), suavizadas (Gaussianas) y centradas en dicha muestra. Por último, bpxnc() utiliza una red neuronal con n unidades ocultas. La siguiente instrucción nos permite computar y mostrar por pantalla los errores de clasificación obtenidos por las funciones discriminadoras en la fase de test: disp([testc(Test*W1), testc(Test*W2), testc(Test*W3), testc(Test*W4), testc(Test*W5), testc(Test*W6) ]); Como se puede observar, PRtools ha sobrecargado el operador * para permitir el cómputo necesario entre los datos que se desean testear y la función discriminadora entrenada en la fase anterior. Por último, se podrı́an mostrar gráficamente los resultados obtenidos, para visualizar las decisiones que las funciones discriminadoras y clasificadores han tomado sobre los datos iniciales. La función scatterd(A) muestra la frontera de decisión. scatterd(A); plotc(W1, W2, W3, W4, W5, W6); Obteniendo un resultado similar a la figura 3.4: 3.6. LIBRERÍA PRTOOLS PARA EL RECONOCIMIENTO DE PATRONES 33 Figura 3.2: Representación de una imagen a color RGB en Matlab 34 CAPÍTULO 3. MATLAB / PRTOOLS Figura 3.3: Resultado de la aplicación del algoritmo canny Figura 3.4: Gráfica de los distintos clasificadores. Capı́tulo 4 Descripción del proyecto Contenido 4.1. Analisis y planificación . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.1.1. Determinar el ámbito del proyecto . . . . . . . . . . . . . . . . . . . 37 4.1.2. Definir herramientas a utilizar . . . . . . . . . . . . . . . . . . . . . 37 4.1.3. Definición de objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.1.4. Estudio de investigaciones previas y tecnologı́as de desarrollo . . . . 38 4.1.5. Estudio y planificación temporal de tareas . . . . . . . . . . . . . . . 38 4.1.6. Búsqueda e instalación del SW requerido . . . . . . . . . . . . . . . 39 4.2. Desarrollo versión inicial . . . . . . . . . . . . . . . . . . . . . . . . 40 4.2.1. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.2.2. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.2.3. Ejecución de los test y resultados . . . . . . . . . . . . . . . . . . . . 53 4.3. Desarrollo mejora 1, editado de Wilson . . . . . . . . . . . . . . . 59 4.3.1. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.3.2. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 4.3.3. Ejecución de los test y resultados . . . . . . . . . . . . . . . . . . . . 61 4.4. Desarrollo mejora 2, enfoque local . . . . . . . . . . . . . . . . . . 63 4.4.1. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.4.2. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4.4.3. Ejecución de los test y resultados . . . . . . . . . . . . . . . . . . . . 69 4.5. Desarrollo mejora 3, Local binary patterns . . . . . . . . . . . . . 75 4.5.1. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 35 36 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO 4.5.2. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 4.5.3. Ejecución de los test y resultados . . . . . . . . . . . . . . . . . . . . 78 4.6. Revisión del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . 81 4.6.1. Proceso de comprobación . . . . . . . . . . . . . . . . . . . . . . . . 81 4.6.2. Evaluación global de los resultados . . . . . . . . . . . . . . . . . . . 82 4.6.3. Futuras vı́as de investigación . . . . . . . . . . . . . . . . . . . . . . 83 4.1. ANALISIS Y PLANIFICACIÓN 37 En el presente capı́tulo se va a describir el proyecto explicando detalladamente cada una de las tareas por las que está compuesto. Estas tareas corresponden a las actividades que se muestran en el diagrama de Gantt (ver Figuras 2.2 y 2.3) 4.1. 4.1.1. Analisis y planificación Determinar el ámbito del proyecto Una vez establecido el tema del proyecto hay que orientarlo hacia una dirección en concreto. En este proyecto se estudiará el uso de técnicas de extracción de caracterı́sticas para diferenciar el género de los humanos en imágenes. Estas imágenes pueden ser tomadas desde cualquier ángulo y estando la persona en cualquier posición. El único requisito que se contempla es que la persona esté centrada en la imagen y que efectivamente, haya una persona. 4.1.2. Definir herramientas a utilizar Para la implementación del trabajo se decidió emplear el entorno Matlab. El uso de Matlab se justifica en que es una herramienta muy potente para el procesamiento de matrices y Matlab interpreta las imágenes como matrices. Además, existen librerı́as para clasificación de datos como es la PRTools [12] que ayudan a inferir a qué grupo pertenece la imagen, si pertenece a hombres o a mujeres. Para la planificación se determinó que la herramienta más completa es Microsoft Project. Y para desarrollar la memoria se empleará el lenguaje LATEX con el editor WinEdt. 4.1.3. Definición de objetivos El objetivo principal al que se quiere llegar con este proyecto es estudiar el uso de métodos de extracción de caracterı́sticas para la caracterización del genero de humanos presentes en imágenes. En particular, los algoritmos Histograma de gradientes orientados y Local Binary Patterns [8]. Lo que se pretende es poder discernir el género de un humano presente en una imagen. Como objetivo también se contempla la elaboración de ideas para desarrollar nuevas vı́as de investigación en futuros trabajos. Dada la naturaleza de este problema, es posible que no se llegue a desarrollar un algoritmo lo suficientemente efectivo. Es por ello que, gracias al trabajo desarrollado en este proyecto, se ayude a encaminar proyectos en este campo. 38 4.1.4. CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO Estudio de investigaciones previas y tecnologı́as de desarrollo Con el fin de obtener información respecto al reconocimiento de genero en personas se ha realizado una investigación para hallar una base sólida que fundamente este trabajo. En primer lugar se buscó información referida a temas relacionados con la visión por computador, reconocimiento de patrones, biometrı́a, etc. Por otro, se ha encontrado información referente al uso de técnicas de extracción de caracterı́sticas ([7], [8], [10]). Finalmente se obtuvo mucha información respecto al uso del Matlab [9]) y respecto a la librerı́a PRTools ([12]) 4.1.5. Estudio y planificación temporal de tareas Para el correcto desarrollo del proyecto, se ha elaborado un listado de tareas a realizar ası́ como su coste temporal. En la figura 4.1 se pueden ver las tareas a realizar y el tiempo que llevará su realización. Figura 4.1: Tareas principales del proyecto. 4.1. ANALISIS Y PLANIFICACIÓN 4.1.6. 39 Búsqueda e instalación del SW requerido El software necesario para la elaboración del proyecto es: Matlab 2006, librerı́a PRTools, Microsoft Project y un compiladore/editor de LATEX bajo windows XP. La instalación de Matlab y de Microsoft Project no tiene más dificultad que seguir el asistente de instalación. Una vez instalado el entorno Matlab, hay que incluir la librerı́a PRTools en el código. Para ello se guarda en la carpeta de trabajo del proyecto la carpeta que contiene la librerı́a y se añade esta lı́nea al principio de cada script: addpath(’./prtools/’); Para poder escribir la memoria en LATEX tenemos que instalar un compilador en Windows XP de dicho lenguaje. También serı́a altamente recomendable la instalación de un editor de texto especial para LATEX. La instalación consta de los siguientes pasos, siendo importante el orden: 1. Instalar Acrobat Reader 2. Instalar la última versión de AFPL de Ghostscript y Ghostview. 3. Instalar el compilador Miktex. 4. Instalar el editor WinEdt. 40 4.2. 4.2.1. CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO Desarrollo versión inicial Diseño Como ya se ha descrito en la sección 1.5, el diseño inicial consta de tres partes muy diferenciadas, la extracción de caracterı́sticas de una imagen, el proceso de aprendizaje del clasificador y el proceso de inferencia sobre el clasificador entrenado. Para conseguir entrenar al clasificador es necesario crear una BBDD de imágenes lo suficientemente numerosa para conseguir una muestra estadı́stica válida. A modo de aproximación sencilla a la estructura de esta implementación, se realizará un breve resumen del proceso. En primer lugar, la fase de entrenamiento se obtendrı́an las imágenes de la BBDD y se extraerı́an sus caracterı́sticas para obtener un valor numérico que defina a la imagen. Esas caracterı́sticas se pasarı́an al clasificador junto a la certeza de que ese valor numérico representa a un hombre o una mujer. Con esto se consigue que el clasificador sea capaz de inferir en el futuro si un vector de caracterı́sticas representa a un hombre o a una mujer. Una vez está entrenado el clasificador, el programa pasa a otra fase llamada inferencia. En esta fase es donde a partir de una imagen en la cual no se sabe el género de la persona, el programa es capaz de diferenciar una imagen de hombre o de mujer. Para esto, se obtienen las caracterı́sticas de la foto a estudiar y se pregunta al clasificador cual es el género de la persona presente en la foto. Como el clasificador ya sabe en términos estadı́sticos qué forma tienen los vectores de mujer y de hombre, deberı́a ser capaz de determinar el género. Como se ha podido observar, el proceso de extracción de caracterı́sticas está incluido en la fase de aprendizaje y en la fase de inferencia. Hay que recalcar que este es el proceso más crı́tico del proyecto, de él depende en gran medida el éxito o fracaso del proyecto. Más adelante se realizará una explicación más detallada, pero a grosso modo, es el proceso por el cual se llega a representar las caracterı́sticas de una imagen mediante números, que un ordenador sea capaz de entender e interpretar. Elaboración de la BBDD de imágenes Para la correcta validación de los diferentes algoritmos de extracción de caracterı́sticas se tienen que emplear un amplio número de imágenes. La fuente principal de imágenes ha sido la proporcionada por la Base de Datos de INRIA, que se puede encontrar en http://lear.inrialpes.fr/data. Un ejemplo de las fotos empleadas se muestran en la figura 4.2. Al necesitar una cantidad considerable de imágenes resulta interesante tener una BBDD para administrarlas correctamente. En nuestro caso de estudio bastará con un fichero de texto que contenga la ruta de dichas imágenes seguido de un 0 si la 4.2. DESARROLLO VERSIÓN INICIAL 41 Figura 4.2: Muestra de imágenes de la BBDD imagen pertenece a un hombre o un 1 indicando que es una mujer Listado 4.11. 1 2 3 4 5 6 7 8 9 10 11 12 13 ..\..\Imagenes\TRAIN\Hombre\H1306.ppm 0 ..\..\Imagenes\TRAIN\Hombre\H1307.ppm 0 ..\..\Imagenes\TRAIN\Hombre\H1308.ppm 0 ..\..\Imagenes\TRAIN\Hombre\H1309.ppm 0 ..\..\Imagenes\TRAIN\Hombre\H1310.ppm 0 ..\..\Imagenes\TRAIN\Hombre\H1311.ppm 0 ..\..\Imagenes\TRAIN\Hombre\H1312.ppm 0 ..\..\Imagenes\TRAIN\Mujer\M0002.ppm 1 ..\..\Imagenes\TRAIN\Mujer\M0003.ppm 1 ..\..\Imagenes\TRAIN\Mujer\M0004.ppm 1 ..\..\Imagenes\TRAIN\Mujer\M0009.ppm 1 ..\..\Imagenes\TRAIN\Mujer\M0010.ppm 1 ..\..\Imagenes\TRAIN\Mujer\M0011.ppm 1 Listado 4.1: Fragmento de la BBDD de imágenes Partiendo de un conjunto de 3000 imágenes se han dividido en 2 grupos. Un conjunto de entrenamiento que se usará para el aprendizaje del clasificador y otro conjunto de test que servirá para que estimar el grado de acierto del algoritmo. Las proporciones de estos estas particiones respecto al conjunto global son de 75 % y 25 % respectivamente. Siendo el número de mujeres y hombres equitativo en cada partición. Este proceso se conoce como etiquetado manual. Teniendo todo esto en cuenta, se procedió elaborar una selección de las imágenes y a cumplimentar los ficheros train.txt y test.txt. Ambos ficheros tendrán el formato del Listado 4.11 y servirán para las posteriores fases de desarrollo. 42 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO Esquema de módulos Antes de comenzar con la implementación propiamente dicha, se realizó un diseño en el que se definı́an los módulos por los que tenı́a que estar compuesto el proyecto. Estos esquemas tienen una gran importancia. Por un lado, una buena esquematización ayuda al correcto desarrollo del proyecto, aportando claridad y abstrayendo conceptos detallados de otras fases del mismo. Por otro, facilita la incorporación de las distintas mejoras que se hagan en el futuro. Por motivos funcionales, el diseño teórico planteado en las Figuras 1.12 y 1.13 de la sección 1.5 ha variado ligeramente. Desde un único script en Matlab se entrena al clasificador con las imágenes de entrenamiento (train.txt) y se comprueba la eficacia del programa con las imágenes de test (test.txt). Los módulos implicados en este proceso son los representados en la Figura 4.3. Figura 4.3: Esquema de módulos del proyecto ScriptPR: Este es el script principal del programa. Su función primordial es la de dirigir el proceso primario de la aplicación. En él se ejecutarán las fases de extracción de caracterı́sticas de las imágenes, la fase de entrenamiento y la fase de inferencia. Como resultado, este módulo mostrará la tasa de aciertos del programa. 4.2. DESARROLLO VERSIÓN INICIAL 43 CreateFVFile: Este módulo tiene como finalidad el procesamiento de imágenes para obtener sus respectivos vectores de caracterı́sticas. Recibe como parámetro un fichero similar al del listado 4.11 y una serie de parámetros de configuración. Y devuelve un fichero que contiene el vector de caracterı́sticas de cada una de las imágenes. Preprocess: Este módulo tiene como finalidad la de convertir una imagen en color, a una en escala de grises con valores normalizados entre 0 y 1. WeightVector: Tiene como fin la creación de un vector N cuyos valores representan una campana de Gauss. Con esto se consigue tener un vector de pesos dando más importancia a la zona central. ExtractFeature: Aquı́ es donde se extrae las caracterı́sticas de una imagen. Las caracterı́sticas no son más que una serie de números que definen a una determinada imagen. Este módulo merece una explicación más extensa que se presentará seguidamente. NormalizeIntensity: Dada una porción de imagen, este módulo se encarga de normalizarla para que sea más eficaz el proceso de análisis. IIMean: Obtiene la media de cada una los pixels respecto a sus sus vecinos en una porción de imagen. IIStd: Obtiene la desviación de cada una los pixels respecto a sus sus vecinos en una porción de imagen. EstimateGradOriMag: Este módulo es el encargado de, a partir de un imagen, obtener la matriz de magnitudes y la matriz de orientaciones de la misma. HOG: Calcula el histograma de orientaciones de una imagen. Este es justamente el valor que representa a una imagen segun el algoritmo histograma de gradientes orientados. PostProcessVector: Procesa el vector de caracterı́sticas asociado a una imagen. Básicamente se encarga de acotar los picos del vector y normalizar sus valores. Proceso de extracción de caracterı́sticas Este es el proceso más importante del proyecto, de él depende en gran medida el cumplimiento de los objetivos marcados. Esto se debe a que estamos extrayendo caracterı́sticas de una imagen para que la representen. Pero esas caracterı́sticas tienen que ser las que se precisen para el propósito de este trabajo. No sirve, por 44 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO ejemplo, que las caracterı́sticas extraı́das representen el color de piel de una persona. Lo que se exige es que las caracterı́sticas representen la silueta de una persona, para poder discriminar de forma precisa el género. A continuación, se explicarán los pasos que tiene que seguir el algoritmo para obtener un vector numérico a partir de una imagen. 1. En primer lugar la imagen tiene que pasar por un preproceso para aumentar la eficiencia y eficacia de las fases posteriores. En esta fase lo que se precisa conseguir es transformar una imagen en color, a otra en escalas de grises. Estando los valores de cada pixel comprendidos entre 0 y 1. Representado en Matlab, la transformación que sufrirı́an los pixels de la imagen se muestra en la Figura 4.4. En la figura 4.5 se da un ejemplo de cual serı́a el aspecto que tendrı́a una fotografı́a después del preproceso. Figura 4.4: Conversión de una imagen a valores comprendidos entre 0 y 1. 2. Según el algoritmo histograma de gradientes orientados, el siguiente paso es dividir la imagen en fragmentos que a partir de este momento llamaremos ventanas. Para cada ventana se tendrá que calcular su vector de caracterı́sticas. El vector de caracterı́sticas final, será una concatenación de los vectores de las ventanas que componen una imagen (ver figura 4.6). 3. Para cada una de las ventanas obtenidas se normalizarı́a su intensidad con el fin de que su media sea 0 y su varianza 1. Para acelerar el proceso de normalización se ha optado por usar la imagen integral. La imagen integral en el punto (c, r) (c por column, r por row) contiene la suma del valor de los pixels arriba y a la izquierda de dicho punto, inclusive, es decir: ii(c, r) = X img(c0 , r0 ) (4.1) c0 ≤c,r0 ≤r Donde img(c,r) es la imagen origen e ii(c,r) es la imagen integral resultado. Usando la imagen integral se puede calcular cualquier suma de los valores de 4.2. DESARROLLO VERSIÓN INICIAL 45 Figura 4.5: Preproceso de una imagen. una zona de la imagen con únicamente cuatro búsquedas en la matriz que contiene los valores de la imagen integral, tal como se muestra en la figura 4.7 Para normalizar cada ventana de extracción, en primer lugar se calculará la imagen integral y la imagen integral al cuadrado, para posteriormente normalizar cada ventana de extracción mediante la siguiente ecuación: im(c, r) = img(c, r) − µ σ (4.2) Para calcular la media y la varianza de cada ventana de extracción se usará tanto la imagen integral ii como la imagen integral al cuadrado ii2 tal como indican las siguientes fórmulas: S1 = ii(cf , rf ) + ii(c0 − 1, r0 − 1) − ii(cf , r0 − 1) − ii(c0 − 1, rf ) S2 = ii2 (cf , rf ) + ii2 (c0 , r0 ) − ii2 (cf , r0 − 1) − ii2 (c0 − 1, rf ) S1 µ= N s S2 σ= − µ2 N En la figura 4.8 se puede ver un ejemplo visual de este proceso. (4.3) (4.4) (4.5) (4.6) 46 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO Figura 4.6: Ejemplo de obtención del vector de caracterı́sticas. 4. Una vez normalizada la imagen, el siguiente paso es calcular la magnitud y la orientación del gradiente de cada pixel. El gradiente denota una dirección en el espacio según el cual se aprecia una variación de una determinada propiedad. En nuestro caso, se quiere localizar las variaciones o contraste de color e intensidad en la imagen. En la figura 4.9 se aprecian las variaciones en la dirección del gradiente en función del contraste entre los colores blanco y negro. El cálculo del gradiente se consigue filtrando la imagen mediante las siguientes dos máscaras unidimensionales: la horizontal [-1, 0, 1] y la vertical [-1, 0, 1]. En la figura 4.10 se muestra un ejemplo del cálculo del gradiente. En la izquierda se encuentra la imagen original, en medio, se muestran las direcciones que toma cada gradiente, y en la derecha se representa la imagen original de acuerdo con la norma del gradiente. 5. En la posterior fase del método de extracción de caracterı́sticas es necesario dividir el gradiente en dos componentes, la magnitud y la orientación. El resultado esperado serı́a entonces dos matrices, una que represente las magnitudes del gradiente en cada pixel de la imagen original y otra matriz que contenga las orientaciones del gradiente en cada pixel. Partiendo de la matriz de orientaciones y de la matriz de magnitudes asociadas a la ventana de extracción se tiene que crear un histograma de orientaciones. Este histograma se construye con un vector de talla N, siendo N el número de orientaciones contempladas en nuestro caso. Para cada uno de los pixel de la 4.2. DESARROLLO VERSIÓN INICIAL 47 Figura 4.7: Cálculo del valor de la imagen integral. ventana de extracción, se obtiene la magnitud y se acumula en la posición del vector que viene determinada por la orientación del pixel. Antes de acumular la magnitud del pixel se le aplica un peso. El peso que se aplica a un posición x de la imagen viene determinado por una función gaussiana. El valor acumulado en cada posición del vector de caracterı́sticas es la magnitud del gradiente multiplicado por el peso asociado al ı́ndice x de la imagen (ver Figura 4.11). De este modo se consigue dar más relevancia a la parte central de la imagen, que es donde se encuentra la persona. Suponiendo que se consideran 9 orientaciones y que se han utilizado 10 ventanas de extracción a la imagen, el vector de caracterı́sticas final tendrı́a una dimension de 9x10 = 90. 6. Por último, se aplica un pos-proceso al vector de caracterı́sticas. Primero se normalizan sus valores para posteriormente umbralizar los picos y volver a normalizar el vector resultante. Partiendo de esta explicación, se pueden extraer las siguientes variables que condicionan el comportamiento de este proceso: Alto de la ventana de extracción. Solapamiento entre ventanas. Sigma para el vector de pesos. Número de orientaciones contempladas. Umbral para el pos-proceso del vector de caracterı́sticas. Estos parámetros son los que habrá que variar para conseguir un resultado óptimo en la aplicación. Como se ha dicho en múltiples ocasiones, cuanto 48 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO Figura 4.8: Normalización de una imagen. más representativo sea el vector de caracterı́sticas respecto al género de las personas, mejores resultados se obtendrán. Proceso de aprendizaje e inferencia del clasificador En esta fase, el primer paso consiste en añadir al clasificador los vectores de caracterı́sticas obtenidos de las imágenes de entrenamiento, junto con información que identifica a cada vector con la clase a la que pertenece, para que el clasificador reconozca que tipo de caracterı́sticas son comunes en las imágenes de hombres y cuales a las de mujeres. Una vez entrenado el clasificador, para cada vector caracterı́stico extraı́do de las imágenes de test, se realiza una búsqueda de los K vectores de entrenamiento más cercanos. En este proceso, se obtiene tanto la lista de los K vecinos más cercanos, como las distancias a los mismos. Finalmente, a la imagen que se está evaluando se le asigna la clase a la que pertenecen la mayorı́a de los K vectores caracterı́sticos más cercanos. Vista general del proceso A modo de vista general sobre los procesos que intervienen en el proyecto, se ha elaborado el esquema de la figura 4.12. En él se detallan cada uno de los procesos que se llevan a cabo y en que fase están comprendidos. 4.2. DESARROLLO VERSIÓN INICIAL 49 Figura 4.9: Variaciones del gradiente. 4.2.2. Implementación Después de haber hecho un exhaustivo estudio en el diseño se encamina la tarea de implementación del proyecto. En esta sección se describe la implementación de la aplicación en su versión inicial. De cada uno de los módulos presentes en la figura 4.3 se procederá a describir su funcionamiento mediante pseudocódigo y una explicación detallada del algoritmo. ScriptPR.m Su función primordial es la de dirigir el proceso primario de la aplicación. En el se ejecutarán las fases de extracción de caracterı́sticas de las imágenes, la fase de entrenamiento y la fase de inferencia. Como resultado, este módulo mostrará la tasa de aciertos del programa. 1 2 3 4 RG_CreateFVFile (input_test, output_test, tamVentanaX, desplazamiento, sigma, nbins, locbin, TH) lenFV := RG_CreateFVFile(input_train, output_train, tamVentanaX, desplazamiento, sigma, nbins, locbin, TH) 5 6 7 FV_Train_Set Train := Lee fichero output_train := Crea conjunto de datos de FV_Train_Set FV_Test_Set Test := Lee fichero output_test := Crea conjunto de datos de FV_Test_Set W1 := Crea el clasificador Knn a partir de Train labels_test := Etiquetas de Test 8 9 10 11 12 13 14 50 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO Figura 4.10: Cálculo del gradiente. Figura 4.11: Aplicación de un vector de pesos a los pixels de una determinada fila en al imagen. 15 16 17 labels_res fallos Escribe := Resultados de W1 con el conjunto Test := Comparar resultados de la inferencia ((n_imagenes_test-fallos)/n_imagenes_test)*100 Listado 4.2: ScriptPR En primer lugar se crean los ficheros que contienen los vectores de caracterı́sticas para cada imagen llamando a la función RG CreateFVFile. Una vez obtenidos dichos ficheros, se crean dos estructuras de datos, una para test y otra para train. A continuación, se entrena al clasificador llamado W1 por medio de la función knnc pasándole como parámetro el conjunto de train (lı́nea 12 del Listado 4.2). Finalmente se procede a evaluar el conjunto de test y se obtienen los resultados. 4.2. DESARROLLO VERSIÓN INICIAL 51 Figura 4.12: Proceso detallado del proyecto. CreateFVFile.m Este módulo tiene como finalidad el procesamiento de imágenes para obtener sus respectivos vectores de caracterı́sticas. Recibe como parámetro un fichero similar al del listado 4.11 y una serie de parámetros de configuración. Devuelve un fichero que contiene el vector de caracterı́sticas de cada una de las imágenes. 1 2 3 4 Procedimiento RG_CreateFVFile(input, output, tamVentanaX, desplazamiento, sigma, nbins, locbin, TH) imList := Extrae imagenes del fichero input etLis := Extrae etiquetas del fichero input 5 6 7 8 9 10 11 12 im im NR, NC VectorGaus FV := Carga la imagen imList(1) := RG_Preprocess(im) := Obtener tama~ no de im := RG_WeightVector(NC, sigma) := RG_ExtractFeatures(im, tamVentanaX, desplazamiento, VectorGaus, nbins, locbin, TH) Escribir en el fichero output FV concatenado con etList(1) 13 14 15 16 17 18 19 20 Para i:=2 im im FV Hasta longitud de imList Hacer := carga la imagen imList(i) := RG_Preprocess(im) := RG_ExtractFeatures(im, tamVentanaX, desplazamiento, VectorGaus, nbins, locbin, TH) Escribir en el fichero output FV concatenado con etList(i) fin Para 52 21 22 23 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO lenFV := longitud de FV Devolver lenFV fin Procedimiento Listado 4.3: CreateFVFile En primer lugar se crea un vector de pesos con de talla NC llamando a la función RG WeightVector. Seguidamente se recorre el fichero de imágenes pasado como parámetro. A cada una de las imágenes se le pasa por un preproceso ya explicado con anterioridad. Posteriormente se llama a la función RG ExtractFeatures pasándole como parámetros la imagen preprocesada y las variables de configuración del algoritmo. RG ExtractFeatures devuelve el vector de caracterı́sticas correspondiente a la imagen contenida en la variable im. Este vector se escribe en el fichero de salida junto a una etiqueta para indicar si el vector corresponde a un hombre o a una mujer. ExtractFeatures.m Se podrı́a considerar el módulo más importante del proyecto. Tiene como finalidad la extracción del vector de caracterı́sticas a partir de una imagen y de unos parámetros. Recibe como parámetros de entrada: Una imagen. El tamaño en el eje x de la ventana de extracción a utilizar. El desplazamiento que tendrá la ventana de extracción sobre la imagen. El vector de pesos. El número de orientaciones El umbral para normalizar el vector posteriormente. 1 2 3 4 Procedimiento RG_ExtractFeatures(im, tamVentanaX, desplazamiento, VectorGaus, nbins, locbin, TH) ii, ii2 := RG_IICreate(im) NR, NC := tama~ no de im 5 6 7 8 9 10 11 Para i := 1 Hasta desplazamiento incremento NR Hacer Si i+tamVentanaX-1 <= NR Entonces imVentanaNorm := RG_NormalizeIntensity (im, ii, ii2, i, 1, tamVentanaX, NC) [ori, mag] := RG_EstimateGradOriMag(imVentanaNorm) h := RG_HOG(ori, mag, VectorGaus, nbins, locbin) 4.2. DESARROLLO VERSIÓN INICIAL 12 13 14 15 16 53 FV := FV Concatenado con h Fin Si Fin Para Devolver RG_PostProcessVector(FV, TH); Fin Procedimiento Listado 4.4: ExtractFeatures En primer lugar, se crean dos matrices utilizando la función RG IICreate con el propósito de crear la imagen integral y la imagen integral al cuadrado para normalizar la intensidad de la imagen. A continuación se recorre la imagen empleando la ventana de extracción, cuyas dimensiones están definidas con el parámetro tamVentanaX. En cada iteración del bucle se añade un desplazamiento a la ventana en el eje x. Conceptualmente la imagen se recorre como se muestra en la figura 4.6, cada ventana corresponde a una iteración del bucle. Para cada una de las ventanas se normaliza su intensidad llamando a la función RG NormalizeIntensity. Una vez obtenida la ventana normalizada se calculan las matrices de orientaciones y de magnitudes. Sendas matrices se pasan como parámetro de entrada a la función RG HOG. Dicha función devuelve un vector de talla nbins (número de orientaciones). Cada elemento de ese vector representa la suma de las magnitudes de los pixels que tenı́an esa orientación. Seguidamente se van concatenando los vectores obtenidos para cada ventana y se obtiene el vector de caracterı́sticas de talla no de ventanas x no de orientaciones que representa a la imagen. Por último se pasa el vector de caracterı́sticas por la función RG PostProcessVector. Esta función consigue normalizar el vector y eliminar picos que puedan distorsionar los resultados. Para fijar el umbral de los picos se defina la variable TH. 4.2.3. Ejecución de los test y resultados Ejecución de los test Un hecho obvio en estas alturas del documento, es el número significativo de variables de este proyecto y que influyen directamente en el éxito del mismo. Como no se conoce a priori que valores de las variables son adecuados, se ha tenido que implementar un script de test para poder optimizar estos parámetros de una manera cómoda. Las variables a optimizar son: Sigma tamVentanaX Desplazamiento 54 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO nbins Inicialmente estas variables tienen valores arbitrarios. En primer lugar se calcula el porcentaje de aciertos para la variable sigma asignándole diferentes valores. Seguidamente se efectúa el mismo proceso para la variable tamVentanaX, pero con el valor de sigma óptimo. A continuación, con sigma y tamVentanaX optimizados, se realiza el mismo procedimiento para la variable desplazamiento. Finalmente se calcula el valor del parámetro nbins con sigma, tamVentanaX y desplazamiento fijados. A priori no se puede saber si el pos-proceso del vector de caracterı́sticas es realmente efectivo. Por ello se deberá comprobar empı́ricamente. Se deberán realizar tres ejecuciones del script de test. Uno sin el pos-proceso del vector de caracterı́sticas, otro normalizando el vector y por último, un test incluyendo la normalización y eliminando los picos presentes Análisis de los resultados A continuación, se mostrarán los resultados obtenidos para cada uno de los experimentos realizados. El primero consiste en emplear la versión sin pos-proceso del vector de caracterı́sticas. El segundo experimento contará con con un pos-proceso del vector, pero sólo se implementará la fase de normalización. Y por último, el tercer experimento empleará la versión del algoritmo que incluye normalización y eliminación de picos en el vector de caracterı́sticas. 1. En la gráfica 4.13 se muestran los resultados obtenidos por el script de test sin pos-proceso del vector de caracterı́sticas. En la gráfica correspondiente a la variable sigma se puede observar que el valor que obtiene mejores resultados es el 7, coloreado en verde. En la gráfica de la variable tamVentanaX se muestra una mejora significativa para el valor 24, consiguiendo un 57 % de acierto. Con los valores de las variables sigma y tamVentanaX fijados se puede apreciar en la gráfica de la variable desplazamiento como se afina aún más el porcentaje de aciertos. De entre todos los valores considerados en el test el que tiene mejor resultado es el desplazamiento 4 con un 57 % de aciertos. Finalmente, de la última gráfica se puede concluir que utilizar 9 orientaciones obtiene mejores resultados que el resto. De estos resultados se puede concluir la mejor configuración de las variables de el problema que nos ocupa es y que obtiene un 57 % de aciertos es: Sigma = 7 tamVentanaX = 24 Desplazamiento = 4 4.2. DESARROLLO VERSIÓN INICIAL 55 Figura 4.13: Resultados de la versión inicial sin pos-proceso del vector. Número de orientaciones = 9 2. La gráfica 4.14 representa los resultados obtenidos por el script de test con la normalización del vector. Si se observan detenidamente, se puede apreciar una clara mejora respecto a la versión sin normalización obteniendo un 59 % de aciertos con la siguiente configuración de variables: Sigma = 3 tamVentanaX = 8 Desplazamiento = 4 Número de orientaciones = 9 3. Por último, en la gráfica 4.14 se muestran los resultados del programa con normalización y eliminación y picos. Se puede apreciar una ligera mejora respecto a la versión que solo implementa la normalización del vector. Con esta 56 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO Figura 4.14: Resultados de la versión inicial con normalización del vector. implementación se consigue una tasa de aciertos del 60 % con la siguiente configuración: Sigma = 3.5 tamVentanaX = 22 Desplazamiento = 2 Número de orientaciones = 10 Propuesta de mejora En vista de los resultados obtenidos se pueden plantear diferentes vias de mejora. Una de ellas es reflexionar sobre si el conjunto de imágenes de entrenamiento es el 4.2. DESARROLLO VERSIÓN INICIAL 57 Figura 4.15: Resultados de la versión inicial con normalización y umbralización del vector. óptimo para representar una muestra estadı́stica. En este sentido se han planteado varios propuestas de mejora. Una de ellas serı́a la eliminación de las imágenes ambiguas del conjunto de test y entrenamiento. Por imágenes ambiguas se entiende fotos de niños, personas de espaldas, fotos con más de una persona... En resumen, cualquier foto en la que una persona tuviese serias dudas para dictaminar su género. Otra mejora en este sentido serı́a aplicar al conjunto de entrenamiento el editado de Wilson. Actualmente el conjunto de imágenes ha sido seleccionado manualmente (etiquetado manual), con el editado de Wilson serı́a el propio algoritmo el que decidirá que imágenes forman parte del conjunto de entrenamiento. Como ya se introdujo en la sección 1.2.6 este algoritmo elimina los elementos que no son afines a una determinada clase para eliminar interferencias y que la clase sea lo más homogénea posible. En el caso que nos ocupa, la clase serı́a en conjunto 58 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO de imágenes de hombres por un lado y otra clase para las imágenes de mujeres y se eliminarı́an de ellas las imágenes que no se ajustan al grupo. 4.3. DESARROLLO MEJORA 1, EDITADO DE WILSON 4.3. 4.3.1. 59 Desarrollo mejora 1, editado de Wilson Diseño El editado se Wilson se fundamenta en eliminar los elementos pertenecientes a un conjunto que no sigan un patrón claro respecto al conjunto. Eliminar los elementos extremos de un conjunto supone que quede determinado más claramente si un elemento pertenece o no a un conjunto. En la figura 4.16 se puede observar este proceso. Inicialmente se tienen una serie de elementos cada uno perteneciente a un conjunto. Algunos de esos elementos (marcados en rojo) están dispersos y es complicado determinar su pertenencia a un determinado conjunto. El algoritmo de editado de Wilson se encarga de eliminar esos elementos y ası́ tener conjuntos completamente determinados y minimizando las ambigüedades. Con la aplicación de este algoritmo sobre el conjunto de imágenes de entrenamiento del proyecto se esperan tener mejores resultados. Figura 4.16: Resultado del editado de Wilson. A la hora de implementarlo la aproximación más obvia serı́a la que sigue. Por cada imagen del conjunto de entrenamiento, se extrae dicha imagen, se elimina esa imagen del conjunto y se compara con el nuevo conjunto creado. Si el proceso de inferencia es acertado querrá decir que esa imagen es aceptada por el algoritmo de Wilson, por lo que ese elemento debe estar presente en el conjunto de imágenes de entrenamiento editadas. En la imagen 4.17 se puede apreciar gráficamente este proceso. Además de aplicar el editado de Wilson al conjunto de entrenamiento. También se considera conveniente una revisión en este conjunto de fotos ambiguas. Por lo 60 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO Figura 4.17: Selección del editado de Wilson. que se tendrán que eliminar todas las imágenes que contengan niños, personas de espalda e imágenes con multitud de personas. 4.3.2. Implementación La implementación de esta mejora no implica ninguna modificación en los módulos de la versión inicial del proyecto. Lo único que difiere es que el conjunto de imágenes de entrenamiento será diferente. Para modificar este conjunto se ha implementado un script para procesarlo según el algoritmo de Wilson. Siguiendo las indicaciones hechas en la fase de diseño, el proceso en pseudo código seria el siguiente: 1 2 3 4 5 imList etList FVList := Lista de paths de las imagenes de entrenamiento := Lista de etiquedas de las imagenes de entrenamiento := Lista de vectores de caracteristicas de las imagenes de entrenamiento ConjEditado := Vacio 6 7 8 9 10 11 Para i:=1 Hasta longitud de imList Hacer imPath := imListAux(i) imFV := FVListAux(i) etiqueta := etListAux(i) imList, etList, FVList := estraer elemento i del los conjuntos 12 13 14 W1 fallos := Entrenar al clasificador con FVList y etList := resultado inferencia de W1 con la imagen i 15 16 Si fallos = 0 Entonces 4.3. DESARROLLO MEJORA 1, EDITADO DE WILSON 17 18 19 61 Incluir imagen i en ConjEditado Fin Si Fin Para Listado 4.5: ScriptEditado 4.3.3. Ejecución de los test y resultados Ejecución de los test Como la implementación de esta mejora no implica ningún cambio respecto al código del proyecto, se empleará el mismo script usando en la sección 4.2.3. Se tendrá que obtener los nuevos valores de los parámetros que optimizan el resultado. Análisis de los resultados En la gráfica 4.18 se muestran los resultados obtenidos por el script de test usando el conjunto de entrenamiento editado. En la gráfica correspondiente a la variable sigma se puede observar que el valor que obtiene mejores resultados es 3.5, coloreado en verde. En la gráfica de la variable tamVentanaX se muestra una mejora significativa para el valor 22, consiguiendo un 61 % de acierto. Con los valores de las variables sigma y tamVentanaX fijados se puede apreciar en la gráfica de la variable desplazamiento como se afina aún más el porcentaje de aciertos. De entre todos los valores considerados en el test el que tiene mejor resultado es el desplazamiento 2 con un 63 % de aciertos. Finalmente, de la última gráfica se puede concluir que utilizar 9 orientaciones obtiene mejores resultados que el resto. De estos resultados se puede concluir la mejor configuración de las variables de el problema que nos ocupa es y que obtiene un 63 % de aciertos es: Sigma = 3.5 tamVentanaX = 22 Desplazamiento = 2 Número de orientaciones = 9 En vista de los resultados obtenidos se puede afirmar que el editado de Wilson ha proporcionado una mejora significativa al resultado final. Se ha incrementado el porcentaje de aciertos en un 3 %. Lo que confirman las hipótesis iniciales respecto al algoritmo de editado de Wilson. 62 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO Figura 4.18: Resultados con el conjunto de entrenamiento editado. Propuesta de mejora Haciendo una reflexión sobre las debilidades de este algoritmo, se planteaba la siguiente pregunta: ¿Qué partes del cuerpo determinan mejor el género de una persona?. En base a esta cuestión, surgió la idea de optar por un enfoque diferente al algoritmo. Actualmente se procesan las imágenes dando la misma importancia a todas las zonas de la imagen. Es probable que si el algoritmo se centrase solo en las zonas más significativas de la imagen en lo que a género se refiere, se obtengan mejores resultados. Para llevar esta idea a cabo, la primera tarea consiste en determinar cuales son esas zonas que producen una mayor tasa de aciertos. Una vez conocidas, solo se tendrı́an en cuenta esas zonas. Por lo que el algoritmo, en vez de centrarse en toda la imagen (enfoque global) solo tendrı́a en cuenta las zonas más significativas (enfoque local). 4.4. DESARROLLO MEJORA 2, ENFOQUE LOCAL 4.4. 4.4.1. 63 Desarrollo mejora 2, enfoque local Diseño Hasta ahora, el algoritmo recorrı́a la imagen por medio de ventanas de extracción y concatenaba los vectores de caracterı́sticas de cada ventana. El vector resultante era el que se empleaba para entrenar al clasificador. Es decir, se entrenaba al clasificador con la imagen al completo (global). Para dar un enfoque local al proceso se deberı́an procesar las ventanas por separado. Una aproximación a este problema serı́a usar i clasificadores, uno por cada ventana de extracción. Cada clasificador corresponde a una zona de la imagen. El proceso de inferencia de una imagen seria una serie de consultas sobre cada una de sus ventanas. Es decir, el clasificador i harı́a la inferencia con la ventana i de la imagen. Con este proceso se obtendrı́an i resultados, uno por cada ventana de extracción. De esos resultados, se seleccionarı́an las ventanas con mayor ı́ndice de aciertos. Posteriormente se usarı́a el algoritmo descrito en la sección 4.3, pero teniendo sólo en cuenta las ventanas con más ı́ndices de aciertos, no todas las ventanas de la imagen. En resumen, esta mejora implica dos fases. La primera fase consiste en obtener las ventanas con mayor ı́ndice de aciertos. Y la segunda fase consiste en ejecutar el algoritmo global descrito en las secciones anteriores, pero teniendo en cuenta solo las ventanas obtenidas en la primera fase y desechando el resto. Seguidamente se explicará más detalladamente estas fases: Fase de Obtención de ventanas óptimas Existen varias opciones alcanzar los objetivos de esta fase. Una es modificar el algoritmo de extracción de caracterı́sticas visto en la sección 4.3 y la otra, más sencilla, es modificar el script principal del programa. Dados los pocos cambios que habrı́a que realizar en el código, se decidió aplicar la segunda opción. En versiones anteriores, la estructura de datos que se usaba para entrenar al clasificador era la siguiente: 1 2 3 4 5 6 415616517865165161651.....16516516 177932657816983322486.....52245583 412553698578596523369.....55855558 ... ... 478958742665899556698.....55558854 0 1 1 0 Listado 4.6: Fragmento de la BBDD de imágenes 64 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO Cada fila i de la estructura correspondı́a al vector de caracterı́sticas seguido de la etiqueta que indicaba si dicho vector representa a un hombre (0) o a una mujer(1) de la imagen i. El vector i se forma concatenando los vectores correspondientes a cada una de las ventanas de una imagen i. Para facilitar el proceso en tareas posteriores, es necesario modificar dicha estructura. Lo que se precisa es obtener una lista de vectores de caracterı́sticas de cada una de las ventanas de todas las imágenes, es decir, no concatenar los vectores. Si una imagen tiene N ventanas y tenemos M imágenes, el número total de filas serı́a de NxM. Con esta estructura se consigue tener localizadas las ventanas correspondientes a la posición i de todas las imágenes. Es decir, la posición de la ventana 2 en cada una de las imágenes serı́a: 2, N+2, (N*2)+2, (N*3)+2... (N*(M-1))+2. En la Figura 4.19 se puede ver más claramente. Figura 4.19: Transformación de la estructura de vectores. Con la estructura modificada, el siguiente paso consiste en entrenar las ventanas de las imágenes por separado. Para ello se requieren N clasificadores, uno por cada posición de una ventana en cada imagen. De este modo, el clasificador i procesará sólo las imágenes que estén en la posición i. En versiones anteriores, el proceso de inferencia se realizaba como muestra la Figura 4.20, pero con esta modificación, el proceso quedarı́a como se muestra en la Figura 4.21. Como resultado de aplicar este algoritmo, obtendrı́amos un vector de porcentajes de talla N, siendo N el número de ventanas presentes en una imagen. Cada porcentaje representa lo significativa que esa ventana respecto al género. Y esta es 4.4. DESARROLLO MEJORA 2, ENFOQUE LOCAL 65 Figura 4.20: Procesado de los vectores en versiones anteriores. la información que necesita la siguiente fase. Fase de ejecución del algoritmo sólo con ventanas óptimas En versiones anteriores, la formación de un vector de una determinada imagen se realizaba uniendo todos los vectores de sus ventanas. Ahora se deben formar los vectores de igual modo, pero teniendo solo en cuenta las ventanas seleccionadas en la fase anterior. Ası́ se consigue eliminar el ruido que pueden provocar ventanas irrelevantes en en resultado final. Los vectores tendrán un talla de L*K, siendo L el número de orientaciones usadas y K el número de ventanas óptimas contempladas. 4.4.2. Implementación Esta mejora sólo afecta al script principal del programa. Como ya se ha explicado, esta mejora implica dos fases bien diferenciadas. Fase de Obtención de ventanas óptimas El siguiente listado muestra como se implementó la fase de obtención de ventanas óptimas. En primer lugar, y como en las versiones anteriores, se tienen que crear los ficheros de vectores de caracterı́sticas output train y output test mediante la llamada a la función RG CreateFVFile. Uno vez obtenidos estos ficheros, se tienen que transformar con el método descrito en la fase de diseño. Con la modificación hecha, se ejecuta el proceso de inferencia. Se crea un vector de resultados de talla número de ventanas, cada posición i representa el resultado dado por el clasificador i. El último paso es hacer una iteración sobre el número de ventanas. Por cada posición i del conjunto de ventanas, se recorren las ventanas con la posición i de todas las imágenes y se entrena al clasificador i, para posteriormente guardar el resultado en la posición i del vector Resultados. Como resultado se muestra por pantalla el vector resultados y se observa cuales son las ventanas con mayor ı́ndice de aciertos. Esas ventanas serán las que se utilicen 66 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO Figura 4.21: Procesado de los vectores actualmente. en la fase posterior. 1 2 3 4 RG_CreateFVFile (input_test, output_test, tamVentanaX, desplazamiento, sigma, nbins, locbin, TH) lenFV := RG_CreateFVFile(input_train, output_train, tamVentanaX, desplazamiento, sigma, nbins, locbin, TH) 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #Modificar las estructuras de datos de train n_ventanas := lenFV/nbins FV_Train_Set := Lee fichero output_train n_fotos_train := Longitud de FV_Train_Set FV_Train_Set2 := Nueva matriz de talla (n_fotos_train*n_ventanas) X n_bins+1 Para i := 1 Hasta n_fotos_train Hacer z := (i * n_ventanas) - n_ventanas + 1 Para j := nbins Incremento nbins Hasta lenFV Hacer FV_Train_Set2(z, 1:nbins) := FV_Train_Set(i, j-(nbins-1):j) FV_Train_Set2(z, nbins+1) := FV_Train_Set(i, lenFV+1); Fin Para Fin Para 19 20 21 #Modificar las estructuras de datos de test FV_Test_Set := Lee fichero output_test 4.4. DESARROLLO MEJORA 2, ENFOQUE LOCAL 22 23 24 25 26 27 28 29 30 31 67 n_fotos_test FV_Test_Set2 := Longitud de FV_Test_Set := Nueva matriz de talla (n_fotos_test*n_ventanas) X n_bins+1 Para i := 1 Hasta n_fotos_test Hacer z := (i * n_ventanas) - n_ventanas + 1 Para j := nbins Incremento nbins Hasta lenFV Hacer FV_Test_Set2(z, 1:nbins) := FV_Test_Set(i, j-(nbins-1):j) FV_Test_Set2(z, nbins+1) := FV_Test_Set(i, lenFV+1); Fin Para Fin Para 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 #Realizar las inferencias Resultados := Nuevo vector de talla n_ventanas Para i := 1 Hasta n_ventanas Hacer Train := [] Test := [] Para j := i Incr n_ventanas Hasta (n_fotos_train-1*n_ventanas)+i Hacer Train := Train + Ventana en la posicion i de la imagen j-i Fin Para Para j := i Incr n_ventanas Hasta (n_fotos_test-1*n_ventanas)+i Hacer Test := Test + Ventana en la posicion i de la imagen j-i Fin Para W1 := Crea el clasificador Knn a partir de Train labels_test := Etiquetas de Test labels_res := Resultados de W1 con el conjunto Test fallos := Comparar resultados de la inferencia Resultados := Resultados + ((n_fotos_test-fallos)/n_fotos_test)*100 Fin Para 50 51 Escribe Resultados Listado 4.7: ScriptPRVersionLocal Fase de ejecución del algoritmo sólo con ventanas óptimas La implementación de esta fase no implica modificaciones importantes. Una vez se tengan las ventanas óptimas seleccionadas y las estructuras de vectores de caracterı́sticas modificadas, el siguiente paso es concatenar los vectores de esas ventanas para cada imagen, por lo que el vector formado por las ventanas óptimas será el que represente a dicha imagen. Con los vectores concatenados, sólo queda realizar el proceso de inferencia del mismo modo que se realizaba en las versiones anteriores. Todo este proceso está descrito en el siguiente Listado. 68 1 2 3 4 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO RG_CreateFVFile (input_test, output_test, tamVentanaX, desplazamiento, sigma, nbins, locbin, TH) lenFV := RG_CreateFVFile(input_train, output_train, tamVentanaX, desplazamiento, sigma, nbins, locbin, TH) 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #Modificar las estructuras de datos de train n_ventanas := lenFV/nbins FV_Train_Set := Lee fichero output_train n_fotos_train := Longitud de FV_Train_Set FV_Train_Set2 := Nueva matriz de talla (n_fotos_train*n_ventanas) X n_bins+1 Para i := 1 Hasta n_fotos_train Hacer z := (i * n_ventanas) - n_ventanas + 1 Para j := nbins Incremento nbins Hasta lenFV Hacer FV_Train_Set2(z, 1:nbins) := FV_Train_Set(i, j-(nbins-1):j) FV_Train_Set2(z, nbins+1) := FV_Train_Set(i, lenFV+1); Fin Para Fin Para 19 20 21 22 23 24 25 26 27 28 29 30 31 #Modificar las estructuras de datos de test FV_Test_Set := Lee fichero output_test n_fotos_test := Longitud de FV_Test_Set FV_Test_Set2 := Nueva matriz de talla (n_fotos_test*n_ventanas) X n_bins+1 Para i := 1 Hasta n_fotos_test Hacer z := (i * n_ventanas) - n_ventanas + 1 Para j := nbins Incremento nbins Hasta lenFV Hacer FV_Test_Set2(z, 1:nbins) := FV_Test_Set(i, j-(nbins-1):j) FV_Test_Set2(z, nbins+1) := FV_Test_Set(i, lenFV+1); Fin Para Fin Para 32 33 34 35 36 Train := Test := Para i := Train 37 38 [] [] 1 Hasta n_fotos_train Hacer := Extraer ventanas optimas de imagen i en FV_Train_Set2 Fin Para 39 40 41 42 43 Para i := 1 Hasta n_fotos_test Hacer Train := Extraer ventanas optimas de imagen i en FV_Test_Set2 Fin Para 4.4. DESARROLLO MEJORA 2, ENFOQUE LOCAL 69 44 45 46 47 48 49 W1 labels_test labels_res fallos Escribe := Crea el clasificador Knn a partir de Train := Etiquetas de Test := Resultados de W1 con el conjunto Test := Comparar resultados de la inferencia ((n_imagenes_test-fallos)/n_imagenes_test)*100 Listado 4.8: ScriptPRVersionLocalOptimas 4.4.3. Ejecución de los test y resultados Ejecución de los test Como en versiones anteriores, se utilizará el algoritmo ya implementado para averiguar los parámetros óptimos. Se ejecutará esta versión con diferentes parámentros y entre todos ellos, se valorará cual es la mejor configuración y cuales son las ventanas óptimas. Seguidamente, con las ventanas seleccionadas, se ejecutará el algoritmo pero en vez de concatenar todas las ventanas, sólo se concatenarán las ventanas óptimas. Análisis de los resultados En las gráficas 4.22 y 4.23 se pueden observar los resultados obtenidos en cada una de las ventanas variando la variable sigma. Figura 4.22: Resultados de la versión local para valores de sigma entre 0.5 y 4.5 Con la siguiente configuración inicial: 70 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO Figura 4.23: Resultados de la versión local para valores de sigma entre 5.5 y 9.5 tamVentanaX = 22 Desplazamiento = 4 Número de orientaciones = 9 En vista de las gráficas, los resultados son muy similares. Pero el valor 1.5 de sigma es el más constante y el que obtiene picos más altos que el resto. Cabe destacar, que dichos picos corresponden a las ventanas situadas en las cabezas y caderas de las personas, lo cual es muy significativo. En las gráficas 4.24 y 4.25 se representan los resultados obtenidos variando la variable tamVentanaX y manteniendo los otros parámetros con la siguiente configuración: sigma = 1.5 Desplazamiento = 4 Número de orientaciones = 9 Analizando los resultados obtenidos se puede observar que las ventanas obtienen un promedio de aciertos más altos con el valor 26, con aciertos de hasta un 57 %. Finalmente, en las gráficas 4.26 y 4.27 se representan los resultados obtenidos variando la variable desplazamiento. Siendo la configuración del resto de parámetros: sigma = 1.5 tamVentanaX = 26 4.4. DESARROLLO MEJORA 2, ENFOQUE LOCAL 71 Figura 4.24: Resultados de la versión local para valores de tamVentanaX entre 12 y 18 Número de orientaciones = 9 Los mejores resultados han sido dados por el valor de desplazamiento 4, con las ventanas 13 y 20 con un 57 % y un 58 % respectivamente. Lo cual hace pensar que son las ventanas óptimas y las que tendrán que ser concatenadas. El resultado del algoritmo teniendo en cuenta solo las ventanas óptimas es de un 57 %. En vista de los resultados obtenidos se puede afirmar que esta modificación no ha sido acertada para los intereses del proyecto. Se esperaba que si sólo se analizaban las ventanas significativas se eliminasen las distorsiones que podı́an provocar zonas de las imágenes superfluas, pero no ha sido ası́. Propuesta de mejora En vista de los pobres resultados obtenidos con la versión local del algoritmo Histograma de gradientes orientados. Se planteó la posibilidad de estudiar otro tipo de algoritmo para la extracción de caracterı́sticas, Local binary patters. Dicho algoritmo obtuvo unos resultados muy aceptables en el reconocimiento de rostros, lo que hace pensar que la adaptación a nuestro caso de estudio pueda ser exitosa. 72 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO Figura 4.25: Resultados de la versión local para valores de tamVentanaX entre 20 y 26 4.4. DESARROLLO MEJORA 2, ENFOQUE LOCAL 73 Figura 4.26: Resultados de la versión local para valores de desplazamiento entre 2 y 8 74 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO Figura 4.27: Resultados de la versión local para valores de desplazamiento entre 10 y 16 4.5. DESARROLLO MEJORA 3, LOCAL BINARY PATTERNS 4.5. 4.5.1. 75 Desarrollo mejora 3, Local binary patterns Diseño Como el algoritmo anteriormente usado, Local binary patterns tiene como propósito la extracción de bordes de una imagen. La idea a seguir para implantar este algoritmo es la siguiente. Partiendo de una imagen, se recorren sus ventanas de igual modo que se hizo con el algoritmo de histograma de gradientes orientado. Para cada pixel de la ventana, se recorren sus ocho vecinos empezando por la esquina superior izquierda y rodando en el sentido de las agujas del reloj. A su vez se va formando un número en función de si el vecino es mayor o igual que el pixel estudiado (el del centro), si es ası́ añadimos un 1, en caso contrario un 0. Al obtenerse un número de ocho cifras con unos y ceros, se interpreta como un número binario y se realiza la conversión a decimal. En la Figura 4.28 se explica gráficamente este proceso. Figura 4.28: Procesado de pixeles con local binary patterns. Para cada ventana se tendrán NxM números de 0 al 255, siendo N y M el número de filas y columnas respectivamente. El vector de caracterı́sticas para una ventana serı́a un histograma de talla 256. Cada posición i de ese histograma representa el número de ocurrencias que ha tenido el número i en la ventana. En un paso opcional, se podrı́a aplicar un vector de pesos al histograma. Finalmente, el vector final de una imagen es la concatenación de los vectores de sus respectivas ventanas. Cabe destacar que con este algoritmo los parámetros de configuración del mismo cambian. El número de orientaciones ya no es necesario, y sigma sólo interviene si se usan vectores de pesos en el vector de caracterı́sticas. La organización de los módulos representada en la Figura 4.3 cambia ligeramente con esta modificación. En la Figura 4.29 se puede apreciar la nueva estructura del código, el negro representa los módulos modificados y el rojo los módulos añadidos. 4.5.2. Implementación Seguidamente se explicarán los módulos implicados en está modificación, que están representados en la Figura 4.29. 76 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO Figura 4.29: Esquema de módulos para la versión LBP. ExtractFeatures La implementación de este módulo no implica grandes cambios respecto a la versión inicial. Sólo difiere en la fase en la que obtiene el vector de caracterı́sticas, llamando a la función RG ExtraerHistograma. 1 2 3 4 Procedimiento RG_ExtractFeatures(im, tamVentanaX, desplazamiento, VectorGaus, nbins, locbin, TH) ii, ii2 := RG_IICreate(im) NR, NC := tama~ no de im 5 6 7 8 9 10 11 Para i := 1 Hasta desplazamiento incremento NR Hacer Si i+tamVentanaX-1 <= NR Entonces imNorm := RG_NormalizeIntensity (im, ii, ii2, i, 1, tamVentanaX, NC) h := RG_ExtraerHistograma(imNorm, VectorGaus) FV := FV Concatenado con h 4.5. DESARROLLO MEJORA 3, LOCAL BINARY PATTERNS 12 13 14 15 77 Fin Si Fin Para Devolver RG_PostProcessVector(FV, TH); Fin Procedimiento Listado 4.9: ExtractFeatures ExtraerHistograma Este módulo es el encargado de, a partir de una porción de imagen (ventana) y un vector de pesos, calcular el histograma correspondiente. Para ello se inicializa un vector de talla 256. Seguidamente se recorren los pixels la ventana y se llama a la función RG LocalBinaryPattern para cada pixel, con el fin de obtener el número que caracteriza a dicho pixel. Posteriormente, se incrementa en uno el valor de la posición del vector v dada por el número que genera dicho pixel. 1 2 3 4 5 6 7 8 9 10 11 Procedimiento RG_ExtraerHistograma(im, VectorGaus) NR, NC := tama~ no de im v := Vector de talla 256 Para i := 1 Hasta NR+1 Hacer Para j := 1 Hasta NC+1 Hacer num := RG_LocalBinaryPattern(im, i, j) v[num] := v[num] + 1 Fin Para Fin Para Devolver v; Fin Procedimiento Listado 4.10: ExtraerHistograma LocalBinaryPattern Por último, este módulo tiene como finalidad el cálculo del valor correspondiente a un determinado pixel. Para realizar esta tarea en primer lugar se crea un vector de talla ocho. Seguidamente se recorren los vecinos del pixel dado empezando por la esquina superior izquierda y siguiendo el sentido de las agujas del reloj. Si el vecino es mayor o igual que el pixel que se está estudiando, se escribe un 1 en el vector, en caso contrario un 0. Finalmente se interpreta al vector como un número binario y se hace la conversión a decimal, para terminar retornándolo. 1 2 3 Procedimiento RG_LocalBinaryPattern(im, i, j) v := Vector de talla 8 vecinos := Vecinos de (i,j) 78 4 5 6 7 8 9 10 11 12 13 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO Para z:= vecinos[1] Hasta 8 Si vecinos[i] >= im[i, j] Entonces v[z] := 1; SiNo v[z] := 0; Fin Si Fin Para num := Converir v en decimal Devolver num Fin Procedimiento Listado 4.11: LocalBinaryPattern 4.5.3. Ejecución de los test y resultados Ejecución de los test Como en versiones anteriores, el test de esta modificación consistirá en aplicar el script para el test de variables óptimas. Dicho script tiene algunas modificaciones respecto a versiones anteriores, ya que la variable número de orientaciones no afecta en esta versión del algoritmo. Análisis de los resultados En la primera gráfica de la Figura 4.30 se muestran los resultados de la ejecución de script de test variando el parámetro sigma. Se puede observar que el valor de sigma, 3.5, es el que obtiene mejores resultados con un 55 %. Siendo la configuración del resto de parámetros como sigue: tamVentanaX = 8 Desplazamiento = 4 sigma = 3.5 Teniendo fijado el valor óptimo de sigma, se procede a continuación a evaluar el parámetro tamVentanaX. En la gráfica 2 de la Figura 4.30 se muestran los resultados obtenidos variando este parámetro. El valor óptimo para dicha variable es 12, obteniendo un porcentaje de aciertos del 55 %. Lo cual indica que no se ha logrado mejorar la tasa de aciertos variando este parámetro. La configuración del resto de parámetros ha sido: tamVentanaX = 12 4.5. DESARROLLO MEJORA 3, LOCAL BINARY PATTERNS 79 Figura 4.30: Resultados de la versión LBP para valores de sigma entre 0.5 y 4.5 y de tamVentanaX entre 4 y 32 Desplazamiento = 4 sigma = 3.5 Figura 4.31: Resultados de la versión LBP para valores de desplazamiento entre 4 y 12 Finalmente, queda por evaluar el parámetro desplazamiento. Con los parámetros sigma y tamVentanaX fijados en 3.5 y 12 respectivamente, se procede a evaluar a la variable desplazamiento. Los resultados obtenidos se muestran en la gráfica 4.31. En vista de los resultados se puede observar que el parámetro planteado inicialmente 80 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO para desplazamiento era el idóneo, con un valor de 4. La tasa de aciertos es de un 55 % con los siguientes parámetros: tamVentanaX = 12 Desplazamiento = 4 sigma = 3.5 En vista de los resultados obtenidos por esta modificación, se puede afirmar que la implementación del algoritmo Local Binary Patterns no obtiene buenos resultados para el reconocimiento del género, desechando ası́ la hipótesis inicial. 4.6. REVISIÓN DEL PROYECTO 4.6. Revisión del proyecto 4.6.1. Proceso de comprobación 81 El proyecto ha estado en un constante control en cada una de las fases del mismo. Se han realizado pruebas y revisiones constantes con el fin de eliminar posibles errores en las implementaciones y dar veracidad a los resultados obtenidos. Una de estas pruebas ha consistido en calcular una imagen con el gradiente medio de todas las fotos de hombres y otra para las mujeres. En la Figura 4.32 se representa la media de las imágenes de la BBDD para hombres y para mujeres. A pesar de que las diferencias entre una y la otra sean mı́nimas, son lo suficientemente representativas para nuestro caso de estudio. En zonas como las caderas, hombros y cabeza, se observan claramente las diferencias. Con esta prueba se consigue validar el conjunto de imágenes utilizadas en el proyecto y además, refuerza la teorı́a de que existen zonas más representativas que otras en lo que al género se refiere. Figura 4.32: Gradiente medio de las imágenes en la BBDD. También se estudiaron diferentes tipos de clasificadores incluidos en la librerı́a PRTools para descartar una mala selección del clasificador inicial. En un principio se utilizó el clasificador Knn (k-nearest neighbor classifier), pero existen otros como: bpxnc (Train neural network classifier by back-propagation) lmnc (Train neural network by Levenberg-Marquardt rule) rbnc (Train radial basis neural network classifier) 82 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO rnnc (Random neural network classifier) svc (Support vector classifier) Todos ellos obtuvieron un resultado similar o peor que el clasificador Knn, por lo que se confirmó la correcta aplicación de dicho clasificador para este proyecto. Para finalizar, se sometió a las implementaciones a una prueba para validar su correcto funcionamiento, es decir, se evaluó si esos algoritmos son capaces de clasificar correctamente dos grupos de fotos con caracterı́sticas contrapuestas. Se elaboraron dos conjuntos de imágenes, el primero compuesto por imágenes de paisajes en horizontal, y en el segundo con las mismas imágenes pero en vertical. Las imágenes de paisajes tienes como caracterı́stica común, que todas tienen un borde muy marcado que es el horizonte, por lo que las imágenes de un grupo tendrán el borde del horizonte en sentido horizontal y el otro grupo con orientación vertical, lo que generará vectores de caracterı́sticas completamente diferentes. Al ejecutar los algoritmos se espera que la tasa de aciertos sea muy elevada en todas las implementaciones, ya que se están clasificando imágenes con gradientes completamente distintos. El resultado obtenido para la versión inicial fue del 90 %, la versión con enfoque local obtuvo un 90 % también y finalmente, la versión con Local Binary Patterns obtuvo un 85 %. Estos resultados confirman las implementaciones de los algoritmos funcionan correctamente. 4.6.2. Evaluación global de los resultados El objetivo principal de este proyecto era el estudio de técnicas para el reconocimiento de género por medio del perfil humano. Se estudiaron dos técnicas en particular, Histograma de gradientes orientados y Local Binary Patterns. El primero obtuvo buenos resultados en el reconocimiento de presencia humana y el segundo, en el campo del reconocimiento del rostro en personas. Por la similitud con el propósito de este proyecto, se propuso como hipótesis inicial que estas técnicas podrı́an dar buenos resultados. Durante el estudio de la técnica Histograma de gradientes orientados, se propusieron distintas mejoras en función de los resultados obtenidos. Después de haber implementado la versión inicial, se obtuvo una tasa de aciertos del 57 %. Seguidamente se implementaron modificaciones respecto a la versión inicial. Como aplicar una normalización de los vectores de caracterı́sticas, con lo que se aumento la tasa de aciertos al 59 %. Aplicar un filtro en los vectores de caracterı́sticas que eliminase los picos, consiguiendo una efectividad del 60 %. También se optó por modificar el conjunto de imágenes de entrenamiento usando la técnica de editado de Wilson, con lo que se aumentaron los acierto hasta llegar al 63 %. Finalmente, se planteó una última mejora sobre este algoritmo, aplicar un enfoque local al procesado de una 4.6. REVISIÓN DEL PROYECTO 83 imagen, dando más importancia a las zonas de la imagen más representativas del género humano. A pesar de que se esperaban unos resultados positivos implementando esta mejora, finalmente la tasa de aciertos descendió al 57 %. En vista de los resultados obtenidos se decidió afrontar el problema con el uso de otras técnicas. Inicialmente se esperaban unos resultados positivos teniendo en cuenta las similitudes de este proyecto con proyectos anteriores que usaron esta técnica. Después de reflexionar sobre los resultados y las debilidades del algoritmo, se plantearán propuestas de mejora para futuros trabajos en este ámbito. La siguiente técnica a utilizar fue Local Binary Patterns. Este algoritmo obtuvo buenos resultados en el reconocimiento facial, lo que hizo pensar que podrı́a ser una buena alternativa para afrontar el problema que nos ocupa. Pero los resultados reflejados denotan que las hipótesis iniciales son erróneas. Sólo se consiguió un 55 % de efectividad, lo cual hizo desestimar posibles mejoras para esta técnica. Dado que el objetivo principal era el estudio de técnicas de reconocimiento de patrones aplicadas al reconocimiento de género, se puede afirmar que se han cumplido. Un hecho obvio, es que el resultado final del proyecto hubiese sido más satisfactorio si se hubiese dado con una solución efectiva al problema. Pero dada la dificultad del problema que se trata, podrı́a ser una meta demasiado utópica y con toda certeza, fuera del alcance de un proyecto fin de carrera. 4.6.3. Futuras vı́as de investigación Reflexionando sobre las debilidades de los algoritmos desarrollados, se llegó a un conclusión clara, el funcionamiento general es correcto, pero no se están extrayendo las caracterı́sticas apropiadas para llegar a reconocer el género de una persona. Se considera que la razón de que no se obtengan unos resultados aceptables es que en la fase de extracción de caracterı́sticas se están procesando atributos poco significativos en cuanto a género. En este sentido, se podrı́a plantear otro enfoque a la hora de aplicar pesos a una zona de la imagen. Durante todo el proyecto se ha aplicado un vector de pesos que atribuye más importancia a la zona central de la imagen. Pero teniendo en cuenta que las personas están centradas en la imagen, se estarı́a dando más importancia al cuello que a los hombros en si en el caso de estos. Pero a su vez, la cabeza de las personas está justo en el centro de la imagen, por lo que es conveniente usar un vector de pesos que de más importancia al centro de la imagen. Éstos datos sugieren la idea de aplicar una matriz de pesos a toda la imagen, dando mayor peso a las zonas donde tendrı́an que presentarse, caderas, cabezas y hombros, y dando un peso menor al resto de las zonas de la imagen. Otra vı́a de investigación consistirı́a en el estudio de como los humanos diferencian el género. Existen otros factores que hacen que una persona haga una inferencia sobre esta cuestión, como puede ser el tipo de ropa, el estilo de pelo, etc. 84 CAPÍTULO 4. DESCRIPCIÓN DEL PROYECTO En definitiva, factores sociales que se atribuyen a hombres y a mujeres, y que son excluyentes entre si estadı́sticamente. Si se consiguiese informatizar esos criterios, es muy probable que la eficacia del programa aumente. Una forma para comprender la percepción humana, consistirı́a en desarrollar una aplicación que mostrase imágenes a una persona y que esta tuviese que dictaminar si se trata de una mujer o de un hombre. Dichas imágenes podrı́an ser recortadas, mostrando ası́ zonas especı́ficas de una persona, vestuario, estilo de peinado etc. De dicho experimento se podrı́an sacar conclusiones útiles para la detección del género. Capı́tulo 5 Conclusiones Gracias a este proyecto he podido experimentar las dificultades que conlleva el problema de reconocimiento de género. Al tratarse de un ámbito novedoso, he tenido que adaptar técnicas utilizadas en problemas similares y realizar modificaciones para explorar distintos enfoques de cómo abordar el problema. El proyecto ha cumplido con creces su finalidad, que no es otra que validar métodos para dar solución al reconocimiento de género. Independientemente de lo eficaces que hayan dichos métodos, de lo que no cabe duda es que este proyecto servirá como guı́a fundamental a proyectos encaminados en este ámbito. Por lo general, las personas no son conscientes de la complejidad de los procesos que entraña la visión humana. Cuando distinguimos unas letras de otras, reconocemos a personas cercanas a nosotros o reconocemos el género de una persona con una simple mirada, nuestro cerebro tiene que realizar un trabajo que implica procesos muy complejos. En esencia, los proyectos de reconocimiento de género intentan imitar estos procesos. Si una persona sigue un determinado criterio para distinguir el género, un sistema de reconocimiento de patrones deberı́a imitar estos criterios. Este concepto no es trivial y precisamente es la dificultad del problema que nos ocupa. La cuestión principal es ¿Cómo instruimos a un ordenador para que siga el raciocinio humano?. Si reflexionamos sobre esta idea nos damos cuenta de que el problema que se intenta abordar tiene un alto nivel de dificultad. Con estos trabajos no se pretende obtener resultados mejores que la percepción humana, pero si aproximarse a ellos. Durante toda la carrera se han ido adquiriendo conocimientos que han servido para poder afrontar un proyecto de estas caracterı́sticas. Fundamentos en lenguajes de programación asimilados en el trascurso de la carrera, han servido para que la adaptación a un lenguaje nuevo, como es Matlab, haya sido relativamente sencilla. Poco a poco, en las distintas asignaturas donde se impartı́an lenguajes de programación estructurados, se ha ido moldeando la forma de organizar ideas, estructurar código etc, que sin duda ha conseguido facilitar en gran medida la organización de la 85 86 CAPÍTULO 5. CONCLUSIONES implementación del proyecto. Conocimientos sobre la metodologı́a en el desarrollo de proyectos Software, han sido de gran utilidad, tanto para el desarrollo del proyecto como para la planificación del mismo. En este proyecto cobra especial relevancia el papel de un ingeniero informático. Un ingeniero no emprende un proyecto desde cero, se apoya sobre trabajos realizados previamente. Por lo tanto, la tarea de un ingeniero consiste más bien en recopilar, reutilizar, adaptar y reinventar trabajos realizados con anterioridad. Y ası́ ha sucedido en este trabajo, en la mayorı́a de los casos, se han tenido que investigar trabajos previos, adaptarlos a las necesidades y en algunos casos, reinventarlos. Para realizar este proyecto se han tenido que adquirir multitud de conceptos nuevos. Reconocimientos de patrones, biometrı́a, algoritmos de clasificación, técnicas de editado de clases e incluso la utilización de LATEX para la redacción de esta memoria. Conceptos que se consideran muy útiles para el desarrollo de una carrera profesional y que además, abren una nueva vı́a profesional completamente desconocida hasta ahora. Es importante destacar la continua evaluación a la que ha sido sometido el proyecto. Un error de cualquier tipo puede suponer que los resultados y su posterior análisis comprometan fases posteriores del proyecto. Dada la metodologı́a utilizada en la elaboración proyecto, ha sido vital hacer un exhaustivo control sobre el trabajo realizado y ası́ evitar errores que lleven a conclusiones erróneas. Los resultados del proyecto han sido satisfactorios respecto a los objetivos marcados inicialmente. Pero no se ha llegado a dar una solución efectiva al reconocimiento de género. El problema planteado es innovador y eso conlleva muchos fracasos antes de conseguir un solución definitiva. Es por ello que, aunque no se tenga una solución al problema, se ha dado un gran paso. El trabajo realizado y los resultados obtenidos indudablemente facilitarán el camino a nuevos proyectos. A nivel particular, este proyecto me ha ayudado a tomar contacto con un proyecto real. A menudo, durante la carrera, se afrontan problemas relativamente sencillos en cuanto a extensión y complejidad. Gracias a este trabajo, he podido experimentar lo que supone afrontar un proyecto serio, con sus dificultades, el volumen de trabajo que demanda y también con sus satisfacciones. No me cabe duda de que esta experiencia supone para mi un salto cualitativo profesionalmente, que servirá para el desarrollo de mi carrera como ingeniero informático. Todo en esta vida es mejorable, siempre se puede dar más de uno mismo y realizar un trabajo de más calidad. Pero realmente me siento muy orgulloso del trabajo realizado y de haber superado con éxito los desafı́os que se han planteado a la largo del proyecto. Sólo me queda la inquietud de no haber desarrollado una solución satisfactoria al problema planteado. Pero un proyecto tiene que tener un principio y un fin, tiene que tener unos lı́mites definidos para que no se alargue indefinidamente en el tiempo. Es por ello que se plantean nuevas ideas con la esperanza de que en algún trabajo futuro se pueda obtener una solución. 87 Citaré una frase de Pablo Picasso que resume muy bien el desarrollo del proyecto: La inspiración existe, pero tiene que encontrarte trabajando. 88 CAPÍTULO 5. CONCLUSIONES Bibliografı́a [1] http://es.wikipedia.org/wiki/Knn. [2] http://es.wikipedia.org/wiki/Computer_Vision. [3] http://es.wikipedia.org/wiki/Reconocimiento_de_patrones. [4] http://es.wikipedia.org/wiki/Biometra. [5] http://en.wikipedia.org/wiki/Histogram_of_oriented_gradients. [6] http://prtools.org/. [7] Navneet Dalal and Bill Trigss. Histograms of oriented gradients for human detection. In Proceedings of IEEE Conference Computer Vision and Pattern Recognition, 2005. [8] Abdenour Hadid and Matti Pietikaı̈nen. Face description with local binary patterns: Application to face recognition. any, 2006. [9] Javier Garcı́a Jalón. Aprenda matlab 6.5 como si estuviera en primero. any, 2004. [10] Patricia Caballero Lemos. Detección de humanos en imágenes. any, 2008. [11] Sujing Wang Nidal Zeidat and Christoph F. Eick. Dataset editing techniques: A comparative study. Department of Computer Science, University of Houston, any. [12] P. Juszczak R.P.W. Duin. A matlab toolbox for pattern recognition. any, 2007. 89 90 BIBLIOGRAFÍA