一、人脸识别介绍
人脸识别技术(FRT)是当今模式识别和人工智能领域的一个重要研究方向。虽然人脸识别的研究已有很长的历史,各种人脸的识别技术也很多,但由于人脸属于复杂模式而且容易受表情、肤色和衣着的影响,目前还没有一种人脸识别技术是公认快速有效的。人脸朝向识别是一个复杂的模式识别问题,当人脸朝向不同的方向时,眼睛在图像中的位置差别较大。本文将图片中描述眼睛位置的特征信息通过Sobel边缘算子提取出来作为LVQ神经网络的输入,人脸朝向作为神经网络的输出,利用Matlab工具箱通过对训练集的图片进行训练,得到具有预测识别功能的网络,从而可以对任意给出的人脸图像进行判断和识别。
二、LVQ神经网络介绍
学习向量量化LVQ(Learning Vector Quantization)神经网络,属于前向神经网络类型,在模式识别和优化领域有着广泛的的应用,其网络结构图如图所示。

  • LVQ神经网络由三层组成,即输入层、隐含层和输出层,网络在输入层与隐含层间为完全连接,而在隐含层与输出层间为部分连接,每个输出层神经元与隐含层神经元的不同组相连接。隐含层和输出层神经元之间的连接权值固定为1。输入层和隐含层神经元间连接的权值建立参考矢量的分量(对每个隐含神经元指定一个参考矢量)。在网络训练过程中,这些权值被修改。隐含层神经元(又称为Kohnen神经元)和输出神经元都具有二进制输出值。当某个输入模式被送至网络时,参考矢量最接近输入模式的隐含神经元因获得激发而赢得竞争,因而允许它产生一个“1”,而其它隐含层神经元都被迫产生“0”。与包含获胜神经元的隐含层神经元组相连接的输出神经元也发出“1”,而其它输出神经元均发出“0”。产生“1”的输出神经元给出输入模式的类,由此可见,每个输出神经元被用于表示不同的类。

  • 在MATLAB神经工具箱中提供的与算法相关的LVQ神经网络工具函数和基本功能如下表所示。

  • 在MATLAB的命令行窗口中输入“help lvq”,便可得到与LVQ神经网络相关的函数,进一步利用help命令又能得到相关函数的详细介绍。

    三、LVQ神经网络在人脸朝向识别中的应用
  • 问题描述

    现采集到一组人脸朝向不同角度时的图像,图像来自不同的20个人,每人5幅图像,人脸的朝向分别为:左方、左前方、前方、右前方和右方,如图所示。试创建一个LVQ神经网络,对任意给出的人脸图像进行朝向预测和识别。

  • 设计思路与步骤
    通过观察不难发现,当人脸面朝不同方向时,眼睛在图像中的位置差别较大。因此,可以考虑将图片中描述眼睛位置的特征向量提取出来作为LVQ神经网络的输入,5个朝向分别用1,2,3,4,5表示,作为LVQ神经网络的输出。通过对训练集的图像进行训练,得到具有预测功能的网络,便可以对任意给出的人脸图像进行朝向判断和识别[12]。
    根据上述设计思路,设计步骤主要包括以下几个部分,如图所示。

  • 人脸特征向量的提取
    当人脸朝向不同时,眼睛在图像中的位置会有明显的差别。因此,只需要将描述人眼位置信息的特征向量提取出来即可。方法是将采集到的100幅图像先进行预处理,将图片按320×360的尺寸对人脸部位进行裁剪,然后将裁剪得到的图像按“人员编号_人脸朝向”的格式进行命名,再将其转换成二值灰度图像,接着将图像划分成6行8列,人眼的位置信息可以用第2行的8个子矩阵来描述,用Sobel边缘算子进行边缘检测后8个子矩阵中的值为“1”的像素点个数与人脸朝向有直接关系,只要分别统计出第2行的8个子矩阵中的值为“1”的像素点即可。
    (1) 图像预处理
    将采集到的不同大小的图像利用美图秀秀将其裁剪成320×360尺寸大小的人脸图像,如图3-3所示。

(2) 图像转换
利用MATLAB图像处理工具箱中的rgb2gray函数将RGB图像转换为灰度图像,实现程序如下:
%读取图像
I=imread(‘2_2.bmp’);
%将RGB图像转换为灰度图像
j=rgb2gray(I);
figure,imshow(I),figure,imshow(j);
图像转换结果如图3-4所示。

(3) Sobel算子进行边缘检测
Sobel算子是一组方向算子,从不同的方向检测边缘。Sobel算子不是简单求平均再差分,而是加强了中心像素上下左右4个方向像素的权重,运算结果是一幅边缘图像。该算子通常由下列计算公式表示:



