• 第一步 image_data_layerhpp
  • 第二步 image_data_layercpp

原版caffe不支持多标签,会报错,如下:

注:这里读取数据的method是ImageData,即 type:ImageData

此方法直接从txt中获取图片路径和label,进行读取,txt如下所示:

——————————————————————–正文————————————————————-
需要更改两个文件分别是
第一: caffe-master/include/caffe/layers 下的 image_data_layer.hpp
第二:caffe-master/src/caffe/layers 下的image_data_layer.cpp

第一步: image_data_layer.hpp


头文件 image_data_layer.hpp,改动较少,仅一行;
将:

vector<std::pair<std::string, int> > lines_;

改成:

vector<std:pair<std::string, vector<float>>> lines_;

原本label是用int类型,但我的任务是回归任务,因此修改为vector

第二步: image_data_layer.cpp

改动有三处,分别是
1. 读取label;
2. label_shape;
3. top_shape

1.读取label
原版label定义为整型 ,并且只有一个label值,原版label读取是这样的:
第42行起

  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));}

infile就是txt文件,line就是txt当中的一行,pos为了寻找标签的位置,lines_存储读取的txt数据

从42行开始更改,更改为如下:

  int pos;  // int pos ;int label_dim = 0 ;bool gfirst = true;while (std::getline(infile, line)) {if(line.find_last_of(' ')==line.size()-2) line.erase(line.find_last_not_of(' ')-1); pos = line.find_first_of(' ');string img_path = line.substr(0, pos);int p0 = pos + 1;vector<float> label_vec;while (pos != -1){pos = line.find_first_of(' ', p0);float v = atof(line.substr(p0, pos).c_str());label_vec.push_back(v);p0 = pos + 1;}if (gfirst){label_dim = label_vec.size();gfirst = false;LOG(INFO) << "label dim: " << label_dim;}CHECK_EQ(label_vec.size(), label_dim)  << "label dim not match in: " << lines_.size()<<", "<<lines_[lines_.size()-1].first;lines_.push_back(std::make_pair(img_path, label_vec));}

label不再是int类型,而定义为vector<float>类型 ,并在 while(pos!=-1)里面循环读取

2.label_shape
在94行开始,原版是这样的

  vector<int> label_shape(1, batch_size);top[1]->Reshape(label_shape);

改为

  vector<int> label_shape(2, batch_size);label_shape[1] = label_dim;top[1]->Reshape(label_shape);

3. top_shape
在134行,原版是这样

  // Reshape batch according to the batch_size.top_shape[0] = batch_size;batch->data_.Reshape(top_shape);

修改为

  // Reshape batch according to the batch_size.top_shape[0] = batch_size;batch->data_.Reshape(top_shape);///////////////////////////////////////////////vector<int> top_shape1(4);top_shape1[0] = batch_size;top_shape1[1] = lines_[0].second.size();top_shape1[2] = 1;top_shape1[3] = 1; batch->data_.Reshape(top_shape);

重新 make 就可以使用多标签输入了;

prototxt中的data_layer是这样的:

image_data_layer.hpp
image_data_layer.cpp
上传到了:
http://download.csdn.net/download/u011995719/10235806

