人脸识别流程图
特征提取器
Arc-Softmax
公式
运用到Mnist数字10分类上的效果图:
代码实现:https://blog.csdn.net/qq_39086406/article/details/103188022
网络搭建
数据集制作
注:VggFace,CelebA等数据集也可以尝试
人脸校正算法
import numpy as np
import PIL.Image as pimg
def adjust(fx1,fy1,fx2,fy2,face):
# 1.找到眼睛倾斜的角度和两眼距离
p1 = np.array([fx1,fy1]) # 左眼坐标
p2 = np.array([fx2,fy2]) # 右眼坐标
dp = p1 - p2
angle = np.arctan(dp[1] / dp[0])
# 2. 旋转图片
angle = angle * 180 / np.pi
rot_img = face.rotate(angle)
rot_img=rot_img.resize((96,96))
return rot_img
模型训练
损失函数:CrossEntropyLoss()
优化器:SGD(net1.parameters(),lr=0.1,momentum=0.9,weight_decay=0.0005)
模型测试
训练正常的情况下,相似度cosine1会比较高,相似度cosine2会比较低
效果展示
使用流程
1、将要识别的人的图片传入MTCNN中,输出带人脸的框
(MTCNN请看https://blog.csdn.net/qq_39086406/article/details/103183595)
2、将带人脸的框转化为正方形后,再做人脸校正,再resize成96x96
3、传入特征提取模型中,输出并保存特征
4、向特征提取器输入识别的人的其他图片或其他人的图片,得到若干其他特征
5、将特征3的特征和4的特征做余元相似度
6、相似度大于某一设定阈值则为本人
效果图
我设置的阈值相似度是80%,大于阈值则为本人