Github:

https://github.com/Haiyang21/Caffe_MultiLabel_Classification

Blogs 

1. 采用多label的lmdb+Slice Layer的方法

http://blog.csdn.net/u013010889/article/details/53098346

2. 修改数据层方法

http://blog.csdn.net/u013010889/article/details/54614067

3. 修改convert_imageset.cpp

http://www.aichengxu.com/other/9252229.htm

注意:该方法有几处错误,所有设置label_shape尺寸的地方都要修改如下

vector<int> label_shape(batch_size, datum.label_size())

需要改为

vector<int> label_shape(datum.label_size());
label_shape[0] = batch_size;
label_shape[1] = datum.label_size();

其他文件类似方法修改

【转】caffe 实现多标签输入(multilabel、multitask)

2016-03-23 08:26 本站整理 浏览(171)
caffe 本身并不支持 多类标的输入, 该框架主要用于解决图片分类的问题,而目前,两个重要的问题需要多标签的输入:多任务学习(multi-task)和多标签分类(multi-label),本文针对这两个问题,实现了多标签的输入
目前,网上流行的多标签输入方法主要有以下四种:
1. 最简单,使用mxnet,它本身支持了多标签分类的问题,因此也自带了多标签的输入
2. 用HDF5 + Slice Layer的方法完成,这种方法实现上没有什么难度,但是当数据量很大时,HDF5的存储方式会产生数十倍于图片的硬盘消耗,而且生成的过程也非常缓慢,本人一开始就主要使用这种方法,往往事倍功半
3. 用两个data的输入(两个LMDB),一个只输出图片,一个只输出标签,这种方法相对前面两种要难一些,不过应该效果也不错
4. 直接修改caffe的网络使其满足多标签的输入,为了方便以后的实验,本人实现了这种方法
方法描述:注意到caffe的大多数数据转换都是从./.build_release/tools/convert_imageset 这种方法开始的,因此,从convert_iamgeset开始入手应该是正确的选择,通过跟踪数据的输入,依次修改了convert_imageset.cpp、io.hpp、 io.cpp、data_layers.hpp、caffe.proto、data_layer.cpp、image_data_layer.cpp、memory_data_layer.cpp等。因为本次是工程需要,因此我直接在py-faster-rcnn的caffe上进行修改
主要方法:(该博客上所有图片,左边是修改后的,右边是原有的)
1. 修改convert_imageset:lines是读入的信息,包括图片路径和label,这里改成vector以支持多标签输入

2. 修改io.hpp:下图里面,主要就是各种label改为vector

3. 同理修改io.cpp:主要修改ReadImageToDatum和ReadFileToDatum两个函数,主要是set_label要逐个set进去


4. 修改caffe.proto,主要需要满足多标签输入,以及增加一些输入网络层的参数



5. 修改data_layer.cpp,实现Data这种网络层类型的多标签输入,主要修改DataLayerSetup和load_batch两个函数


6. 修改data_layer.hpp,主要是修改部分网络的参数,增加标签数量的变量等


7. 修改image_data_layer.cpp



8. 修改memory_data_layer.cpp




至此,完成所有修改,编译之后进行测试:



从实验结果可以看出,输入的标签和train.txt的一致。
总结:本文通过修改caffe的内部代码,实现了caffe的多标签输入,主要实现了DataLayer、ImageDataLayer、MemoryDataLayer三种输入层,但是需要注意,本人仅在DataLayer和ImageDataLayer下进行过测试,未对MemoryDataLayer或其他的输入类型进行测试
最后,感谢实验室的大神师兄lxionghao,在实现过程中,本人主要通过不断编译定位错误逐个修改以及借鉴他的修改方法完成任务。
下面贴出他的blog,比较有借鉴价值:
讲解:/content/8782995.html
工程:https://gitcafe.com/lxiongh/Caffe_for_Multi-label
本人工程将稍后上传到github,之后再公布给大家

转载于:https://www.cnblogs.com/haiyang21/p/7182676.html

