Introducción teórica

Anuncio
Introducción Teórica
Autovalores y Autovectores
Los vectores propios o autovectores de un operador lineal (aplicación entre dos espacios
vectoriales que preserva las operaciones de suma de vectores y producto por un escalar) son
los vectores no nulos que, cuando son transformados por el operador, dan lugar a un
múltiplo escalar de sí mismos, con lo que no cambian su dirección. Este escalar λ recibe
el nombre de valor propio o autovalor.
A menudo, una transformación queda completamente determinada por sus vectores propios
y valores propios. Un espacio propio, autoespacio o eigenespace es el conjunto de
vectores propios con un valor propio común.
Formalmente, se definen los vectores propios y valores propios de la siguiente manera:
Si A: V → V es un operador lineal en un cierto espacio vectorial V, v es un vector diferente
de cero en V y c es un escalar tales que
entonces decimos que v es un vector propio del operador A, y su valor propio asociado es c.
Puede notarse que si v es un vector propio con el valor propio c entonces cualquier
múltiplo diferente de cero de v es también un vector propio con el valor propio c. De hecho,
todos los vectores propios con el valor propio asociado c junto con 0, forman un subespacio
de V, el espacio propio para el valor propio c.
Factorización QR
En álgebra lineal, la descomposición o factorización QR de una matriz es una
descomposición de la misma como producto de una matriz ortogonal por una triangular
superior.
La descomposición QR es la base del algoritmo QR utilizado para el cálculo de los vectores
y valores propios de una matriz.
Definición
La descomposición QR de una matriz cuadrada real A es
Donde Q es una matriz ortogonal (es decir se satisface QTQ = I) y R es una matriz
triangular superior.
Cálculo de la descomposición QR
Método de reflexiones de HouseHolder
Una transformación de Householder o reflexión de Householder es una transformación que
refleja el espacio con respecto a un plano determinado. Esta propiedad se puede utilizar
para realizar la transformación QR de una matriz si tenemos en cuenta que es posible
elegir la matriz de Householder de manera que un vector elegido quede con una única
componente no nula tras ser transformado (es decir, premultiplicando por la matriz de
Householder). Gráficamente, esto significa que es posible reflejar el vector elegido respecto
de un plano de forma que el reflejo quede sobre uno de los ejes de la base cartesiana.
La manera de elegir el plano de reflexión y formar la matiz de Householder asociada es el
siguiente:
Sea
un vector columna arbitrario m-dimensional tal que || || = |α|, donde α es un escalar;
Entonces, siendo
el vector (1,0,...,0)T, y ||·|| la norma euclídea, se define:
donde v es un vector unitario perpendicular al plano de reflexión elegido. Q es una matriz
de Householder asociada a dicho plano. Se verifica entonces:
Esta propiedad se puede usar para transformar gradualmente los vectores columna de una
matriz A de dimensiones m por n en una matriz triangular superior. En primer lugar se
multiplica A con la matriz de Householder Q1 que obtenemos al elegir como vector la
primera columna de la matriz. Esto proporciona una matriz QA con ceros en la primera
columna (excepto el elemento de la primera fila).
el procedimiento se puede repetir para A′ (que se obtiene de A eliminando la primera fila y
columna), obteniendo así una matriz de Householder Q′2. Hay que tener en cuenta
que Q′2 es menor que Q1. Para conseguir que esta matriz opere con Q1A en lugar de A′ es
necesario expandirla hacia arriba a la izquierda, completando con la matriz identidad (es
decir poner unos en los elementos de la diagonal y ceros en los restantes) obteniendo así la
siguiente matriz
Tras repetir el proceso t veces, donde t = min(m − 1,n), se obtiene
donde R es una matriz triangular superior. De forma que tomando
A = QR es una descomposición QR de la matriz A.
Algoritmo QR ((Francis, Kublanovskaya - 1960)
El algoritmo QR es un algoritmo de valor propio: es decir, un procedimiento para calcular
los valores y vectores propios de una matriz.
La idea básica es realizar en cada iteración una descomposición QR de la matriz, es decir
escribirla como producto de una matriz ortogonal Q y una matriz triangular superior R,
luego multiplicar dichas matrices en orden inverso y continuar iterando.
El algoritmo es el siguiente:
Se toma
=
y a partir de la factorizacion QR de
, se
construye
De esta forma se tiene la sucesión de matrices
todas semejantes a
:
..
.
Si la matriz
es simétrica, también lo son todas las
,
esto es, la sucesión
y, por tanto
,
converge a la matriz diagonal de autovalores.
Puede notarse ésto con mayor claridad a través del siguiente pseudocódigo:
1. i= 0
2.
3. Repetir
Factor 4.
5.
6. i= i +1
7. Hasta la convergencia
Desarrollo
Primera parte: Matrices
Debido a que el reconocimiento de caras requería trabajo con matrices, lo primero que
hicimos fue implementar una clase propia de matrices que nos permita trabajar más
fácilmente. Teníamos una clase de matrices que usamos en el trabajo práctico anterior, eso
nos sirvió de base. Luego implementamos métodos propios para cada operación necesaria y
utilizamos matrices de una columna para representar vectores.
Sin mayores vicisitudes implementamos la suma y el producto de matrices. Decidimos
implementar una versión de orden temporal O(1) del producto por un escalar. Para esto le
agregamos un atributo a la matriz que le indica por qué factor está siendo multiplicada (si
es ninguno, el valor es uno). Luego, el método GetItem devuelve el producto del elemento
pedido por el factor y el método SetItem actualiza la matriz entera (multiplica los elementos
por el factor, y luego lo reemplaza por uno) cuando se cambia un elemento.
Segunda Parte: Método QR
Viendo las matrices con el que íbamos a trabajar, notamos que tenían casi todos (si es que
no todos) sus elementos no nulos. Con esto en mente decidimos usar, para obtener la
descomposición QR, el método de Householder. Una vez implementado el método pasamos
a la descomposición QR y la obtención de autovalores y autovectores a partir de la misma.
Teniendo esto ya podíamos calcular la matriz de covarianzas y obtener los autovalores y
autovectores de la misma. Pero ahora teníamos el problema de que aún reduciendo las
imágenes de tamaño, nos quedaba una matriz demasiado grande, esto enlentecía
considerablemente cualquier operación que requiriera varios productos entre matrices,
especialmente QR.
En un principio el tiempo que demoraban estas operaciones era enorme. Muchísimo mayor
de lo esperado. Después de algunos experimentos, notamos que los elementos de la matriz
que tenían que quedar en cero tardaban mucho en llegar. Esto se debía a un problema de
redondeo, o mejor dicho a la falta de redondeo. El número seguía decreciendo hasta llegar a
valores muy pequeños entre cero y uno, pero no llegaba a lo que el procesador identifica
como cero. Entonces decidimos poner una cota, tal que cuando un número es más chico que
esa cota, directamente lo consideramos como cero.
Tercera Parte: Autocaras
Una vez terminamos de implementar toda la parte matemática (matrices, método QR,
autovalores y autovectores) nos quedaba la parte principal del trabajo, encontrar un método
eficaz (o eficiente, de ser posible) para poder distinguir caras. Es decir, dado un conjunto de
personas y fotos de sus caras, poder reconocer a cual pertenece una nueva imagen. Pasamos
por varias ideas, ninguna concreta pero todas enraizadas en nuestros conocimientos de
optimización combinatoria obtenidos en otras materias. Demás está decir que el enfoque no
nos cerraba y no dio frutos. Consultando con conocidos de la materia optativa de
procesamiento de imágenes, obtuvimos una publicación dedicada específicamente al tema
de este trabajo. Dicha publicación es el paper de 1991 de Mathew Turk y Alex Pentland de
nombre Eigenfaces for Recognition. En la misma vimos que el método para resolver el
problema era básicamente el mismo planteado por la cátedra, con algunas variantes.
La primera parte era igual, obtenía el promedio de las imágenes, y a partir de los mismos
obtenía la matriz de covarianza. Luego aplicaba una transformación a la matriz que le
reducía el tamaño. Cuando en el método original, nos quedaba una matriz de n por n con n
igual a la cantidad de píxeles de las imágenes, utilizando este método n pasaba a ser
cantidad de imágenes. La justificación de por qué este método servía igual, es decir que los
autovalores de la matriz de covarianza se mantenían, resultó ser bastante sencilla.
(donde
y n es la cantidad de imágenes)
Consideremos los autovectores y autovalores de la matriz
de la matriz
, tales que
Multiplicando a izquierda por A a ambos lados obtenemos
de donde vemos que
son los autovectores de
.
A partir de este análisis, construímos la matriz de n por n
y buscamos sus
autovectores. Luego de eso el proceso es el mismo que el planteado por la cátedra en el
enunciado. Se usa un subconjunto de autovectores para generar la transformación
característica que aplicada a cada imagen nos da su correspondiente autocara (del inglés
eigenface).
Cuarta Parte: Reconociendo caras
Parte 1: Distancias euclidianas
Lo que obtuvimos de la publicación de Turk y Pentland, nos ayudó a que pudiéramos hacer
andar nuestro trabajo en un tiempo considerablemente menor, lo que nos permitía hacer
varias pruebas en unas pocas horas. Aún nos faltaba la parte final que era la de reconocer a
que conjunto pertenecía una cara dada. De nuevo miramos al paper para esto y encontramos
una solución simple pero, a priori, efectiva.
El método de Turk y Pentland consistía en tomar la autocara nueva
promedio de cada dominio de autocaras
. Más precisamente:
y compararla con el
De ahí lo que quedaba era buscar el dominio que disminuyera la distancia con la imagen.
Según lo planteado por Turk y Pentland en su publicación, este método tenía una alta
eficiencia, era rápido y generalmente efectivo. Ellos utilizaban una cota para la distancia, de
modo tal que si la distancia superaba dicha cota, la imagen no pertenecía al dominio. Lo
que no decían era como llegaban a esa cota. Nosotros asumimos que probando íbamos a
llegar algo razonable pero no fue así.
Para empezar, primero las distancias nos daban en números muy grandes, del orden de 1011.
Esto ya nos trajo confusión dado que adivinar una cota iba a ser difícil. Para resolver esto
decidimos probar dividiendo las distancias por algún número cosa de que quedara algo
proporcional pero en números más procesables. Buscábamos algo que nos de entre cero y
uno. Logramos que nos diera entre cero y dos. Para esto utilizábamos la norma más grande
de los dos vectores de la sustracción y dividíamos, la norma de la resta por dicho número.
Esto no resolvía nuestro problema más importante, seguíamos teniendo casos que no daban
como deberían dar.
Parte 2: Recordando Probabilidad y Estadística
Pensando un poco se nos ocurrió que debería haber un método para que la decisión de saber
si una imagen pertenece o no a una persona quede en función de un valor que esta siempre
entre cero y uno. El primer caso siendo que la probabilidad de que la imagen pertenezca al
dominio es nula y el segundo, que pertenece sin duda alguna al dominio.
Sea D el dominio correspondiente a una persona. Entonces, tiene en su interior dos cosas:


Un conjunto de imágenes (cada una proyectada sobre el espacio de k dimensiones)
Un centro de masa (el promedio del conjunto)
El centro de masa c, junto con la distancia más grande de una imagen i al mismo, forman
un círculo de centro c y radio equivalente a la distancia más grande.
Dada una imagen i pertenece al dominio D, basta con fijarse si el punto que le corresponde
a i en el espacio k-dimensional pertenece al círculo o no. El punto puede o no estar dentro
del círculo, si no está, es porque la distancia al centro de masa es mayor a la mayor
distancia encontrada, entonces la imagen definitivamente, al menos con la base de datos
que se tiene, no pertenece al dominio D.
Sea la transformación lineal de la imagen i y
punto pertenece a un círculo si y solo si:
el centro de masa del dominio k. Un
< Radio del círculo
Si la imagen está efectivamente en el círculo, nos fijamos la distancia al centro de masa y la
vemos como un porcentaje en relación a la distancia máxima. Esto nos da una
"probabilidad" de que la imagen pertenezca a la persona del dominio.
De este modo tenemos un método que nos dice con una cierta certeza si la imagen
pertenece a una persona. En pruebas (ver resultados), este método nos resultó el más
seguro, corrigiendo los problemas de los anteriores y dándonos un mayor porcentaje de
resultados exitosos, siendo las excepciones los casos donde dos círculos se superponen.
Descargar