code: def maskrcnn_loss(mask_logits, fg_labels, fg_target_masks):
      
      num_fg = tf.size(fg_labels, out_type=tf.int64)
      indices = tf.stack([tf.range(num_fg), fg_labels - 1], axis=1)  # #fgx2
      mask_logits = tf.gather_nd(mask_logits, indices)  # #fgxhxw
      mask_probs = tf.sigmoid(mask_logits)
  
      # add some training visualizations to tensorboard
      with tf.name_scope('mask_viz'):
          viz = tf.concat([fg_target_masks, mask_probs], axis=1)
          viz = tf.expand_dims(viz, 3)
          viz = tf.cast(viz * 255, tf.uint8, name='viz')
          tf.summary.image('mask_truth|pred', viz, max_outputs=10)
  
      loss = tf.nn.sigmoid_cross_entropy_with_logits(
          labels=fg_target_masks, logits=mask_logits)
      loss = tf.reduce_mean(loss, name='maskrcnn_loss')
  
      pred_label = mask_probs > 0.5
      truth_label = fg_target_masks > 0.5
      accuracy = tf.reduce_mean(
          tf.cast(tf.equal(pred_label, truth_label), tf.float32),
          name='accuracy')
      pos_accuracy = tf.logical_and(
          tf.equal(pred_label, truth_label),
          tf.equal(truth_label, True))
      pos_accuracy = tf.reduce_mean(tf.cast(pos_accuracy, tf.float32), name='pos_accuracy')
      fg_pixel_ratio = tf.reduce_mean(tf.cast(truth_label, tf.float32), name='fg_pixel_ratio')
  
      add_moving_summary(loss, accuracy, fg_pixel_ratio, pos_accuracy)
      return loss
docs: Args:
          mask_logits: #fg x #category xhxw
          fg_labels: #fg, in 1~#class, int64
          fg_target_masks: #fgxhxw, float32