- 以SSD来举例,打开"object_detection/meta_architectures/ssd_meta_arch.py", 之后在文档前面加上如下这一行:
from object_detection.core import losses
- 替换该文档中损失函数(loss)的如下几行:
if self.groundtruth_has_field(fields.InputDataFields.is_annotated):
losses_mask = tf.stack(self.groundtruth_lists(
fields.InputDataFields.is_annotated))
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代码仓问题区解决