keras_cnn_实现人脸训练分类

  废话不多扯,直接进入正题吧!今天在训练自己分割出来的图片,感觉效果挺不错的,所以在这分享一下心得,望入门的同孩采纳。

  1、首先使用python OpenCV库里面的人脸检测分类器把你需要训练的测试人脸图片给提取出来,这一步很重要,因为deep learn他也不是万能的,很多原始人脸图片有很多干扰因素,直接拿去做模型训练效果是非常low的。所以必须得做这一步。而且还提醒一点就是你的人脸图片每个类别的人脸图片光线不要相差太大,虽然都是灰度图片,但是会影响你的结果,我测试过了好多次了,

  2、把分割出来的人脸全部使用resize的方法变成[100x100]的图片,之前我也试过rgb的图片,但是效果不好,所以我建议都转成灰度图片,这样数据量小,计算速度也快,当然了keras的后端我建议使用TensorFlow-GPU版,这样计算过程明显比CPU快1万倍。

  3、时间有限,我的数据集只有六张,前面三张是某某的人脸,后面三张又是另一个人脸,这样就只有两个类别,说到这里的时候很多人都觉得不可思议了吧,数据集这么小你怎么训练的?效果会好吗?那么你不要着急慢慢读下去吧!其次我把每个类别的前面两张图片自我复制了100次,这样我就有数据集了,类别的最后一张使用来做测试集,

  自我复制50次。下面我来为大家揭晓答案吧,请详细参考如下代码:

(1)、导包

# coding:utf-
import numpy as np
import os
import cv2
os.environ['TF_CPP_MIN_LOG_LEVEL'] = ''
from keras.models import Sequential
from keras.layers import Dense,Dropout,Flatten
from keras.layers import Conv2D,MaxPooling2D
from keras import optimizers
import pandas as pd
import matplotlib.pyplot as plt

导入需要包

(2)、读取我们的图片数据

filePath = os.listdir('img_test/')
print(filePath)
img_data = []
for i in filePath:
img_data.append(cv2.resize(cv2.cvtColor(cv2.imread('img_test/%s'%i),cv2.COLOR_BGR2GRAY),(100,100),interpolation=cv2.INTER_AREA))

导入图片

(3)、制作训练集合测试集

x_train = np.zeros([,,,])
y_train = []
x_test = np.zeros([,,,])
y_test = [] for i in range():
if i<:
x_train[i,:,:,] = img_data[]
y_train.append()
elif <=i<:
x_train[i, :, :, ] = img_data[]
y_train.append()
elif <=i<:
x_train[i, :, :, ] = img_data[]
y_train.append()
else:
x_train[i, :, :, ] = img_data[]
y_train.append() for j in range():
if j%==:
x_test[j, :, :, ] = img_data[]
y_test.append()
else:
x_test[j, :, :, ] = img_data[] # np.ones((,))
y_test.append() y_train = np.array(pd.get_dummies(y_train))
y_ts = np.array(y_test)
y_test = np.array(pd.get_dummies(y_test))

训练数据与测试数据

(4)、建立keras_cnn模型

