caffe-windows下MATLAB 环境配置成功,demo时invalid Net handle

Caffe环境安装且听风吟的夏天 回复了问题 • 4 人关注 • 3 个回复 • 1596 次浏览 • 13 小时前 • 来自相关话题

执行地一个例子: 遇到convert_mnist_data.bin: not found

Caffe开发使用AliexKen 回复了问题 • 2 人关注 • 2 个回复 • 300 次浏览 • 1 天前 • 来自相关话题

caffe matlab接口train和test时出错

回复

Caffe开发使用isgone 发起了问题 • 1 人关注 • 0 个回复 • 93 次浏览 • 2017-06-19 11:18 • 来自相关话题

第8.1节编译时中断

回复

Caffe开发使用liuyuhang13 回复了问题 • 1 人关注 • 2 个回复 • 76 次浏览 • 2017-06-16 16:59 • 来自相关话题

Window下部署,采用AfxBeginThread创建线程调用classifier时?

回复

Caffe开发使用tianya1989 发起了问题 • 1 人关注 • 0 个回复 • 66 次浏览 • 2017-06-15 15:19 • 来自相关话题

Lenet-5模型在caffe下的实现

回复

Caffe开发使用waiting 发起了问题 • 1 人关注 • 0 个回复 • 76 次浏览 • 2017-06-15 11:48 • 来自相关话题

关于caffe中用mnist训练lenet例子中输入数据迭代次数的问题

Caffe开发使用alex68 回复了问题 • 2 人关注 • 1 个回复 • 95 次浏览 • 2017-06-15 01:06 • 来自相关话题

微软版caffe下怎么获取log日志

回复

Caffe环境安装yzgrfsy 发起了问题 • 1 人关注 • 0 个回复 • 74 次浏览 • 2017-06-14 15:21 • 来自相关话题

caffe下自带minist例子疑惑

HalfBlood 回复了问题 • 2 人关注 • 1 个回复 • 106 次浏览 • 2017-06-14 14:25 • 来自相关话题

编译caffe时候抛出的错误

Caffe开发使用ma3252788 回复了问题 • 3 人关注 • 3 个回复 • 4305 次浏览 • 2017-06-13 00:02 • 来自相关话题

深度学习21天实战caffe,第8天测试程序编译问题

Caffe开发使用fipan 回复了问题 • 7 人关注 • 8 个回复 • 2088 次浏览 • 2017-06-10 19:19 • 来自相关话题

ssd的priorbox是什么意思?

Caffe开发使用joshua_1988 回复了问题 • 3 人关注 • 2 个回复 • 672 次浏览 • 2017-06-09 11:43 • 来自相关话题

《21天caffe》书中295页学习曲线画不出来

Caffe开发使用jimohanqiu 回复了问题 • 5 人关注 • 5 个回复 • 1122 次浏览 • 2017-06-05 21:47 • 来自相关话题

101层深度残差网络维度计算问题

回复

Caffe开发使用xhq11 回复了问题 • 1 人关注 • 1 个回复 • 103 次浏览 • 2017-06-05 14:16 • 来自相关话题

caffe预测支持多线程嘛?是如何实现的?

Caffe开发使用bjsyj_cd_sina 回复了问题 • 2 人关注 • 2 个回复 • 302 次浏览 • 2017-06-02 16:15 • 来自相关话题

修改classification.cpp使用自己的trained_models,运行时出现异常

回复

Caffe开发使用lutingxiang 发起了问题 • 1 人关注 • 0 个回复 • 94 次浏览 • 2017-06-02 09:50 • 来自相关话题

大家好,我在win10下libcaffe编译通过,但编译caffe时出错,实在解决不了了,求帮助,谢谢谢谢!! 下面是错误信息

Caffe环境安装攻城卒子 回复了问题 • 2 人关注 • 1 个回复 • 135 次浏览 • 2017-06-02 00:43 • 来自相关话题

caffe下训练时Creating Layer slice3层报错

回复

waiting 发起了问题 • 1 人关注 • 0 个回复 • 86 次浏览 • 2017-06-01 20:47 • 来自相关话题

训练时Creating Layer slice3层报错

jiangwei 回复了问题 • 2 人关注 • 2 个回复 • 81 次浏览 • 2017-06-01 19:58 • 来自相关话题

使caffe支持多lable输入

jiangwei 发表了文章 • 0 个评论 • 99 次浏览 • 2017-06-01 19:17 • 来自相关话题

介绍

