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

Caffe: Multi-Label Images with Varying Number of Labels

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

google了一下,貌似HDF5 db with slice layer可以处理多个标签,如下图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 维。

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

我了解到您有 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 的标签值,您可以使用它来标记丢失的标签。