猫狗训练的训练模型的建立,模型在整个预测集上的预测效果的测试的程序代码网上或一些书籍上都可查阅,但是对单张或某些图片的分类测试程序不多,这里通过参考博客:https://blog.csdn.net/baidu_35113561/article/details/79371716 ,自己总结如下。
环境:Python+keras, 后端:tensorflow
训练集:在 https://www.kaggle.com/c/dogs-vs-cats/data 上即可完成下载,总共猫狗各有12500张图片(由于条件有限,我取猫狗各1000张进行训练,并已在验证集上精度验证达到82%)。
测试程序如下:
import cv2
import numpy as np
from keras.models import load_model
from keras.preprocessing.image import ImageDataGeneratortest_dir="D:/研究生/lx/cats-vs-dogs-datasets/000/" # 加载图片目录model=load_model('cats_and_dogs_small_1.h5') # 加载模型参数for i in range(10):print(str(i)+'.jpg')img=cv2.imread(str(i)+'.jpg')print(img.shape)img=cv2.resize(img,(150,150))print(img.shape) # 读取图片并将大小统一至模型输入要求
# cv2.imshow("img",img)
# cv2.waitKey()img0 = (img.reshape(1,150,150,3).astype("float32"))/255 # 归一化predict = model.predict_classes(img0)if predict == 0:print('识别为:猫')image1=cv2.putText(img,'cat',(20,20),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,0,255),1,cv2.LINE_AA)cv2.imshow('result',image1)cv2.waitKey(10000)else:image2=cv2.putText(img, 'dog', (20, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1, cv2.LINE_AA)print('识别为:狗')cv2.imshow('result',image2)cv2.waitKey(10000)
运行结果如图
我承认有些猫狗可能萌到你了,但是还是要看一下分类结果。可以看到,10个图片中七张得到了正常分类,预测正确率为70%。虽然与模型在训练过程中的验证精度还有些差距,但是考虑到测试集样本量较小,故也可以理解。
说明:
- 测试时的图片大小需要统一为模型建立时训练集的大小,否则会因为输入图片不符合模型要求出错。由于我的模型构建时样本大小统一为150*150,故在测试时图片大小也做了相应调整。
- 需要将像素值(0-255范围内)缩放到[0,1]区间,因为神经网络善于处理较小的输入值。