【人脸识别】人脸特征提取方法简述

我们知道人脸识别一个常用方法是先提取人脸的128维特征点,然后根据不同的算法比较特征点进行人脸识别工作,那么这个128维特征点是怎么提取的呢?

方法一:

网络我们选择卷积神经网络,使得网络最后输出是128维的向量,损失函数选择三元组损失:

其中A为一个人的照片,P是此人的另一张照片,N是另一个人的照片,α是间隔(超参数),比如是0.2,意义是非自己的人脸距离至少比自己人脸距离远0.2个距离,具体训练过程是要把训练图片分为一组组的三元组,并且使得A与N尽量的近,如果太远网络学习的慢。最后根据这个损失函数,用反向传播算法优化参数。

 

 

方法二:

继续使用方法一的网络,不过是要使用2次:

这2个网络共享参数,最后通过一个逻辑回归单元,如果是同一个人,就输出1,不同人输出0.

训练数据被分为两两一组,而不是方法一的三个一组,人工指定1或者0.

最后通过损失函数(比如均方误差)来进行训练

 

 

 

 

  • 7
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
人脸识别基本上是一个图像处理和模式识别的问题,可以使用神经网络来解决。BP神经网络是一种常用的有监督学习神经网络,可以用来进行分类和回归。以下是一个基于三层BP神经网络的人脸识别的C语言代码简述: 1.数据准备:从图像中提取人脸特征,例如颜色、纹理等。 2.数据预处理:对提取到的特征数据进行归一化处理,确保数据在相同的尺度。 3.神经网络训练:使用已知的人脸图像进行神经网络的训练,以便网络能够学习人脸特征并进行分类。 4.测试:将新的人脸图像输入到训练好的神经网络中,进行分类。 以下是一个简单的C语言代码框架: ```c #include <stdio.h> #include <stdlib.h> #include <math.h> #define INPUT_NODES 100 //输入层节点数 #define HIDDEN_NODES 50 //隐藏层节点数 #define OUTPUT_NODES 10 //输出层节点数 #define LEARNING_RATE 0.5 //学习率 double sigmoid(double x) { return 1.0 / (1.0 + exp(-x)); } int main() { double input[INPUT_NODES]; double hidden[HIDDEN_NODES]; double output[OUTPUT_NODES]; double weights_ih[INPUT_NODES][HIDDEN_NODES]; double weights_ho[HIDDEN_NODES][OUTPUT_NODES]; double bias_h[HIDDEN_NODES]; double bias_o[OUTPUT_NODES]; //初始化权重和偏置 //... //训练神经网络 //... //测试 //... return 0; } ``` 需要注意的是,这只是一个简单的框架,实际应用中需要根据具体情况进行修改和优化。同时,人脸识别是一个复杂的问题,单独使用BP神经网络可能无法达到较好的效果,需要结合其他的方法和算法进行综合应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值