修改caffe源码--支持多标签--关键点检测相关推荐

  1. buildroot修改QT源码支持屏幕旋转

    linuxfb屏幕旋转 前言 一.源码获取 二.修改源码 三.将补丁拷贝到指定目录 四.编译 五.添加环境变量 前言 事情是这样的,在开发板上使用Qt来做一些界面开发,但是我们是用的屏幕是800*12 ...

  2. 如何修改cef源码支持windows xp

    公司目前使用的cef版本是1547,是一个2013年的版本,目前发现了一些bug. 所以打算升级到最新版本,但是需要支持windowsxp. ##cef版本选择 谷歌浏览器chromium从50版本开 ...

  3. 修改Bootstrap源码支持不同大小nandflash

    原开发板是256M的NANDFLASH,目的是想用一个64M的nandflash,并且从nandflash启动. 主要是对bootstraps修改,修改地方如下:(以百特光盘自带的AT91Bootst ...

  4. Deep Compression阅读理解及Caffe源码修改

    Deep Compression阅读理解及Caffe源码修改 作者:may0324 更新:  没想到这篇文章写出后有这么多人关注和索要源码,有点受宠若惊.说来惭愧,这个工作当时做的很粗糙,源码修改的比 ...

  5. Windows7上使用VS2013编译Caffe源码(不带GPU支持)步骤

    1.      从https://github.com/BVLC/caffe/通过git clone下载caffe源码,master分支,版本号为09868ac:$ git  clone https: ...

  6. PHP微信公众平台源码 支持多账号 仿pigcms 小猪微信 已经修改完毕 完整可用

    为什么80%的码农都做不了架构师?>>> PHP微信公众平台源码 支持多账号 仿pigcms 小猪微信 已经修改完毕 完整可用 从网上下载了个pigcms 公司用 但是发现很多问题, ...

  7. QT5.12.9 修改源码支持热插拔

    QT5.12.9 修改源码支持热插拔 思路来自文章:Qt之支持usb触摸屏热插拔(Qt5.7) qevdevtouchhandler.cpp新添加的内容:165行,256行,435-451行 直接替换 ...

  8. 修改Android10系统源码支持手机永不休眠

    一.设置永不休眠简单分析 安卓手机中"设置"应用里面可以设置手机屏幕超时时间.如下图所示:通过选项可以看到最多能设置30分钟,那如果需要永不休眠,只要把屏幕超时时间设置的足够大就可 ...

  9. java调用caffe_Caffe中master与windows分支差异对比及通过命令提示符编译Caffe源码操作步骤...

    目前GitHub https://github.com/fengbingchun/Caffe_Test  中的caffe还是依赖较老的版本,更新于2015.08.15,commit为09868ac,近 ...

最新文章

  1. 对python的认识800字_我对python里True和False的理解
  2. 修改文档框架:word-多级列表与标题样式相结合
  3. Feign 超时设置
  4. oracle一体机诊断内存,Oracle内存诊断
  5. ftp 200 227 451linux,FTP无法链接
  6. Java-POI生成Excel表格模板部分样式
  7. Visual Studio 2022 WinForm/Wpf打包安装程序
  8. 【毕业设计】基于stm32的语音识别 - 单片机 嵌入式 物联网 语音识别
  9. java前端弹窗的代码_弹出窗口的html的代码是怎么写的?
  10. 《模式识别》期末考试考题汇总带答案
  11. 轻量级配置的登录管理器选择---Silm[zt]
  12. 学会善于总结,善于表达
  13. 这4款风格各异的电脑软件,免费又实用,后悔没早点知道
  14. 安卓版的PanDownload 下载网盘资源
  15. mac常用基本操作笔记
  16. html5作品展示的动效,10款绚丽实用的HTML5图表动画应用
  17. 淘宝标题优化词根优化方法技巧 什么是淘宝标题词根
  18. ROS基础(13)——机器人建模之运动仿真
  19. html5 canvas详解 pdf,html5 canvas教程 pdf
  20. 凤姐在投融界融资千万,谁敢掏钱?

热门文章

  1. JavaScript中call,apply,bind方法的总结。
  2. 【C#】带等待窗体的BackgroundWorker
  3. Enterprise Libary 2 Hands-on-Lab 发布了
  4. Hadoop-MR实现日志清洗(三)
  5. javascript第三节
  6. php与web页面交互
  7. Smali 语法文档
  8. ESFramework介绍之(34)―― ITcpServerAgent和IUdpServerAgent组件关系图
  9. 软件设计师23-存储器系统02
  10. 软件_迅速增加博客友情链接[博]