带有多标签图像的咖啡
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的过程中应该在哪一步以及如何集成数据集的多标签性?
AFAIK,当前 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 )
我有一个包含多个标签的图像数据集;数据集中有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的过程中应该在哪一步以及如何集成数据集的多标签性?
AFAIK,当前 Caffe 版本不支持 lmdb/leveldb 多标签图像数据集。但是,您可以(并且可能应该)以 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
数据写入 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 )