caffemodel进行批量测试

原博客地址:https://www.2cto.com/kf/201707/659331.html

1 批量对图片进行分类
  在对单个图片进行分类就想知道如何批量对图片进行分类。自己搜索了一些资料,发现需要调用python,使用python文件实现目的。 
  下面是批量对图片进行分类的代码(自己修改):
?
#coding=utf- 8
#作用:可以用来批处理图片进行分类
 
import os
import caffe
import numpy as np
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
root= 'C:/Users/Administrator/Desktop/' #根目录
deploy=root+ '11/alexnet.prototxt'      #deploy文件的路径
caffe_model=root+ '11/HCL_1_800_HWDB_Train_3232_iter_480000.caffemodel'  #caffe_model的路径
mean_file=root+ '11/mean.npy'     #mean_file的路径--注意,在python中要将mean.binaryproto转换为mean.npy格式
labels_filename=root+ '11/synset_words.txt'  #sysset_words.txt的路径
 
#预读待分类的图片
import os
dir=root+ 'Img/'
filelist=[]
filenames=os.listdir(dir)  #返回指定目录下的所有文件和目录名
for fn in filenames:
     fullfilename=os.path.join(dir,fn) #os.path.join--拼接路径
     filelist.append(fullfilename) #filelist里存储每个图片的路径
     
 
net=caffe.Net(deploy,caffe_model,caffe.TEST)  #加载model和network
     
#图片预处理设置
transformer=caffe.io.Transformer({ 'data' :net.blobs[ 'data' ].data.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
 
#加载图片
for i in range( 0 ,len(filelist)):
     img=filelist[i]   #获取当前图片的路径
     print filenames[i]    #打印当前图片的名称
     
     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()   #取出最后一层(prob)属于某个类标的概率值, 'prob' 为最后一层的名称
     
     #print prob
     index1=prob.argsort()[- 1 ]  #获取最大概率值对应的index
     index2=prob.argsort()[- 2 ]  #获取第二大概率值对应的index
     index3=prob.argsort()[- 3 ]  #获取第三大概率值对应的index
     index4=prob.argsort()[- 4 ]  #获取第四大概率值对应的index
     
     print labels[index1], '--' ,prob[index1]   #输出label--prob
     print labels[index2], '--' ,prob[index2]
     print labels[index3], '--' ,prob[index3]
     print labels[index4], '--' ,prob[index4]

 在这里需要注意是:

  (1) "import caffe"的前提是需要编译了pycaffe,具体可以看我的caffe小问题汇总(持续更新)第5个问题

  (2) 在这里均值文件mean.binaryproto需要转换为mean.npy文件,其python代码如下:

#!/usr/bin/env python--将mean.binaryproto文件转为python可以使用的mean.npy文件
import numpy as np
import sys,caffe
 
root= 'C:/Users/Administrator/Desktop/11/'  #设置根目录
mean_proto_path=root+ 'mean.binaryproto'    #mean.binaryproto路径
mean_npy_path=root+ 'mean.npy'              #mean.npy路径
 
blob=caffe.proto.caffe_pb2.BlobProto()     #创建protobuf blob
data=open(mean_proto_path, 'rb' ).read()     #读入mean.binaryproto文件内容
blob.ParseFromString(data)                 #解析文件内容到blob
 
array=np.array(caffe.io.blobproto_to_array(blob))  #将blob中的均值转换称numpy格式,array的shape(mean_number,channel,hight,width)
mean_npy=array[ 0 ]                          #一个array中可以有多组均值存在,故需要通过下标选择一组均值
np.save(mean_npy_path,mean_npy)            #保存
 如此,只要设定相关的路径,即可利用训练好的caffemodel对图片进行批量分类。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值