python+opencv入门-动手实现人脸性别识别

python+opencv入门-动手实现人脸性别识别

任务描述

使用 keras 调用已训练好模型对图片中人物性别进行预测。

相关知识

为了完成本关任务,你需要掌握:

1 . 计算机是如何识别人物性别。
2 . 使用 keras 识别人物性别流程

计算机是如何识别人物性别

如何识别人物性别这个对我们人类来说是非常简单的任务,我们一眼就能识别出上图中是一位女性,而对于计算机来说,想要识别出图中人物性别就没这么容易了。因为,对于任何图片,在计算机中都是一堆数字。那么,我们该如何让我们的计算机能够识别人物性别呢?首先,我们得构造一个模型,这个模型就像我们初高中所学的函数,你输入一个 x ,它就输出一个 y 。而我们这个模型,输入的是图片,输出的是性别类型。如下图所示:
在这里插入图片描述
相信大家都记得,函数它的输入跟输出都应该是数字。对于图片来说,它本身就是以像素矩阵的形式储存在计算机中,输出我们则可以用 0 来表示女性, 1 来表示男性。当然这只是一种选择,在深度学习中我们通常使用另外一种形式 [0,1] 表示女性, [1,0] 表示男性。不管哪种方式,我们都把问题转换成了去求函数f(.)f(.)的表达式。只要求出正确的表达式,就能对人物进行正确的性别识别。

而在图像问题中,我们常用的是卷积神经网络模型,如何训练模型,得到能正确识别性别的流程大致如下:
在这里插入图片描述
首先,我们搭建好模型后,会随机的为模型的参数赋值。这个时候,模型并不能准确的识别出人物的性别,如上图,它认为图中人物是男性的可能为 0.8 ,女性的可能性为 0.2 ,而我们知道,正确情况应该为男性可能性为 0 ,女性可能性为 1 ,即真实情况。这个时候,我们将模型的预测情况与真实情况结合构造出一个损失函数,这个损失函数你可以当作是用来衡量预测值与真实值差异的一个指标。很明显,预测值与真实值越接近越好,即损失函数值越接近 0 越好。而优化器就是用来达到这一目的的。优化器不断的使损失函数变小,从而达到更新模型参数的目的。最后,我们就能得到一个能够准确预测的模型。
在这里插入图片描述

使用keras识别人物性别流程

keras 是一个高层神经网络 API ,我们使用它来实现人物性别识别是非常方便的。使用 keras 实现人物性别识别的第一部就是得获取数据,有了数据才能对模型进行训练。这里获取数据的方法已经给大家写好了,直接调用就可以了,代码如下:

#导入获取数据的方法
from load_face_dataset import get_img_and_label
#加载测试数据
data,label = get_img_and_label(data_path)

其中,get_img_and_label() 是获取图像和标签的方法,data_path 是数据存储的路径,data 与 label 是我们获取的图像与图像相对应的标签。

由于训练模型需要一定的时间,所以已经将模型提前训练好,大家只需加载模型,就能使用模型来进行预测。代码如下:

#导入加载模型方法
from keras.models import load_model
#加载模型
model = load_model(model_path)

其中,load_model() 是加载模型的方法,model_path 为模型存储的路径。 model 为我们所加载的模型。
最后我们就可以对加载的数据进行预测了:

#计算正确率
_,acc = model.evaluate(data,label,verbose=0)

其中,model.evaluate 为测试模型的方法,data , label 为输入的图像与对应的标签。acc 为模型预测的正确率。

编程要求

根据提示,在 begin-end 间补充代码,实现对人物性别进行预测,并返回正确率的方法。
题目

# -*- coding: utf-8 -*-
from load_face_dataset import get_img_and_label
from keras.models import load_model
def get_acc(data_path,model_path):
    '''
    data_path:数据所在路径
    model_path:模型所在路径
    '''
    #********* Begin *********#
    #加载测试数据
    
    #加载模型
    
    #计算正确率    
   
    #********* End *********#
    return acc

答案

# -*- coding: utf-8 -*-
from load_face_dataset import get_img_and_label
from keras.models import load_model
def get_acc(data_path,model_path):
    '''
    data_path:数据所在路径
    model_path:模型所在路径
    '''
    #********* Begin *********#
    #加载测试数据
    data,label = get_img_and_label(data_path)
    #加载模型
    model = load_model(model_path)
    #计算正确率    
    _,acc = model.evaluate(data,label,verbose=0)
    #********* End *********#
    return acc

over,thanks,we will part to see you again……

猜你喜欢

转载自blog.csdn.net/m0_46742690/article/details/107293164