【caffe】从模型中获取中间层的输出

首先需要两个文件:

       1. caffemodeldeploy.prototxt

       2. 网络输入的数据文件以及需要输出的那一层的名字

下面以VGG_face为例:   (我需要获取pool5的输出

#coding=utf-8
import sys
sys.path.insert(1,'/home/Develop/caffe/python')
import caffe
import cv2
import numpy as np

im_path = "../ak.png"

#设置GPU运行,如果在cpu下的话直接注释掉就行
caffe.set_mode_gpu()

deploy='../VGG_FACE_deploy.prototxt'    #deploy文件
caffe_model= '../VGG_FACE.caffemodel'   #训练好的 caffemodel
net = caffe.Net(deploy,caffe_model,caffe.TEST)

im  =  cv2.imread(im_path)
im = cv2.resize(im,(224,224))

'''预处理部分,需要与网络训练的时候一致'''
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2, 0, 1)) #将图片由(224,224,3)转换成(3,224,224)
transformer.set_mean('data', np.array((93.5940,104.7624,129.1863)))  #设置mean value,按通道减去均值。

im = transformer.preprocess('data', im)
net.blobs['data'].data[0] = im		
out = net.forward(end='pool5')         #end=‘out layer name’,指定需要获取输出的层,我这里是VGG的‘pool5’层。
#print out             #输出为一个字典,{‘pool5’:array(....)}
output = out['pool5']
print output

        后面的步骤就是将你的输出保存以便进行其他的操作。

你可能感兴趣的:(caffe)