codigo de reconocimiento rostro-matlab

4
Codigo De Reconocimiento Rostro En Matlab Posted on mayo 8, 2011 by ortizguillen MATLAB El ‘conocer’ un rostro, actividad imprescindible para re-conocer, equivale a asignar una identidad única a un número relativamente pequeño de imágenes prototípicas de una persona. La identidad misma es probablemente un agregado complejo de vivencias y evocaciones; en este trabajo se le asignará sólo la característica de ser única. A su vez, el set de prototipos se almacena de forma tal que sea claramente separable. Parece ser que los recursos utilizados para almacenamiento son considerables; la capacidad de reconocer rostros es limitada en cuanto a número. En consecuencia, reconocer un rostro puede asimilarse a un proceso de búsqueda en el espacio de almacenamiento que, de ser exitoso, rescata con mayor o menor seguridad la identidad (y atributos vivenciales) asociada durante el conocer. Para modelar el proceso hipotético antes enunciado, se postula una característica cuantitativa que tiene dos parámetros: · k correspondiente al número de individuos, y, · m correspondiente al número de fotos de cada uno de ellos. Llevando estas consideraciones al ámbito de redes neuronales y al contexto del trabajo a efectuar, se plantea una arquitectura con dos capas ocultas. La capa de input tiene 10304 nodos, la primera capa oculta tiene 2*(k+2) neuronas, la segunda k+m neuronas y la de output k neuronas. El razonamiento de soporte para esta elección (salvo la condición de que la capa de output debe ser de dimensión k) es esencialmente intuitivo y se expone a continuación. Para reconocer una imagen que representa un rostro será necesario mapearla en el ‘espacio de rostros’, llevar a cada uno de sus elementos a un espacio instrumental para el reconocimiento de rostros. En efecto, el contexto perceptual de esta actividad se ‘siente’ distinto al que se utiliza para reconocer objetos en general, una hipótesis derivada de la relevancia evolutiva del reconocimiento de rostros en la estructura gregaria de nuestra especie. Ahora bien, en este espacio debe haber lugar para más de una versión del rostro para poder reconocer expresiones y variaciones; esto explica k+2 que entrega un mínimo de tres prototipos. Adicionalmente, el número de ejemplares almacenable debe ser superior a k; en realidad una función monótamente creciente con k, la más sencilla, en concordancia con la navaja de Occam. La segunda capa oculta debe ser capaz de ‘transmitir’ una síntesis del ‘espacio de rostros’ con una fidelidad suficiente para una actividad de asociación binaria (en realidad, bastante ‘fuzzy’) de identificación ejecutada por la capa de output. En consecuencia, se necesita al menos una neurona por individuo y una por variante; un total de k+m. Las funciones de activación de las capas ocultas es tanh, concordante con la naturaleza positiva o negativa de la señal sináptica (reforzamiento o inhibición); la de la capa de output debe llevar a un conjunto de alternativas sí/no representables en forma compacta por una sigmoide en el intervalo [0,1]. En efecto, la instrospección de nuestra actividad de ‘identificar rostros’ la hace

Upload: mauricio-rojas-valdivia

Post on 08-Apr-2016

7 views

Category:

Documents


1 download

DESCRIPTION

Codigo De Reconocimiento Rostro-MatLab

TRANSCRIPT

Page 1: Codigo de Reconocimiento Rostro-MatLab

Codigo De Reconocimiento Rostro En MatlabPosted on mayo 8, 2011 by ortizguillen

MATLAB

El ‘conocer’ un rostro, actividad imprescindible para re-conocer, equivale a asignar una identidad única a un número relativamente pequeño de imágenes prototípicas de una persona. La identidad misma es probablemente un agregado complejo de vivencias y evocaciones; en este trabajo se le asignará sólo la característica de ser única. A su vez, el set de prototipos se almacena de forma tal que sea claramente separable. Parece ser que los recursos utilizados para almacenamiento son considerables; la capacidad de reconocer rostros es limitada en cuanto a número. En consecuencia, reconocer un rostro puede asimilarse a un proceso de búsqueda en el espacio de almacenamiento que, de ser exitoso, rescata con mayor o menor seguridad la identidad (y atributos vivenciales) asociada durante el conocer.

 Para modelar el proceso hipotético antes enunciado, se postula una característica cuantitativa que tiene dos parámetros:

·        k correspondiente al número de individuos, y,

·        m correspondiente al número de fotos de cada uno de ellos.

 Llevando estas consideraciones al ámbito de redes neuronales y al contexto del trabajo a efectuar, se plantea una arquitectura con dos capas ocultas. La capa de input tiene 10304 nodos, la primera capa oculta tiene 2*(k+2) neuronas, la segunda k+m neuronas y la de output k neuronas. El razonamiento de soporte para esta elección (salvo la condición de que la capa de output debe ser de dimensión k) es esencialmente intuitivo y se expone a continuación.

