用训练好的模型(caffemodel)来分类

    xiaoxiao2021-03-25  144

    使用python方法

    #coding=utf-8 import caffe import numpy as np root='/home/caffe/' #根目录 deploy=root + 'models/bvlc_reference_caffenet/deploy.prototxt' #deploy文件 caffe_model=root + 'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel' #训练好的 caffemodel img=root+'examples/images/cat.jpg' #随机找的一张待测图片 labels_filename = root + 'data/ilsvrc12/synset_words.txt' #类别名称文件,将数字标签转换回类别名称 net = caffe.Net(deploy,caffe_model,caffe.TEST) #加载model和network #图片预处理设置 transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape}) #设定图片的shape格式(1,3,28,28) transformer.set_transpose('data', (2,0,1)) #改变维度的顺序,由原始图片(28,28,3)变为(3,28,28) #transformer.set_mean('data', np.load(mean_file).mean(1).mean(1)) #减去均值,前面训练模型时没有减均值,这儿就不用 transformer.set_raw_scale('data', 255) # 缩放到【0,255】之间 transformer.set_channel_swap('data', (2,1,0)) #交换通道,将图片由RGB变为BGR im=caffe.io.load_image(img) #加载图片 net.blobs['data'].data[...] = transformer.preprocess('data',im) #执行上面设置的图片预处理操作,并将图片载入到blob中 #执行测试 out = net.forward() labels = np.loadtxt(labels_filename, str, delimiter='\t') #读取类别名称文件 prob= net.blobs['prob'].data[0].flatten() #取出最后一层(Softmax)属于某个类别的概率值,并打印 print prob order=prob.argsort()[-1] #将概率值排序,取出最大值所在的序号 print 'the class is:',labels[order] #将该序号转换成对应的类别名称,并打印 运行后输出结果

    使用 caffe开发团队的一个python版本的分类文件,路径为 python/classify.py

    运行这个文件必需两个参数,一个输入图片文件,一个输出结果文件。而且运行必须在python目录下。假设当前目录是caffe根目录,则运行:

    cd python sudo python classify.py ../examples/images/cat.jpg result.npy

    运行时报错

    打开python/classify.py文件

    修改均值,将

    mean = np.load(args.mean_file) 下面加一行

    修改文件

    将下面代码加入图片所示位置

    imagenet_labels_filename = '../data/ilsvrc12/synset_words.txt' labels = np.loadtxt(imagenet_labels_filename, str, delimiter='\t') top_k = predictions.flatten().argsort()[-1:-6:-1] for i in np.arange(top_k.size): print top_k[i], labels[top_k[i]]

    文章主要参考:http://www.cnblogs.com/denny402

    转载请注明原文地址: https://ju.6miu.com/read-3644.html

    最新回复(0)