【问题标题】:Caffe: Multi-Label Images with Varying Number of LabelsCaffe:具有不同数量标签的多标签图像
【发布时间】: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 维。

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

【问题讨论】:

    标签: computer-vision neural-network hdf5 deep-learning caffe


    【解决方案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 损失层。这将允许标签向量中的两个类同时打开,或者您为每个“类型”标签定义一个损失层。这样您就可以保留标量标签值,而不必将它们展开成二进制向量并将它们连接起来。
    猜你喜欢
    • 2019-03-25
    • 2016-02-14
    • 2023-03-16
    • 2021-03-04
    • 1970-01-01
    • 2018-05-17
    • 2015-07-21
    • 2019-04-02
    • 1970-01-01
    相关资源
    最近更新 更多