keras读取model进行人脸预测

来源:互联网 发布:ae 编程 编辑:程序博客网 时间:2024/06/16 03:01

预测执行代码:

import numpy as npimport cv2import kerasimport osif __name__ == '__main__':    # 获取模型    # 这里是读取已经训练好并保存下来的模型    model = keras.models.load_model(        "/data/training/checkpoint/face/model-0026-0.9844-test-0.979492.hdf5")    # 测试图片保存路径,该目录下保存了非人脸的图片,用于预测使用    sourceDir = "/data/dataset/face/images/test_4/no_face"    # 循环对目录里的图片进行预测,并得出结果    for file in os.listdir(sourceDir):        # 图片路径        imgPath = os.path.join(sourceDir, file)        # 读取图片        x = cv2.imread(os.path.expanduser(imgPath))        # 图片预处理:        # 1.由于我的模型训练是将所有图片缩放为50x50,所以这里也对图片做同样操作        x = cv2.resize(x,dsize=(50,50),interpolation=cv2.INTER_LINEAR)        x = x.astype(float)        # 2.模型训练时图片的处理操作(此处根据自己模型的实际情况处理)        x *= (1./255)        x = np.array([x])        # 开始预测        result = model.predict(x)        # 打印结果        print(file + "  -->  " + str(result))
  • 对于图片预处理,model训练时图片进行了那些预处理,那么这里预测时图片也需要进行相同的预处理过程。

  • Keras用model.predict()方法给出概率,model.predict_classes()方法给出分类结果。

预测结果:

000001_0.jpg  -->  [[ 0.00865647  0.9913435 ]]000002_0.jpg  -->  [[ 0.1582682   0.84173179]]000003_0.jpg  -->  [[ 0.01170217  0.98829788]]000004_0.jpg  -->  [[ 0.02279873  0.97720122]]000006_0.jpg  -->  [[ 0.0026024   0.99739766]]000008_0.jpg  -->  [[ 0.01178346  0.98821658]]000009_0.jpg  -->  [[ 0.27088472  0.72911525]]....000052_0.jpg  -->  [[ 0.00128132  0.99871874]]000053_0.jpg  -->  [[ 0.0138923   0.98610771]]000053_1.jpg  -->  [[ 0.04132846  0.95867157]]000054_0.jpg  -->  [[ 0.0138923   0.98610771]]000054_1.jpg  -->  [[ 0.04132846  0.95867157]]000056_0.jpg  -->  [[ 0.01298052  0.98701942]]

模型训练时可以根据 testImageGenerator.class_indices 得到文件夹名与类的序号的对应字典。
我这里训练时文件夹名与类序号的字典是:{‘face’: 0, ‘no_face’: 1};所以索引为0的数据指代的是为人脸的概率,索引为1的数据指代的是不为人脸的概率。

000001_0.jpg --> [[ 0.00865647 0.9913435 ]]为例,0.00865647代表为人脸的概率,0.9913435代表不为人脸的概率。所以这张图片不是人脸图片。

批量预测

import numpy as npimport cv2import kerasimport osif __name__ == '__main__':    # 获取模型    # 这里是读取已经训练好并保存下来的模型    model = keras.models.load_model(        "/data/training/checkpoint/face/tanjin_model/model-0010-0.9806-test-0.975586-****.hdf5")    # 测试图片保存路径,该目录下保存了非人脸的图片,用于预测使用    sourceDir = "/data/dataset/face/images/test_4/no_face"    images = []    # 循环对目录里的图片进行预测,并得出结果    for file in os.listdir(sourceDir):        # 图片路径        imgPath = os.path.join(sourceDir, file)        # 读取图片        x = cv2.imread(os.path.expanduser(imgPath))        # 图片预处理:        # 1.由于我的模型训练是将所有图片缩放为50x50,所以这里也对图片做同样操作        x = cv2.resize(x,dsize=(50,50),interpolation=cv2.INTER_LINEAR)        x = x.astype(float)        # 2.模型训练时图片的处理操作(此处根据自己模型的实际情况处理)        x *= (1./255)        # 存入list        images.append(x)    xx = np.array(images)    # 开始预测    result = model.predict(xx)    # 打印结果    print(file + "  -->  " + str(result))

批量预测结果:

[[ 0.09544108  0.9045589 ] [ 0.02506179  0.97493821] [ 0.04170766  0.95829231] ...,  [ 0.00471985  0.99528015] [ 0.07800388  0.92199606] [ 0.00772795  0.99227202]]

批量预测便于对多张图片进行同时预测并返回结果,在实际使用中还是会经常用到的。

个人在学习的过程中的一些理解。。

原创粉丝点击