Caffe学习笔记4图像特征进行可视化

图像处理特征可视化方法总结(特征图、卷积核、类可视化CAM)(附代码) 图像处理特征可视化方法总结(特征图、卷积核、类可视化CAM 阅读详情

 

Caffe学习笔记4图像特征进行可视化

本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权

 

欢迎关注我的博客:http://blog.youkuaiyun.com/hit2015spring和http://www.cnblogs.com/xujianqing/

 

这篇文章主要参考的是http://nbviewer.jupyter.org/github/BVLC/caffe/blob/master/examples/00-classification.ipynb

可以算是对它的翻译的总结吧,它可以算是学习笔记2的一个发展,2是介绍怎么提取特征,这是介绍怎么可视化特征

1、准备工作

首先安装依赖项

pip install cython

pip install h5py

pip install ipython

pip install leveldb

pip install matplotlib

pip install networkx

pip install nose

pip install numpy

pip install pandas

pip install protobuf

pip install python-gflags

pip install scikit-image

pip install scikit-learn

pip install scipy

接下来的操作都是在ipython中执行的,在ipython中用!表示执行shell命令,用$表示将python的变量转化为shell变量。通过这两种符号便可以实现shell命令和ipython的交互。

Ipython可以在终端运行,但是为了方便我们使用的是ipython notebook,这个玩意的介绍网上有很多的资源,这里就不赘述了,所以还要在你的主机上面配置ipython notebook

2、开始

2.1初始化并加载caffe

在终端输入

ipython notebook

新建一个文件

 

在终端输入代码,这里shift+enter表示运行代码,接下来每一个代码段输入完成后,运行一下!

# set up Python environment: numpy for numerical routines, and #matplotlib for plotting

import numpy as np

import matplotlib.pyplot as plt

# display plots in this notebook

%matplotlib inline

调入numpy子程序和matplotlib.pyplot(用于画图) 子程序,并将它们分别命名为np和plt

# set display defaults

plt.rcParams['figure.figsize'] = (10, 10) # large images

plt.rcParams['image.interpolation'] = 'nearest' # don't interpolate: show #square pixels

plt.rcParams['image.cmap'] = 'gray' # use grayscale output rather than #a (potentially misleading) color heatmap

设置显示图片的一些默认参数大小最大,图片插值原则为最近邻插值,图像为灰度图

# The caffe module needs to be on the Python path;

# we'll add it here explicitly.

import sys

caffe_root = '/home/wangshuo/caffe/' # this file should be run from {caffe_root}/examples (otherwise change this line)

sys.path.insert(0, caffe_root + 'python')

 

import caffe

# If you get "No module named _caffe", either you have not built pycaffe #or you have the wrong path.

加载caffe,把caffe的路径添加到当前的python路径下面来,如果没有添加路径,则会在python的路径下进行检索,会报错,caffe模块不存在。

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

加载模型,这个模型在学习笔记1的时候已经下载过了,如果没有下载该模型可以用命令行

./examples/imagenet/get_caffe_reference_imagenet_model.sh

这里注意该模型的大小有233M左右,联网下载可能不全,注意查看,是个坑注意躲避!

2.2加载网络模型

设置为cpu工作模式并加载网络模型

caffe.set_mode_cpu()

 

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)

model_def:定义模型的结构文件

model_weights:训练的权重

# load the mean ImageNet image (as distributed with Caffe) for subtraction

mu = np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy')

mu = mu.mean(1).mean(1) # 获取BGR像素均值

print 'mean-subtracted values:', zip('BGR', mu)

 

# create transformer for the input called 'data'

transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})

 

transformer.set_transpose('data', (2,0,1)) # move image channels to outermost dimension

transformer.set_mean('data', mu) # 各个通道的像素值减去图像均值

transformer.set_raw_scale('data', 255) # 设置灰度级为[0,255]而不是[0,1]

transformer.set_channel_swap('data', (2,1,0)) # 把RGB转为BGR

这段是设置输入的进行预处理,调用的是caffe.io.Transformer来进行预处理,这些预处理步骤是独立于其他的caffe部分的,所以可以使用传统的算法进行处理。

在caffe的默认设置中,使用的是BGR图像格式进行处理。像素的级数为[0,255],然后对这些图片进行预处理是减去均值,最后通道的信息会被转到第一个维度上来。

但是在matplotlib中加载的图片像素灰度级是[0,1]之间,且其通道数是在最里层的维度上的RGB格式故需要以上的转换

2.3CPU分类

# 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, # 批次大小

