用LeNet训练好的模型识别自己的数字字符,应该在哪一层输出是哪个字符?

深度学习应用lutingxiang 回复了问题 • 4 人关注 • 3 个回复 • 1749 次浏览 • 2017-06-02 11:11 • 来自相关话题

关于caffe二分类模型的输出与标签设定

深度学习应用popper0912 回复了问题 • 3 人关注 • 4 个回复 • 314 次浏览 • 2017-06-02 10:27 • 来自相关话题

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

回复

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

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

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

YOLO 9000 K-means 如何生成Priors

论文阅读攻城卒子 回复了问题 • 2 人关注 • 1 个回复 • 337 次浏览 • 2017-06-02 00:29 • 来自相关话题

caffe 用训练好的模型(准确率95%)对测试集再次进行测试 准确率非常低?

图像分类cloudalice 回复了问题 • 8 人关注 • 5 个回复 • 1231 次浏览 • 2017-06-01 23:12 • 来自相关话题

caffe下训练时Creating Layer slice3层报错

回复

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

有没有人做人脸身份证去网纹的

人脸识别B-Kalasiky 回复了问题 • 5 人关注 • 4 个回复 • 457 次浏览 • 2017-06-01 20:11 • 来自相关话题

训练自己的数据库

深度学习理论jiangwei 回复了问题 • 2 人关注 • 1 个回复 • 127 次浏览 • 2017-06-01 20:02 • 来自相关话题

训练时Creating Layer slice3层报错

框架开发使用jiangwei 回复了问题 • 2 人关注 • 2 个回复 • 80 次浏览 • 2017-06-01 19:58 • 来自相关话题

使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训练时怎么知道模型每层所用时间多少?

综合问题jammieluo 回复了问题 • 2 人关注 • 1 个回复 • 341 次浏览 • 2017-06-01 11:24 • 来自相关话题

大家好,新人一个。。刚开始学caffe,21天实践caffe中的mnist 实验在windows下尝试,出现以下错误

深度学习应用lcyangling 回复了问题 • 5 人关注 • 6 个回复 • 1479 次浏览 • 2017-05-31 21:08 • 来自相关话题

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 • 来自相关话题

二分类问题用SigmoidCrossEntropyLoss和SoftmaxWithLoss均报错

Caffe开发使用popper0912 回复了问题 • 3 人关注 • 1 个回复 • 743 次浏览 • 2017-05-31 10:07 • 来自相关话题

二分类问题用什么模型?

参数调节popper0912 回复了问题 • 4 人关注 • 2 个回复 • 816 次浏览 • 2017-05-31 10:05 • 来自相关话题

windows下运行 py faster rcnn demo.py

回复

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