适当调整常数T的大小来达到最佳效果。部分实现代码如下:
%读取图像
I=imread(‘2_2.bmp’);
%将RGB图像转换为灰度图像
j=rgb2gray(I);
figure,imshow(I),figure,imshow(j);
%Sobel算子进行边缘检测
ps=edge(j,’Sobel’);
figure,imshow(ps);
利用Sobel算子对图3-4进行边缘检测后的结果如图3-5所示。

(4) 统计像素点位置
人脸特征向量提取的任务是将图像中描述人眼位置的信息提取出来,即统计出划分网格第2行的8个子矩阵中的值为“1”的像素点的个数。具体实现程序如下:
%人脸特征向量提取
%人数
M=20;
%人脸朝向类别数
N=5;
%特征向量提取
pixel_value=feature_extraction(M,N);
其中,feature_extraction为人脸特征向量提取子函数。
提取出的像素点个数用一个100×8的矩阵表示出来,作为LVQ神经网络的输入层。

  • 训练集/测试集产生

图像库中所有图片的特征向量提取出来以后,将100个不同人脸朝向的特征向量作为训练集,测试集为随机抽取的20个不同人脸朝向的图片的特征向量。具体程序如下:
% 训练集/测试集产生
% 产生图像序号的随机序列
rand_label=randperm(M*N);
% 人脸朝向标号
direction_label=repmat(1:N,1,M);
% 训练集
train_label=rand_label(1:100);
P_train=pixel_value(train_label,:)’;
Tc_train=direction_label(train_label);
T_train=ind2vec(Tc_train);
% 测试集
test_label=rand_label(81:end);
P_test=pixel_value(test_label,:)’;
Tc_test=direction_label(test_label);

LVQ神经网络的优点是不需要将输入向量进行归一化、正交化,利用MATLAB自带的神经网络工具箱函数newlvq( )可以构建一个LVQ神经网络。本文中隐含层神经元个数设置为10。由于训练集数据是随机产生的,所以参数PC的设置需要事先计算得出,具体的程序为:
% 创建 LVQ 网络
for i=1:5
rate{i}=length(find(Tc_train==i))/100;
end
net=newlvq(minmax(P_train),10,cell2mat(rate),0.01,’learnlv1’);
% 设置训练参数
net.trainParam.epochs=1000;
net.trainParam.goal=0.001;
net.trainParam.lr=0.1;

  • 训练LVQ网络
    网络创建完毕后,便可以将训练集输入向量送入到网络中,利用MATLAB自带的网络训练函数train( )可以方便地对网络进行训练学习,具体程序为:
    % 训练网络
    net=train(net,P_train,T_train);
  • 人脸识别仿真测试
    网络训练收敛后,便可以对测试集数据进行预测,即对测试集的图像进行人脸朝向识别。对于任意给出的图像,只需要将其特征向量提取出来,便可对其进行识别。本文利用sim( )函数将测试集输入数据送入训练好的神经网络,便可以得到测试集的输出仿真数据,即测试集图像的人脸朝向识别结果。具体程序为:
    % 人脸识别测试
    T_sim=sim(net,P_test);
    Tc_sim=vec2ind(T_sim);
    result=[Tc_test;Tc_sim]

  • 结果显示与分析
    对随机抽取的20幅不同人脸朝向的测试集进行人脸朝向识别后结果见下图

    结果集result的第1行为测试集图像的标准人脸朝向类别,第2行为测试集图像的预测人脸朝向类别。

以上就是LVQ神经网络在人脸朝向识别中的应用,自己是研一新手,通过上网查资料,一步一步的把它实现出来,并搞懂,只能说,这还是学习第一步,写出来给有兴趣者共享,没看懂的,欢迎私信我。

代码+源程序+图片数据集请前往LVQ神经网络之人脸朝向识别(源程序+图片数据集)

