神经网络与matlab

时间:2015-12-26 15:52:23

标签: matlab neural-network

我试图创建一个可以进行面部识别的神经网络。我有一个每人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

我给出的输入并不重要,输出保持不变。

0 个答案:

没有答案
相关问题