keras/构建卷积神经网络人脸识别

本文介绍如何利用keras构建卷积神经网络(CNN)进行人脸识别,通过训练olivettifaces数据集,实现了97%的识别准确率。数据集包括40个人的400张64×64灰度图片。强调了在keras中model.fit()参数shuffle和validation_split的重要性,避免训练和验证集样本偏差导致的测试效果不佳问题。
摘要由CSDN通过智能技术生成

olivettifaces是纽约大学的一个比较小的人脸库,由40个人的400张图片构成,即每个人的人脸图片为10张。每张图片的灰度级为8位,每个像素的灰度大小位于0-255之间,每张图片大小为64×64。图片大小是1190*942,一共有20*20张人脸,故每张人脸大小是(1190/20)*(942/20)即57*47=2679本文所用的训练数据就是这张图片,400个样本,40个类别。

input_faces.py读取图片数据集

#coding:utf-8
"""
read_data_sets
"""
from PIL import Image
import numpy as np

def read_data_sets(dataset_path):
    img = Image.open(dataset_path)
    #np.asarray()将图片转为灰度
    img_ndarray = np.asarray(img,dtype='float64')/256
    #共有400张图片,每张图片大小57*47=2679
    faces = np.empty((400,2679))
    #将图片存入faces中
    for row in range(20):
        for column in range(20):
            #第一行的第一张脸存入face0,每张脸的大小为57*47
            faces[row*20+column] = np.ndarray.flatten(img_ndarray[row*57:(row+1)*57,column*47:(column+1<
  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基于Python和Keras框架实现的CNN卷积神经网络人脸识别代码示例: ```python # 导入必要的库 import numpy as np from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten from keras.layers import Conv2D, MaxPooling2D from keras.utils import np_utils from keras.datasets import mnist from keras import backend as K from keras.preprocessing.image import ImageDataGenerator from keras.preprocessing import image # 定义数据集相关参数 batch_size = 128 num_classes = 2 epochs = 10 img_rows, img_cols = 28, 28 input_shape = (img_rows, img_cols, 3) # 加载数据集 train_datagen = ImageDataGenerator( rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True) test_datagen = ImageDataGenerator(rescale=1./255) train_generator = train_datagen.flow_from_directory( 'train', target_size=(img_rows, img_cols), batch_size=batch_size, class_mode='categorical') validation_generator = test_datagen.flow_from_directory( 'test', target_size=(img_rows, img_cols), batch_size=batch_size, class_mode='categorical') # 构建CNN模型 model = Sequential() model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape)) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(128, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(num_classes, activation='softmax')) # 编译模型 model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # 训练模型 model.fit_generator( train_generator, steps_per_epoch=2000 // batch_size, epochs=epochs, validation_data=validation_generator, validation_steps=800 // batch_size) # 预测新图像 img_path = 'test/cat/cat.1.jpg' img = image.load_img(img_path, target_size=(img_rows, img_cols)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) preds = model.predict_classes(x) print('预测结果:', preds[0]) ``` 这是一个简单的人脸识别例子,其中使用了一个2层的CNN卷积神经网络模型,并且使用Keras提供的ImageDataGenerator来加载和处理数据集。你可以将此代码作为一个起点,并进行修改以满足你的具体需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值