Está en la página 1de 3

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
nmero relativamente pequeo de imgenes prototpicas de una persona. La identidad misma es
probablemente un agregado complejo de vivencias y evocaciones; en este trabajo se le asignar slo la
caracterstica 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 nmero. En consecuencia, reconocer un rostro puede asimilarse a
un proceso de bsqueda 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 hipottico antes enunciado, se postula una caracterstica cuantitativa que tiene dos
parmetros:

k correspondiente al nmero de individuos, y,

m correspondiente al nmero 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 eleccin (salvo la condicin de que la capa de output debe ser de dimensin k) es esencialmente intuitivo
y se expone a continuacin.
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 hiptesis 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 ms de una versin del rostro para poder
reconocer expresiones y variaciones; esto explica k+2 que entrega un mnimo de tres prototipos.
Adicionalmente, el nmero de ejemplares almacenable debe ser superior a k; en realidad una funcin
montamente creciente con k, la ms sencilla, en concordancia con la navaja de Occam. La segunda capa
oculta debe ser capaz de transmitir una sntesis del espacio de rostros con una fidelidad suficiente para una
actividad de asociacin binaria (en realidad, bastante fuzzy) de identificacin 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 activacin de las capas ocultas es tanh, concordante con la naturaleza positiva o negativa
de la seal sinptica (reforzamiento o inhibicin); 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
instrospeccin de nuestra actividad de identificar rostros la hace aparecer como difusa, existe un continuo de
la fidelidad de la identificacin que se manifiesta en expresiones en este contexto tales como se parece,
no estoy seguro, pero , lo he visto en alguna parte , podra 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 asociacin permite un interesante anlisis de resultados. En efecto, proporciona una medida del
nivel de confusin entre los ejemplares, circunstancia anloga a la que se presenta en el proceso de

reconocimiento de rostros para los seres humanos, dado que todos los rostros presentan caractersticas
comunes tales como una boca, dos ojos, dos orejas, etc.
Para la aplicacin 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, transformacin
esencialmente reversible que entrega un mapa biyectivo ms compacto aprovechando la circunstancia de que
cada componente de input puede tener slo 256 valores distintos. En efecto, se construye una representacin
analgica en un intervalo continuo [-4,+4] para estos valores, acercndose as al rango de la
funcintanh utilizada para transmitir la seal de input. A continuacin 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)

% 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

También podría gustarte