# 迁移学习之人脸识别
## 概述
想给家里的小八爪机器人加上人脸识别功能,比如瞄准的是我时就不能发射炮弹,这样儿子就没法拿这个怪物打我了。。。(也可以在工位上加个摄像头,领导来了提前报警。。。)
人脸识别跟普通的图像识别还是有相似的地方,比如都是图像 cnn 卷积池化;但也有很多不同,比如标注数据太少,全国的身份证人脸识别,每个人只有一张照片你怎么训练。。。这就需要用到一个新的迁移学习的思路:将一个问题上训练好的模型通过简单的调整使其快速适用于一个新的问题。
例如利用 ImageNet 数据集上训练好的 Inception-V3 模型来解决一个新的图像分类问题,可以保留训练好的 Inception-v3 模型中所有卷积层的参数,只是替换最后一层全连接层,在最后这一层全连接层之前的网络层称为瓶颈层。而将新的图像通过训练好的卷积神经网络直到瓶颈层的过程可以看成是对图像进行特征提取的过程,瓶颈层输出再通过一个单层的全连接层神经网络可以很好的区分类别,所以有理由相信将瓶颈层的输出的节点向量可以被称为任何图像的更加精简且表达能力更强的特征向量。所以可以直接利用这个训练好的神经网络对图像进行特征提取,然后再将提取得到特征向量作为输入来训练一个新的单层全连接网络来处理分类问题。
[![](https://www.writebug.com/myres/static/uploads/2022/1/3/b0a9647775884b4dd137f10e69359020.writebug)](http://blog.yanjingang.com/?attachment_id=2426)
需要注意的是,在数据量足够的情况下,迁移学习的效果不如完全重新训练,但是迁移学习所需要的训练时间和训练样本要远远小于训练完整的模型。
### **FaceNet**
FaceNet 由谷歌研究人员于 2015 年推出。主要思想是把人脸图像映射到一个多维空间,通过空间距离表示人脸的相似度。同个人脸图像的空间距离比较小,不同人脸图像的空间距离比较大。这样通过人脸图像的空间映射就可以实现人脸识别,FaceNet 中采用基于深度神经网络的图像映射方法和基于 triplets(三联子)的 loss 函数训练神经网络,网络直接输出为 128 维度的向量空间。在某种程度上,对于相似的面部,距离将更近,而对于非相似的面部,距离将更远。
[![](https://www.writebug.com/myres/static/uploads/2022/1/3/104c06546d1447405c94d6e64fcec50f.writebug)](http://blog.yanjingang.com/?attachment_id=2427)
- Download [this](https://drive.google.com/file/d/1EXPBSXwTaqrSC0OhUdXNmKSh9qJUQ55-/view) pretrained Facenet model and copy to model folder.
- Download [this](https://github.com/wangbm/MTCNN-Tensorflow/tree/master/save_model) pretrained MTCNN models and copy to mtcnn_model.
### **欧几里德距离**
欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义,指在 m 维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点之间的实际距离。
[![](https://www.writebug.com/myres/static/uploads/2022/1/3/690672c3a222bc1d1900ae7eab04fb9a.writebug)](http://blog.yanjingang.com/?attachment_id=2429)
三维欧几里德空间中的每个点都由三个坐标确定
## 实现
### **实现思路**:
1.建立人脸 FACEID 特征库:
身份证照片-> 人脸检测->FaceNet 计算 Embedding 特征-> 保存 FACEID 及对应人脸特征到 FACEDB
2.摄像头人脸识别:
摄像头-> 人脸检测->FaceNet 计算 Embedding 特征-> 获得摄像头人脸特征
3.人脸相似度比对:
比较摄像头人脸特征向量与 FACEDB 人脸特征向量间的欧式距离并倒排,根据距离判断是否为同一人(距离越小越接近, <0.6 可以确信是同一个人, >1 不可信)。
> 注:model/facenet/20180402-114759/目录的模型下载方式详见 model/facenet/readme.txt
# 测试
```
# face_embedding方式创建facedb+faceid特征对比示例
python face.py face_embedding
# 识别摄像头的人是谁
python infer.py
```
1.使用 face_embedding 方式识别效果:(每个 user 只用一张照片提取特征;后边小数是欧几里得距离,距离越小越像,<0.6 可以确信是同一个人, >1 时不可信 )
[![](https://www.writebug.com/myres/static/uploads/2022/1/3/ee55a1243d4d505865c44c021b681ff8.writebug)](http://blog.yanjingang.com/?attachment_id=2432)
2.使用 cnn 图像分类模型训练的识别效果:(每个 user 使用了 330 张照片用于训练;后边小数是准确率;这种方式训练的模型遇到相似的人时经常会认错人,比如我和儿子就经常识别错,特征明显的人没事;另外这种方式需要每个 user 提供大量照片用于训练,实际应用场景不太现实,所以最终选择上边的 1.face_embedding 方式)
[![](https://www.writebug.com/myres/static/uploads/2022/1/3/a2b198c9707f18dc61700e459a795e5d.writebug)](http://blog.yanjingang.com/?attachment_id=2431)
惯例加到微信小程序里方便测试:
[![](https://www.writebug.com/myres/static/uploads/2022/1/3/42def8e6ef7c70f8ec034a67cbb407d9.writebug)](http://blog.yanjingang.com/?attachment_id=2443)
# TODO
1.视频的识别 face_embedding 速度稍慢,需要看下能否优化
2.功能移植到 pi3+ 摄像头上,用于人脸检测和相应处理
参考:
[https://medium.com/intro-to-artificial-intelligence/one-shot-learning-explained-using-facenet-dff5ad52bd38](https://medium.com/intro-to-artificial-intelligence/one-shot-learning-explained-using-facenet-dff5ad52bd38)
[https://github.com/dkarunakaran/facenet_mtcnn_tensorflow_inference_engine](https://github.com/dkarunakaran/facenet_mtcnn_tensorflow_inference_engine)
[https://www.infoq.cn/article/how-to-achieve-face-recognition-using-mtcnn-and-facenet](https://www.infoq.cn/article/how-to-achieve-face-recognition-using-mtcnn-and-facenet)
[https://github.com/davidsandberg/facenet](https://github.com/davidsandberg/facenet)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
人脸识别跟普通的图像识别还是有相似的地方,比如都是图像 cnn 卷积池化;但也有很多不同,比如标注数据太少,全国的身份证人脸识别,每个人只有一张照片你怎么训练。。。这就需要用到一个新的迁移学习的思路:将一个问题上训练好的模型通过简单的调整使其快速适用于一个新的问题。 例如利用 ImageNet 数据集上训练好的 Inception-V3 模型来解决一个新的图像分类问题,可以保留训练好的 Inception-v3 模型中所有卷积层的参数,只是替换最后一层全连接层,在最后这一层全连接层之前的网络层称为瓶颈层。而将新的图像通过训练好的卷积神经网络直到瓶颈层的过程可以看成是对图像进行特征提取的过程,瓶颈层输出再通过一个单层的全连接层神经网络可以很好的区分类别,所以有理由相信将瓶颈层的输出的节点向量可以被称为任何图像的更加精简且表达能力更强的特征向量。所以可以直接利用这个训练好的神经网络对图像进行特征提取,然后再将提取得到特征向量作为输入来训练一个新的单层全连接网络来处理分类问题。
资源推荐
资源详情
资源评论
收起资源包目录
基于迁移学习的人脸识别实战.zip (3972个子文件)
batch_norm_24.b_0 280B
batch_norm_32.b_0 280B
batch_norm_27.b_0 280B
batch_norm_30.b_0 280B
batch_norm_23.b_0 280B
conv2d_28.b_0 280B
conv2d_23.b_0 280B
batch_norm_22.b_0 280B
batch_norm_25.b_0 280B
batch_norm_26.b_0 280B
conv2d_30.b_0 280B
batch_norm_29.b_0 280B
conv2d_32.b_0 280B
batch_norm_28.b_0 280B
batch_norm_31.b_0 280B
conv2d_26.b_0 280B
batch_norm_18.b_0 152B
batch_norm_16.b_0 152B
batch_norm_13.b_0 152B
conv2d_19.b_0 152B
batch_norm_19.b_0 152B
batch_norm_12.b_0 152B
batch_norm_11.b_0 152B
batch_norm_15.b_0 152B
batch_norm_14.b_0 152B
conv2d_15.b_0 152B
conv2d_17.b_0 152B
batch_norm_17.b_0 152B
conv2d_12.b_0 152B
conv2d_21.b_0 152B
batch_norm_21.b_0 152B
batch_norm_20.b_0 152B
conv2d_8.b_0 88B
batch_norm_10.b_0 88B
batch_norm_8.b_0 88B
conv2d_6.b_0 88B
conv2d_10.b_0 88B
batch_norm_7.b_0 88B
conv2d_2.b_0 88B
batch_norm_6.b_0 88B
batch_norm_0.b_0 88B
batch_norm_4.b_0 88B
batch_norm_9.b_0 88B
batch_norm_2.b_0 88B
batch_norm_5.b_0 88B
batch_norm_1.b_0 88B
conv2d_4.b_0 88B
batch_norm_3.b_0 88B
fc_0.b_0 64B
beta1_pow_acc_0 28B
beta1_pow_acc_1 28B
beta1_pow_acc_10 28B
beta1_pow_acc_100 28B
beta1_pow_acc_101 28B
beta1_pow_acc_102 28B
beta1_pow_acc_103 28B
beta1_pow_acc_104 28B
beta1_pow_acc_105 28B
beta1_pow_acc_106 28B
beta1_pow_acc_107 28B
beta1_pow_acc_108 28B
beta1_pow_acc_109 28B
beta1_pow_acc_11 28B
beta1_pow_acc_110 28B
beta1_pow_acc_111 28B
beta1_pow_acc_112 28B
beta1_pow_acc_113 28B
beta1_pow_acc_114 28B
beta1_pow_acc_115 28B
beta1_pow_acc_12 28B
beta1_pow_acc_13 28B
beta1_pow_acc_14 28B
beta1_pow_acc_15 28B
beta1_pow_acc_16 28B
beta1_pow_acc_17 28B
beta1_pow_acc_18 28B
beta1_pow_acc_19 28B
beta1_pow_acc_2 28B
beta1_pow_acc_20 28B
beta1_pow_acc_21 28B
beta1_pow_acc_22 28B
beta1_pow_acc_23 28B
beta1_pow_acc_24 28B
beta1_pow_acc_25 28B
beta1_pow_acc_26 28B
beta1_pow_acc_27 28B
beta1_pow_acc_28 28B
beta1_pow_acc_29 28B
beta1_pow_acc_3 28B
beta1_pow_acc_30 28B
beta1_pow_acc_31 28B
beta1_pow_acc_32 28B
beta1_pow_acc_33 28B
beta1_pow_acc_34 28B
beta1_pow_acc_35 28B
beta1_pow_acc_36 28B
beta1_pow_acc_37 28B
beta1_pow_acc_38 28B
beta1_pow_acc_39 28B
beta1_pow_acc_4 28B
共 3972 条
- 1
- 2
- 3
- 4
- 5
- 6
- 40
资源评论
甜辣uu
- 粉丝: 9559
- 资源: 1102
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功