这是基于cnn深度卷积神经网络算法的人脸识别程序代码,用的是Python
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 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 基于卷积神经网络的人脸识别 rain_CNN_olivettifaces.py
文件 7042 2015-01-30 07:21 基于卷积神经网络的人脸识别use_CNN_olivettifaces.py
# -*-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 基于卷积神经网络的人脸识别 rain_CNN_olivettifaces.py
文件 7042 2015-01-30 07:21 基于卷积神经网络的人脸识别use_CNN_olivettifaces.py
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)