根据doc文件改的方便提caffe特征的py脚本
#coding=utf-8
import sys
#############################caffe提特征的脚本###########################
###################我们可以从这里改变提特征的参数########################
##step1 配置caffe的路径
sys.path.insert(0,'/home/cp/caffe/python/')
##step2 配置训练好的 model 以及deploy.prototxt
#MODEL_FILE = '/home/zyf/preTrainedModel/VGG_ILSVRC_16_layers/deploy.prototxt'
#PRETRAINED = '/home/zyf/preTrainedModel/VGG_ILSVRC_16_layers/VGG_ILSVRC_16_layers.caffemodel'
MODEL_FILE = '/home/cp/sl-caffe/examples/mnist_sl/deploy/alexnet_batchsize320_deploy.prototxt'
PRETRAINED = '/home/cp/sl-caffe/examples/mnist_sl/alexnet_cp_iter_200000.caffemodel'
##step3 配置图像的目录 ps:目录里只能放图像
IMAGE_ROOT = '/home/cp/kaggle/data/Images/'
##step4 配置 提特征的具体层
LAYER = 'pool5'
##step5 配置 保存的名字
SAVENAME = 'clothes1_query_alex_feature'
LISTNAME = 'clothes1_query_alex_namelist'
#######################以上是参数配置部分###############################
import numpy
import caffe
import os
caffe.set_mode_gpu()
gpu_id = 0
caffe.set_device(gpu_id)
net=caffe.Net(MODEL_FILE,PRETRAINED,caffe.TEST)
blob = caffe.proto.caffe_pb2.BlobProto()
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2,0,1))
# question : 注释这一行提出的特征在[0,1]之间 暂时认为是特征的归一下
transformer.set_raw_scale('data', 255) # the reference model operates on images in [0,255] range instead of [0,1]
transformer.set_channel_swap('data', (2,1,0)) # the reference model has channels in BGR order instead of RGB
net.blobs['data'].reshape(1,3,227,227)
files=os.listdir(IMAGE_ROOT)
imageList=[]
feature=[]
import time
import numpy
for i in files:
net.blobs['data'].data[...] = transformer.preprocess('data', caffe.io.resize_image(caffe.io.load_image(IMAGE_ROOT+i),(227,227)))
t0 = time.time()
out = net.forward()
feature.append(net.blobs[LAYER].data[0].copy())
print net.blobs[LAYER].data[0].copy()
imageList.append(i)
pretime = time.time() - t0
print 'Img '+str(i)+' feature extraction cost '+str(pretime)+' s'
#保存到numpyarray
feature=numpy.array(feature)
imageList=numpy.array(imageList)
numpy.save(SAVENAME+'.npy',feature)
numpy.save(LISTNAME+'.npy',imageList)