cifar10的模型训练好之后,如何搭建检测自己图片类型的网络

按照教程训练好模型,并得到了cifar10_quick_iter_4000.caffemodel.h5的文件,但是后续工作,即如何调用这个模型检测自己的图片,却找不到指南了。。。。求帮助
已邀请:

smu_wangbo - 误入人工智能进行深度学习的电气小硕

赞同来自: caffe xiaolin

1.把二进制均值文件mean.binaryproto转换成mean.npy:建立一个switch.py如下:
#coding=utf-8
import sys,os  
caffe_root ='/home/wangbo/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/wangbo/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   #注意更改你的带测图片位置
以上内容均来自我的博客,转载注明出处。

xiaolin

赞同来自:

我也是到这一步了,不知道楼主解决了没有

进击的煎饼果子 - 理工男,略带文艺

赞同来自:

自己之前竟然还问这种问题,有意思。。。。。这个问题一楼回答的已经挺好了。   如果是批量测试自己的图片的画,建议先自己转化成lmdb格式的文件,(如何转换百度一下就有教程,利用caffe官方给的imagenet.sh文件搞定),得到自己的lmdb文件之后,借用想同网络结构的test.pro,把其中的lmdb文件路径改成刚才生成的那个,再运行一下,就搞定了

要回复问题请先登录注册