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:具有不同数量标签的多标签图像的主要内容,如果未能解决你的问题,请参考以下文章