我在微调SSD对象检测器,使用TensorFlow object detection API上的Open Images dataset。我的培训数据包含不平衡的课程,例如
我想在分类损失中添加类权重以提高性能。我该怎么做?配置文件的以下部分似乎与此相关:
loss {
classification_loss {
weighted_sigmoid {
}
}
localization_loss {
weighted_smooth_l1 {
}
}
...
classification_weight: 1.0
localization_weight: 1.0
}
如何更改配置文件以添加每个类的分类损失权重?如果不是通过配置文件,推荐的方法是什么?在
对象检测API丢失的定义如下:https://github.com/tensorflow/models/blob/master/research/object_detection/core/losses.py
具体而言,已实施以下损失类别:
分类损失:
本地化损失:
权重参数用于平衡锚(先前的框),除了硬负挖掘之外,其大小为
[batch_size, num_anchors]
。或者,focal loss向下权衡分类良好的示例,并将重点放在硬示例上。在主类不平衡是由于更多的负示例(没有感兴趣对象的边界框)而不是很少的正面示例(带有对象类的边界框)。这似乎就是为什么正例子中的类不平衡(即正类标签的不均匀分布)没有作为对象检测损失的一部分实现的原因。在
API希望每个对象(bbox)的权重直接位于注释文件中。由于这一要求,使用类权重的解决方案似乎是:
1)如果您有一个自定义数据集,您可以修改每个对象(bbox)的注释,以将权重字段包含为“object/weight”。在
2)如果您不想修改注释,您可以只重新创建tf_records文件,以便包含bboxes的权重。在
3)修改API的代码(我觉得很棘手)
我决定使用#2,所以我把代码放在这里,为一个自定义数据集生成这样的加权tf记录文件,该数据集有两个类(“top”,“dress”),权重(1.0,0.1),给定一个xml注释的文件夹,如下所示:
如果您有其他类型的注释,代码将非常相似,但不幸的是,这一个将不起作用。在
相关问题 更多 >
编程相关推荐