Caffe:具有不同标签数量的多标签图像
我有一个数据集,其中图像有变化标签数量。标签的数量在1到5之间。共有100个类别。Caffe:具有不同标签数量的多标签图像
谷歌搜索后,看起来像HDF5分贝层分贝可以处理多个标签,如下面的URL。
唯一的问题是它假设有一个固定数量的标签。在此之后,我将不得不创造非标类一1×100矩阵,其中,项值为1的标记类,0,如以下定义:
layers {
name: "slice0"
type: SLICE
bottom: "label"
top: "label_matrix"
slice_param {
slice_dim: 1
slice_point: 100
}
}
其中每个图像包含AA标签找像(1,0,0,... 1,... 0,...,0,1),其中矢量大小为100维。
现在,我很抱歉,我的问题变得模糊,但这是一个可行的想法?也就是说,有更好的方法来解决这个问题吗?
我知道你有5种类型的标签并不总是为每个数据点。 5个标签中的1个用于100路分类。正确到目前为止?
我建议总是将所有5个标签写入HDF5,并在标签丢失时使用特殊值。然后,您可以使用missing_value选项跳过为该迭代计算该层的损失。使用它需要将loss_param{ ignore_label = Y }
添加到网络原型文件定义中的损失层,其中Y是标量。
反向传播的错误只会是存在的标签的函数。如果输入X对标签没有有效值,网络仍然会为该标签产生一个估计。但它不会因此而受到惩罚。产生输出对于该迭代中权重如何更新没有任何影响。只有非缺失标签的输出才会产生错误信号和重量梯度。
似乎只有Accuracy和SoftmaxWithLossLayer图层支持missing_values。
每个标签都是1x5矩阵。第一个条目可以用于100路分类(例如[0-99]),条目2:5的标量可以反映其他标签可以采用的值。列的顺序对于数据集中的所有条目都是相同的。缺少的标签由您选择的特殊值标记。这个特殊值必须位于有效标签值之外。这将取决于这些标签所代表的内容。如果标签值-1从不出现,则可以使用它来标记缺少的标签。
您是否建议每张图片的标签可写为[5,10,25,32,91]?关于PO的问题,我只知道将第5,10,25,32和91st的标签向量写为100-dim向量的等价方法,其值为'1',其余为'0'。你可以提供任何参考吗?谢谢! – mintaka
对不起,现在不认为我有参考。您可以将标签向量定义为长二进制代码,并使用sigmoidcrossentropy丢失图层。这将允许标签矢量中的两个类同时打开,或者为每个“类型”的标签定义一个损失层。这样你可以保持标量标签的值,而不必将它们转换成二进制向量并将它们连接起来。 – ypx