Caffe:具有不同数量标签的多标签图像

Posted

技术标签:

【中文标题】Caffe:具有不同数量标签的多标签图像【英文标题】:Caffe: Multi-Label Images with Varying Number of Labels 【发布时间】:2015-12-23 08:09:06 【问题描述】:

我有一个数据集,其中图像有 VARYING 个标签。标签的数量在 1 到 5 之间。有 100 个类。

谷歌搜索后,似乎带有切片层的 HDF5 db 可以处理多个标签,如下面的URL。

唯一的问题是它假设标签数量是固定的。在此之后,我必须创建一个 1x100 矩阵,其中标记类的条目值为 1,非标记类的条目值为 0,如以下定义所示:

layers 
  name: "slice0"
  type: SLICE
  bottom: "label"
  top: "label_matrix"
  slice_param 
      slice_dim: 1
      slice_point: 100
  

其中每个图像都包含一个看起来像 (1,0,0,...1,...0,....,0,1) 的标签,其中矢量大小为 100 维。

现在,我很抱歉我的问题变得含糊不清,但这是一个可行的想法吗?即,有没有更好的方法来解决这个问题?

【问题讨论】:

【参考方案1】:

我知道您有 5 种类型的标签,这些标签并不总是出现在每个数据点上。 5 个标签中的 1 个用于 100 路分类。到目前为止正确吗?

我建议始终将所有 5 个标签写入 HDF5,并在标签丢失时使用特殊值。然后,您可以使用missing_value 选项跳过为该迭代计算该层的损失。使用它需要将 loss_param ignore_label = Y 添加到网络 prototxt 定义中的损失层,其中 Y 是标量。

反向传播的错误只是存在标签的函数。如果输入 X 没有标签的有效值,网络仍会产生该标签的估计值。但它不会因此受到惩罚。生成的输出对在该迭代中如何更新权重没有任何影响。只有非缺失标签的输出才会影响误差信号和权重梯度。

似乎只有 Accuracy 和 SoftmaxWithLossLayer 层支持missing_values。

每个标签都是一个 1x5 矩阵。第一个条目可以用于 100 路分类(例如 [0-99]),条目 2:5 具有反映其他标签可以采用的值的标量。对于数据集中的所有条目,列的顺序是相同的。缺少的标签由您选择的特殊值标记。此特殊值必须位于有效标签值集之外。这将取决于这些标签代表什么。如果标签值 -1 从未出现,您可以使用它来标记缺失的标签。

【讨论】:

您是否建议每张图片的标签可以写为 [5, 10, 25, 32, 91]?关于 PO 的问题,我只知道将标签向量编写为 100 维向量的等效方式,其第 5、第 10、第 25、第 32 和第 91 为1,其余为0。您可以提供任何参考资料吗?谢谢! 抱歉,我目前没有参考资料。您可以将标签向量定义为长二进制代码并使用 sigmoidcrossentropy 损失层。这将允许标签向量中的两个类同时打开,或者您为每个“类型”标签定义一个损失层。这样您就可以保留标量标签值,而不必将它们展开成二进制向量并将它们连接起来。

以上是关于Caffe:具有不同数量标签的多标签图像的主要内容,如果未能解决你的问题,请参考以下文章

TensorFlow中具有稀疏标签的多标签图像分类?

Keras中具有二进制分类的多标签

Keras 中具有类权重的多标签分类

caffe读取多标签的lmdb数据

Keras CNN:图像的多标签分类

使用 PyTorch 的多标签、多类图像分类器 (ConvNet)