• 大小: 14.54MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-07-25
  • 语言: Python
  • 标签: Python  人脸识别  

资源简介

这是基于cnn深度卷积神经网络算法的人脸识别程序代码,用的是Python

资源截图

代码片段和文件信息

# -*-coding:utf8-*-#
“““
本程序基于python+numpy+theano+PIL开发,采用类似LeNet5的CNN模型,应用于olivettifaces人脸数据库,
实现人脸识别的功能,模型的误差降到了5%以下。
本程序只是个人学习过程的一个toy implement,模型可能存在overfitting,因为样本小,这一点也无从验证。

但是,本程序意在理清程序开发CNN模型的具体步骤,特别是针对图像识别,从拿到图像数据库,到实现一个针对这个图像数据库的CNN模型,
我觉得本程序对这些流程的实现具有参考意义。

@author:wepon(http://2hwp.com)
讲解这份代码的文章:http://blog.csdn.net/u012162613/article/details/43277187
“““
import os
import sys
import time

import numpy
from PIL import Image

import theano
import theano.tensor as T
from theano.tensor.signal import downsample
from theano.tensor.nnet import conv

“““
加载图像数据的函数dataset_path即图像olivettifaces的路径
加载olivettifaces后,划分为train_datavalid_datatest_data三个数据集
函数返回train_datavalid_datatest_data以及对应的label
“““
def load_data(dataset_path):
    img = Image.open(dataset_path)
    img_ndarray = numpy.asarray(img dtype=‘float64‘)/256
    faces=numpy.empty((4002679))
    for row in range(20):
   for column in range(20):
faces[row*20+column]=numpy.ndarray.flatten(img_ndarray [row*57:(row+1)*57column*47:(column+1)*47])

    label=numpy.empty(400)
    for i in range(40):
label[i*10:i*10+10]=i
    label=label.astype(numpy.int)

    #分成训练集、验证集、测试集,大小如下
    train_data=numpy.empty((3202679))
    train_label=numpy.empty(320)
    valid_data=numpy.empty((402679))
    valid_label=numpy.empty(40)
    test_data=numpy.empty((402679))
    test_label=numpy.empty(40)

    for i in range(40):
train_data[i*8:i*8+8]=faces[i*10:i*10+8]
train_label[i*8:i*8+8]=label[i*10:i*10+8]
valid_data[i]=faces[i*10+8]
valid_label[i]=label[i*10+8]
test_data[i]=faces[i*10+9]
test_label[i]=label[i*10+9]

    #将数据集定义成shared类型,才能将数据复制进GPU,利用GPU加速程序。
    def shared_dataset(data_x data_y borrow=True):
        shared_x = theano.shared(numpy.asarray(data_x
                                               dtype=theano.config.floatX)
                                 borrow=borrow)
        shared_y = theano.shared(numpy.asarray(data_y
                                               dtype=theano.config.floatX)
                                 borrow=borrow)
        return shared_x T.cast(shared_y ‘int32‘)



    train_set_x train_set_y = shared_dataset(train_datatrain_label)
    valid_set_x valid_set_y = shared_dataset(valid_datavalid_label)
    test_set_x test_set_y = shared_dataset(test_datatest_label)
    rval = [(train_set_x train_set_y) (valid_set_x valid_set_y)
            (test_set_x test_set_y)]
    return rval



#分类器,即CNN最后一层,采用逻辑回归(softmax)
class LogisticRegression(object):
    def __init__(self input n_in n_out):
        self.W = theano.shared(
            value=numpy.zeros(
                (n_in n_out)
                dtype=theano.config.floatX
            )
            name=‘W‘
            borrow=True
        )
        self.b = theano.shared(
            value=numpy.zeros(
                (n_out)
                dtype=theano.config.floatX
            )
            name=‘b‘
            borrow=True
        )
        self.p_y_given_x = T.nnet.softm

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-06-15 22:53  基于卷积神经网络的人脸识别\
     文件     1182905  2015-01-27 10:53  基于卷积神经网络的人脸识别\olivettifaces.gif
     文件    14750086  2015-01-29 15:30  基于卷积神经网络的人脸识别\params.pkl
     文件       15554  2015-01-30 07:21  基于卷积神经网络的人脸识别\train_CNN_olivettifaces.py
     文件        7042  2015-01-30 07:21  基于卷积神经网络的人脸识别\use_CNN_olivettifaces.py

评论

共有 条评论