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 的标签值,您可以使用它来标记丢失的标签。
我有一个数据集,其中图像有 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 的标签值,您可以使用它来标记丢失的标签。