caffe学习笔记(十七)--用caffemodel进行批量图片分类

版权声明:本样板的所有内容,包括文字、图片,均为原创。对未经许可擅自使用者,本人保留追究其法律责任的权利。 https://blog.csdn.net/qq_29893385/article/details/81252414

接上篇文章,这次进行批量图片处理,在/examles/images文件中有四张图片如下所示

接下来另外创建classifiy2.py文件,进行批量图片处理,事实上,这次的处理流程和上篇笔记基本类似,上次是处理一张图片,这次是处理批量图片而已。区别只是选用Python进行图片分类时调用的不是classify文件而是classify2文件,其他操作流程基本不变,具体可参考:学习笔记(十六) :https://blog.csdn.net/qq_29893385/article/details/81252163 

classify2.py内容如下:

#coding=utf-8
# 作用:可以用来批处理图片进行分类

import sys,os

import numpy as np

                                                #root = '/home/ren_dong/ccaffe'  # 根目录
caffe_root = '/home/ren_dong/caffe/'
sys.path.insert(0, caffe_root + 'python')
import caffe
os.chdir(caffe_root)

deploy = caffe_root + 'models/bvlc_reference_caffenet/deploy.prototxt'  # deploy文件的路径
caffe_model = caffe_root + 'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel'  # caffe_model的路径
mean_file = caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy'  # mean_file的路径--注意,在python中要将mean.binaryproto转换为mean.npy格式
labels_filename = caffe_root + 'data/ilsvrc12/synset_words.txt'  # sysset_words.txt的路径

# 预读待分类的图片
import os

dir = caffe_root + 'examples/images'
filelist = []
filenames = os.listdir(dir)  # 返回指定目录下的所有文件和目录名
for fn in filenames:
    fullfilename = os.path.join(dir, fn)  # os.path.join--拼接路径
    filelist.append(fullfilename)  # filelist里存储每个图片的路径

net = caffe.Net(deploy, caffe_model, caffe.TEST)  # 加载model和network

# 图片预处理设置
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.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

# 加载图片
for i in range(0, len(filelist)):
    img = filelist[i]  # 获取当前图片的路径
    print filenames[i]  # 打印当前图片的名称

    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['prob'].data[0].flatten()  # 取出最后一层(prob)属于某个类标的概率值,'prob'为最后一层的名称

    # print prob
    index1 = prob.argsort()[-1]  # 获取最大概率值对应的index
    index2 = prob.argsort()[-2]  # 获取第二大概率值对应的index
    index3 = prob.argsort()[-3]  # 获取第三大概率值对应的index
    index4 = prob.argsort()[-4]  # 获取第四大概率值对应的index

    print labels[index1], '--', prob[index1]  # 输出label--prob
    print labels[index2], '--', prob[index2]
    print labels[index3], '--', prob[index3]
    print labels[index4], '--', prob[index4]

测试运行结果如下 (采用pycharm的IDE):

具体就这些了,希望你成功哦!

猜你喜欢

转载自blog.csdn.net/qq_29893385/article/details/81252414
今日推荐