zoukankan      html  css  js  c++  java
  • 深度学习项目——基于卷积神经网络(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大道理”,选择“关注”公众号

     

    欢迎加入!

     

     

     

     

     

    萍水相逢逢萍水,浮萍之水水浮萍!
  • 相关阅读:
    进程 触发器
    关于 if条件 光标 循环的综合应用
    3-15记录
    day3.python 学习之列表
    day2: python3.5学习——逻辑判断
    day1: python3.5学习
    OpenGL_曲线函数
    OpenGL_赛平斯基垫片
    【quick-cocos2d-x 游戏开发之一】开发工具sublime text及其强力插件QuickXDev
    Python正则表达式指南
  • 原文地址:https://www.cnblogs.com/AIBigTruth/p/10602995.html
Copyright © 2011-2022 走看看