我正在使用数字检测器并使用tensorflow中的对象检测API。有时预测的边界框不包含整数,然后无法读取。我想更改损失函数,以便在缺少部分数字时更多地惩罚,然后当预测的边界框太大时。
我在 utils / np_box_ops.py 文件中找到了IOU的定义,但在训练期间可能没有使用它。我在哪里可以找到训练期间使用的损失函数的实现?
答案 0 :(得分:1)
首先,请记住,您的数据集和/或您使用的模型/配置可能存在问题,我们无法察觉,因为您没有共享有关这些事情的任何信息。
话虽如此,可用损失函数定义如下:
https://github.com/tensorflow/models/blob/master/research/object_detection/core/losses.py
在配置文件中使用相应的.proto定义:
https://github.com/tensorflow/models/blob/master/research/object_detection/protos/losses.proto
您可能有兴趣尝试WeightedIOULocalizationLoss
。
您还可以尝试在配置文件的丢失部分调整参数localization_weight
:
loss {
classification_loss {
weighted_sigmoid {
}
}
localization_loss {
weighted_smooth_l1 {
}
}
hard_example_miner {
num_hard_examples: 3000
iou_threshold: 0.99
loss_type: CLASSIFICATION
max_negatives_per_positive: 3
min_negatives_per_image: 0
}
classification_weight: 1.0
localization_weight: 1.0
}
而且,作为一个小黑客,您可以尝试通过添加一点偏移来对预测的框进行后期处理。