热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深度学习项目——基于卷积神经网络(CNN)的人脸在线识别系统

基于卷积神经网络(CNN)的人脸在线识别系统本设计研究人脸识别技术,基于卷积神经网络构建了一套人脸在线检测识别系统,系统将由以下几个部分构成:制作人脸数据集、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*64reshape1*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、卷积层  

  本网路共三层卷积层,卷积核大小为(33),卷积步长为[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 ”。

 

 六 、代码

见个人GitHubhttps://github.com/hhhvvvddd/CNN_faces_recognition

 

浅谈则止,深入理解AI大道理

扫描下方“AI大道理”,选择“关注”公众号

 

欢迎加入!

 

 

 

 

 

 

 

 

 

 


推荐阅读
  • 本文详细探讨了OpenCV中人脸检测算法的实现原理与代码结构。通过分析核心函数和关键步骤,揭示了OpenCV如何高效地进行人脸检测。文章不仅提供了代码示例,还深入解释了算法背后的数学模型和优化技巧,为开发者提供了全面的理解和实用的参考。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 利用TensorFlow.js在网页浏览器中实现高效的人脸识别JavaScript接口
    作者|VincentMühle编译|姗姗出品|人工智能头条(公众号ID:AI_Thinker)【导读】随着深度学习方法的应用,浏览器调用人脸识别技术已经得到了更广泛的应用与提升。在 ... [详细]
  • C语言编写线程池的简单实现方法
    2019独角兽企业重金招聘Python工程师标准好文章,一起分享——有时我们会需要大量线程来处理一些相互独立的任务,为了避免频繁的申请释放线程所带 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 魅族Flyme 7正式发布:全面解析与亮点介绍
    在22日晚的发布会上,魅族不仅推出了m15、15和15 Plus三款新机型,还正式发布了全新的Flyme 7系统。Flyme 7在保持流畅体验的基础上,进一步增强了功能性和实用性,为用户带来更加丰富的使用体验。首批适配包已准备就绪,将逐步推送给现有设备。 ... [详细]
  • 面部识别技术面临关键转折点:伦理与应用的平衡挑战
    面部识别技术正面临一个关键的转折点,其伦理与应用之间的平衡问题日益凸显。近日,该技术再次遭遇重大事件。本周二,由90个倡议组织组成的联盟发布了一份联合声明,呼吁全球范围内暂停使用面部识别技术,直到制定出明确的监管框架。这一举措反映了社会各界对隐私保护和技术滥用的担忧,同时也引发了关于如何在保障公共安全和维护个人隐私之间找到合理平衡的广泛讨论。 ... [详细]
  • 如何在Linux系统中部署TensorFlow的详细指南
    本文详细介绍了在Linux系统中部署TensorFlow的过程。作者基于北京大学曹建教授的MOOC课程进行学习,但由于课程内容较旧,环境配置方面遇到了不少挑战。经过多次尝试,最终成功解决了这些问题,并总结了一套详细的安装指南,帮助初学者快速上手TensorFlow。 ... [详细]
  • 基于TensorFlow的鸢尾花数据集神经网络模型深度解析
    基于TensorFlow的鸢尾花数据集神经网络模型深度解析 ... [详细]
  • 深度学习分位数回归实现区间预测
    深度学习分位数回归实现区间预测 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 本文深入解析了Java 8并发编程中的`AtomicInteger`类,详细探讨了其源码实现和应用场景。`AtomicInteger`通过硬件级别的原子操作,确保了整型变量在多线程环境下的安全性和高效性,避免了传统加锁方式带来的性能开销。文章不仅剖析了`AtomicInteger`的内部机制,还结合实际案例展示了其在并发编程中的优势和使用技巧。 ... [详细]
author-avatar
彦廷孟颖益皓
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有