多标签分类及其 caffe 实现总结
来源:互联网 发布:linux显示文本名 编辑:程序博客网 时间:2024/06/05 01:18
一直对多标签分类(multi-label)“情有独钟”,因为一直感觉没有完全弄懂它。最近看博客看多了,看着看着突然有点感觉,所以就把目前的理解整理一下写下来。
目前我看到的多标签分类任务有下面的两种情况(如有错误,欢迎交流指正):
每个样本对应多个label,label的值非0即1,最后的损失函数使用
SigmoidCrossEntropyLoss
,比如:fig1.jpg 0 0 1 fig2.jpg 1 0 1 fig3.jpg 1 1 0
caffe官网提供的Multi-label教程就是这种情况。在这种情况下,每一个label代表某一种属性的是与否。比如第一个标签可能表示图片中是否有人,第二个代表是否有狗等等。
属于这一类型的例子有: link1、 link2每个样本对应多个label,label可以有多于两个的取值,最后的损失函数使用多个
SoftmaxWithLoss
,比如:fig1.jpg 0 2 1 fig2.jpg 2 3 0 fig3.jpg 1 1 2
在这种情况下,每一个label代表某一种属性的多种可能。比如第一个标签可能表示人的衣服是红色的、白色的还是蓝色的,第二个便签可能代表狗的颜色是白、黄、黑或者灰。
属于这一类型的例子有: link3、 link4
上面是对多标签分类任务的一些认识,下面说一说用caffe具体的实现。
主要可以分为数据输入和损失函数两个部分:
1 数据输入
因为caffe目前还没有明确给出制作多标签lmdb文件的功能,所以准备输入数据方面可以考虑下面的方法。
- 使用HDF5存储方式制作输入数据。但是,当数据量大的时候,HDF5存储方式的硬盘消耗大,而且速度慢;
- 使用lmdb存储方式制作输入数据:
- data和label各存储在一个lmdb中。这一种修改的源码相对少一些,主要要修改的是生成lmdb文件对应的源码
convert_imageset.cpp
,可以参考上面提到的:link3、 link4; - data和label存储在同一个lmdb文件中。这一种方法需要修改的源码相对多一点。具体的可以参考上面提到的: link1。
- data和label各存储在一个lmdb中。这一种修改的源码相对少一些,主要要修改的是生成lmdb文件对应的源码
- 使用自己的python data layer直接读取图片和label。这一种也是caffe官网上给出的多标签分类教程( link5)使用的方法,可以参考上面提到的:link2。
2 损失函数
- 使用
SigmoidCrossEntropyLoss
。只需要在最后的损失函数层使用这一损失函数即可(可以参考上面的 link1、 link2); - 使用多个
SoftmaxWithLoss
。需要用Slice
层将网络的label层进行分割,然后分别提供给不同的SoftmaxWithLoss
层使用(可以参考上面的 link3、 link4 )。
可以根据实际需要选择损失函数,至于哪种比较有效,我也不是很清楚,如果知道的朋友欢迎留言分享。
上面就是对多标签分类任务的以及其caffe实现的一些总结,希望对有需要的朋友有一些帮助!
阅读全文
0 0
- 多标签分类及其 caffe 实现总结
- Caffe实现多标签分类
- Caffe 实现多标签分类
- caffe多任务学习之多标签分类
- caffe多任务学习之多标签分类
- caffe多任务学习之多标签分类
- Caffe 实现多标签分类 支持Multi-Label的LMDB数据格式输入
- caffe分类实现
- 使用caffe训练一个多标签分类/回归模型
- 使用caffe训练一个多标签分类/回归模型
- 使用caffe训练一个多标签分类/回归模型
- 实战caffe多标签分类——汽车品牌与车辆外观(C++接口)[详细实现+数据集]
- 实战caffe多标签分类——汽车品牌与车辆外观(C++接口)[详细实现+数据集]
- caffe实现多标签输入(multilabel、multitask)
- caffe实现多标签输入(multilabel、multitask)
- caffe实现多标签输入(multilabel、multitask)
- 使用caffe实现多标签输入
- caffe实现多标签输入(multilabel、multitask)
- Codeforces 827C DNA Evolution(多维树状数组)
- nginx(6)变量转载自章亦春
- Eclipse安装svn插件的几种方式
- cf873B-Balanced Substring(前缀和)
- Java中@Override的作用
- 多标签分类及其 caffe 实现总结
- 移动零-LintCode
- TCP三次握手简析
- [2017纪中11-2]字典序 拓扑排序+优先队列
- Paper list of Imbalanced Time-series Classification with Deep Learning
- OpenCv中的cv::Mat::create()函数,cvRound(),cvFloor(),cvCeil()函数的详解l
- getch()和getchar()之再讨论
- Unix/Linux下的open函数(O_CREAT和O_EXCL)
- sql执行顺序