Caffe利用测试好的模型测试图片以及每层的可视化

如果我们已经训练好了一个CNN模型,怎么去利用这个模型去测试呢?以及怎么去看每一层的输出结构呢?基于python可视化可以实现,这些都集成在了caffe-master/python中

1. 准备一些必要模板
import numpy as np                #导入numpy模块用作后面的数值计算
import matplotlib.pyplot as plt   #导入matplotlib 主要用作画图

2. 导入caffe, 我们的工作目录是在caffe-master/examples文件下下

import sys          #caffe module应该要被导入到python path
caffe_root = '../'  # this file should be run from {caffe_root}/examples (otherwise change this line)
sys.path.insert(0, caffe_root + 'python')
import caffe

3 准备好模型, 因为我们是利用已经训练好的模型

   我们用这个模型:bvlc_reference_caffenet.caffemodel ,是ALEXNET的一个变种,并且放到‘models/bvlc_reference_caffenet/这个文件夹下。
   下面验证有没有找到这个模型
import os
if os.path.isfile(caffe_root + 'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel'):
    print 'CaffeNet found.'
else:
    print 'Downloading pre-trained CaffeNet model...'
    !../scripts/download_model_binary.py ../models/bvlc_reference_caffenet

4. 初始化网络


caffe.set_mode_cpu() #设置成是cpu运行还是gpu,如果gpu改为caffe.set_mode_gpu()

model_def = caffe_root + 'models/bvlc_reference_caffenet/deploy.prototxt' #这个是前向传播时候的网络
model_weights = caffe_root + 'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel' #训练好的模型

net = caffe.Net(model_def,      # defines the structure of the model
                model_weights,  # contains the trained weights
                caffe.TEST)     # use test mode (e.g., don't perform dropout)  ,这些定义都在._caffe中

同时,要减去均值,


<span style="font-size: 14px; line-height: 17.0001px; background-color: rgb(247, 247, 247);">mu = np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy') #导入图片的均值,得到一个三维数组,3*256*256,mu[0]是B,mu[1] #是G,mu[2]是R
mu = mu.mean(1).mean(1)  # average over pixels to obtain the mean (BGR) pixel values,计算均值,输出是一个三维向量。
print 'mean-subtracted values:', zip('BGR', mu)# zip 接受多个序列作为参数,返回一个列表。</span>
<span style="font-size: 14px; line-height: 17.0001px; background-color: rgb(247, 247, 247);">
# create transformer for the input called 'data' ,在io.py中可以看到源码
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})#定义一个实例,字典存储在self.inputs中
  # def __init__(self, inputs):
  #      self.inputs = inputs
  #      self.transpose = {}
  #      self.channel_swap = {}
  #      self.raw_scale = {}
  #      self.mean = {}
  #      self.input_scale = {}
transformer.set_transpose('data', (2,0,1))  # move image channels to outermost dimension (2,0,1)存储在self.transpose['data']=order
transformer.set_mean('data', mu)            # 将这个均值存储在self.mean['data']=mu
transformer.set_raw_scale('data', 255)      # rescale from [0, 1] to [0, 255],.原因是网络输入图片不是[0,1],所以需要做一个变换</span>
<span style="font-size: 14px; line-height: 17.0001px; background-color: rgb(247, 247, 247);">transformer.set_channel_swap('data', (2,1,0))  # swap channels from RGB to BGR</span>


5.测试图片

# set the size of the input (we can skip this if we're happy
#  with the default; we can also change it later, e.g., for different batch sizes)
net.blobs['data'].reshape(50,        # batch size
                          3,         # 3-channel (BGR) images
                          227, 227)  # image size is 227x227

载入图片, 已经预处理图片

image = caffe.io.load_image(caffe_root + 'examples/images/cat.jpg')   #图片大小为(360,480,3)
transformed_image = transformer.preprocess('data', image)    #这里的transformer 已经包含了很多属性了,这些都是在之前在第四步定义的,其实这个'data'参数对应<span style="font-family: Arial, Helvetica, sans-serif;">#                                                                                                                         的是上面源码中__init__中许多字典的key</span>

好了,现在可以分类 的,transformed_image 就是我们预处理后的图片,size 是(3,277,277)

# copy the image data into the memory allocated for the net
net.blobs['data'].data[...] = transformed_image

### perform classification
output = net.forward()   #前向传播

output_prob = output['prob'][0]  # the output probability vector for the first image in the batch,其实output['prob']输出的会是一个(50,1000)的array,因为#之前我们设置的batch size= 50,因为只有一张图片,所以其实得到的这50行都是一样的,去第一行,也就是第一张图片

print 'predicted class is:', output_prob.argmax() # 得到概率最大的那一类,结果是281

来看一下到底对不对

# load ImageNet labels
labels_file = caffe_root + 'data/ilsvrc12/synset_words.txt'
if not os.path.exists(labels_file):
    !../data/ilsvrc12/get_ilsvrc_aux.sh

labels = np.loadtxt(labels_file, str, delimiter='\t')

print 'output label:', labels[output_prob.argmax()]
输出output label: n02123045 tabby, tabby cat

上面是输出可信度最好的结果,我们也可以看看属于其他类的一个概率

# sort top five predictions from softmax output
top_inds = output_prob.argsort()[::-1][:5]  # reverse sort and take five largest items ,argsort()得到从低到高index排序结果,[::-1]倒个序。

print 'probabilities and labels:'              #取排名最靠前的五名
zip(output_prob[top_inds], labels[top_inds])

可以看到结果

