人工智能小白日记 人脸检测识别之1 相关调研及Facenet初体验

前言

这几天开始接触真实项目了,那就是在具体使用场景下的人脸识别。要开始揭开人脸识别的神秘面纱了,想想还是有点小激动的。当然,作为我等新手,一开始不应该自己去实现它,而是看看别人怎么做的,现在有很多开源模型,效果强大。使用它们会大大降低成本,毕竟探索是要时间的。

正文内容

1 调研

在开始之前,当然摸下行情,选个入手方向。因此展开了为期半天的网上找资料。大概有这么几种实现
1)参考https://www.cnblogs.com/gbin1/p/7456422.html
人脸识别大致流程:
1-1)在图片中检测所有人脸
2005年 方向梯度直方图 HOG

1-2)对每张人脸预处理 矫正 或是识别不同角度的图片是否同一人
2014年 面部特征点估计 64点

1-3)脸部编码
采用神经网络提取特征
2015年 脸部特征提取 128个测量值

1-4)从编码中找到对应的人
可以用机器学习中的分类器

2)参考https://www.ixueshu.com/document/8fdff1491a700c4d9e908a3c0d3d464d.html
这是一篇16年的研究现状综述

发现了数据集 LFW
发现了强大的模型 DeepID, DeepFace, Facenet

3)参考
https://blog.csdn.net/hh_2018/article/details/80581612
这篇做了对DeepID, DeepFace, Facenet的差异比较

4)参考
https://blog.csdn.net/guleileo/article/details/80863579
这篇格局比较高,可以用作后面的延伸阅读。介绍了人脸识别的应用情况,以及亟待解决的一些问题。

另外,分别查了下这个三个模型的情况,感觉用FaceNet会比较好入手。github上有代码,还有预训练的模型。所以就从FaceNet开始好了。

2 FaceNet简介

通过前面的调研,现在的人脸识别大致流程都差不多:
1)检测一张图里是否有人脸
2)对其做矫正
3)提取其特征
4)对特征进行识别

FaceNet大概也是这么干的。FaceNet中包含了MTCNN模型和FaceNet模型。

MTCNN模型会对图片做人脸检测和特征检测,可以检测,矫正,裁剪,得到160x160的目标图片。
FaceNet模型则可以对目标图片提取特征,最后通过计算特征的欧式距离来识别是否同一人。

3 FaceNet初体验

首先,得找到一篇可以带我们入坑的文章,比如这篇:
https://blog.csdn.net/niutianzhuang/article/details/79191167

然后一顿操作猛如虎:
1)下载数据集,这里用的lfw
2)下载facenet
3)下载可用模型,他用的17年的,我找到一个18年的,亲测可用
https://download.csdn.net/download/bing1zhi2/10782048

注意:以下这些配置并不需要,后面告诉你为啥
在这里插入图片描述

4)数据矫正

python src/align/align_dataset_mtcnn.py /Users/cd/Downloads/AI/人脸检测识别/lfw /Users/cd/Downloads/AI/人脸检测识别/facenet-master/dataset/lfw/lfw_mtcnnpy_160 --image_size 160 --margin 32 --random_order --gpu_memory_fraction 0.25 

如果在目标文件夹中能生成这些160x160的帅气照片,咱就成功了
在这里插入图片描述
可惜,成功的路上总会磕磕碰碰,记录下发生了什么:
4-1)ModuleNotFoundError: No module named ‘facenet’
原因:这个玩python的人应该相当容易搞定,当前目录下运行文件会以当前目录为根,需要将facenet的路径添加到检索路径中

解决方案:
import sys
sys.path.append(’/Users/cd/Downloads/AI/人脸检测识别/facenet-master/src/’)

4-2)module ‘scipy.misc’ has no attribute ‘imread’
原因:SciPy1.0.0不赞成使用imread,在1.2中已经弃用

解决方案:需要安装pillow
pip install pillow

5)人脸对比

python src/compare.py /Users/cd/Downloads/AI/人脸检测识别/facenet-master/models/20180402-114759 /Users/cd/Downloads/AI/人脸检测识别/facenet-master/dataset/lfw/test/Adam_Sandler_0002.png /Users/cd/Downloads/AI/人脸检测识别/facenet-master/dataset/lfw/test/Albert_Costa_0003.png

后面的图片路径自己找,我用的Albert_Costa_0002和Albert_Costa_0003同一人
在这里插入图片描述在这里插入图片描述
测试结果:
在这里插入图片描述
再来个相似度较高的两人Albert_Costa_0002 和 Adam_Sandler_0002
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
矮油,差异这么大1.24,还是挺厉害的有木有。

6)lfw数据集验证

python src/validate_on_lfw.py /Users/cd/Downloads/AI/人脸检测识别/facenet-master/dataset/lfw/lfw_mtcnnpy_160 /Users/cd/Downloads/AI/人脸检测识别/facenet-master/models/20180402-114759

这里会发生一个问题,“The name ‘decode_image/cond_jpeg/is_png’ refers to an Operation not in the graph.”
如果你在前面做了配置,把tensorflow降低到1.7,就没有这个问题,但是我们怎么可以降低呢,当然是用新版本。所以可以有第二种选择:
在facenet.py代码中找到create_input_pipeline 再添加一行语句 with tf.name_scope(“tempscope”): 就可以完美解决(貌似Tensorflow 1.10及以上版本才修复这个bug)
在这里插入图片描述
验证集跑出0.98的成绩。

ok,测试完毕。当然如果你不具备requarement中的一些工具,还是要一一安装的。

小结

FaceNet确实比较容易上手,出的问题很少,也比较容易解决。接下来,就是如何利用它来实现我们想要的功能了。目前,需要做两件事情,一是用框框出照片中所有的人的头部位置,二是在一的基础上利用我的摄像头拍照后识别出我自己的头像。还是很有趣的有木有。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值