Caffe模型读取
caffe模型最终保存使用过的protobuf形式,将一个已经训练好的caffe模型读取出来,可以参考如下:
1,包含的头文件:
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/io/zero_copy_stream_impl.h>
#include <google/protobuf/text_format.h> #include "caffe/proto/caffe.pb.cc" //在caffe src/caffe、proto里面,是编译后自动生成的,其中包括(caffe.pb.cc caffe.pb.d caffe.pb.h caffe.pb.o.warnings.txt)
2,读取网络Message:
bool loadCaffeNet(const std::string& model_list, Message* proto){ //
using google::protobuf::io::FileInputStream;
using google::protobuf::io::ZeroCopyInputStream;
using google::protobuf::io::CodedInputStream;
//Message * proto;
std::vector<std::string> model_names;
boost::split(model_names, model_list, boost::is_any_of(",") );
bool success = false;
for (int i = 0; i < model_names.size(); ++i) {
std::cout<< "Finetuning from " << model_names[i];
const char* filename = model_names[i].c_str();
int fd = open(filename, O_RDONLY);
if( fd < 0 ){
std::cout << "File not found: " << fd;
return -1;
}
ZeroCopyInputStream* raw_input = new FileInputStream(fd);
CodedInputStream* coded_input = new CodedInputStream(raw_input);
coded_input->SetTotalBytesLimit(INT_MAX, 536870912);
success = proto->ParseFromCodedStream(coded_input);
delete coded_input;
delete raw_input;
close(fd);
return success;
}
return success;
}
3,参考caffe/proto/caffe.pb.cc 文件,获取对应的参数
例如读取文件后:
std::string trained_filename = "lenet_iter_10000.caffemodel";
caffe::NetParameter net_protobuf;
if(loadCaffeNet(trained_filename, &net_protobuf)){
std::cout<<"load net param success"<<std::endl;
}else{
std::cout<<"load net param failed"<<std::endl;
}
获取网络层数:
int num_source_layers = net_protobuf.layer_size();
for(int i=0; i<num_source_layers; ++i){
caffe::LayerParameter layer_param = net_protobuf.layer(i);
std::cout << layer_param.name() << std::endl;
std::cout << layer_param.type() << std::endl;
int blobsize = layer_param.blobs_size();
std::cout << "blobs_size: "<<blobsize << std::endl;
for(int j=0; j<blobsize; j++){
int dataSize = layer_param.blobs(j).data_size();
if(j==0){
std::cout << " weight data_size: "<<dataSize << std::endl;
int ind_weight = dataSize;
weight = (float*)malloc(ind_weight*sizeof(float));
for(int index=0; index<dataSize; index++){
weight[index] = layer_param.blobs(j).data(index);
}
std::cout<<" Convolution->:"<<std::endl;
std::cout<<" layer_param.blobs weight_n "<<layer_param.blobs(0).shape().dim(0)<<std::endl; //n
std::cout<<" layer_param.blobs weight_c "<<layer_param.blobs(0).shape().dim(1)<<std::endl; //c
std::cout<<" layer_param.blobs weight_h "<<layer_param.blobs(0).shape().dim(2)<<std::endl; //h
std::cout<<" layer_param.blobs weight_w "<<layer_param.blobs(0).shape().dim(3)<<std::endl; //w
}
else if(j==1){
std::cout << " bias data_size: "<<dataSize << std::endl;
int ind_bias = dataSize;
bias = (float*)malloc(ind_bias*sizeof(float));
for(int index=0; index<dataSize; index++){
bias[index] = layer_param.blobs(j).data(index);
} } }
}
以上仅仅是部分代码,需要注意调试!
其中caffe.pb.cc 和caffe.pb.hpp 文件是基于caffe.proto文件生成的。执行过程为:protoc caffe.proto --cpp_out=. ;将caffe.proto文件,基于目前protobuf的版本生成对应的版本的.cc 和 .hpp文件。
Caffe模型读取的更多相关文章
- (原)linux下caffe模型转tensorflow模型
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/7419352.html 参考网址: https://github.com/ethereon/caffe- ...
- 使用caffe模型测试图片(python接口)
1.加载相关模块 1.1 加载numpy import numpy as np 1.2 加载caffe 有两种方法. 方法一(静态导入): 找到当前环境使用的python的site-packages目 ...
- TensorFlow模型转为caffe模型
最近由于要将训练好的模型移植到硬件上,因此需要将TensorFlow转为caffe模型. caffe模型需要两个文件,一个是定义网络结构的prototxt,一个是存储了参数的caffemodel文件. ...
- c++ 和 matlab 下的caffe模型输入差异
在向一个caffe模型传递输入数据的时候,要注意以下两点: 1. opencv中Mat数据在内存中的存放方式是按行存储,matlab中图像在内存中的存放方式是按列存储. 2. opencv中Mat数据 ...
- 机器学习进阶-目标追踪-SSD多进程执行 1.cv2.dnn.readnetFromCaffe(用于读取已经训练好的caffe模型) 2.delib.correlation_tracker(生成追踪器) 5.cv2.writer(将图片写入视频中) 6.cv2.dnn.blobFromImage(图片归一化) 10.multiprocessing.process(生成进程)
1. cv2.dnn.readNetFromCaffe(prototxt, model) 用于进行SSD网络的caffe框架的加载 参数说明:prototxt表示caffe网络的结构文本,model ...
- DL开源框架Caffe | 模型微调 (finetune)的场景、问题、技巧以及解决方案
转自:http://blog.csdn.net/u010402786/article/details/70141261 前言 什么是模型的微调? 使用别人训练好的网络模型进行训练,前提是必须和别人 ...
- caffe数据读取
caffe的数据读取分为lmdb和 待清理,包括fast 这个一系列是怎么转换成lmdb数据的
- caffe模型各层数据和参数可视化
先用caffe对cifar10进行训练,将训练的结果模型进行保存,得到一个caffemodel,然后从测试图片中选出一张进行测试,并进行可视化. In [1]: #加载必要的库 import nump ...
- caffe模型的一些解释~
转自:https://blog.csdn.net/wjmishuai/article/details/50890214 刚开始摸caffe,找了个比较清楚的模型. 原始数据是28* input: &q ...
随机推荐
- centos7 安装nginx与配置
第一步安装 使用Yum安装是推荐的方式,整体的流程非常的简单,也不容易出错,如果不需要什么特殊配置,建议使用Yum尽进行安装. 第一种安装方式,通过添加epel源 yum install epel-r ...
- jquery ajax/post 请求 案例
@RequestMapping("/hello") @ResponseBody public Hello getJson(HttpServletRequest requ ...
- DevExpress.Build
using System.Collections.Generic; using Microsoft.Build.AppxPackage; using Microsoft.Build.Framework ...
- 怎样改动SharePoint管理中心的语言
在安装了语言包之后,创建站点集的时候,就能够选择语言了. 可是SharePoint管理中心的语言没有变.这个时候.怎么才干让管理中心也使用新的语言呢? 能够依照下面方法. 首先去https://msd ...
- ngnix学习视频
https://www.bilibili.com/video/av36019080/?p=1
- Chrome 跨域调试
1.关闭chrome浏览器(全部) 我们可以通过使用chrome命令行启动参数来改变chrome浏览器的设置,具体的启动参数说明参考这篇介绍.https://code.google.com/p/xia ...
- axios 和 vue-axios
1.main.js 全局引入 /** * 引入 axios 数据请求方式 * axios 和 VueAxios 必须同时注入 */ import axios from 'axios' import V ...
- 经验总结54--搭建linux虚拟机环境
好久没写博客了.写一篇环境搭建吧. 自己做java,有时会接触linux环境,自己能够搭建一个,方便自己做实验和学习. 1.下载VM11. 下载并依照VM:http://rj.baidu.com/so ...
- 记一次R的可视化使用-生成城市各个景点的多边形图
项目中须要用到全国各个城市的景点坐标范围.须要人工审核各个景点的数据正确性和各个景点之间的距离分布.首先想到的就是使用R绘制每一个景点的多边形区域. 首先通过python,依据数据生成R画图代码,当然 ...
- php如何通过get方法发送http请求,并且得到返回的参数
向指定的url发送参数,这是一个跨域访问问题,具体事例如下:/test.php<?php$ch = curl_init(); $str ='http://127.0.0.1/form.php?i ...