在caffe的学习过程中,我发现我需要一个模板的程序来方便我测试训练的模型。我在上一篇博客中(caffe学习(五):cifar-10数据集训练及测试(Ubuntu) ),最后测试训练好的模型时是修改caffe自带的classify.py来进行测试的,如果每次都修改未免太麻烦了,所以我就上网找了相关的资料。

参考博客:Caffe学习系列(20):用训练好的caffemodel来进行分类

下载模型

1、先去下载一个训练好的caffemodel,bvlc_reference_caffenet.caffemodel。
下载地址:http://dl.caffe.berkeleyvision.org/bvlc_reference_caffenet.caffemodel
大小约230M,几分钟就下好了。
这个模型是caffe的作者贾扬清及其团队训练好的,我们默认将这个文件放到
$CAFFE_ROOT/models/bvlc_reference_caffenet/下。

也可使用脚本下载,速度较慢:

cd $CAFFE_ROOT
./scripts/download_model_binary.py models/bvlc_reference_caffenet

2、生成均值文件。
输入指令:

cd $CAFFE_ROOT
sh ./data/ilsvrc12/get_ilsvrc_aux.sh

在测试时,程序会将数据减去均值,随后再调用训练好的模型。我们直接将这个文件下载下来。
调用脚本下载时,一并将synset_words.txt下载好了。这个文件放的是1000个类的名称。

编写python代码

我此前安装过anaconda2,使用其自带的jupyter notebook编写代码。可以看到每一步的运行结果,也可以看到报错等,调试代码十分方便。

下面按照每段代码的顺序列出来:
1、引入依赖库。

#coding=utf-8
import numpy as np
import sys,os

2、引入caffe的路径,caffe_root修改为自己的caffe的根目录。

caffe_root = '/home/xhb/caffe/'
sys.path.insert(0, caffe_root + 'python')

3、引入caffe,将路劲切换到caffe根目录。

import caffe
os.chdir(caffe_root)

4、几个用到的文件,caffe_model就是我们之前下载的模型,mean_file是均值文件,net_file是网络配置文件。

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'

5、caffe模型配置,读入模型和网络配置以及均值文件。

net = caffe.Net(net_file, caffe_model, caffe.TEST)
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2, 0, 1))
transformer.set_mean('data', np.load(mean_file).mean(1).mean(1))
transformer.set_raw_scale('data', 255)
transformer.set_channel_swap('data', (2, 1, 0))

6、读取图片,这里读取的是我自己下载的图片,路径由自己更改。

img1 = caffe.io.load_image(caffe_root + 'examples/images/cat2.jpg')

7、预处理。

net.blobs['data'].data[...] = transformer.preprocess('data', img1)

8、前向传播一次,最后一层网络会输出结果。

out = net.forward()

9、读取存放了标签的文件synset_words.txt。

imagenet_labels_filename = caffe_root + 'data/ilsvrc12/synset_words.txt'
labels = np.loadtxt(imagenet_labels_filename, str, delimiter='\t')

10、将最后一层的结果按照概率大小排序。

op_k = net.blobs['prob'].data[0].flatten().argsort()[-1:-6:-1]

11、打印预测结果,预测概率从大到小。

for i in np.arange(top_k.size):print top_k[i], labels[top_k[i]]

到命令行下再测试几个看看:


结果:(很详细啊)

208 n02099712 Labrador retriever
222 n02104029 kuvasz
257 n02111500 Great Pyrenees
179 n02093256 Staffordshire bullterrier, Staffordshire bull terrier
180 n02093428 American Staffordshire terrier, Staffordshire terrier, American pit bull terrier, pit bull terrier

飞机:

结果:

404 n02690373 airliner
908 n04592741 wing
895 n04552348 warplane, military plane
812 n04266014 space shuttle
744 n04008634 projectile, missile



结果:

563 n03388183 fountain pen
418 n02783161 ballpoint, ballpoint pen, ballpen, Biro
623 n03658185 letter opener, paper knife, paperknife
784 n04154565 screwdriver
473 n02951585 can opener, tin opener

这套python代码可以当做一个模板来使用了,只需要稍微修改一点图片名等信息即可,方便了不少。

