深度学习项目——基于卷积神经网络(CNN)的人脸在线识别系统
基于卷积神经网络(CNN)的人脸在线识别系统
本设计研究人脸识别技术,基于卷积神经网络构建了一套人脸在线检测识别系统,系统将由以下几个部分构成:
制作人脸数据集、CNN神经网络模型训练、人脸检测、人脸识别。经过实验,确定该系统可对本人的人脸进行快速并准确的检测与识别。
关键词: 神经网络; 图像处理; 人脸检测;人脸识别;TensorFlow;模型训练
一、设计目标
1.掌握人脸识别原理;
2.掌握卷积神经网络算法原理
3.掌握卷积神经网络模型训练过程;
4.掌握常用图像处理技术;
设计内容与要求
1.完成基于卷积神经网络的人脸在线识别系统算法设计;
2.完成基于卷积神经网络的人脸在线识别系统模型训练;
3.检测并且识别出人脸;
二、制作人脸数据集
2.1、制作我的人脸数据集
人脸检测出人脸位置,返回坐标、尺寸把脸用数组切片的方法截取下来,把截取的小图片保存下来作为数据集。
本系统获取本人的人脸数据集10000张,使用的是dlib来识别人脸,虽然速度比OpenCV识别慢,但是识别效果更好。
其中,人脸大小:64*64。
2.2、主要步骤
(1)加载 dlib机器学习的开源库
(2)图像预处理 cvtColor(灰度化)。
(3)使用dlib自带的frontal_face_detector进行特征提取。
(4)使用特征提取器进行人脸检测。
(5)人脸保存。
2.3、制作结果


2.5 、制作其他人脸数据集
本系统使用人脸数据集下载:http://vis-www.cs.umass.edu/lfw/lfw.tgz。
先将下载的图片集放在img_source目录下,用dlib来批量识别图片中的人脸部分,
并保存到指定目录faces_other。人脸大小为64*64。
2.6、主要步骤
(1)读入人脸数据集源文件
(2)加载 dlib机器学习的开源库。
(3)用dlib来批量识别图片中的人脸部分。
(4)人脸保存。
2.7、制作结果


三、 神经网络模型训练
3.1、卷积神经网络内部分析
第一、二层(卷积层1、池化层1),输入图片64*64*3,输出图片32*32*32;
第三、四层(卷积层2、池化层2),输入图片32*32*32,输出图片16*16*64;
第五、六层(卷积层3、池化层3),输入图片16*16*64,输出图片8*8*64;
第七层(全连接层),输入图片8*8*64,reshape到1*4096,输出1*512;
第八层(输出层),输入1*512,输出1*2。
输出神经网络输出的1*2,与标签y_ [0,1]、[1,0]对比得出损失,损失函数为交叉熵,优化器采用Adan优化器,计算模型准确率。
代码实现:
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=out, labels=y_))
optimizer = tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy)
accuracy = tf.reduce_mean(tf.cast(tf.equal(tf.argmax(out, 1), tf.argmax(y_, 1)), tf.float32))

3.2、输入层
人脸检测出人脸位置,返回坐标、尺寸把脸用数组切片的方法截取下来,把截取的小图片送入神经网络进行训练,输入的图片64*64*3。
3.3、卷积层
本网路共三层卷积层,卷积核大小为(3,3),卷积步长为[1,1,1,1],即一步,padding=“SAME”。卷积层提取特征,
增加通道数,图片大小不变。
3.4、池化层
本文提出的池化层采用最大值采样,采样大小为2*2,即把输入的特征图分割成不重叠的2*2大小的矩形,对每个矩形取最大值,
所以输出特征图的长和宽均是输入特征图的一半。
3.5、全连接层
为了增强网络的非线性能力,同时限制网络规模的大小,网络在特征提取层提取特征后,接入一个全连接层,该层的每一个神经元
与前一层的所有神经元互相连接,将图片的卷积输出压扁成一个一维向量,输出1*512。
3.6、输出层
本系统共分两类,一类我的人脸(yes),另一类其他人脸(no),从全连接层输入1*512,输出层输出1*2。为求loss做准备。
3.7、主要步骤
(1)读入制作好的人脸数据集,将图片数据与标签转化成数组。
(2)划分测试集:训练集=20:1,做归一化处理。
(3)传入卷积神经网络。
(4)训练。
3.8、训练结果



四、利用模型进行人脸识别
4.1 、主要步骤
(1)打开摄像头获取图片进行灰度化。
(2)人脸检测。
(3)导入训练好的神经网络模型。
(4)人脸识别。
4.2、识别结果


五、总结
本次设计主要研究了基于卷积神经网络的人脸在线识别系统。设计了基于机器视觉的人脸图像采集系统,
自己制作了训练需要的人脸数据集。设计并实现了基于卷积神经网络的人脸识别系统,完成了基于卷积神经网络的
人脸在线识别系统算法设计、神经网络模型训练,实现了对人脸的在线检测与识别。检测出本人人脸,则在人脸上
显示”yes, my face”,若不是我的人脸,则在人脸上显示”no, other face ”。
六 、代码
见个人GitHub:https://github.com/hhhvvvddd/CNN_faces_recognition
浅谈则止,深入理解AI大道理
扫描下方“AI大道理”,选择“关注”公众号

