带有多标签图像的咖啡

时间:2015-09-20 15:09:19

标签: neural-network deep-learning caffe multilabel-classification

我有一个包含多个标签的图像数据集;数据集中有100个类,每个图像都有1到5个与之关联的标签。

我正在按照以下网址中的说明操作:

https://github.com/BVLC/caffe/issues/550

它说我需要生成一个文本文件,列出图像及其标签,如

/home/my_test_dir/picture-foo.jpg 0
/home/my_test_dir/picture-foo1.jpg 1

就我而言,由于我有多标签图片,它是否可以简单地添加标签,如下所示?

/home/my_test_dir/picture-foo.jpg 0 2 5
/home/my_test_dir/picture-foo1.jpg 1 4

我觉得它可能不会那么简单,如果我是对的,在什么步骤中我应该如何在设置Caffe的过程中整合数据集的多标签?< / p>

3 个答案:

答案 0 :(得分:21)

我相信Shai的回答不再是最新的。 Caffe supports multi-label/matrix ground truth用于HDF5和LMDB格式。 this github评论中的python片段演示了如何构建多标签LMDB基础事实(有关HDF5格式,请参阅Shai's answer)。 与单标签图像数据集的构造不同,为图像构造lmdb,而为多标签地面实况数据构建第二单独的lmdb。该片段涉及空间多标签基础事实,可用于像素标记图像。

将数据写入lmdb的顺序至关重要。基本事实的顺序必须与图像的顺序相匹配。

诸如SOFTMAX_LOSS,EUCLIDEAN_LOSS,SIGMOID_CROSS_ENTROPY_LOSS之类的丢失层也支持多标签数据。 但是,精度层仍限于单标签数据。您可能需要关注this github issue以跟踪此功能何时添加到Caffe。

答案 1 :(得分:5)

caffe支持多标签。您可以将标签放入n-hot向量中,例如[0,1,1,0,0,1,...]。你需要将标签重新整形为n * k * 1 * 1张量并使用sigmoid cross-entropy或euclidean,而不是softmax(强制sum(输出)= 1)

答案 2 :(得分:3)

AFAIK,当前的Caffe版本不支持具有多标签的图像的lmdb / leveldb数据集。但是,您可以(也可能应该)以HDF5格式准备输入。 Caffe HDF5输入层更灵活,每个输入可以有多个标签 This answer简要介绍了如何为caffe创建HDF5输入。

您必须解决的另一个问题是,您不仅对每张图片的标签感兴趣,而且对每张图片的变化标签数量感兴趣。如何根据标签定义每张图像的损失?可能是您必须编写自己的损失层 有一些支持“忽略标签”的丢失层:也就是说,如果为图像指定了特定的输入标签,则不会计算相应图像的丢失。见,例如, AccuracyLayerSoftmaxWithLossLayer