fast-rcnn部分对于fast_rcnn_loss的实现,首先通过
minibatch_indices,minibatch_reference_boxes_mattached_gtboxes, minibatch_object_mask,
minibatch_label_one_hot = self.fast_rcnn_minibatch(self.fast_rcnn_all_level_proposals)获取mini-batch的信息,在fast_rcnn_minibatch的代码实现中,第一步需要reference_boxes_mattached_gtboxes, object_mask, label = \ self.fast_rcnn_find_positive_negative_samples(reference_boxes)找到正负样本。
进入fast_rcnn_find_positive_negative_samples函数中,首先在gtboxes_and_label中获取gt_box的数据,有M个gt_box,iou计算得到一个NM的iou矩阵,N为reference(也即上阶段rpn proposals)的数目。
matches为每一行iou最大值的索引,即该proposal与gtboxes中iou最大的那个gtbox的编号;【N, 】
max_iou_each_row为对应的那个iou的值;【N,】
positives为max_iou_each_row中iou达到阈值的那些;达到为1,反之为0;【N,】
reference_boxes_mattached_gtboxes为每个proposal(reference)对应的(iou最大)的gtbox,包括positive和其他的;【N,】
object_mask与positive类似,数值类型为tfl.float32;
label为所有proposal在标签中获取的标记类别,通过match,也即选与之iou最大那个框的类别;最后乘以positives,表示标签中过滤掉iou小于阈值的gtbox类别。【N,】
------------------------------------------
执行完正负标签的获取后回到fast_rcnn_minibatch中: positive_indices为proposals中positive样本的索引(第**号proposal为正例);
num_of_positives为正例推荐框(参考框)的数量;
positive_proposals当然就是rpn proposals中通过positives筛选的正例推荐框;positive_rois同理;
negative_indices为object_mask中为0的部分;也即reference(rpn proposals)中除了满足阈值的positive外,其他框为negatives;
minibatch_indices包括positive和negative的indices;
…
回到fast rcnn的loss主函数中 minibatch_reference_boxes为从proposal中按照打算的minibatch_indices重新获取proposals;
minibatch_encode_boxes为从fast rcnn网络输出结果中按照minibatch_indices获取的网络计算结果;【minibatch_size, num_classes4】,minibatch_scores同理;
minibatch_encode_gtboxes为对minibatch_reference_boxes_mattached_gtboxes进行编码,转化为其与reference之间的相对差值;
fast rcnn的分类损失为网络计算的minibatch_scores与proposal–gtbox对比的labels之间的差异;
fast rcnn的回归损失为网络计算的minibatch_encode_boxes与proposal–gtbox对比的gtbox的差异。
fast rcnn location loss 在训练之初为0,是因为没有正例样本。