20

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

我正在按照以下 URL 中的说明进行操作:

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 的过程中,我应该在哪一步以及如何整合数据集的多标签性?

4

3 回答 3

21

我相信 Shai 的答案不再是最新的。 Caffe 支持 HDF5 和 LMDB 格式的多标签/矩阵基本事实github 评论中的 python 片段演示了如何构建多标签 LMDB 基本事实(请参阅Shai对 HDF5 格式的回答)。与单标签图像数据集的构建不同,为图像构建了一个 lmdb,而为多标签地面实况数据构建了第二个单独的 lmdb。该片段处理对图像的像素级标记有用的空间多标签地面实况。

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

SOFTMAX_LOSS、EUCLIDEAN_LOSS、SIGMOID_CROSS_ENTROPY_LOSS等损失层也支持多标签数据。但是,Accuracy 层仍然仅限于单标签数据。您可能希望关注此 github 问题以跟踪何时将此功能添加到 Caffe。

于 2015-09-21T14:28:55.800 回答
5

caffe 支持多标签。您可以将标签放入 n-hot 向量中,例如 [0,1,1,0,0,1,...] 。您需要将标签重塑为 n*k*1*1 张量并使用 sigmoid 交叉熵或欧几里得,而不是 softmax (强制 sum(outputs)=1 )

于 2016-06-18T22:05:04.973 回答
3

AFAIK,当前的 Caffe 版本不支持具有多标签的图像的 lmdb/leveldb 数据集。但是,您可以(并且可能应该)准备 HDF5 格式的输入。Caffe HDF5 输入层更加灵活,并且允许您在每个输入中拥有多个标签。
这个答案简要描述了如何为 caffe 创建 HDF5 输入。

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

于 2015-09-21T05:10:58.450 回答