Para reconocer una imagen que representa un rostro será necesario mapearla en el ‘espacio de rostros’, llevar a cada uno de sus elementos a un espacio instrumental para el reconocimiento de rostros. En efecto, el contexto perceptual de esta actividad se ‘siente’ distinto al que se utiliza para reconocer objetos en general, una hipótesis derivada de la relevancia evolutiva del reconocimiento de rostros en la estructura gregaria de nuestra especie. Ahora bien, en este espacio debe haber lugar para más de una versión del rostro para poder reconocer expresiones y variaciones; esto explica k+2 que entrega un mínimo de tres prototipos. Adicionalmente, el número de ejemplares almacenable debe ser superior a k; en realidad una función monótamente creciente con k, la más sencilla, en concordancia con la navaja de Occam. La segunda capa oculta debe ser capaz de ‘transmitir’ una síntesis del ‘espacio de rostros’ con una fidelidad suficiente para una actividad de asociación binaria (en realidad, bastante ‘fuzzy’) de identificación ejecutada por la capa de output. En consecuencia, se necesita al menos una neurona por individuo y una por variante; un total de k+m.

Las funciones de activación de las capas ocultas es tanh, concordante con la naturaleza positiva o negativa de la señal sináptica (reforzamiento o inhibición); la de la capa de output debe llevar a un conjunto de alternativas sí/no representables en forma compacta por una sigmoide en el intervalo [0,1]. En efecto, la instrospección de nuestra actividad de ‘identificar rostros’ la hace aparecer como difusa, existe un continuo de la fidelidad de la identificación que se manifiesta en expresiones en este contexto tales como ‘se parece…’, ‘no estoy seguro, pero …’, ‘lo he visto en alguna parte …’, ‘ podría jurar que es …’, etc.

En consecuencia con los principios expuestos, se especificó una red con dos capas ocultas para trabajar con datos que se presentan como un set de k vectores de 10304 componentes que deben asociarse con una ficha binaria de identidad de k bits construida de modo que el AND sea nulo para dos individuos diferentes. Esta forma de asociación permite un interesante análisis de resultados. En efecto, proporciona una medida del nivel de ‘confusión’ entre los ejemplares, circunstancia análoga a la que se presenta en el proceso de

Page 2: Codigo de Reconocimiento Rostro-MatLab

reconocimiento de rostros para los seres humanos, dado que todos los rostros presentan características comunes tales como una boca, dos ojos, dos orejas, etc.

Para la aplicación misma se procesan  ejemplares, tanto para el input como para probar la red entrenada. Los datos fueron normalizados, esto es, fueron llevados a una media nula y varianza unitaria, transformación esencialmente reversible que entrega un mapa biyectivo más compacto aprovechando la circunstancia de que cada componente de input puede tener sólo 256 valores distintos. En efecto, se construye una representación analógica en un intervalo continuo [-4,+4] para estos valores, acercándose así al rango de la funcióntanh utilizada para transmitir la señal de input. A continuación se transcribe el script de Matlab con el cual se hizo el trabajo.

k=40;

m=5;

% k individuos, m fotos de cada uno de ellos

for n=1:m;

    for i =1:k;

        the_file=[‘D:\face\face_files\s’ int2str(i) ‘\’ int2str(n) ‘.pgm’];

        foto=fopen(the_file,’r’);

        [B,header]=fread(foto,14,’char=>char’);

        % el encabezado no interesa, hay que saltarlo

        [p(:,k*(n-1)+i),pix]=fread(foto,10304,’int8=>double’);

        % la imagen se guarda como vector columna de la matriz de datos p

        j=fclose(foto);

    end

end

% listo los datos, m*k fotos como vectores columna de la matriz de datos p

% los normalizamos

[pn,meanp,stdp]=prestd(p);

% ahora el output

t=eye(k);

for n=1:m-1;

    t=[t,eye(k)];

end

% el output ‘t’ se compone de ‘m’ matrices eye(k)

Page 3: Codigo de Reconocimiento Rostro-MatLab

% lista la ficha binaria de identidad, el AND es nulo

net=newff(minmax(pn),[2*(k+2),k+m,k],{‘tansig’,’tansig’,’logsig’},’trainrp’);

net.trainParam.show=10;

net.trainParam.goal=0.001;

% ahora a entrenar…

[net,tr]=train(net,pn,t);

% ahora se ve como quedamos, probamos el input

for i=1:m*k

a(:,i)=sim(net,pn(:,i));

end

% si esta matriz se parece a [eye(k),eye(k)…] estamos bien

% ahora vamos a probar otro set de ‘m’ fotos de los mismos individuos…

for n=m+1:m+m;

    for i=1:k;

        the_file=[‘D:\face\face_files\s’ int2str(i) ‘\’ int2str(n) ‘.pgm’];

        foto=fopen(the_file,’r’);

        [B,header]=fread(foto,14,’char=>char’);

        [p(:,k*(n-1)+i),pix]=fread(foto,10304,’int8=>double’);

        j=fclose(foto);

    end

end

[pn,meanp,stdp]=prestd(p);

% listos los datos de prueba

for i=1:m*k

b(:,i)=sim(net,pn(:,i));

end

b-a

% los vectores columna no nulos de esta matriz ‘miden’ la fidelidad de la identificacion