*** Error in `.build_release/tools/caffe': free(): invalid pointer: 0x0000000000c66e80 ***

回复

深度学习应用ayetao 发起了问题 • 1 人关注 • 0 个回复 • 110 次浏览 • 2017-06-02 22:57 • 来自相关话题

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

回复

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

caffe下训练时Creating Layer slice3层报错

回复

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

使caffe支持多lable输入

框架开发使用jiangwei 发表了文章 • 0 个评论 • 98 次浏览 • 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)

py-faster-rcnn如何恢复训练,没找到solverstate

回复

参数调节深度学习思考者 发起了问题 • 1 人关注 • 0 个回复 • 146 次浏览 • 2017-06-01 15:07 • 来自相关话题

caffe训练模型时loss越来越高

回复

图像分类jiangwei 发起了问题 • 1 人关注 • 0 个回复 • 123 次浏览 • 2017-05-31 20:57 • 来自相关话题

compute_image_mean

回复

深度学习理论roselily 发起了问题 • 1 人关注 • 0 个回复 • 98 次浏览 • 2017-05-31 18:27 • 来自相关话题

<<21天实战caffe>>第16天 MNIST数据可视化show_mnist_data.m出现以下错误

回复

深度学习理论roselily 发起了问题 • 1 人关注 • 0 个回复 • 104 次浏览 • 2017-05-31 13:53 • 来自相关话题

windows下运行 py faster rcnn demo.py

回复

目标识别kkkkkk 发起了问题 • 2 人关注 • 0 个回复 • 118 次浏览 • 2017-05-30 22:05 • 来自相关话题

在Ubuntu14.04下跑FCN模型时,出现以下问题,是由于内存不足引起的吗?还是说其他原因。

回复

语义图像分割NAVY_navy 发起了问题 • 1 人关注 • 0 个回复 • 130 次浏览 • 2017-05-27 16:41 • 来自相关话题

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

回复

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

cnn重建ReconNet网络loss到达5左右就不下降了,为啥?

回复

综合问题callback 发起了问题 • 1 人关注 • 0 个回复 • 129 次浏览 • 2017-05-24 11:28 • 来自相关话题

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

回复

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

anaconda启动jupyter notebook时提示"Connection to localhost failed."请问如何处理

回复

综合问题dapsjj 发起了问题 • 1 人关注 • 0 个回复 • 112 次浏览 • 2017-05-23 16:29 • 来自相关话题

请问你是怎么得到precision和recall数据的呢

回复

图像分类ciel咖啡小白 发起了问题 • 1 人关注 • 0 个回复 • 99 次浏览 • 2017-05-21 19:12 • 来自相关话题

LSTM的序列信息中是如何加入BOS和EOS的

回复

参数调节一路基石 发起了问题 • 1 人关注 • 0 个回复 • 137 次浏览 • 2017-05-21 16:31 • 来自相关话题

Deep Learning Book目标函数泰勒二次展开的公式问题

回复

深度学习理论无间空道 发起了问题 • 1 人关注 • 0 个回复 • 135 次浏览 • 2017-05-21 12:12 • 来自相关话题

有没有大神用过三维深度卷积网络的?可否提供一些资料,感激不尽!

回复

综合问题coollife 发起了问题 • 1 人关注 • 0 个回复 • 109 次浏览 • 2017-05-18 16:53 • 来自相关话题

图像描述问题中,LSTM如何判定一个x_static和一组target_sentence呈对应关系呢?

回复

图像描述一路基石 发起了问题 • 2 人关注 • 0 个回复 • 138 次浏览 • 2017-05-18 16:43 • 来自相关话题

caffe 批量提取特征层输出

回复

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