带有多标签图像的咖啡

caffe with multi-label images

我有一个包含多个标签的图像数据集;数据集中有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的过程中应该在哪一步以及如何集成数据集的多标签性?

A​​FAIK,当前 Caffe 版本不支持 lmdb/leveldb 多标签图像数据集。但是,您可以(并且可能应该)以 HDF5 格式准备您的输入。 Caffe HDF5 输入层更加灵活,允许每个输入有多个标签。
简要说明如何为 caffe 创建 HDF5 输入。

您必须解决的另一个问题是,您不仅对每个图像的 multi-label 感兴趣,而且对 varying 感兴趣每张图片的标签数量。你如何定义每张图片、每张标签的损失?这可能是您必须编写自己的损失层的情况。
有一些损失层支持 "ignore label":也就是说,如果将特定输入标签分配给图像,则不会为相应图像计算损失。看,例如AccuracyLayer and SoftmaxWithLossLayer.

我相信 Shai 的回答不再是最新的。 Caffe supports multi-label/matrix ground truth 适用于 HDF5 和 LMDB 格式。 HDF5 格式 this github comment demonstrates how to construct multi-label LMDB ground truth (see 中的 python 片段)。 与单标签图像数据集的构建不同,lmdb 是为图像构建的,而第二个单独的 lmdb 是为多标签地面实况数据构建的。该片段处理空间多标签地面实况,可用于图像的像素级标记。

数据写入 lmdb 的顺序至关重要。 ground truth 的顺序必须与图像的顺序一致。

SOFTMAX_LOSS、EUCLIDEAN_LOSS、SIGMOID_CROSS_ENTROPY_LOSS等损失层也支持多标签数据。 但是,准确性层仍然仅限于单标签数据。您可能需要关注 this github issue 以了解何时将此功能添加到 Caffe。

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