caffe matlab接口train和test时出错

回复

Caffe开发使用isgone 发起了问题 • 1 人关注 • 0 个回复 • 70 次浏览 • 5 天前 • 来自相关话题

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

回复

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

Lenet-5模型在caffe下的实现

回复

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

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

回复

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

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

回复

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

caffe下训练时Creating Layer slice3层报错

回复

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

使caffe支持多lable输入

jiangwei 发表了文章 • 0 个评论 • 96 次浏览 • 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)

Build Caffe: #error This file was generated by an older version of protoc which is

回复

Caffe开发使用JenifferYingyiWu 发起了问题 • 1 人关注 • 0 个回复 • 124 次浏览 • 2017-05-25 10:49 • 来自相关话题

将自己的数据转成caffe的leveldb或者lmdb格式的数据在进行训练时都有问题

回复

Caffe开发使用awfxx01 发起了问题 • 1 人关注 • 0 个回复 • 127 次浏览 • 2017-05-23 20:24 • 来自相关话题

caffe 批量提取特征层输出

回复

Caffe开发使用claire 发起了问题 • 1 人关注 • 0 个回复 • 154 次浏览 • 2017-05-17 17:17 • 来自相关话题

最后执行训练.sh文件时,提示我屏幕快照文件夹没有写入权限,可明明有

回复

Caffe开发使用a541558161 发起了问题 • 1 人关注 • 0 个回复 • 117 次浏览 • 2017-05-15 21:11 • 来自相关话题

caffe数据源对结果影响的问题

回复

Caffe开发使用HappyJess 发起了问题 • 1 人关注 • 0 个回复 • 140 次浏览 • 2017-05-09 09:44 • 来自相关话题

deeplab编译caffe出错

回复

Caffe开发使用张小椰 发起了问题 • 1 人关注 • 0 个回复 • 147 次浏览 • 2017-04-26 10:22 • 来自相关话题

CUDNN怎么才能彻底啊删除重新安装

回复

Caffe环境安装gripdestiny 发起了问题 • 1 人关注 • 0 个回复 • 310 次浏览 • 2017-04-25 22:04 • 来自相关话题

在安装完caffe后进行make all编译时出现以下错误,希望得到大家的帮助

回复

Caffe环境安装xxxxxzzzzzzzzz 发起了问题 • 1 人关注 • 0 个回复 • 255 次浏览 • 2017-04-25 20:44 • 来自相关话题

caffe-ssd :error: (-10) Raw image encoder error: Empty JPEG image

回复

wolfworld6 发起了问题 • 1 人关注 • 0 个回复 • 131 次浏览 • 2017-04-24 16:11 • 来自相关话题

用已训练好的模型对测试数据集进行预测报错

回复

waiting 发起了问题 • 1 人关注 • 0 个回复 • 137 次浏览 • 2017-04-22 20:54 • 来自相关话题

caffe框架下生成均值文件出错

回复

waiting 发起了问题 • 1 人关注 • 0 个回复 • 124 次浏览 • 2017-04-22 18:52 • 来自相关话题

Caffe用的是Net,Caffe2用的是计算图(computation graph),有了解的嘛?

回复

爱在路上 发起了问题 • 1 人关注 • 0 个回复 • 202 次浏览 • 2017-04-21 14:16 • 来自相关话题

caffe框架下对已训练好的模型进行测试出错

回复

waiting 发起了问题 • 1 人关注 • 0 个回复 • 146 次浏览 • 2017-04-21 11:49 • 来自相关话题