机器学习事例IT课程分享机器学习与数据挖掘

爱恨两难的人脸识别技术——Pythton神经网络教你实现

2018-04-12  本文已影响189人  蓝桥云课

行人闯红灯的人脸识别系统已经出现在很多城市的十字路口了。一旦有行人闯红灯,他的图像信息和部分个人信息,就会及时地呈现在显示屏上面,中间的时差大约只有10秒钟的时间。

从闯红灯到视频曝光 只要10秒!

只要10秒钟!这就意味着,行人刚闯完红灯来到马路对面,结果一抬头就看到了自己闯红灯的一幕。


其实人脸识别在现实生活中已经有很多应用,以iPhone X的Face ID技术为例:用户可以通过手机相机中映射的人脸来解锁手机,其识别软件采用3-D建模设计,可防止被照片或面具欺骗,捕捉并比较超过30,000个变量,最终进行验证。不过,iPhone 刚热销那段时间,关于 Face ID 的可靠性与安全性质疑也甚嚣尘上。钓鱼攻击、恶意图像攻击、运行时篡改,甚至图像盗窃等猜测都曾出现在探讨话题中。

不得不感叹,人脸识别技术真是让人爱恨两难的!

这么高逼格的技术是如何实现的呢?今天给大家分享一个有趣的教程:利用基于无监督学习的自编码器对人脸数据进行特征提取,进行图片降维,利用降维后的结果作为有监督学习分类器的输入,最终利用一个三层神经网络实现人脸识别的任务(。・∀・)ノ
学前须知:

  • 该文章所有内容截选自实验楼教程【给Python3爬虫做一个界面.妹子图网实战】
  • 想动手实操的朋友请直接移步实验楼,进入课程实验环境,边学边做(ง •_•)ง
  • 本教程分多期为大家更新,请大家Mark并收藏好每一期的内容方便学习!

实验列表:

  • 实验1 无监督学习进行人脸数据降维
  • 实验2 利用有监督学习进行人脸识别

实验一.【无监督学习进行人脸数据降维】

一、课程介绍

1.1 内容简介

本次课程我们将利用在 基于无监督学习的自编码器实现 课程中介绍过的自编码器,实现对耶鲁大学人脸数据库B+中的人脸图片数据进行降维,再利用降维后的人脸数据进行有监督神经网络学习进行分类器训练,最终达到人脸识别的目的。

学前须知:本课内容基于以下3门课程基础上进行的实践扩展,相关基础理论并未作详细介绍,需要结合代码注释理解代码进行学习。缺少相应基础理论的同学请先学习以下3们课程:

自联想器的 Python 实现 介绍了神经网络
基于无监督学习的自编码器实现 已经详细介绍了自编码器
神经网络实现手写字符识别系统 中大致介绍了下神经网络有监督学习分类器。

1.2 知识点

人脸识别
人脸数据库
数据降维

1.3 课程流程

人脸数据准备
人脸识别自编码器实现
人脸识别分类器实现
本次课程需同学们具备有机器学习算法里神经网络的基础, 及对python依赖包numpy和matplotlib有一定了解

1.4 人脸自编码器效果截图

本次课程实现的是对Yale B+数据库中的4张人脸进行识别的任务,以下每一列分别代表其中的一个人

原始图像: 第100次自编码器训练结果: 第200次自编码器训练结果: 第300次自编码器训练结果:

二、实验原理

2.1 人脸识别任务及 yale B+ 数据库介绍

本次实验,我们所用的耶鲁大学人脸数据库B+

可点击Download下方的链接进入下载页面:
或通过实验楼提供的链接下载副本:http://labfile.oss.aliyuncs.com/courses/707/CroppedYale.zip

点击Cropped_Images下载裁剪过后的数据,裁剪好的图片数据中不包含其他背景,仅有人脸(不包括头发,耳朵等),本次课程中只用了下载好的数据CroppedYale中的其中四个人脸数据集yaleB01,yaleB02,yaleB03和yaleB04。数据库中每张人脸数据大小为192 x 168,对于每个人都有64张人脸图片,分别是在不同光照条件下拍摄得的。 为了节约计算时间,我们将原始数据的维度改成48 x 42,并且从每个文件夹中选出20张图片当做无监督学习时的数据集,14张作为有监督训练时的训练数据,10张为有监督训练的测试数据。

2.2 神经网络总结构

我们的神经网络由两部分组成,第一部分为自编码器训练完毕后的编码部分,第二部分为有监督训练单层网络,在基于无监督学习的自编码器实现中我们已经详细地介绍过自编码器的原理,这里我们将运用其作为对人脸进行数据降维,再结合有监督学习结合有标记数据进行分类训练。

自编码器结构:

自编码器网络结构:

总体网络结构,对于每个不同的人,我们采用一个四维列向量对其表达,这些列向量即是对不同人(类别)的数据标记:


三、实验操作

3.1 下载安装第三方python包

安装实验所需的第三方包 scipy, numpy, matplotlib,及下载所需的实验数据,及下载安装python-tk

sudo pip install scipy
sudo pip install numpy
sudo pip install matplotlib
sudo apt-get install python-tk

3.2 实验数据下载

由于处理数据是一个繁琐的过程,并不是本次课程主要核心内容,因此我们已将数据处理好并放置在yaleB_face_dataset.mat文件中,可通过以下命运获取此文件:

wget http://labfile.oss.aliyuncs.com/courses/707/yaleB_face_dataset.mat

3.3 自编码器实现

......

四、 总结

这节课程我们介绍了一个人脸数据库,并且利用自编码器对其进行了数据降维,将维度从2016降至56,下节课程我们将实现利用将这个降维后的数据进行有监督训练的网络,最终实现人脸识别的任务。
我们也可通过以下代码,展示自编码器训练结束时,自编码器对数据的编码效果:

fig2 = plt.figure(2)

#获得编码结果
code_result, tempZ = feedforward(w[0], b[0], X[0])
#展示原始数据图
for iImg in range(nColumn):
    ax = plt.subplot(2, nColumn, iImg+1)
    plt.imshow(unlabeled_data[:,eachFaceNum * iImg + 1].reshape((width,height)).T, cmap= plt.cm.gray)
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)
# 展示对应的编码结果
for iImg in range(nColumn):
    ax = plt.subplot(2,nColumn,iImg+nColumn+1)
    plt.imshow(code_result[:,eachFaceNum * iImg + 1].reshape((hidden_node,1)), cmap=plt.cm.gray)
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)

编码效果图:


本实验节选自实验楼教程【给Python3爬虫做一个界面.妹子图网实战】,详细实验步骤和完整代码可以点击实验查看噢!
下节实验我们将学习【利用有监督学习进行人脸识别】,最终实现人脸识别的任务!敬请期待啦!


更多趣味实验可以直接访问实验楼,在线实验环境操作方便,为大家定期更新最佳实验!(●'◡'●)

楼+课程咨询,欢迎添加班主任微信:

上一篇 下一篇

猜你喜欢

热点阅读