3, # 3-channel (BGR) images

227, 227) # image size is 227x227

加载一个图片

image = caffe.io.load_image(caffe_root + 'examples/images/cat.jpg')

transformed_image = transformer.preprocess('data', image)

plt.imshow(image)

在这里运行完之后正常应该显示一张图片,然而并没有,具体看问题1

现在开始分类

# 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

 

print 'predicted class is:', output_prob.argmax()#分类输出最大概率的类别

输出:predicted class is: 281

第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

 

print 'probabilities and labels:'

zip(output_prob[top_inds], labels[top_inds])

输出:

probabilities and labels:

[(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')]

可以看到最小的置信概率下输出的标签也比较明智

2.4切换到GPU模式

计算分类所用的时间,并把它和gpu模式比较

%timeit net.forward()

选择GPU模式

caffe.set_device(0) # if we have multiple GPUs, pick the first one

caffe.set_mode_gpu()

net.forward() # run once before timing to set up memory

%timeit net.forward()

3查看中间的输出

在每一层中我们主要关注的是激活的形状,它的典型格式为,批次,第二个是特征数,第三个第四个是每个神经元中图片的长宽

# for each layer, show the output shape

for layer_name, blob in net.blobs.iteritems():

print layer_name + '\t' + str(blob.data.shape)

查看每一层的输出形状

输出:

data    (50, 3, 227, 227)

conv1    (50, 96, 55, 55)

pool1    (50, 96, 27, 27)

norm1    (50, 96, 27, 27)

conv2    (50, 256, 27, 27)

pool2    (50, 256, 13, 13)

norm2    (50, 256, 13, 13)

conv3    (50, 384, 13, 13)

conv4    (50, 384, 13, 13)

conv5    (50, 256, 13, 13)

pool5    (50, 256, 6, 6)

fc6    (50, 4096)

fc7    (50, 4096)

fc8    (50, 1000)

prob    (50, 1000)

再看看参数的结构,参数结构是被另外一个函数定义的选择输出的类型,0代表权重,1代表偏差,权重有4维特征(输出的通道数,输入通道数,滤波的高,滤波的宽),偏差有一维(输出的通道)

for layer_name, param in net.params.iteritems():

print layer_name + '\t' + str(param[0].data.shape), str(param[1].data.shape)

对这些特征进行可视化:定义一个函数

def vis_square(data):

"""Take an array of shape (n, height, width) or (n, height, width, 3)

and visualize each (height, width) thing in a grid of size approx. sqrt(n) by sqrt(n)"""

 

# normalize data for display

data = (data - data.min()) / (data.max() - data.min())

 

# force the number of filters to be square

n = int(np.ceil(np.sqrt(data.shape[0])))

padding = (((0, n ** 2 - data.shape[0]),

(0, 1), (0, 1)) # add some space between filters

+ ((0, 0),) * (data.ndim - 3)) # don't pad the last dimension (if there is one)

data = np.pad(data, padding, mode='constant', constant_values=1) # pad with ones (white)

 

# tile the filters into an image

data = data.reshape((n, n) + data.shape[1:]).transpose((0, 2, 1, 3) + tuple(range(4, data.ndim + 1)))

data = data.reshape((n * data.shape[1], n * data.shape[3]) + data.shape[4:])

ipt.show()

plt.imshow(data); plt.axis('off')

显示第一个卷积层的特征

# the parameters are a list of [weights, biases]

filters = net.params['conv1'][0].data

vis_square(filters.transpose(0, 2, 3, 1))

 

遇到问题

在运行plt.imshow(image)之后应该显示相应的图片,最后没有显示,这里有一个问题就是,需要在导入nump的时候也要导入pylab

import pylab as ipt

在显示之前添上

ipt.show()

所以问题1的答案为

image = caffe.io.load_image(caffe_root + 'examples/images/cat.jpg')

transformed_image = transformer.preprocess('data', image)

ipt.show()

plt.imshow(image)

Caffe版Faster R-CNN可视化——网络模型,图像特征,Loss图,PR曲线 可视化网络模型   Caffe目前有两种常用的可视化模型方式: * 使用Netscope在线可视化 * Caffe代码包内置的draw_net.py文件可以可视化网络模型 Netscope   Netscope能可视化神经网络体系结构(或技术上说,Netscope能可视化任何有向无环图)。目前Netscope能可视化Caffe的prototxt 文件。网址为: http://eth... 阅读详情

相关推荐

caffe cnn提取各层特征并可视化结果(Python接口)

亲测有用,之前参考的薛开宇的学习笔记,部分代码需要修改,自己修改后的版本如下: #caffe特征的可视化import numpy as npimport matplotlib.pyplot as pltimport matplotlib.image as imaimport osimport pickleimport cv2#xxx对应自己的服务器名称caffe_root='/home/xx

imagination_go的博客 1万+

特征向量可视化01_tsne_pca

在学习机器学习或深度学习基础知识的同时训练模型是一个非常有指导性的过程。该数据集易于理解且格式适当,可供您使用。然而,当您走进现实世界并尝试解决行业或现实生活中的挑战时,数据集如果一开始就不存在,通常会很混乱。理解为什么你的模型并不简单。没有具体的步骤可以引导您找到答案。但是,存在某些工具可以让您调查并获得有关模型输出的更深入的见解。可视化是一种非常强大的工具,可以提供宝贵的信息。在这篇文章中,我将讨论两种非常强大的技术,它们可以帮助您在低维空间中可视化高维数据以发现趋势和模式,即 PCA 和 t-SNE。

chumingqian的博客 1915

Caffe 的可视化 (四) 特征图的可视化

Caffe 的可视化 (四) 特征图的可视化 接着上一篇(http://blog.youkuaiyun.com/sushiqian/article/details/78613726) 输入model 一张图片,查看它经过卷积后生成的特征图 编写代码 extract_data.py 如下: import numpy as np import matplotlib.pyplot as plt impor

frontworld的博客 2089

卷积神经网络中的图像特征——以YOLOv5为例进行可视化

本文以YOLOv5网络为例,可视化展示了原始图像经过每一层网络后的输出特征图(共23层,逐层可视化),并介绍了图像低层特征、高层特征以及特征融合的内容。

python_plus的博客 1万+

caffe学习笔记(5):层的特征可视化

本文对各层及由各层得到的结果进行了可视化处理。

NGY 1万+

深度学习Caffe实战笔记(10)Windows Caffe使用MATLAB接口提取和可视化特征

上一篇博客中介绍了如何使用MATLAB训练和测试数据,这篇博客介绍如何从训练好的模型中提取图像特征,并介绍把卷积层特征可视化方法。 之前提取特征都是用python,尽管用python提取特征很方便,但是感觉MATLAB提取特征更方便,因为博主对MATLAB比较熟悉,对python不太熟悉,,,,,,可视化部分我参考了http://www.2cto.com/kf/201609/550879.html

gybheroin的博客 5482

特征向量可视化方法介绍

在最近的研究中,实验需要结合可视化进行解释分析,于是大致上了解了下目前一些特征可视化的工具,主要分为四种类型:热力图、散点图、线性图和雷达图,并将相应的基础绘制方法做一个简单的总结。

阿航的博客 2943

Conda环境创建报错?教你快速解决Solving environment: failed和ResolvePackageNotFound问题

本文深入解析Conda环境创建中常见的'Solving environment: failed'和'ResolvePackageNotFound'报错原因,并提供从基础到高级的系统化解决方案。涵盖渠道配置、版本通配、环境文件编辑等实用技巧,帮助开发者快速解决conda环境创建问题,提升工作效率。

weixin_28677451的博客 258

数据可视化: PCA显示特征向量

import os,cv2 import numpy as np from sklearn.decomposition import IncrementalPCA input_folder = 'images/' H,W = 72,72 comp_num = 5 X = [] for name in os.listdir(input_folder): path = os.path.jo...

大泽之国 2330

OpenPCDet安装及其3D检测算法实现

OpenPCDet及pointpillar复现

weixin_58207716的博客 1万+

传输线的特征阻抗

信号源内阻与所接传输线的特性阻抗大小相等且相位相同,或传输线的特性阻抗与所接负载阻抗的大小相等且相位相同,分别称为传输线的输入端或输出端处于阻抗匹配状态,简称为阻抗匹配。否则,便称为阻抗失配。有时也直接叫做匹配或失配。指一个电路输入端的等效阻抗。在输入端上加上一个电压源U,测量输入端的电流I,则输入阻抗Rin就是U/I。可以把输入端想象成一个电阻的两端,这个电阻的阻值,就是输入阻抗。- 对于电压驱动的电路,输入阻抗越大,则对电压源的负载就越轻,因而就越容易驱动,也不会对信号源有影响;

学海无涯的专栏 4464

caffemodel特征可视化_Caffe学习笔记4图像特征进行可视化

Caffe学习笔记4图像特征进行可视化本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权欢迎关注我的博客:http://blog.youkuaiyun.com/hit2015spring和http://www.cnblogs.com/xujianqing/可以算是对它的翻译的总结吧,它可以算是学习笔记2的一个发展,2是介绍怎么提取特征,这是介绍怎么可视化特征1、准备工作首先...

weixin_39824801的博客 202

BOSS直聘数据采集、解析处理、分析与可视化实战

招聘和求职是一对永恒的话题,不论什么时候都有招聘或者是求职的需求,找不找得到工作可能最主要的就是匹配度是否高,待遇福利是否诱人,如今互联网的快速发展,找工作的方式早已发生了翻天覆地的变化,从以往的面对面形式的招聘简历投递和面试方式,变成了电子简历网络直接投递、远程面试录用的形式,便捷性大大提升,需求的快速增长,促生了一批互联网招聘类的企业,诸如:51job、BOSS直聘、拉勾网等等,为了能...

Together_CZ的博客 9025

Caffe提取任意层特征并进行可视化

现在Caffe的Matlab接口 (matcaffe3) 和python接口都非常强大, 可以直接提取任意层的feature map以及parameters, 所以本文仅仅作为参考, 更多最新的信息请参考: http://caffe.berkeleyvision.org/tutorial/interfaces.html   原图     conv1层可视

l494926429的博客 7247

辉芒微教程第五篇《定时器0实现LED灯闪烁》

定时器定时器,一听就跟个闹钟似的,对于嵌入式定时器大部分的应用中,也的确可以这么理解,但是这只能肤浅地这么理解,实际其功能不仅仅是用来计数定时,但是对于我们这种8位单片机,这么理解就够了。

qq_41809823的博客 723

C盘在同一时间突然多出100g的文件,请问是什么原因,以及是否能删除?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1760

【caffe-matlab】权重以及特征图的可视化

前言 移植了各种caffe,是时候进行下一步操作了,先拿可视化下手吧。大部分内容可能跟网上的方法不一样,大家看完我的博客最好去网上看看大牛们的博客,万一被我误导了,就罪过了o(╯□╰)o,开更............. 环境:微软caffe+wind7+matlab2013a 参考:http://caffe.berkeleyvision.org/tutorial/interfaces.htm

风翼冰舟的博客 2万+

【CANoe】CAPL_UDS安全算法dll制作

使用UDS进行刷写时,需要27服务解密后,才能正确执行刷写,本文提供两种制作27解密dll的方法,用于CANoe的CAPL脚本中。

星Yeah 的博客 1万+

Caffe_Windows学习笔记(四)逐层可视化图像特征

0、参考文献 [1]官网 http://nbviewer.jupyter.org/github/BVLC/caffe/blob/master/examples/00-classification.ipynb [2]薛开宇《读书笔记 5 逐层可视化图像特征》 [3]Jesse_Mx http://blog.youkuaiyun.com/jesse_mx/article/details/58605385

huang2818138的博客 924

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Caffe 特征图可视化

特征图即网络在前向传播阶段的各层输出。 http://blog.youkuaiyun.com/u012938704/article/details/52767695 这里使用一个训练过的CaffeNet模型对一张猫的图片进行分类,使用matlab绘制出卷积层的特征图。 今天在使用matcaffe时遇到了CUDNN_STATUS_ARCH_MISMATCH的错误,根据http://blog.youkuaiyun.com

langxing1992的博客 550

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

在caffe框架下用训练好的网络模型提取图像特征并可视化

在一些项目任务中,我需要提取一系列图像的CNN-features,再对其进行后续的处理。这里可以使用任意的网络模型,因为本人也是新手,会尽量写的详细,可能不是最有效率的方法,但亲测有效。 这里会对一个数据集中所有的图像进行特征提取,并将从指定层中输出的CNN特征存储到lmdb文件中,再转化为mat文件,也可以用matlab进行可视化。 ** 一、准备需要提取特征的图像列表 ** 因为我需要对一系列...

weixin_42273910的博客 1281

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

caffe学习笔记2_用一个预训练模型提取特征

读书笔记2 用一个预训练模型提取特征 2014.7.21薛开宇 本学习笔记的作用在于为后面打基础,没有什么实际的东西可以观测到,要可视化特征还要观看后面的教程。 2.1 制作一个数据库 先做一个临时文件夹存放东西。 mkdir examples/_temp 我们为两张在images文件夹的照片生成一个文

geguangfu的专栏 3984
上一篇: Caffe学习笔记3——制作并训练自己的数据集
下一篇: alexnet 论文翻译
晨凫追风
博客等级 码龄11年 447粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值