Измените функцию потерь, чтобы всегда содержать весь объект в API обнаружения объектов tensorflow

Я работаю над детектором чисел и использую API обнаружения объектов из tensorflow. Иногда прогнозируемая ограничивающая рамка не содержит целого числа, которое тогда не может быть прочитано. Я хотел бы изменить функцию потерь, чтобы наказывать гораздо больше, когда отсутствует часть числа, а не тогда, когда прогнозируемая ограничивающая рамка слишком велика.

Я нашел определение долгового обязательства в файле utils / np_box_ops.py, но, вероятно, оно не используется во время обучения. Где я могу найти реализацию функции потерь, используемую во время обучения?


person Dominik Brno    schedule 06.04.2018    source источник


Ответы (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
}

И, как небольшой прием, вы можете попробовать обработать предсказанные блоки, добавив небольшое смещение.

person David de la Iglesia    schedule 07.04.2018
comment
Спасибо за ваш ответ. Я использую модель, так как она дает лучшую производительность. Я думаю, что он не поддерживает другую функцию потерь, чем WeightedSmoothL1LocalizationLoss. Я не могу понять, как это работает. В частности, я не понимаю формат prediction_tensor и target_tensor. I Когда я распечатываю его, я получаю: prediction [[[0.157295913 1.6302464 -2.796139 -3.47752237][2.89026403 1.98689461 -2.25848556 -0.561769187][1.54640901 2.... 4-х кортежи могут быть ограничивающими рамками, но я не понимаю отрицательных значений. - person Dominik Brno; 09.04.2018