caffe学习(六):使用python调用训练好的模型来分类(Ubuntu)相关推荐

  1. 用C++调用tensorflow在python下训练好的模型(centos7)

    本文主要参考博客https://blog.csdn.net/luoyexuge/article/details/80399265 [1]  bazel安装参考:https://blog.csdn.ne ...

  2. 调用训练好的模型(tensorflow)

    使用Tensorflow框架完美保存并实现调用训练好的模型 opencv调用tf训练好的模型          主机调用,不用安装tf,不需要显卡 OpenCV的dnn模块调用TesorFlow训练的 ...

  3. python回归分析预测模型_在Python中如何使用Keras模型对分类、回归进行预测

    姓名:代良全 学号:13020199007 转载自:https://www.jianshu.com/p/83ba11abdffc [嵌牛导读]: 在Python中如何使用Keras模型对分类.回归进行 ...

  4. Caffe学习笔记3——制作并训练自己的数据集

    Caffe学习笔记3 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和h ...

  5. python 图表_Python入门学习系列——使用Python调用Web API实现图表统计

    使用Python调用Web API实现图表统计 Web API:Web应用编程接口,用于URL请求特定信息的程序交互,请求的数据大多以非常易于处理的格式返回,比如JSON或CSV等. 本文将使用Pyt ...

  6. caffe学习(四):py-faster-rcnn配置,运行测试程序(Ubuntu)

    上一篇博客中讲了在Ubuntu下安装caffe的经验总结(各种问题,简直怀疑人生了).博客链接:点我打开 faster-rcnn有两个版本,分别是python的和MATLAB的.这里介绍python版 ...

  7. 目标检测:RFCN的Python代码训练自己的模型

    py-R-FCN源码下载地址: https://github.com/Orpine/py-R-FCN 也有Matlab版本: https://github.com/daijifeng001/R-FCN ...

  8. Caffe学习系列(20):用训练好的caffemodel来进行分类

    caffe程序自带有一张小猫图片,存放路径为caffe根目录下的 examples/images/cat.jpg, 如果我们想用一个训练好的caffemodel来对这张图片进行分类,那该怎么办呢? 如 ...

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

    接上篇文章,这次进行批量图片处理,在/examles/images文件中有四张图片如下所示 接下来另外创建classifiy2.py文件,进行批量图片处理,事实上,这次的处理流程和上篇笔记基本类似,上 ...

最新文章

  1. String、StringBuffer与StringBuilder之间区别 (转载)
  2. Python简介、安装、更新、基本语法及数据类型
  3. 從三種方式看SQL的使用程度
  4. 计算机控制的点火系统由,第八节(点火系统)
  5. 大河抽奖盲盒运营版 1.9.12开源版
  6. EasyRecovery恢复数据的具体步骤是什么
  7. 酷炫MQTT实现消息推送
  8. python 密码安全_python密码安全程序
  9. java 文件读写 中文_java读写中文文件
  10. linux安装富士施乐打印机驱动下载,linux s1810打印机驱动肿么安装
  11. SAN(存储区域网络),WWN, WWPN,WWNN区别
  12. 计算机专业论文的创新点怎么说,计算机专业毕业生如何写毕业论文
  13. 斐波那契数列几个公式
  14. 【技术讨论】从弹弹堂说起,如何用2D物理引擎编写一个游戏lt;一gt;2011-11-05 10:36
  15. PostgreSQL RULE
  16. [转]Linux面试题(2020最新版)
  17. 在线服务器密码爆破,服务器3389被爆破,我想知道他用哪些密码尝试过 - winServer论坛 - 51CTO技术论坛_中国领先的IT技术社区...
  18. 活久见!Linux命令行居然也可以用来查看图像?
  19. 由安卓开发中的一个坑引发的问题解决之道浅析
  20. IOT_WIFI/LORA/THREAD/ZIGBEE/NFC/RFID/EnOcean

热门文章

  1. Mybatis执行过程源码分析
  2. 关于main函数中argc和argv的简单介绍
  3. ArrayList遍历的同时删除
  4. 分布式系统的事务处理
  5. 答与微博前端教主在吃饭时讨论到的一道微软面试题
  6. Day 8: Harp.JS——现代静态web服务器
  7. Machine Learning week 4 quiz: Neural Networks: Representation
  8. 鸟哥的Linux私房菜(基础篇)- 一些基础的Linux 问题
  9. 《大话数据结构》第9章 排序 9.6 希尔排序(上)
  10. 【OpenCV3】图像通道分离与合并——cv::split()与cv::merge()详解