[(0.31243637, ‘n02123045 tabby, tabby cat‘),
 (0.2379719, ‘n02123159 tiger cat‘),
 (0.12387239, ‘n02124075 Egyptian cat‘),
 (0.10075711, ‘n02119022 red fox, Vulpes vulpes‘),
 (0.070957087, ‘n02127052 lynx, catamount‘)]
时间: 2024-08-02 23:14:18

Caffe利用测试好的模型测试图片以及每层的可视化的相关文章

LVS-DR模型测试实验

DR模型解决的realserver中的VIP与Dispatcher中的VIP在同一个网络的不同办法: 1.通过路由器上设置mac地址绑定,将VIP对应的mac地址写入路由器. 2.通过realserver的arptables定义规则. 3.通过操作系统的内核参数来解决. arp_ignore: 定义接收到arp请求时的响应级别,默认为0. 0.只要本地有响应的地址,就进行响应. 1.仅在请求的目标地址配置在请求的接口上时,进行响应. arp_announce: 定义将自己的地址向外通告时的通告级

如何利用Pre.im分发iOS测试包

大众创新万众创业,在移动互联网的风口,移动APP开发与测试发展方兴未艾,受到了越来越多的重视.相较 iOS,Android 的开发环境更加开放.Android 开发者要测试应用时,只需发个 APK 安装包即可,但对于 iOS 来说,想要参与 App 测试却是件很复杂的事情. Apple在收购TestFlight后将其整合进iTunes Connect中,虽然能帮助iOS开发者邀请用户协助对 App 进行测试,但过程依旧复杂. 在这样的背景下,国内权威测试平台Testin推出了免费的APP内测分发

利用Junit4进行程序模块的测试,回归测试

①在你的工程里导入JUnit4的包 ②右击创建JUnit测试类,在测试类中编写测试代码即可. JUnit 目前需要掌握的有一下几点: Fixture系列:BeforeClass,AfterClass,Before,After 普通测试:Ignore(忽视),Text(测试),Test(timeout = 1000)(限时测试),Test(expected = ArithmeticException.class)(异常测试) 特殊测试:批量参数测试,打包测试 ③Fixture系列与普通测试例代码

Mogilefs分布式文件系统-Keepalived+Nginx双主模型实现图片分布式存储、访问

一.分布式文件系统: 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连.计算机通过文件系统管理.存储数据,单纯通过增加硬盘个数来扩展计算机文件系统的存储容量的方式,在容量大小.容量增长速度.数据备份.数据安全等方面的表现都差强人意. 分布式文件系统可以有效解决数据的存储和管理难题:将固定于某个地点的某个文件系统,扩展到任意多个地点/多个文件系统,众多的节点组成一个文件系统网络.每个节点可以分布在

Web测试要点 做移动端的测试,也做web端的测试,甚至后面桌面端的测试和后台的测试也做了,基本上把我们产品各个端都玩了一轮

Web测试要点 一.功能测试 1.链接测试 (1).测试所有链接是否按指示的那样确实链接到了该链接的页面:  (2).测试所链接的页面是否存在:  (3).保证Web应用系统上没有孤立的页面(所谓孤立页面是指没有链接指向该页面,只有知道正确的URL地址才能访问). 2.表单测试(1).注册.登陆.信息提交等,必须测试提交操作的完整性,以校验提交给服务器的信息的正确性:(2).用户填写的出生日期与职业是否恰当,填写的所属省份与所在城市是否匹配等:  (3).检验默认值的正确性:(4).如表单只能接

Java利用poi生成word(包含插入图片,动态表格,行合并)

转: Java利用poi生成word(包含插入图片,动态表格,行合并) 2018年12月20日 09:06:51 wjw_11093010 阅读数:70 Java利用poi生成word(包含插入图片,动态表格,行合并) 测试模板样式: Word生成结果: 图表 2需要的jar包:(具体jar可自行去maven下载) 注意:需要严格按照上面版本下载jar包,否则可能出现jar包之间不能匹配的导致代码报错 各种 jar包都可以在这里下载: https://mvnrepository.com/ Tes

Web端测试和移动端测试的区别

之前参加的项目有涉及Web端测试和移动端测试,简单的记录下他们之间的区别: 1.记录bug 在Web端可以通过系统自带的截图和QQ截图等方式来截取bug的图片,对于错误的地方可以用工具自带的标识来重点标记. 对于移动端设备可以用手机自带的截图工具来截图然后传到电脑上,个人一般习惯安装微信的windows版本,通过文件传输助手发送到PC端.还有一种比较便捷的方式,将手机用数据线连接到电脑,本地配置android的运行环境,下载asm.jar,在cmd运行java -jar asm.jar,即可实时

深入理解软件测试应用(测试用例+测试应用+测试技术及工具+测试等级)

我这里有个课程想和大家分享,有兴趣的朋友可以加我的QQ2059055336和我联系. 本课程为软件测试课程,主要讲述内容:软件测试概述.软件测试过程.软件测试技术.软件测试的应用.自动化测试技术等软件测试前言和问题的提出                             问题的提出 1课时                            基本概念                             本课程的主要内容                             各部分的

【转】不懂得使用工具的测试不是好测试

测试工具大全,这里应该有你想要的. 压力测试工具集 工具相关网址 LoadRunner http://www.mercuryinteractive.com/products/loadrunner/ SilkPerformer http://www.segue.com/products/load-stress-performance-testing/index.asp QALoad http://www.compuware.com/products/qacenter/qaload.htm WebL