LVQ神经网络之人脸朝向识别详细解析相关推荐

  1. 基于深度神经网络的人脸表情识别

    Preprocessing Fer2013 数据集 链接:fer2013.csv 提取码:mzvb 复制这段内容后打开百度网盘手机App,操作更方便哦 参考 下载fer2013数据集和数据的处理 基于 ...

  2. Fer2013 数据集人脸表情识别 详细代码

    Fer2013 数据集人脸表情识别 详细代码 本文将从数据集.模型训练.模型实践应用(AI模型落地场景实际应用)几个部分完整讲解基于Fer2013 数据集的人脸表情识别项目, 最终项目实现效果: 通过 ...

  3. 基于卷积神经网络的人脸表情识别应用--AR川剧变脸(二)

    本项目将在Android上实现一种通过识别表情类别,从而给人脸戴上不同样式脸谱的AR软件,效果如下: 基于表情识别的脸谱换脸AR安卓APP效果演示 想要实现这样一个软件,核心就是两部分: 1)使用卷积 ...

  4. 基于卷积神经网络的人脸表情识别应用--AR川剧变脸(一)

    1.摘要 本项目将在Android上实现一种通过识别表情类别,从而给人脸戴上不同样式脸谱的AR软件,效果如下: 基于表情识别的脸谱换脸AR安卓APP效果演示 通过深度学习和Keras训练一个人脸表情识 ...

  5. 卷积神经网络实现人脸表情识别

    文章目录 一.实现过程 1.1 下载数据集 1.2 根据猫狗数据集训练的方法来训练笑脸数据集 1.2 图片分类 1.3 作为健全性检查,计算一下在每个训练分割中我们有多少图片(训练/验证/测试): 1 ...

  6. 基于卷积神经网络的人脸表情识别(JAFFE篇)

    一.前言 人脸表情识别依然是计算机视觉中的研究重点,那就意味着它还有水文章的可能性.本专题将专门讨论各种表情识别的研究方法,当然我们从最简单的单一卷积网络开始.本文中的代码直接复制到电脑端(pytho ...

  7. 踩坑记录: Pytorch框架下--- 从零使用卷积神经网络实现人脸面部表情识别 (基于连续维度)

    之前一直在自学深度神经网络的知识,在跟着书本一步一步走的时候,感觉每一个思路,每一句代码都特别容易,实现思路清晰明了,实验代码简单易懂.但当我真正课题需要用到的时候,想跳出书本的框架,自行实现并通透其 ...

  8. 基于cnn的人脸识别_基于卷积神经网络(CNN)的人脸在线识别系统

    微信搜索"AI大道理",选择"置顶"公众号 重磅干货,深入讲解AI大道理 ------ 本设计研究人脸识别技术,基于卷积神经网络构建了一套人脸在线检测识别系统, ...

  9. python与tensorflow实现人脸表情识别(基于CNN)

    使用fer2013数据集,卷积神经网络实现人脸表情识别 python与CNN实现,有GUI界面,支持摄像头实时识别和手动选取图片识别,GUI界面选取图片进行识别实现效果如下图 摄像头实时读取并识别表情 ...

最新文章

  1. (C++)数组作为函数参数
  2. 树形dp ---- gym101655 D - Delta Quadrant 树上连通块思维换根 + 树形dp
  3. Spring NamedParameterJdbcTemplate 详解
  4. CodeForces - 336A Vasily the Bear and Triangle
  5. 布朗的计算机排名,布朗大学计算机工程硕士排名第26(2020年TFE Times排名)
  6. 【codevs1519】 过路费
  7. 补码中的+0和-0为什么机器码相同?
  8. 十一、JUC包中的锁
  9. Collectors.summingDouble()
  10. 按下()快捷键 可以迅速锁定计算机,电脑锁定的快捷键
  11. Jupyter Notebook 内核似乎挂掉了,它很快将自动重启
  12. 计算机考研人工智能方向,2022考研计算机学科研究方向:人工智能
  13. 用友u8服务器修改ipv4,用友U8-OA11.1 用友U8加密狗更换服务器了-用友U8
  14. Gentoo Linux 快速安装记录
  15. MongoDB修改器使用
  16. 一名蒟蒻OIer(或许还算不上?)的NOI_Online2022的日录
  17. mocha测试框架使用
  18. css——给多张图片设置一个背景图:上下固定尺寸+中间拉伸,里面放内容
  19. 手眼标定_全面细致的推导过程
  20. 百度谷歌等各大搜索引擎网站收录提交入口

热门文章

  1. 即将换到一个自己不熟悉的部门做领导,应该怎么办
  2. 浏览器如何显示页面(一)
  3. 教师计算机培训反思总结,教师计算机培训心得体会-20210603001856.docx-原创力文档...
  4. 新手学go,导包导不了
  5. 自闭症儿童为何越来越多?可能与这3大原因有关
  6. Docker系列之五:Volume 卷的使用——以Redis为例
  7. 成像系统的高级PSF及MTF计算
  8. DCG dual conversion gain双转换增益(参考Aptina---DR-Pix_WhitePaper)
  9. JavaSE_8【IDE开发工具Idea使用】
  10. Mac-查看开关机记录