caffe的python接口提取resnet101某层特征
论文的caffemodel转化为tensorflow模型过程中越坑无数,最后索性直接用caffe提特征。
caffe提取倒数第二层,pool5的输出,fc1000层的输入,2048维的特征
#coding=utf-8 import caffe
import os
import numpy as np
import scipy.io as sio #路径设置
OUTPUT='E:/caffemodel/'#输出txt文件夹
root='E:/caffemodel/' #根目录
deploy=root + 'ResNet-101-deploy.prototxt' #deploy文件
caffe_model=root + 'ResNet-101-model.caffemodel' #训练好的 caffemodel
imgroot = 'E:/bjfu-cv-project/img_35/' #随机找的一张待测图片
#labels_filename = 'E:/bjfu-cv-project/CUB_200_2011/CUB_200_2011/classes.txt' #类别名称文件,将数字标签转换回类别名称
net = caffe.Net(deploy,caffe_model,caffe.TEST) #加载model和network
mean_file='mean.npy' #容器初始化
dict = {} fea = []
out_array = np.zeros(shape=(2048,)) #文件读取 count = 0
for root, dirs, files in os.walk(imgroot):
for dir in dirs:
print(dir)
for root, dirs, files in os.walk(imgroot+dir):
i = 0
for img in files:
img = imgroot+dir + '/' + img
#图片预处理设置
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape}) #设定图片的shape格式(1,3,224,224)
transformer.set_transpose('data', (2,0,1)) #改变维度的顺序,由原始图片(224,224,3)变为(3,224,224)
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
try:
im=caffe.io.load_image(img) #加载图片
except:
continue
net.blobs['data'].data[...] = transformer.preprocess('data',im) #执行上面设置的图片预处理操作,并将图片载入到blob中 #执行测试
out = net.forward()
fea.append(net.blobs['pool5'].data) # 提取某层数据(特征)
print(dir, i, img)
out_array = np.column_stack((fea[i][0,:,0,0], out_array))
i = i + 1
#结果输出
dict['array'] = out_array
save_matFile = 'fearture_of_35.mat'
sio.savemat(save_matFile, dict)
均值文件ResNet_mean.binaryproto转化mean.npy
#coding=utf-8
import caffe
import numpy as np MEAN_PROTO_PATH = 'ResNet_mean.binaryproto' # 待转换的pb格式图像均值文件路径 MEAN_NPY_PATH = 'mean.npy' # 转换后的numpy格式图像均值文件路径 blob = caffe.proto.caffe_pb2.BlobProto() # 创建protobuf blob
data = open(MEAN_PROTO_PATH, 'rb' ).read() # 读入mean.binaryproto文件内容
blob.ParseFromString(data) # 解析文件内容到blob array = np.array(caffe.io.blobproto_to_array(blob))# 将blob中的均值转换成numpy格式,array的shape (mean_number,channel, hight, width)
mean_npy = array[0] # 一个array中可以有多组均值存在,故需要通过下标选择其中一组均值
np.save(MEAN_NPY_PATH ,mean_npy)
caffe的python接口提取resnet101某层特征的更多相关文章
- caffe的python接口学习(1):生成配置文件
caffe是C++语言写的,可能很多人不太熟悉,因此想用更简单的脚本语言来实现.caffe提供matlab接口和python接口,这两种语言就非常简单,而且非常容易进行可视化,使得学习更加快速,理解更 ...
- 机器学习caffe环境搭建——redhat7.1和caffe的python接口编译
相信看这篇文章的都知道caffe是干嘛的了,无非就是深度学习.神经网络.计算机视觉.人工智能这些,这个我就不多介绍了,下面说说我的安装过程即遇到的问题,当然还有解决方法. 说下我的环境:1>虚拟 ...
- caffe中python接口的使用
下面是基于我自己的接口,我是用来分类一维数据的,可能不具通用性: (前提,你已经编译了caffe的python的接口) 添加 caffe塻块的搜索路径,当我们import caffe时,可以找到. 对 ...
- 【caffe】Caffe的Python接口-官方教程-00-classification-详细说明(含代码)
00-classification 主要讲的是如何利用caffenet(与Alex-net稍稍不同的模型)对一张图片进行分类(基于imagenet的1000个类别) 先说说教程到底在哪(反正我是找了半 ...
- caffe的python接口学习(7):绘制loss和accuracy曲线
使用python接口来运行caffe程序,主要的原因是python非常容易可视化.所以不推荐大家在命令行下面运行python程序.如果非要在命令行下面运行,还不如直接用 c++算了. 推荐使用jupy ...
- Windows+Caffe+VS2013+python接口配置过程
前段时间在笔记本上配置了Caffe框架,中间过程曲曲折折,但由于懒没有将详细过程总结下来,这两天又在一台配置较高的台式机上配置了Caffe,配置时便非常后悔当初没有写到博客中去,现已配置好Caffe, ...
- ubuntu16.04 安装caffe以及python接口
http://blog.csdn.net/qq_25073253/article/details/72571714http://blog.csdn.net/greed7480/article/deta ...
- Caffe: Caffe的Python接口
官方参考:http://caffe.berkeleyvision.org/installation.html 官方介绍是这样的: Python The main requirements are nu ...
- caffe的python接口学习(8):caffemodel中的参数及特征的抽取
如果用公式 y=f(wx+b) 来表示整个运算过程的话,那么w和b就是我们需要训练的东西,w称为权值,在cnn中也可以叫做卷积核(filter),b是偏置项.f是激活函数,有sigmoid.relu ...
随机推荐
- 利用BandwagonHost***便宜Linux VPS安装VNC(远程桌面)- 安装篇
如果我们有搭建过网站,或者用过VPS.服务器,肯定会看到最近几年主机市场竞争还是比较激烈的.尤其是VPS.服务器的价格走低,很多商家价格厮杀的厉害,甚至出现年付几美元的VPS.便宜VPS固然是好事,我 ...
- 完全卸载TeamViewer与重新安装TeamViewer 7(含单文件版V12主控端)
卸载teamviewer: 删除:%AppData%\Teamviewer.%tmp%\TeamViewer.C:\Users\Administrator\AppData\Local\TeamView ...
- iOS支付宝 9.x 版本首页效果
http://www.jianshu.com/p/7516eb852cca 支付宝 9.x 版本首页效果 对于新版支付宝首页的产品功能这里就不说什么了,一大堆人吐槽,我们只想要一个好好的支付工具,阿里 ...
- 理顺react,flux,redux这些概念的关系
作者:北溟小鱼hk链接:https://www.zhihu.com/question/47686258/answer/107209140来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...
- findsmb - 列出在子网上响应SMB名称查询的主机信息
SYNOPSIS 总览 findsmb [子网广播地址] 描述 此perl脚本是Samba组件的一部分. findsmb是个用于打印出关于子网中响应SMB名字查询请求的主机信息的perl脚本.实际上它 ...
- PAT (Basic Level) Practise (中文)- 1003. 我要通过!(20)
http://www.patest.cn/contests/pat-b-practise/1003 “答案正确”是自动判题系统给出的最令人欢喜的回复.本题属于PAT的“答案正确”大派送 —— 只要读入 ...
- 在 Java 8 中避免 Null 检查
如何预防 Java 中著名的 NullPointerException 异常?这是每个 Java 初学者迟早会问到的关键问题之一.而且中级和高级程序员也在时时刻刻规避这个错误.其是迄今为止 Java ...
- 第三篇、Swift基础学习
1.常量与变量 什么是常量和变量 在Swift中规定:在定义一个标识符时必须明确说明该标识符是一个常量还是变量 使用let来定义常量,定义之后不可以修改 使用var来定义变量,定义之后可以修改 变量的 ...
- swift 循环语句
// // main.swift // switch // // Created by lanou on 16/10/21. // Copyright (c) 2016年 lanou. All rig ...
- 实用小工具不定期合集(textarea 高度自适应、自动计算Y轴刻度、json转table)
1.textarea高度自适应 这个非常有用,但是网上的解决方案都不尽人意,话不多说,上代码. function auto (elem) { var minHeight = 30 var change ...