欢迎加入!
深度学习项目——基于卷积神经网络(CNN)的人脸在线识别系统的更多相关文章
- 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理
上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...
- 深度学习项目——基于循环神经网络(RNN)的智能聊天机器人系统
基于循环神经网络(RNN)的智能聊天机器人系统 本设计研究智能聊天机器人技术,基于循环神经网络构建了一套智能聊天机器人系统,系统将由以下几个部分构成:制作问答聊天数据集.RNN神经网络搭建.seq2s ...
- 基于卷积神经网络CNN的电影推荐系统
本项目使用文本卷积神经网络,并使用MovieLens数据集完成电影推荐的任务. 推荐系统在日常的网络应用中无处不在,比如网上购物.网上买书.新闻app.社交网络.音乐网站.电影网站等等等等,有人的地方 ...
- 深度学习笔记 (一) 卷积神经网络基础 (Foundation of Convolutional Neural Networks)
一.卷积 卷积神经网络(Convolutional Neural Networks)是一种在空间上共享参数的神经网络.使用数层卷积,而不是数层的矩阵相乘.在图像的处理过程中,每一张图片都可以看成一张“ ...
- SIGAI深度学习第九集 卷积神经网络3
讲授卷积神经网络面临的挑战包括梯度消失.退化问题,和改进方法包括卷积层.池化层的改进.激活函数.损失函数.网络结构的改 进.残差网络.全卷机网络.多尺度融合.批量归一化等 大纲: 面临的挑战梯度消失问 ...
- 卷积神经网络CNN 手写数字识别
1. 知识点准备 在了解 CNN 网络神经之前有两个概念要理解,第一是二维图像上卷积的概念,第二是 pooling 的概念. a. 卷积 关于卷积的概念和细节可以参考这里,卷积运算有两个非常重要特性, ...
- 基于卷积神经网络的手写数字识别分类(Tensorflow)
import numpy as np import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_dat ...
- 【RS】Automatic recommendation technology for learning resources with convolutional neural network - 基于卷积神经网络的学习资源自动推荐技术
[论文标题]Automatic recommendation technology for learning resources with convolutional neural network ( ...
- 卷积神经网络CNN总结
从神经网络到卷积神经网络(CNN)我们知道神经网络的结构是这样的: 那卷积神经网络跟它是什么关系呢?其实卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进.比如下图 ...
随机推荐
- error: invalid use of void expression
void*类型定义的指针变量只可以接收对象的地址,而没有对象类型这个概念.所以void*指针变量是不能直接用“*指针变量”去访问,需要强制类型转换后才能“间接”访问: *(type*)指针变量,必须给 ...
- PythonStudy——逻辑运算符 Logical Operators
在Python中,None.任何数值类型中的0.空字符串“”.空元组().空列表[].空字典{}都被当作False,还有自定义类型,如果实现了 __ nonzero __ () 或 __ len __ ...
- MySQL Error--The Table is full
问题描述 在MySQL 错误日志中发下以下错误信息:[ERROR] /export/servers/mysql/bin/mysqld: The table '#sql-xxxx-xxx' is ful ...
- What’s New In GRANDstack?
转自:https://blog.grandstack.io/whats-new-in-grandstack-310c067fea4a There’s been a lot of activity in ...
- Golang 之 interface接口全面理解
什么是interface 在面向对象编程中,可以这么说:“接口定义了对象的行为”, 那么具体的实现行为就取决于对象了. 在Go中,接口是一组方法签名(声明的是一组方法的集合).当一个类型为接口中的所有 ...
- GanttProject 项目管理软件的优点
GanttProject 的优点 GanttProject 是一款基于 GPL 协议的开源软件,代码完全开源,使用的是 Java 语言编写. 最近在试用,有以下一些优大. 文件格式为 xml,这个是我 ...
- HTTP各种特性
一.Http客户端 1.浏览器.打开百度首页 2.Curl工具 二.CORS 跨域(浏览器的功能) 1.修改Server.js const http = require('http'); const ...
- 使用Intellij搭建Servlet开发环境
https://blog.csdn.net/yhao2014/article/details/45740111 使用Tomcat 9时,必须使用jre 1.8,否则会出现Unable to ping ...
- if else和switch case那个效率更高一点
switch...case写法: switch (表达式){ case 值1 : 语句1 break; case 值2 : 语句2 break; ... default : 语句n break; } ...
- React+ES6+Webpack深入浅出
React已成为前端当下最热门的前端框架之一 , 其虚拟DOM和组件化开发让前端开发更富灵活性,而Webpack凭借它异步加载和可分离打包等优秀的特性,更为React的开发提供了便利.其优秀的特性不再 ...