caffe实现多任务学习相关推荐

  1. caffe2实现多任务学习

    前言 caffe2 是caffe的升级版,跟caffe不兼容,解决了caffe的很多问题,比如没有原生的支持多机器训练,加强了移动端的支持等等.总之,caffe已经不再更新了,打上了tag 1.0,快 ...

  2. 基于caffe的度量学习实现(Siamese network Triplet network)

    基于caffe的度量学习实现,主要是孪生网络和三元组网络(Siamese network & Triplet network)实现图像的分类和度量. 包含数据集制作脚本,训练测试脚本和pyth ...

  3. 深度学习 -- TensorFlow(项目)验证码生成与识别(多任务学习)

    目录 基础理论 一.生成验证码数据集 1.生成验证码训练集 1-0.判断文件夹是否为空 1-1.创建字符集(数字.大小写英文字母) 1-2.随机生成验证码(1000个,长度为4) 2.生成验证码测试集 ...

  4. 2021年浅谈多任务学习

    作者 | 多多笔记 来源 |AI部落联盟 头图 | 下载于视觉中国 写此文的动机: 最近接触到的几个大厂推荐系统排序模型都无一例外的在使用多任务学习,比如腾讯PCG在推荐系统顶会RecSys 2020 ...

  5. 最新NLP架构的直观解释:多任务学习– ERNIE 2.0(附链接)| CSDN博文精选

    作者 | Michael Ye 翻译 | 陈雨琳,校对 | 吴金笛 来源 | 数据派THU(ID:DatapiTHU) 百度于今年早些时候发布了其最新的NLP架构ERNIE 2.0,在GLUE基准测试 ...

  6. ICML2018见闻 | 迁移学习、多任务学习领域的进展

    作者 | Isaac Godfried 译者 | 王天宇 编辑 | Jane 出品 | AI科技大本营 [导读]如今 ICML(International Conference on Machine ...

  7. Survey | 多任务学习综述

    1.简介 深度学习模型通常需要大量有标签数据才能训练出一个优良的分类器.但是,包括医学图像分析在内的一些应用无法满足这种数据要求,因为标注数据需要很多人力劳动.在这些情况下,多任务学习(MTL)可以通 ...

  8. 多任务学习(Multi-Task Learning, MTL)、其他分类形式、与迁移学习的关系

    多任务学习(Multi-Task Learning, MTL).其他分类形式.与迁移学习的关系 目录 多任务学习(Multi-Task Learning, MTL).其他分类形式.与迁移学习的关系

  9. 独家 | 最新NLP架构的直观解释:多任务学习– ERNIE 2.0(附链接)

    作者:Michael Ye 翻译:陈雨琳 校对:吴金笛 本文约1500字,建议阅读7分钟. 本文将介绍多任务学习. 科技巨头百度于今年早些时候发布了其最新的NLP架构ERNIE 2.0,在GLUE基准 ...

最新文章

  1. 提高C++性能的编程技术笔记:临时对象+测试代码
  2. Spring注入---静态工厂
  3. 计算机视觉测试数据集 dataset
  4. CVPR 2020:如何写一篇好论文?
  5. 理解A*寻路算法具体过程
  6. ABAP system landscape和vue项目webpack构建的一种实践
  7. C语言 项目 CRM系统(客户信息管理系统)
  8. discuz精仿OPPO社区主题模板
  9. linux文件挂载和卸载命令,Linux基础命令(八)——挂载、卸载文件系统
  10. Python下使用tarfile模块来实现文件归档压缩与解压
  11. 总结了几款好用的思维导图软件
  12. 通过JS代码实现Ping功能
  13. 带你刷笔试关的小怪|详解指针习题和面试题【C语言/指针/进阶】
  14. 惠普台式计算机配置,hp惠普台式机bios设置图文教程
  15. 智能合约通证化与 Web3 革命(1):为何智能合约没能成为区块链的杀手级应用?...
  16. PostgreSQL安装之后,打开pgAdmin4后,点击servers下方没有任何内容的情况
  17. 计算机系给未来的自己写信,给未来的自己写信
  18. web渗透测试在线网站
  19. AD16在走线至焊盘时不能自动定位到焊盘中心
  20. NE555芯片常用产生的频率计算方法

热门文章

  1. 【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货
  2. java 数字转26个字母和26个字母转数字
  3. 如何提升计算机内存,怎么提高电脑物理内存
  4. linux如何添加默认路由表_Linux-如何添加路由表
  5. 详解:Drools规则引擎探究
  6. 图文解说nginx中server的匹配顺序
  7. NSInvocation
  8. Spring Cloud Gateway 雪崩了,该怎么办不要慌
  9. 大佬来告诉你在遇到B站崩了,如何防止类似事故的出现?
  10. 红帽linux配置网桥#039;,redhat配置网桥