ps:文章是从我博客搬过来的,这里的文字排版太麻烦了,如果看着不舒服建议去我博客看(http://www.xjiangwei.cn/2017/05/23/修改caffe源码使其支持多label图片输入/)

修改后的caffe全部源代码在这里(https://github.com/jiangwei199 ... -lable)

caffe可以直接读取原始图片进行训练,但是直接读取图片只支持单label。为进行多label分类训练,需要修改其源代码。这种修改方法相比于网上其他方法修改的是最少的,另外,这样修改也是兼容原来功能的,不影响caffe正常使用。修改如下

主要涉及三个文件

caffe/src/caffe/proto/caffe.proto

caffe/include/caffe/layers/image_data_layer.hpp

caffe/src/caffe/layers/image_data_layer.cpp

修改caffe.protp

定位到caffe/src/caffe/proto/caffe.proto中message ImageDataParameter
// 添加一个参数  
// Specify the label dim. default 1.  
// 有几种label,比如性别、年龄两种label,在网络结构里就把此参数设置为2  
optional uint32 label_dim = IDNumber [default = 1]; 
// IDNumber是和其它参数不冲突的ID数字修改image_data_layer.hpp

定位到caffe/include/caffe/layers/image_data_layer.hpp
// 修改vector<std::pair<std::string, int> > lines_;  
// string对应那个train.txt中的图片名称,in对应label,我们把int改为int*,实现多label  vector<std::pair<std::string, int *> > lines_;修改image_data_layer.cpp

定位到caffe/src/caffe/layers/image_data_layer.cpp
// DataLayerSetUp函数 
// 原本的加载图片名称和label的代码  
std::ifstream infile(source.c_str()); 
string line; size_t pos; int label; 
while (std::getline(infile, line)) 
{ pos = line.find_last_of(' '); label = atoi(line.substr(pos + 1).c_str()); lines_.push_back(std::make_pair(line.substr(0, pos), label)); } 
// 修改为这样 
std::ifstream infile(source.c_str()); string filename; 
// 获取label的种类  
int label_dim = this->layer_param_.image_data_param().label_dim();
 // 注意这里默认每个label直接以空格隔开,每个图片名称及其label占一行,如果你的格式不同,可自行修改读取方式  
while (infile >> filename) { int* labels = new int[label_dim]; for(int i = 0;i < label_dim;++i){ infile >> labels[i]; } lines_.push_back(std::make_pair(filename, labels)); } // 原本的输出label  
vector<int> label_shape(1, batch_size); top[1]->Reshape(label_shape); for (int i = 0; i < this->prefetch_.size(); ++i) { this->prefetch_[i]->label_.Reshape(label_shape); } 
// 修改为这样  vector<int> label_shape(2); label_shape[0] = batch_size; label_shape[1] = label_dim; top[1]->Reshape(label_shape); 
// label的输出
shape batch_size*label_dim  for (int i = 0; i < this->PREFETCH_COUNT; ++i) { this->prefetch_[i].label_.Reshape(label_shape); } 
// 注意:caffe最新版本prefetch_的结构由之前的Batch<Dtype> prefetch_[PREFETCH_COUNT]; 
// 改为 vector<shared_ptr<Batch<Dtype> > > prefetch_; 由对象数组改为了存放shared指针的vector。 // 所以此处的this->PREFETCH_COUNT改为this->prefetch_.size(); 
// 此处的this->prefetch_[i].label_.Reshape(label_shape); 
// 改为this->prefetch_[i]->label_.Reshape(label_shape);把.改成指针的-> 
// load_batch函数 
// 在函数一开始先获取下label_dim参数 int label_dim = this->layer_param_.image_data_param().label_dim(); 
// 原本的预取label prefetch_label[item_id] = lines_[lines_id_].second;
 // 修改为这样 for(int i = 0;i < label_dim;++i){ 
// lines_[lines_id_].second就是最开始改为的int*,多label  prefetch_label[item_id * label_dim + i] = lines_[lines_id_].second[i]; }完成

然后进入caffe根目录,执行sudo make clean sudo make all -j2如果没出错就没问题了

使用示例train.txt 001.jpg 1 3 2 002.jpg 2 4 7 003.jpg 3 0 9
# trainval.prototxt layer { name: "data" type: "ImageData" top: "data" top: "label" include { phase: TRAIN } transform_param { mirror: true mean_value: 128 mean_value: 128 mean_value: 128 } image_data_param { mirror: true source: "your path/train.txt" root_folder: "your image data path" new_height: xxx new_width: xxx batch_size: 32 shuffle: true #每个epoch都会进行shuffle label_dim: 3 } } layer { name: "slice" type: "Slice" bottom: "label" top: "label_1" top: "label_2" top: "label_3" slice_param { axis: 1 slice_point:1 slice_point:2 #这里有n个label就需要添加n-1个slice_point } } 
参考:caffe实现多label输入(修改源码版)(http://blog.csdn.net/u01301088 ... 098346) 查看全部
介绍

ps:文章是从我博客搬过来的,这里的文字排版太麻烦了,如果看着不舒服建议去我博客看(http://www.xjiangwei.cn/2017/05/23/修改caffe源码使其支持多label图片输入/)

修改后的caffe全部源代码在这里(https://github.com/jiangwei199 ... -lable)

caffe可以直接读取原始图片进行训练,但是直接读取图片只支持单label。为进行多label分类训练,需要修改其源代码。这种修改方法相比于网上其他方法修改的是最少的,另外,这样修改也是兼容原来功能的,不影响caffe正常使用。修改如下

主要涉及三个文件

caffe/src/caffe/proto/caffe.proto

caffe/include/caffe/layers/image_data_layer.hpp

caffe/src/caffe/layers/image_data_layer.cpp

修改caffe.protp

定位到caffe/src/caffe/proto/caffe.proto中message ImageDataParameter
// 添加一个参数  
// Specify the label dim. default 1.  
// 有几种label,比如性别、年龄两种label,在网络结构里就把此参数设置为2  
optional uint32 label_dim = IDNumber [default = 1]; 
// IDNumber是和其它参数不冲突的ID数字修改image_data_layer.hpp

定位到caffe/include/caffe/layers/image_data_layer.hpp
// 修改vector<std::pair<std::string, int> > lines_;  
// string对应那个train.txt中的图片名称,in对应label,我们把int改为int*,实现多label  vector<std::pair<std::string, int *> > lines_;修改image_data_layer.cpp

定位到caffe/src/caffe/layers/image_data_layer.cpp
// DataLayerSetUp函数 
// 原本的加载图片名称和label的代码  
std::ifstream infile(source.c_str()); 
string line; size_t pos; int label; 
while (std::getline(infile, line)) 
{ pos = line.find_last_of(' '); label = atoi(line.substr(pos + 1).c_str()); lines_.push_back(std::make_pair(line.substr(0, pos), label)); } 
// 修改为这样 
std::ifstream infile(source.c_str()); string filename; 
// 获取label的种类  
int label_dim = this->layer_param_.image_data_param().label_dim();
 // 注意这里默认每个label直接以空格隔开,每个图片名称及其label占一行,如果你的格式不同,可自行修改读取方式  
while (infile >> filename) { int* labels = new int[label_dim]; for(int i = 0;i < label_dim;++i){ infile >> labels[i]; } lines_.push_back(std::make_pair(filename, labels)); } // 原本的输出label  
vector<int> label_shape(1, batch_size); top[1]->Reshape(label_shape); for (int i = 0; i < this->prefetch_.size(); ++i) { this->prefetch_[i]->label_.Reshape(label_shape); } 
// 修改为这样  vector<int> label_shape(2); label_shape[0] = batch_size; label_shape[1] = label_dim; top[1]->Reshape(label_shape); 
// label的输出
shape batch_size*label_dim  for (int i = 0; i < this->PREFETCH_COUNT; ++i) { this->prefetch_[i].label_.Reshape(label_shape); } 
// 注意:caffe最新版本prefetch_的结构由之前的Batch<Dtype> prefetch_[PREFETCH_COUNT]; 
// 改为 vector<shared_ptr<Batch<Dtype> > > prefetch_; 由对象数组改为了存放shared指针的vector。 // 所以此处的this->PREFETCH_COUNT改为this->prefetch_.size(); 
// 此处的this->prefetch_[i].label_.Reshape(label_shape); 
// 改为this->prefetch_[i]->label_.Reshape(label_shape);把.改成指针的-> 
// load_batch函数 
// 在函数一开始先获取下label_dim参数 int label_dim = this->layer_param_.image_data_param().label_dim(); 
// 原本的预取label prefetch_label[item_id] = lines_[lines_id_].second;
 // 修改为这样 for(int i = 0;i < label_dim;++i){ 
// lines_[lines_id_].second就是最开始改为的int*,多label  prefetch_label[item_id * label_dim + i] = lines_[lines_id_].second[i]; }完成

然后进入caffe根目录,执行sudo make clean sudo make all -j2如果没出错就没问题了

使用示例train.txt 001.jpg 1 3 2 002.jpg 2 4 7 003.jpg 3 0 9
# trainval.prototxt layer { name: "data" type: "ImageData" top: "data" top: "label" include { phase: TRAIN } transform_param { mirror: true mean_value: 128 mean_value: 128 mean_value: 128 } image_data_param { mirror: true source: "your path/train.txt" root_folder: "your image data path" new_height: xxx new_width: xxx batch_size: 32 shuffle: true #每个epoch都会进行shuffle label_dim: 3 } } layer { name: "slice" type: "Slice" bottom: "label" top: "label_1" top: "label_2" top: "label_3" slice_param { axis: 1 slice_point:1 slice_point:2 #这里有n个label就需要添加n-1个slice_point } } 
参考:caffe实现多label输入(修改源码版)(http://blog.csdn.net/u01301088 ... 098346)