资讯专栏INFORMATION COLUMN

caffe的python接口deploy形成caffemodel归类新的图片

89542767 / 190人阅读

  本文主要是给大家介绍了caffe的python插口生成deploy文件学习培训及其用练习好一点的实体模型(caffemodel)来归类新的图片实例详细说明,感兴趣的小伙伴可以参考借鉴一下,希望可以有一定的帮助,祝愿大家多多的发展,尽早涨薪


  caffe的python插口生成deploy文件


  假如要将练习好一点的实体模型用于检测新的图片,那必然必须得一个deploy.prototxt文件,这一文档事实上和test.prototxt文件基本上,仅仅首尾各不相同而也。deploy文件并没有一层数据传送层,都没有最后Accuracy层,但之后多出一个Softmax几率层。


  接下来我们选用编码的方式去一键生成该文档,以mnist为例子。


  deploy.py


  #-*-coding:utf-8-*-
  from caffe import layers as L,params as P,to_proto
  root='/home/xxx/'
  deploy=root+'mnist/deploy.prototxt'#文件保存路径
  def create_deploy():
  #少了第一层,data层
  conv1=L.Convolution(bottom='data',kernel_size=5,stride=1,num_output=20,pad=0,weight_filler=dict(type='xavier'))
  pool1=L.Pooling(conv1,pool=P.Pooling.MAX,kernel_size=2,stride=2)
  conv2=L.Convolution(pool1,kernel_size=5,stride=1,num_output=50,pad=0,weight_filler=dict(type='xavier'))
  pool2=L.Pooling(conv2,pool=P.Pooling.MAX,kernel_size=2,stride=2)
  fc3=L.InnerProduct(pool2,num_output=500,weight_filler=dict(type='xavier'))
  relu3=L.ReLU(fc3,in_place=True)
  fc4=L.InnerProduct(relu3,num_output=10,weight_filler=dict(type='xavier'))
  #最后没有accuracy层,但有一个Softmax层
  prob=L.Softmax(fc4)
  return to_proto(prob)
  def write_deploy():
  with open(deploy,'w')as f:
  f.write('name:"Lenet"n')
  f.write('input:"data"n')
  f.write('input_dim:1n')
  f.write('input_dim:3n')
  f.write('input_dim:28n')
  f.write('input_dim:28n')
  f.write(str(create_deploy()))
  if __name__=='__main__':
  write_deploy()

  运作该文档后,会在mnist目录下,形成一个deploy.prototxt文件。


  这一文档不建议用编码来形成,反倒是繁琐。大伙儿了解之后能将test.prototxt拷贝1份,改动相对应的地方就行了,方便快捷。


  练习好一点的实体模型caffemodel归类新图片


  通过前边的学习培训,己经练习好啦一个caffemodel实体模型,并形成了一个deploy.prototxt文件,如今我们就通过这两文档来对于新的图片开展分类预测。


  大家从mnist数据的test集中化随意找一张照片,用于开展试验。


  #coding=utf-8
  import caffe
  import numpy as np
  root='/home/xxx/'#根目录
  deploy=root+'mnist/deploy.prototxt'#deploy文件
  caffe_model=root+'mnist/lenet_iter_9380.caffemodel'#训练好的caffemodel
  img=root+'mnist/test/5/00008.png'#随机找的一张待测图片
  labels_filename=root+'mnist/test/labels.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['Softmax1'].data[0].flatten()#取出最后一层(Softmax)属于某个类别的概率值,并打印
  print prob
  order=prob.argsort()[-1]#将概率值排序,取出最大值所在的序号
  print'the class is:',labels[order]#将该序号转换成对应的类别名称,并打印
  最后输出the class is:5


  分类正确。


  如果是预测多张图片,可把上面这个文件写成一个函数,然后进行循环预测就可以了。


  综上所述,这篇文章就给大家介绍完毕了,希望可以给大家带来帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128757.html

相关文章

  • caffepython接口caffemodel指标及特征抽取实例

      此篇文章主要是详细介绍了caffe的python接口caffemodel指标及特征抽取实例详细说明,感兴趣的小伙伴可以参考借鉴一下,希望可以有一定的帮助,祝愿大家多多的发展,尽早涨薪  文章正文  如果使用公式计算y=f(wx+b)  来描述全部计算全过程得话,那样w和b是我们必须锻炼的物品,w称之为权重值,在cnn之中能够称为池化层(filter),b是偏置项。f是激活函数,有sigmoid...

    89542767 评论0 收藏0
  • caffepython插口之手写数字识别mnist案例

      文中主要是给大家介绍了caffe的python插口之手写数字识别mnist案例详细说明,感兴趣的小伙伴可以参考借鉴一下,希望可以有一定的帮助,祝愿大家多多的发展,尽早涨薪  论文引言  机器学习第一个案例一般都是是mnist,只需这个案例彻底搞懂了,其他的便是触类旁通的事了。因为字数缘故,文中不简单介绍环境变量里边每一个指标的具体函义,如果要搞明白的,请参考我之前的微博文章:  数据访问层及主...

    89542767 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<