1.把二进制均值文件mean.binaryproto转换成mean.npy:建立一个switch.py如下:
#coding=utf-8
import sys,os
caffe_root ='/home/lhu/caffe/'
sys.path.insert(0,caffe_root + 'python')
import caffe
os.chdir(caffe_root)
import numpy as np
print "Usage: python convert_protomean.py proto.mean out.npy"
blob = caffe.proto.caffe_pb2.BlobProto()
BINARY_PROTO_FILE_NAME ='mean.binaryproto'
#二进制均值文件名称不必写地址你可以把它放到caffe根目录下
BINARY_PROTO_FILE_PATH = os.path.join(os.getcwd(),BINARY_PROTO_FILE_NAME)
NPY_FILE_NAME ='mean.npy'#转换后npy名称
NPY_FILE_PATH = os.path.join(os.getcwd(),NPY_FILE_NAME)
data = open( BINARY_PROTO_FILE_PATH, 'rb' ).read()
blob.ParseFromString(data)
arr = np.array( caffe.io.blobproto_to_array(blob) )
out = arr[0]
np.save( NPY_FILE_PATH , out )
注意注释部分,这样会在caffe根目录产生mean.npy文件
2.在~/caffe/python/文件夹下建立,一个myclassify.py,用来分类单张图片:
#coding=utf-8
import numpy as np
import sys,os
caffe_root ='/home/lhu/caffe/'
sys.path.insert(0,caffe_root + 'python')
import caffe
os.chdir(caffe_root)
net_file = caffe_root +'examples/cifar10/cifar10_quick.prototxt'#这个是*_deploy.prototxt文件
caffe_model = caffe_root + 'data/cifar10/cifar10_quick_iter_5000.caffemodel.h5'#我的model
mean_file = caffe_root + 'examples/cifar10/mean.npy'#我们刚刚得到的均值文件,我把它放在examples
net = caffe.Net(net_file,caffe_model,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(mean_file).mean(1).mean(1))
transformer.set_raw_scale('data',255)
transformer.set_channel_swap('data',(2,1,0))
im=caffe.io.load_image(caffe_root + 'examples/images/cat.jpg')#待测图片
net.blobs['data'].data[...] = transformer.preprocess('data',im)
out = net.forward()
#这个是类别的txt文件,自己制作的数据集和model的话这个也得自己制作,我采用的是cifar10里面现存的。
imagenet_labels_filename = caffe_root + 'data/cifar10/batches.meta.txt'
labels = np.loadtxt(imagenet_labels_filename,str,delimiter='\t')
top_k = net.blobs['prob'].data[0].flatten().argsort()[-1:-6:-1]
for i in np.arange(top_k.size):
print top_k[i], labels[top_k[i]]
3.打开终端,我们需要在python文件夹下运行my_classify.py,如果在caffe根目录,可以输入:
cd python
sudo python my_classify.py ./examples/images/cat,jpg #注意更改你的带测图片位置#coding=utf-8import numpy as np import sys,os caffe_root ='/home/lhu/caffe/' sys.path.insert(0,caffe_root + 'python') import caffe os.chdir(caffe_root) net_file = caffe_root +'examples/cifar10/cifar10_quick.prototxt'#这个是*_deploy.prototxt文件 caffe_model = caffe_root + 'examples/cifar10/cifar10_quick_iter_5000.caffemodel.h5'#我的model mean_file = caffe_root + 'examples/cifar10/mean.npy'#我们刚刚得到的均值文件,我把它放在examples net = caffe.Net(net_file,caffe_model,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(mean_file).mean(1).mean(1)) transformer.set_raw_scale('data',255) transformer.set_channel_swap('data',(2,1,0)) im=caffe.io.load_image(caffe_root + 'examples/images/cat.jpg')#待测图片 net.blobs['data'].data[...] = transformer.preprocess('data',im) out = net.forward() #这个是类别的txt文件,自己制作的数据集和model的话这个也得自己制作,我采用的是cifar10里面现存的。 imagenet_labels_filename = caffe_root + 'data/cifar10/batches.meta.txt' labels = np.loadtxt(imagenet_labels_filename,str,delimiter='\t') top_k = net.blobs['prob'].data[0].flatten().argsort()[-1:-6:-1] print top_kprob= net.blobs['prob'].data[0].flatten() #取出最后一层(prob)属于某个类别的概率值,并打印 print prob order=top_k.argsort()[-1] #将概率值排序,取出最大值所在的序号 for i in np.arange(top_k.size): print top_k[i], labels[top_k[i]]
#coding=utf-8
import sys,os
caffe_root ='/home/lhu/caffe/'
sys.path.insert(0,caffe_root + 'python')
import caffe
os.chdir(caffe_root)
import numpy as np
print "Usage: python convert_protomean.py proto.mean out.npy"
blob = caffe.proto.caffe_pb2.BlobProto()
BINARY_PROTO_FILE_NAME ='mean.binaryproto'
#二进制均值文件名称不必写地址你可以把它放到caffe根目录下
BINARY_PROTO_FILE_PATH = os.path.join(os.getcwd(),BINARY_PROTO_FILE_NAME)
NPY_FILE_NAME ='mean.npy'#转换后npy名称
NPY_FILE_PATH = os.path.join(os.getcwd(),NPY_FILE_NAME)
data = open( BINARY_PROTO_FILE_PATH, 'rb' ).read()
blob.ParseFromString(data)
arr = np.array( caffe.io.blobproto_to_array(blob) )
out = arr[0]
np.save( NPY_FILE_PATH , out )
注意注释部分,这样会在caffe根目录产生mean.npy文件
2.在~/caffe/python/文件夹下建立,一个myclassify.py,用来分类单张图片:
#coding=utf-8
import numpy as np
import sys,os
caffe_root ='/home/lhu/caffe/'
sys.path.insert(0,caffe_root + 'python')
import caffe
os.chdir(caffe_root)
net_file = caffe_root +'examples/cifar10/cifar10_quick.prototxt'#这个是*_deploy.prototxt文件
caffe_model = caffe_root + 'data/cifar10/cifar10_quick_iter_5000.caffemodel.h5'#我的model
mean_file = caffe_root + 'examples/cifar10/mean.npy'#我们刚刚得到的均值文件,我把它放在examples
net = caffe.Net(net_file,caffe_model,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(mean_file).mean(1).mean(1))
transformer.set_raw_scale('data',255)
transformer.set_channel_swap('data',(2,1,0))
im=caffe.io.load_image(caffe_root + 'examples/images/cat.jpg')#待测图片
net.blobs['data'].data[...] = transformer.preprocess('data',im)
out = net.forward()
#这个是类别的txt文件,自己制作的数据集和model的话这个也得自己制作,我采用的是cifar10里面现存的。
imagenet_labels_filename = caffe_root + 'data/cifar10/batches.meta.txt'
labels = np.loadtxt(imagenet_labels_filename,str,delimiter='\t')
top_k = net.blobs['prob'].data[0].flatten().argsort()[-1:-6:-1]
for i in np.arange(top_k.size):
print top_k[i], labels[top_k[i]]
3.打开终端,我们需要在python文件夹下运行my_classify.py,如果在caffe根目录,可以输入:
cd python
sudo python my_classify.py ./examples/images/cat,jpg #注意更改你的带测图片位置#coding=utf-8import numpy as np import sys,os caffe_root ='/home/lhu/caffe/' sys.path.insert(0,caffe_root + 'python') import caffe os.chdir(caffe_root) net_file = caffe_root +'examples/cifar10/cifar10_quick.prototxt'#这个是*_deploy.prototxt文件 caffe_model = caffe_root + 'examples/cifar10/cifar10_quick_iter_5000.caffemodel.h5'#我的model mean_file = caffe_root + 'examples/cifar10/mean.npy'#我们刚刚得到的均值文件,我把它放在examples net = caffe.Net(net_file,caffe_model,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(mean_file).mean(1).mean(1)) transformer.set_raw_scale('data',255) transformer.set_channel_swap('data',(2,1,0)) im=caffe.io.load_image(caffe_root + 'examples/images/cat.jpg')#待测图片 net.blobs['data'].data[...] = transformer.preprocess('data',im) out = net.forward() #这个是类别的txt文件,自己制作的数据集和model的话这个也得自己制作,我采用的是cifar10里面现存的。 imagenet_labels_filename = caffe_root + 'data/cifar10/batches.meta.txt' labels = np.loadtxt(imagenet_labels_filename,str,delimiter='\t') top_k = net.blobs['prob'].data[0].flatten().argsort()[-1:-6:-1] print top_kprob= net.blobs['prob'].data[0].flatten() #取出最后一层(prob)属于某个类别的概率值,并打印 print prob order=top_k.argsort()[-1] #将概率值排序,取出最大值所在的序号 for i in np.arange(top_k.size): print top_k[i], labels[top_k[i]]