基于CNN卷积神经网络的人脸识别系统 附Matlab完整代码
之前给大家带来的大多都是关于深度学习预测的内容,今天给小伙伴们带来一起关于图像识别的程序,利用CNN卷积神经网络进行人脸识别,非常适合新手小伙伴作为图像识别的启蒙程序以及学习材料,并且,我们也附带了UI界面,方便小伙伴进行调用。
声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~
目录
之前给大家带来的大多都是关于深度学习预测的内容,今天给小伙伴们带来一起关于图像识别的程序,利用CNN卷积神经网络进行人脸识别,非常适合新手小伙伴作为图像识别的启蒙程序以及学习材料,并且,我们也附带了UI界面,方便小伙伴进行调用。
您只需做的工作:点击训练模型、后测试模型即可!
数据来源
此次采用的人脸识别数据来自于olivettifaces人脸数据库。该数据库是纽约大学组建的一个比较小的人脸数据库,有40张人脸,每人10张照片,组成一幅有400张人脸的大图像,像素灰度范围在[0,255]。整张图像大小是1190×942,20 行 20 列,即每张照片大小是(1190/20) (942/20)=57×47。
结果展示
点击文件运行后,会出现如下所示的UI界面:

既然要识别人脸,那肯定得先训练一个模型,因此首先点击模型训练,会出现模型训练进度条:

然后点击模型测试,选取任意文件夹的一幅图像,即可得到该人脸所属的类别。

也可以点击可视化,查看该CNN模型的模型架构图:

以及训练集和测试集的混淆矩阵图:


模型流程
一、数据加载。使用 imageDatastore 函数从名为 orl_faces 的文件夹中加载人脸图像数据集。
二、数据预处理与划分。将导入的数据集按照80/20的比例随机划分为训练集和测试集。对训练和测试图像进行预处理,将所有图片统一调整到指定的大小,以满足CNN模型对输入尺寸固定的要求。
三、CNN模型构建。包含全连接层、分类层、卷积层、批归一化层、ReLU激活层、池化层等等。
四、模型训练。设置训练参数,包括优化器、批量大小、最大轮次、学习率、验证数据、可视化等等。
五、性能评估与结果展示。使用训练好的模型 分别对训练集和测试集进行预测,将模型的预测结果与真实的标签进行比较,计算出模型在训练集和测试集上的分类准确率。
部分代码展示
%% 建立模型
layers = [
imageInputLayer(img_size)
convolution2dLayer([3, 3], 16, Padding = "same") % 卷积核大小为3*3,生成16个特征图
batchNormalizationLayer % 批归一化层
reluLayer % relu激活层
maxPooling2dLayer([2, 2], 'Stride', 2) % 最大池化层,池化大小为2*2,步长为2
convolution2dLayer([3, 3], 32, Padding = "same") % 卷积核大小为3*3,生成32个特征图
batchNormalizationLayer % 批归一化层
reluLayer % relu激活层
maxPooling2dLayer([2, 2], 'Stride', 2) % 最大池化层,池化大小为2*2,步长为2
convolution2dLayer([3, 3], 64, Padding = "same") % 卷积核大小为3*3,生成64个特征图
batchNormalizationLayer % 批归一化层
reluLayer % relu激活层
fullyConnectedLayer(numClasses) % 全连接层 -- 输出层
softmaxLayer % 损失函数层
classificationLayer]; % 分类层
完整代码获取
如果需要以上完整代码,只需点击下方小卡片,再后台回复关键字,不区分大小写:
人脸识别
更多推荐
所有评论(0)