基于极限学习机ELM的人脸识别程序
来源:互联网 发布:外汇业务数据监测中心 编辑:程序博客网 时间:2024/06/05 17:01
前言
有关极限学习机基础知识请参考
极限学习机详解
目标
基于YALE人脸库,15组人脸(每组照片代表一个人),进行人脸分类识别。(下载地址:YALE人脸库)
将每类人脸前10张照片用于学习,第11张照片用于测试。测试第11张照片属于哪个组(人)。
思路
可以直接将ELM看做一个黑盒算法,将人脸图片转化为NUMPY数组加入到ELM中即可。
效果
代码
import hpelmimport numpy as npimport cv2import os,reimglist=[] #训练数据列表step=10 #每种照片样本数type_num=15 #种类数file_dir='D:\IOFile\YALE' #照片路径#读取照片for tp_num in range(1,type_num+1): for st_num in range(1,step+1): add_pre=lambda x:'0'+str(x) if len(str(x))==1 else str(x) #加前缀 file_path = os.path.join(file_dir, 'subject{}_{}.bmp'.format(add_pre(tp_num),st_num)) if os.path.isfile(file_path): manimg = cv2.resize(cv2.imread(file_path, cv2.IMREAD_GRAYSCALE), (100, 100), interpolation=cv2.INTER_CUBIC) manarray=np.array(bytearray(manimg)) imglist.append(manarray)#生成ELMelm=hpelm.ELM(10000,type_num)#生成训练数据input_data=[i for i in imglist]output_data=[]pos=0for index in range(0,len(imglist)): img_num=int(index/step) #照片种类编号 output=[] for i in range(type_num): if img_num==i: output.append(1) else: output.append(0) output_data.append(output)#添加神经元elm.add_neurons(30,'lin')elm.add_neurons(15,'rbf_linf')#训练elm.train(np.array(input_data),np.array(output_data))#测试图片def predict_photo(photo_num): # 准备测试数据 testim = cv2.resize(cv2.imread(os.path.join(file_dir, 'subject{}_11.bmp'.format(add_pre(photo_num))), cv2.IMREAD_GRAYSCALE), (100, 100), interpolation=cv2.INTER_CUBIC) testarray = np.array(bytearray(testim)) test_data = np.array([testarray.tolist()]) # 预测 predict = elm.predict(test_data) prbobility = 0 # 照片为某一种类的可能性 max_photo = 0 # 最可能的照片种类 for i in range(0, len(predict[0])): if prbobility < predict[0][i]: prbobility = predict[0][i] max_photo = i print('该照片最可能属于种类{},概率为{}'.format(max_photo + 1, prbobility))#测试性能def test_perfomance(): true=0 for num in range(1,16): # 读取图片并格式化处理 im = cv2.resize(cv2.imread(os.path.join(file_dir, 'subject{}_11.bmp'.format(add_pre(num))), cv2.IMREAD_GRAYSCALE), (100, 100), interpolation=cv2.INTER_CUBIC) array = np.array(bytearray(im)) predict=elm.predict(np.array([array.tolist()])) prbobility=0 for i in range(0, len(predict[0])): if prbobility < predict[0][i]: prbobility = predict[0][i] max_photo = i if max_photo+1==num: true+=1 print('完成性能测试,正确率为{}'.format(true/15))if __name__ == '__main__': predict_photo(7) test_perfomance()
阅读全文
0 0
- 基于极限学习机ELM的人脸识别程序
- 极限学习机(ELM)的使用
- 极限学习机(ELM)的使用
- ELM极限学习机算法
- 极限学习机 Elm
- 极限学习机(ELM)
- ELM极限学习机源码
- 极限学习机(ELM)
- 极限学习机(ELM) 算法及MATLAB程序实现
- BP神经网络与ELM极限学习机的对比
- 极限学习机(ELM)算法的matlab与C++实现
- 极限学习机(ELM)的交叉验证方法
- 极限学习机(ELM)算法的介绍与实现
- 极限学习机(ELM)算法的matlab与C++实现
- elm极限学习机
- 简单易学的机器学习算法——极限学习机(ELM)
- 简单易学的机器学习算法——在线顺序极限学习机OS-ELM
- 简单易学的机器学习算法——极限学习机(ELM)
- mysql查询表中前一条和后一条数据
- 改进版---字符串中数字子串的求和
- Pycharm内集成python3.6.1版本,安装scikit-learn模块方法
- ElasticSearch安装拼音插件 elasticsearch-analysis-pinyin
- poj 3734 <矩阵快速幂模版>
- 基于极限学习机ELM的人脸识别程序
- 【Netty入门】解决TCP粘包/分包的实例
- Maven插件声明顺序的微妙差别
- 跳棋的挑战,n皇后
- 从底层原理深入理解 PHP 的引用 “&”
- JS之数组元素排序方法sort
- Ubuntu Server 16.04 配置Keras
- okHttp各个module介绍
- Ubuntu server16.04 网络配置中遇到的问题