model = Sequential()
# 第一层:
model.add(Conv2D(32,(3,3),input_shape=(100,100,1),activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.5))
# model.add(Conv2D(64,(3,3),activation='relu'))
#第二层:
# model.add(Conv2D(32,(3,3),activation='relu')) # model.add(Dropout(0.25))
# model.add(MaxPooling2D(pool_size=(2,2)))
# model.add(Dropout(0.25)) # 2、全连接层和输出层:
model.add(Flatten())
# model.add(Dense(500,activation='relu'))
# model.add(Dropout(0.5))
model.add(Dense(20,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(2,activation='softmax')) model.summary()
model.compile(loss='categorical_crossentropy',#,'binary_crossentropy'
optimizer=optimizers.Adadelta(lr=0.01, rho=0.95, epsilon=1e-06),#,'Adadelta'
metrics=['accuracy'])

建立模型

(5)、训练模型和得分输出

# 模型训练
model.fit(x_train,y_train,batch_size=30,epochs=100)
y_predict = model.predict(x_test)
score = model.evaluate(x_test, y_test)
print(score)
y_pred = np.argmax(y_predict,axis=1)
plt.figure('keras')
plt.scatter(list(range(len(y_pred))),y_pred ,c=y_pred)
plt.show()

  下面是结果输出,loss = 0.0018 acc = 1.0 效果很不错,主要在于你训练时候的深度。

完整代码如下:

 1 # coding:utf-8
2 import numpy as np
3 import os
4 import cv2
5 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
6 from keras.models import Sequential
7 from keras.layers import Dense,Dropout,Flatten
8 from keras.layers import Conv2D,MaxPooling2D
9 from keras import optimizers
10 import pandas as pd
11 import matplotlib.pyplot as plt
12
13 filePath = os.listdir('img_test/')
14 print(filePath)
15 img_data = []
16 for i in filePath:
17 img_data.append(cv2.resize(cv2.cvtColor(cv2.imread('img_test/%s'%i),cv2.COLOR_BGR2GRAY),(100,100),interpolation=cv2.INTER_AREA))
18
19
20 x_train = np.zeros([100,100,100,1])
21 y_train = []
22 x_test = np.zeros([50,100,100,1])
23 y_test = []
24
25 for i in range(100):
26 if i<25:
27 x_train[i,:,:,0] = img_data[2]
28 y_train.append(1)
29 elif 25<=i<50:
30 x_train[i, :, :, 0] = img_data[4]
31 y_train.append(2)
32 elif 50<=i<75:
33 x_train[i, :, :, 0] = img_data[1]
34 y_train.append(1)
35 else:
36 x_train[i, :, :, 0] = img_data[5]
37 y_train.append(2)
38
39 for j in range(50):
40 if j%2==0:
41 x_test[j, :, :, 0] = img_data[0]
42 y_test.append(1)
43 else:
44 x_test[j, :, :, 0] = img_data[3] # np.ones((100,100))
45 y_test.append(2)
46
47 y_train = np.array(pd.get_dummies(y_train))
48 y_ts = np.array(y_test)
49 y_test = np.array(pd.get_dummies(y_test))
50 '''
51 from keras.models import load_model
52 from sklearn.metrics import accuracy_score
53
54 model = load_model('model/my_model.h5')
55 y_predict = model.predict(x_test)
56 y_p = np.argmax(y_predict,axis=1)+1
57 score = accuracy_score(y_ts,y_p)
58 # score = model.evaluate(x_train,y_train)
59 print(score)
60 '''
61
62 model = Sequential()
63 # 第一层:
64 model.add(Conv2D(32,(3,3),input_shape=(100,100,1),activation='relu'))
65 model.add(MaxPooling2D(pool_size=(2,2)))
66 model.add(Dropout(0.5))
67 # model.add(Conv2D(64,(3,3),activation='relu'))
68 #第二层:
69 # model.add(Conv2D(32,(3,3),activation='relu')) # model.add(Dropout(0.25))
70 # model.add(MaxPooling2D(pool_size=(2,2)))
71 # model.add(Dropout(0.25))
72
73 # 2、全连接层和输出层:
74 model.add(Flatten())
75 # model.add(Dense(500,activation='relu'))
76 # model.add(Dropout(0.5))
77 model.add(Dense(20,activation='relu'))
78 model.add(Dropout(0.5))
79 model.add(Dense(2,activation='softmax'))
80
81 model.summary()
82 model.compile(loss='categorical_crossentropy',#,'binary_crossentropy'
83 optimizer=optimizers.Adadelta(lr=0.01, rho=0.95, epsilon=1e-06),#,'Adadelta'
84 metrics=['accuracy'])
85
86 # 模型训练
87 model.fit(x_train,y_train,batch_size=30,epochs=150)
88 y_predict = model.predict(x_test)
89 score = model.evaluate(x_test, y_test)
90 print('loss: ',score[0],' acc: ',score[1])
91 y_pred = np.argmax(y_predict,axis=1)
92 plt.figure('keras',figsize=(12,6))
93 plt.scatter(list(range(len(y_pred))),y_pred ,c=y_pred)
94 plt.show()
95
96 # 保存模型
97 # model.save('test/my_model.h5')
98
99 # import matplotlib.pyplot as plt
100 # plt.imshow(x_train[30,:,:,0].reshape(100,100),cmap='gray')
101 # plt.figure()
102 # plt.imshow(x_test[3,:,:,0].reshape(100,100),cmap='gray')
103 # plt.xticks([]);plt.yticks([])
104 # plt.show()

  

keras_训练人脸识别模型心得的更多相关文章

  1. 人脸检测及识别python实现系列(5)——利用keras库训练人脸识别模型

    人脸检测及识别python实现系列(5)——利用keras库训练人脸识别模型 经过前面稍显罗嗦的准备工作,现在,我们终于可以尝试训练我们自己的卷积神经网络模型了.CNN擅长图像处理,keras库的te ...

  2. 虹软最新版 python 接口 完整版

    虹软最新版 python 接口 完整版 当前开源的人脸检测模型,识别很多,很多小伙伴也踩过不少坑.相信不少使用过dlib和facenet人脸识别的小伙伴都有这样的疑惑,为什么论文里高达99.8以上的准 ...

  3. 腾讯 AI Lab 计算机视觉中心人脸 & OCR团队近期成果介绍(3)

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:周景超 在上一期中介绍了我们团队部分已公开的国际领先的研究成果,近期我们有些新的成果和大家进一步分享. 1 人脸进展 人脸是最重要的视觉 ...

  4. 让AI简单且强大:深度学习引擎OneFlow技术实践

    本文内容节选自由msup主办的第七届TOP100summit,北京一流科技有限公司首席科学家袁进辉(老师木)分享的<让AI简单且强大:深度学习引擎OneFlow背后的技术实践>实录. 北京 ...

  5. face recognition[翻译][深度人脸识别:综述]

    这里翻译下<Deep face recognition: a survey v4>. 1 引言 由于它的非侵入性和自然特征,人脸识别已经成为身份识别中重要的生物认证技术,也已经应用到许多领 ...

  6. OpenCV 学习笔记 05 人脸检测和识别

    本节将介绍 Haar 级联分类器,通过对比分析相邻图像区域来判断给定图像或子图像与已知对象是否匹配. 本章将考虑如何将多个  Haar 级联分类器构成一个层次结构,即一个分类器能识别整体区域(如人脸) ...

  7. Python的开源人脸识别库:离线识别率高达99.38%

    Python的开源人脸识别库:离线识别率高达99.38%   github源码:https://github.com/ageitgey/face_recognition#face-recognitio ...

  8. TensorFlow人脸识别

    TensorFlow框架做实时人脸识别小项目(一)https://blog.csdn.net/Goerge_L/article/details/80208297 TensorFlow框架做实时人脸识别 ...

  9. 【EdgeBoard体验】开箱与上手

    简介 市面上基于嵌入式平台的神经网络加速平台有很多,今天给大家带来是百度大脑出品的EdgeBoard.按照官网文档的介绍,EdgeBoard是基于Xilinx Zynq Ultrascale+ MPS ...

随机推荐

  1. NSDictionary底层实现原理

    一言以蔽之:在OC中NSDictionary是使用hash表来实现key和value的映射和存储的. 那么问题来了什么是hash表呢? 哈希表(hash表): 又叫做散列表,是根据关键码值(key v ...

  2. 记一次艰难的CTP调试

    一个atmel,mxt540e的CTP触摸屏. 中断配置为下降沿,输入上拉. 总是只能触发一次中断,中断脚就一直低电平,无法拉高.这只是表面现象   不停找底层I2C驱动,改代码,没用.要靠波形来说话 ...

  3. Accept 惊群现象测试perl脚本

    $uname -a Linux debian-11-34 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt9-3~deb8u1 (2015-04-24) x86_64 G ...

  4. Qt Charts实践

    Qt Charts的横空出世标志着QWT,QCustomPlot .....时代的终结,让我们开始使用QtCharts吧 在Qt 5.7.0中已经集成了Qt Charts模块,需要在安装Qt的时候把C ...

  5. Linux-Shell脚本编程-学习-4-Shell编程-操作数字-加减乘除计算

    对于任何一种编程语言都很重要的特性就是操作数字的能力,遗憾的是,对于shell脚本来说,这个过程比较麻烦,在shell脚本中有两种途径来进行数学运算操作. 1.expr 最开始的时候,shell提供了 ...

  6. APP功能性测试-4

    弱网络测试 使用fiddler模拟低速环境 使用fiddler抓取手机上某个应用的包 手机连接fiddler fiddler 代理地址127.0.0.1默认端口8888 只抓http协议(https, ...

  7. @property, @classmethod基本用法

    @property 废话少说,贴上代码(代码参考@廖雪峰教程) class Student(object): def __init__(self, score): self._score = scor ...

  8. HTTPS初始

    https会话 1客户端 2服务器端 1 ---http三次握手--- 2 1<--------------->2 协商建立ssl会话 选择加密协议 sslv3 1 <------- ...

  9. NodeJs命令行新建项目实例

    安装Nodejs: 下载地址:http://nodejs.org/download/ 设置环境变量,例如我将nodejs装在D:/program文件夹下,则设以下为系统环境变量 D:\Program\ ...

  10. iOS-SDWebImage的原理以及使用流程

    SDWebImage 支持异步的图片下载+缓存,提供了 UIImageView+WebCacha 的 category,方便使用.SDWebImage加载图片的流程: 1. 入口 setImageWi ...