caffe的python接口使用方法示例

训练

import sys
#添加caffe下的python文件夹的路径
sys.path.append("../caffe-master/python")
import caffe
import numpy as np
import os

#使用caffemodel进行训练
weights = 'googlenet_bn_stepsize_6400_iter_1200000.caffemodel'
caffe.set_device(0)  #选择0号GPU
caffe.set_mode_gpu() #使用GPU模式
solver = caffe.SGDSolver('solver.prototxt') #加载solver文件
solver.net.copy_from(weights) #加载caffemodel
solver.solve() #开始运行

#使用solverstate继续之前的训练
s = "googlenet_bn_stepsize_6400_iter_1200000.solverstate"
caffe.set_device(0)  #选择0号GPU
caffe.set_mode_gpu() #使用GPU模式
solver = caffe.SGDSolver('solver.prototxt')#加载solver文件
solver.restore(s) #加载solverstate
solver.solve() #开始运行

提取特征

#这里是将特征写入txt,写入其他文件(如npy等)方法类似
import sys
#添加caffe下的python文件夹的路径
sys.path.append("../caffe-master/python")
import caffe
import os
import numpy as np

deploy = 'train_val.prototxt'  #CNN配置文件
caffe_model = 'googlenet_bn_stepsize_6400_iter_1200000.caffemodel' #权重文件

caffe.set_device(0)  #选择0号GPU
caffe.set_mode_gpu() #使用GPU模式
net = caffe.Net(deploy,caffe_model,caffe.TEST) #初始化网络,选取test模式,所以prototxt的输入层

#打开一个文本文件
file_name = 'fea.txt'
output = open(file_name,'w')

num = 100  #需要提取特征的图片的数量,这里是因为我在prototxt配置文件里面将batch size设置为1, 所以num就是输入层的图片list中图片的数量
while num:
    print num
    num = num - 1
    net.forward() #网络前传一次,后传类似

    param = net.params['conv1'][0].data #获取一层的权重
    fea = net.blobs['pool0'].data #获取一层的数据
    print np.shape(fea)  #输出数据的形状,这里是一个pooling层,所以应该是4维的
	
    #将特征连成一个字符串,写入文本文件
    str_fea = ''
    for x in xrange(len(fea[0])):
        str_fea = str_fea + str(fea[0][x][0][0]) +' '
    str_fea = str_fea + '\n'
    output.write(str_fea)
	
output.close()

使用输入图片到deploy

deploy中数据层:
input: "data"
input_dim: 1
input_dim: 3
input_dim: 512
input_dim: 512

将图片输入deploy:
import sys
sys.path.append("../caffe/python/")
import caffe
import os
import numpy as np
import cv2

deploy = 'deploy.prototxt'
caffe_model = 'googlenet_bn_stepsize_6400_iter_120000.caffemodel'

caffe.set_device(0)
caffe.set_mode_gpu()
net = caffe.Net(deploy,caffe_model,caffe.TEST)

im = cv2.imread('exmaple.jpg')
im = cv2.resize(im,(512,512))
im = np.array(im, np.float32)
im -= mean #减去每个通道的均值
im = np.transpose(im, (2, 0, 1)) #由图片的shape:512*512*3 变为caffe输入要求的3*512*512
net.blobs['data'].data[...] = im #将图片输入到网络
net.forward() #完成一次前传




  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值