【Tensorflow object_detection API】使用iou loss训练时出现nan情况

  1. 以SSD来举例,打开"object_detection/meta_architectures/ssd_meta_arch.py", 之后在文档前面加上如下这一行:
from object_detection.core import losses
  1. 替换该文档中损失函数(loss)的如下几行:
if self.groundtruth_has_field(fields.InputDataFields.is_annotated):
  losses_mask = tf.stack(self.groundtruth_lists(
      fields.InputDataFields.is_annotated))

# TODO: start from here to fix the bug!!

if isinstance(self._localization_loss, losses.WeightedIOULocalizationLoss) :
  anchors = self.anchors.get()
  batch_reg_targets, _ = self._batch_decode(batch_reg_targets, anchors)
  predict_decoded, _ = self._batch_decode(prediction_dict['box_encodings'], anchors)
else:
  predict_decoded = prediction_dict['box_encodings']

location_losses = self._localization_loss(
  predict_decoded,
  batch_reg_targets,
  ignore_nan_targets=True,
  weights=batch_reg_weights,
  losses_mask=losses_mask)

参考:tensorflow代码仓问题区解决

猜你喜欢

转载自blog.csdn.net/qq_43348528/article/details/106280469
今日推荐