Hello Mat

 找回密码
 立即注册
查看: 8000|回复: 2

基于BP神经网络的人脸方向预测

[复制链接]

1294

主题

1520

帖子

110

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22633
发表于 2017-2-5 12:12:10 | 显示全部楼层 |阅读模式
BP神经网络视频:链接:http://pan.baidu.com/s/1nveLsUH 密码:1eao
人脸图像:链接:http://pan.baidu.com/s/1nuHeMNn 密码:955y
      BPBack Propagation)网络是1986年由RumelhartMcCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。本章基于BP神经网络进行人脸方向预测,通过不断的调正阈值使得系统达到最优状态。
      BP神经网络利用输出后的误差来估计输出层的直接前导层的误差,再用这个误差估计更前一层的误差,如此一层一层的反传下去,就获得了所有其他各层的误差估计。其网络结构图如图
    对于如图所示的人脸数据库图像,利用BP神经网络进行人脸方向预测,合理的定位人脸方向。
    由于人脸数据图为一系列图像,需要用户自己根据人脸特征进行相关数据提取,由于人眼特征较明显,易于分割,因此基于BP的神经网络算法进行人眼的定位预测人脸方向。
    因此需要以下几步:
1)首先提取特征数据;
2BP神经网络进行数据训练、预测、检验;
  1. clc % 清屏
  2. clear all;                         % 删除workplace变量
  3. close all;                                 % 关掉显示图形窗口

  4. images=[ ];  
  5. M_train=3;                        %表示人脸
  6. N_train=5;                                %表示方向
  7. sample=[];  
  8. pixel_value=[];
  9. sample_number=0;

  10. for j=1:N_train
  11.       for i=1:M_train
  12.         %读取图像,连接字符串形成图像的文件名。
  13.         str=strcat('Images\',num2str(i),'_',num2str(j),'.bmp');
  14.         img= imread(str);  
  15.         [rows cols]= size(img);                                %获得图像的行和列值
  16.         img_edge=edge(img,'Sobel');

  17.         %由于在分割图片中,人脸的眼睛部分位置变化比较大,边缘检测效果好
  18.         sub_rows=floor(rows/6);                        %最接近的最小整数,分成6行
  19.         sub_cols=floor(cols/8);                        %最接近的最小整数,分成8列
  20.         sample_num=M_train*N_train;                %前5个是第一幅人脸的5个角度

  21.         sample_number=sample_number+1;
  22.         for subblock_i=1:8                                 %因为这还在i,j的循环中,所以不可以用i
  23.             block_num=subblock_i;
  24.             pixel_value(sample_number,block_num)=0;  
  25.             for ii=sub_rows:(2*sub_rows)
  26.                 for jj=(subblock_i-1)*sub_cols+1:subblock_i*sub_cols
  27.                     pixel_value(sample_number,block_num)=pixel_value(sample_number,block_num)+img_edge(ii,jj);         
  28.                 end
  29.             end     
  30.         end  
  31.     end
  32. end

  33. %将特征值转换为小于1的值
  34. max_pixel_value=max(pixel_value);
  35. max_pixel_value_1=max(max_pixel_value);
  36. for i=1:3
  37.     mid_value=10^i;
  38.     if(((max_pixel_value_1/mid_value)>1)&&((max_pixel_value_1/mid_value)<10))
  39.         multiple_num=1/mid_value;
  40.         pixel_value=pixel_value*multiple_num;
  41.         break;
  42.     end
  43. end

  44. % T 为目标矢量
  45. t=zeros(3,sample_number);
  46. %因为有五类,所以至少用3个数表示,5介于2的2次方和2的3次方之间
  47. for i=1:sample_number
  48.     % if((mod(i,5)==1)||(mod(i,5)==4)||(mod(i,5)==0))
  49.     if(i<=3)||((i>9)&&(i<=12))||((i>12)&&(i<=15))
  50.         t(1,i)=1;
  51.     end   
  52.     %if((mod(i,5)==2)||(mod(i,5)==4))
  53.     if((i>3)&&(i<=6))||((i>9)&&(i<=12))
  54.         t(2,i)=1;
  55.     end        
  56.     %if((mod(i,5)==3)||(mod(i,5)==0))
  57.     if((i>6)&&(i<=9))||((i>12)&&(i<=15))
  58.         t(3,i)=1;
  59.     end           
  60. end  

  61. % NEWFF——生成一个新的前向神经网络
  62. % TRAIN——对 BP 神经网络进行训练
  63. % SIM——对 BP 神经网络进行仿真

  64. %  定义训练样本
  65. % P 为输入矢量
  66. P=pixel_value'
  67. % T 为目标矢量
  68. T=t
  69. size(P)
  70. size(T)
  71. % size(P)
  72. % size(T)

  73. %  创建一个新的前向神经网络  
  74. net_1=newff(minmax(P),[10,3],{'tansig','purelin'},'traingdm')
  75. %  当前输入层权值和阈值
  76. inputWeights=net_1.IW{1,1}
  77. inputbias=net_1.b{1}
  78. %  当前网络层权值和阈值
  79. layerWeights=net_1.LW{2,1}
  80. layerbias=net_1.b{2}
  81. %  设置训练参数
  82. net_1.trainParam.show = 50;
  83. net_1.trainParam.lr = 0.05;
  84. net_1.trainParam.mc = 0.9;
  85. net_1.trainParam.epochs = 10000;
  86. net_1.trainParam.goal = 1e-3;
  87. %  调用 TRAINGDM 算法训练 BP 网络
  88. [net_1,tr]=train(net_1,P,T);
  89. %  对 BP 网络进行仿真
  90. A = sim(net_1,P);
  91. %  计算仿真误差  
  92. E = T - A;
  93. MSE=mse(E)

  94. x=[0.14 0 1 1 0 1 1 1.2]';
  95. sim(net_1,x)
复制代码
具体也可以参考:http://wenku.baidu.com/link?url= ... reI_fUiYIrLHRK4BhNa





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

0

主题

22

帖子

1

金钱

新手上路

Rank: 1

积分
23
发表于 2019-8-31 11:43:08 | 显示全部楼层
很棒的分享,希望博主坚持下去
回复 支持 反对

使用道具 举报

0

主题

13

帖子

1

金钱

新手上路

Rank: 1

积分
17
发表于 2020-4-15 23:53:31 | 显示全部楼层
感谢楼主分享!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-4-20 21:28 , Processed in 0.235015 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表