Я попытался реализовать функцию потерь в модели mask-RCNN , используя инструмент Tensorflow .Я использовал средняя сигмоидальная перекрестная энтропия функция потерь ::
loss_mask = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits( labels=y_true, logits=y_pred))
ветвь маски , используемая для задачи классификации объектов.Они использовали сигмоидальную плотную классификацию пикселей для каждого RoI (карта объекта).Форма выходных логитов равна [batch_size num_roi, m, m, k] , где m m - маска (RoImap) разрешение и k - количество классов.
Я запутался с формой метки и логитов в функции loss .Приведенный ниже абзац взят из Mask-Rcnn paper , и это меня смущает.
Ветвь маски имеет K (m * m) размерный выход для каждого RoI, который кодируетK двоичных масок разрешения m × m, по одной для каждого из K классов.Для этого мы применяем сигмоид на пиксель и определяем Loss_mask как среднюю двоичную кросс-энтропийную потерю.Для RoI, связанного с классом истинности земли, Loss_mask определяется только для k-й маски (другие выходные данные маски не вносят свой вклад в потерю).Наше определение Loss_mask позволяет сети генерировать маски для каждого класса без конкуренции между классами;мы полагаемся на специальную ветвь классификации, чтобы предсказать метку класса, используемую для выбора выходной маски
Я не понимаю, что они означают для
Для RoI, связанного с землей-Правда класса k, Loss_mask определяется только для k-й маски (другие выходы маски не способствуют потере).
Что я должен изменить в logits и метки перед введением их в функцию потерь , чтобы моя реализация была правильной?
Другими словами, logits и метки в функции потери - маска всего изображения с каналом k ( [batch_size, img_height, img_width, k] ).я должен объединить RoI logits того же изображения в одну маску?