Caffe入门实验八:python接口学习 调用

这篇博客介绍如何使用Caffe的Python接口对预训练模型进行小猫咪分类的测试程序,通过代码和注释详细阐述调用过程。
摘要由CSDN通过智能技术生成

这里只是对caffe已有的配置文件和模型进行调用,我们用它来写之前一个对小猫咪类别的一个分类,也就是测试的程序。
直接看代码和注释把~

//import需要的模块,设置好路径和绘图参数

import numpy as np   //加载python调用需要的块
import sys,os
import cv2   //加载opencv,显示用的


caffe_root='/home/jiaxuan2/caffe-master/'   //caffe路径
//下面这三句话也是必须的,把python路径改到指定的地方
sys.path.insert(0,caffe_root+'python')
import caffe
os.chdir(caffe_root)

//两个必须的文件,deploy文件和model,以及数据均值文件的路径,本文需要用到
net_file=caffe_root+'models/bvlc_reference_caffenet/deploy.prototxt'
caffe_model=caffe_root+'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel'
mean_file=caffe_root+'python/caffe/imagenet/ilsvrc_2012_mean.npy'


//设置Caffe为测试阶段,载入网络并配置输入预处理。

net=caffe.Net(net_file,caffe_model,caffe.TEST)
//定义网络模型,参数1 网络结构,参数2 model权值, 参数3 测试阶段transformer=caffe.io.Transformer({'data':net.blobs['data'].data.shape})
//对数据预处理过程,data是input blob
transformer.set_transpose('data',(2,0,1))
//原来读入的数据形式是H*W*K(0,1,2),但我们需要的是K*H*W(2,0,1)
transformer.set_mean('data',np.load(mean_file).mean(1).mean(1))
//计算均值,读数据均值文件
transformer.set_raw_scale('data',225)
//把0-1的数值转化为0-255
transformer.set_channel_swap('data',(2,1,0))
//关于读入的颜色通道,在caffe中读入是BGR(0,1,2),所以要将RGB转化为BGR(2,1,0)

img=caffe.io.load_image(caffe_root+'examples/images/cat.jpg')
//读我们需要分类的照片,那只小猫咪,下面几步是为了显示图片,caffe读完做了归一化,所以数值为0-1,要把它换位0-255
img=img[...,::-1]//将列表img倒序处理,如果img=[1,2,3],则img[::-1]=[3,2,1]。前两个冒号表示处理整个列表。
im=img*255
cv2.imwrite("./out1.jpg",im)//用poencv存放图片,前面是存放路径,后面是图片
net.blobs['data'].data[...]=transformer.preprocess('data',img)
//导入图片,进行预处理
out=net.forward()//进行向前传播,因为是测试阶段

imagenet_labels_filename=caffe_root+'data/ilsvrc12/synset_words.txt'
labels=np.loadtxt(imagenet_labels_filename,str,delimiter='\t')//加载label的txt,是为了后面的显示用到的

top_k=net.blobs['prob'].data[0].flatten().argsort()[-1:-6:-1]
//前6个可能概率最大的,flatten,是python里面展平的意思
//argsort是从低到高排序,-1到-6表示反过来的1-5个的意思。[-1:-6:-1],最后一个-1表示倒序处理的意思,第一个参数表示起始点包括起始点,第二个参数表示结束点但不包括结束点。最后一个参数如果为负的话,需要保证第一个参数大于第二个参数,表示依次递减逆序,否则会输出空列表。最后一个参数为正同理。

for i in np.arange(top_k.size):
    print top_k[i],labels[top_k[i]]//打印结果

结果是

这里写图片描述
5个排序,以及下面储存的图片
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值