caffe实现多任务学习
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[] = batch_size;
label_shape[] = datum.label_size();
其他文件类似方法修改
【转】caffe 实现多标签输入(multilabel、multitask)
目前,网上流行的多标签输入方法主要有以下四种:
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,之后再公布给大家
caffe实现多任务学习的更多相关文章
- 【转】贾扬清:希望Caffe成为深度学习领域的Hadoop
[转:http://www.csdn.net/article/2015-07-07/2825150] 在深度学习(Deep Learning)的热潮下,Caffe作为一个高效.实用的深度学习框架受到了 ...
- caffe源码学习之Proto数据格式【1】
前言: 由于业务需要,接触caffe已经有接近半年,一直忙着阅读各种论文,重现大大小小的模型. 期间也总结过一些caffe源码学习笔记,断断续续,这次打算系统的记录一下caffe源码学习笔记,巩固一下 ...
- [DeeplearningAI笔记]ML strategy_2_3迁移学习/多任务学习
机器学习策略-多任务学习 Learninig from multiple tasks 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.7 迁移学习 Transfer Learninig 神 ...
- DLNg[结构化ML项目]第二周迁移学习+多任务学习
1.迁移学习 比如要训练一个放射科图片识别系统,但是图片非常少,那么可以先在有大量其他图片的训练集上进行训练,比如猫狗植物等的图片,这样训练好模型之后就可以转移到放射科图片上,模型已经从其他图片中学习 ...
- 【论文笔记】多任务学习(Multi-Task Learning)
1. 前言 多任务学习(Multi-task learning)是和单任务学习(single-task learning)相对的一种机器学习方法.在机器学习领域,标准的算法理论是一次学习一个任务,也就 ...
- 深度神经网络多任务学习(Multi-Task Learning in Deep Neural Networks)
https://cloud.tencent.com/developer/article/1118159 http://ruder.io/multi-task/ https://arxiv.org/ab ...
- keras函数式编程(多任务学习,共享网络层)
https://keras.io/zh/ https://keras.io/zh/getting-started/functional-api-guide/ https://github.com/ke ...
- 多任务学习Multi-task-learning MTL
https://blog.csdn.net/chanbo8205/article/details/84170813 多任务学习(Multitask learning)是迁移学习算法的一种,迁移学习可理 ...
- [译]深度神经网络的多任务学习概览(An Overview of Multi-task Learning in Deep Neural Networks)
译自:http://sebastianruder.com/multi-task/ 1. 前言 在机器学习中,我们通常关心优化某一特定指标,不管这个指标是一个标准值,还是企业KPI.为了达到这个目标,我 ...
随机推荐
- PAT A1115 Counting Nodes in a BST (30 分)——二叉搜索树,层序遍历或者dfs
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...
- docker容器启动设置固定IP
docker安装以后的网络类型 [root@insure updev]# docker network ls NETWORK ID NAME DRIVER SCOPE 14da40175b01 bri ...
- B类——Stas and the Queue at the Buffet
http://codeforces.com/contest/1151/problem/D 题意: n个学生,每个学生都有自己的位置,最后要使
- Kubernetes 1.10.4 镜像 版本
1. gcr.io/google-containers/hyperkube:1.10.4 gcr.io/google_containers/pause-amd64:3.0 gcr.io/google_ ...
- LED灯珠散热的计算方法
LED灯珠散热的计算方法 来源: 时间:2014-09-23 13:55 [编辑:lufieliu] [字体:大 中 小] 我来说两句 一.热对LED的影响 1.LED是冷光源吗? (1)LED的 ...
- .NET开发微信小程序-生成二维码 - 转
1.生成小程序二维码功能 直接请求相应的链接.传递相应的参数 以生成商铺的付款码为例: var shopsId = e.ShopsId //付款码的参数 var codeModel = new fun ...
- Luogu P2257 YY的GCD
莫比乌斯反演第一题.莫比乌斯反演入门 数论题不多BB,直接推导吧. 首先,发现题目所求\(ans=\sum_{i=1}^n\sum_{j=1}^m [\gcd(i,j)=prime]\) 考虑反演,我 ...
- 计算几何总结(Part 1~2)
Preface 对于一个初三连三角函数都不会的蒟蒻来说计算几何简直就是噩梦. 反正都是要学的也TM没办法,那就慢慢一点点学起吧. 计算几何要有正确的板子,不然那种几百行CODE的题写死你. 本蒟蒻的学 ...
- 如何打造网站克隆、仿站工具(C#版)
前两天朋友叫我模仿一个网站,刚刚开始,我一个页面一个页面查看源码并复制和保存,花了我很多时间,一个字“累”,为了减轻工作量,我写了个网站“克隆工具”,一键克隆,比起人工操作, 效率提高了200%以上, ...
- 将 C# 枚举序列化为 JSON 字符串 基础理论
该转换过程需要引用 Newtonsoft.JSON,这其中的转换过程还是蛮有意思的. 一.定义枚举 /// <summary> /// 托寄物品枚举 /// </summary> ...