测试是基于python来实现的。
可以先用
import caffe
测试一下caffe是否能调用,如果显示no model name 'caffe'。则说明找不到caffe包。可以用sys设置依赖包的路径。
测试代码参照:https://www.cnblogs.com/Allen-rg/p/5834551.html
我将加载model和net,以及图片的设置放在最开始的地方。这样不需要一直调用。
需要注意的是deploy.prototxt文件和train_val.prototxt不同。不过有人根据train_val文件推出deploy文件。
可参照:https://blog.csdn.net/fx409494616/article/details/53008971
另外一个要注意的是均值文件不是binaryproto类型的,而是npy类型的。
这里有详细说明和转换方法:https://blog.csdn.net/xingchengmeng/article/details/60764357。
源码:
import caffe
import os,shutil
import numpy as np
gender = {'male','female'}
caffe.set_mode_cpu()
deploypath = r'Gender/deploy.prototxt'
caffemodel = r'Gender/Gender_iter_90000.caffemodel'
solverpath = r'Gender/solver.prototxt'
meanfile = r'Gender/mean128.npy'
#加载模型
net = caffe.Net(deploypath,caffemodel,caffe.TEST)
#图片预处理设置
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data',(2,0,1))
transformer.set_mean('data',np.load(meanfile).mean(1).mean(1))
transformer.set_raw_scale('data',255)
transformer.set_channel_swap('data',(2,1,0))
#添加图片路径
dir = r'Gender/test/0'
filelist = []
filename = os.listdir(dir)
label = 1
for fn in filename:
fullfilename = os.path.join(dir,fn)
filelist.append(fullfilename)
#测试函数
def Test(img):
im = caffe.io.load_image(img)
net.blobs['data'].data[...] = transformer.preprocess('data',im)
out = net.forward()
prob = net.blobs['prob'].data[0].flatten()
print(prob)
order = prob.argsort()[1]
print('the class is : '+ str(order))
return order
if __name__ == '__main__':
RightNum = 0
for i in range(0,len(filelist)):
img = filelist[i]
predictlabel = Test(img)
if predictlabel == label:
RightNum += 1
print('预测正确数量 : '+ str(RightNum))
rate = RightNum/float(len(filelist))
print('预测准确率 :'+str(rate))