caffe-python简单使用

import caffe
import numpy as np
import matplotlib.pyplot as plt
import os
import PIL
from PIL import Image
import sys


deploy_file = 'D:/Program_Code/PY/caffe/deploy.prototxt'

model_file = 'D:/Program_Code/PY/caffe/bvlc_googlenet.caffemodel'

# gpu模式
# caffe.set_device(0)
caffe.set_mode_cpu()

# 定义网络模型
net = caffe.Classifier(deploy_file,  # 调用deploy文件
                       model_file,   # 调用模型文件
                       channel_swap=(2, 1, 0),  # caffe中图片是BGR格式,而原始格式是RGB,所以要转化
                       raw_scale=255,         # python中将图片存储为[0, 1],而caffe中将图片存储为[0, 255],所以需要一个转换
                       image_dims=(227, 227))  # 输入模型的图片要是227*227的图片


print "1"
print "***************************************"
print("net: ", net)
# 分类标签文件
# imagenet_labels_filename ='D:/Program_Code/PY/caffe/synset_words.txt'

# 载入分类标签文件
labels = np.loadtxt(r'D:/Program_Code/PY/caffe/synset_words.txt', delimiter='\t', dtype=str)
print "2"
# 对目标路径中的图像,遍历并分类
for root, dirs, files in os.walk('D:/Program_Code/PY/caffe/images'):
    for file in files:
        # 加载要分类的图片
        image_file = os.path.join(root, file)
        input_image = caffe.io.load_image(image_file)

        # 打印图片路径及名称
        image_path = os.path.join(root, file)
        print(image_path)
        print "3"
        # 显示图片
        # img=Image.open(image_path)
        # plt.imshow(img)
        # plt.axis('off')
        # plt.show()
        
        # 预测图片类别
        prediction = net.predict([input_image])
        print 'predicted class:', prediction[0].argmax()
        print "4"

        # 输出概率最大的前5个预测结果
        top_k = prediction[0].argsort()[::-1]
        for node_id in top_k:     
            # 获取分类名称
            human_string = labels[node_id]
            # 获取该分类的置信度
            score = prediction[0][node_id]
            print('%s (score = %.5f)' % (human_string, score))



# 1、caffe首先会输出模型结构描述文件内容
# 2、输出每一层之间的数据flow详细状态信息

 

上一篇:Java开发笔记(一百五十一)Druid连接池的用法


下一篇:caffe模型通道剪枝channel pruning(一会补充代码)