我试图创建一个可以进行面部识别的神经网络。我有一个每人15张图片的数据库。每个人需要识别的5张图片,而不是在数据库中。
第一部分是函数generate_input
function[NNinput]=generate_input(image,imagesize)
imag_in=imread(image); %inlezen van de afbeelding
imgray=rgb2gray(imag_in); %Omzetting van rgb naar grijswaardenafbeelding
imag_double=double(imgray); %casting naar een double
inverse_gray=abs(imag_double -255); %inverteren van de grijswaarden
imag_int=uint8(inverse_gray); %double naar int
imag_resize=imresize(imag_int,[imagesize imagesize]);
[row,col]=size(imag_resize);
NNinput=zeros(1,(row*col));
NNindex=1;
for rowcounter=1:row
for colcounter=1:col
NNinput(1,NNindex)=imag_resize(rowcounter,colcounter);
NNindex=NNindex+1;
end
end
NNinput=log10(abs(fft(NNinput)));
第二部分是创建网络的地方
clear all;
persons=10; %aantal personen
trainingset=15; %grootte van de trainingset per persoon
imsize=50; %grootte van de nieuwe (te analyseren) afbeeldingen
NNinput=zeros(imsize^2,1);
targets=zeros(10,1);
inputrange=zeros(imsize^2,2);
targetrange=zeros(persons,2);
%generating NNinputs (NNinputs is the input database of all the pictures
%Generating targets
for personcounter=1:trainingset
S1_im =cat(2,'S1_' ,num2str(personcounter),'.jpg');
S2_im =cat(2,'S2_' ,num2str(personcounter),'.jpg');
S3_im =cat(2,'S3_' ,num2str(personcounter),'.jpg');
S4_im =cat(2,'S4_' ,num2str(personcounter),'.jpg');
S5_im =cat(2,'S5_' ,num2str(personcounter),'.jpg');
S6_im =cat(2,'S6_' ,num2str(personcounter),'.jpg');
S7_im =cat(2,'S7_' ,num2str(personcounter),'.jpg');
S8_im =cat(2,'S8_' ,num2str(personcounter),'.jpg');
S9_im =cat(2,'S9_' ,num2str(personcounter),'.jpg');
S10_im=cat(2,'S10_',num2str(personcounter),'.jpg');
S1_mat =generate_input(S1_im ,imsize);
S2_mat =generate_input(S2_im ,imsize);
S3_mat =generate_input(S3_im ,imsize);
S4_mat =generate_input(S4_im ,imsize);
S5_mat =generate_input(S5_im ,imsize);
S6_mat =generate_input(S6_im ,imsize);
S7_mat =generate_input(S7_im ,imsize);
S8_mat =generate_input(S8_im ,imsize);
S9_mat =generate_input(S9_im ,imsize);
S10_mat=generate_input(S10_im,imsize);
if (personcounter == 1)
NNinput(:,personcounter+0)=S1_mat';
targets(:,personcounter+0)=[1 0 0 0 0 0 0 0 0 0]';
NNinput(:,personcounter+1)=S2_mat';
targets(:,personcounter+1)=[0 1 0 0 0 0 0 0 0 0]';
NNinput(:,personcounter+2)=S3_mat';
targets(:,personcounter+2)=[0 0 1 0 0 0 0 0 0 0]';
NNinput(:,personcounter+3)=S4_mat';
targets(:,personcounter+3)=[0 0 0 1 0 0 0 0 0 0]';
NNinput(:,personcounter+4)=S5_mat';
targets(:,personcounter+4)=[0 0 0 0 1 0 0 0 0 0]';
NNinput(:,personcounter+5)=S6_mat';
targets(:,personcounter+5)=[0 0 0 0 0 1 0 0 0 0]';
NNinput(:,personcounter+6)=S7_mat';
targets(:,personcounter+6)=[0 0 0 0 0 0 1 0 0 0]';
NNinput(:,personcounter+7)=S8_mat';
targets(:,personcounter+7)=[0 0 0 0 0 0 0 1 0 0]';
NNinput(:,personcounter+8)=S9_mat';
targets(:,personcounter+8)=[0 0 0 0 0 0 0 0 1 0]';
NNinput(:,personcounter+9)=S10_mat';
targets(:,personcounter+9)=[0 0 0 0 0 0 0 0 0 1]';
else
NNinput=cat(2,NNinput,S1_mat');
targets=cat(2,targets,[1 0 0 0 0 0 0 0 0 0]');
NNinput=cat(2,NNinput,S2_mat');
targets=cat(2,targets,[0 1 0 0 0 0 0 0 0 0]');
NNinput=cat(2,NNinput,S3_mat');
targets=cat(2,targets,[0 0 1 0 0 0 0 0 0 0]');
NNinput=cat(2,NNinput,S4_mat');
targets=cat(2,targets,[0 0 0 1 0 0 0 0 0 0]');
NNinput=cat(2,NNinput,S5_mat');
targets=cat(2,targets,[0 0 0 0 1 0 0 0 0 0]');
NNinput=cat(2,NNinput,S6_mat');
targets=cat(2,targets,[0 0 0 0 0 1 0 0 0 0]');
NNinput=cat(2,NNinput,S7_mat');
targets=cat(2,targets,[0 0 0 0 0 0 1 0 0 0]');
NNinput=cat(2,NNinput,S8_mat');
targets=cat(2,targets,[0 0 0 0 0 0 0 1 0 0]');
NNinput=cat(2,NNinput,S9_mat');
targets=cat(2,targets,[0 0 0 0 0 0 0 0 1 0]');
NNinput=cat(2,NNinput,S10_mat');
targets=cat(2,targets,[0 0 0 0 0 0 0 0 0 1]');
end
end
%Generating inputrange
for inputrangecounter=1:imsize^2
inputrange(inputrangecounter,:)=[0 255];
end
%Generating targetrange
for targetrangecounter=1:persons
targetrange(targetrangecounter,:)=[0 1];
end
%Creating the neural network
net = feedforwardnet(100,'trainscg');
net = configure(net,inputrange,targetrange);
net.trainParam.epochs = 10000;
net.trainParam.max_fail =400;
net=trainscg(net,NNinput,targets,'useGPU','only');
文件的最后一部分是通过在网络中插入图片来测试网络
test_im=cat(2,'S5_2.jpg'); %Name of the picture
test_mat=generate_input(test_im,imsize); %Create inputvector from picture
Output=net(test_mat); %put inputvector in the network
plot(Output) %plot the output
我给出的输入并不重要,输出保持不变。