更改损失函数始终包含tensorflow对象检测API中的整个对象

时间:2018-04-06 11:27:11

标签: tensorflow object-detection object-detection-api

我正在使用数字检测器并使用tensorflow中的对象检测API。有时预测的边界框不包含整数,然后无法读取。我想更改损失函数,以便在缺少部分数字时更多地惩罚,然后当预测的边界框太大时。

我在 utils / np_box_ops.py 文件中找到了IOU的定义,但在训练期间可能没有使用它。我在哪里可以找到训练期间使用的损失函数的实现?

1 个答案:

答案 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
}

而且,作为一个小黑客,您可以尝试通过添加一点偏移来对预测的框进行后期处理。