FasterRCNN源码解析(九)——FastRCNN正负样本划分及采样
文章目录
对应框架图中的这个部分
select_training_samples
主要是针对FasterRCNN源码解析(八)——ROIheads部分roi_head正向传播过程中第一步self.select_training_samples(proposals, targets)
进行一个详解,如何对proposal划分正负样本,统计对应gt的标签以及边界框回归信息
proposals, matched_idxs, labels, regression_targets = self.select_training_samples(proposals, targets)
def select_training_samples(self,
proposals, # type: List[Tensor]
targets # type: Optional[List[Dict[str, Tensor]]]
):
# type: (...) -> Tuple[List[Tensor], List[Tensor], List[Tensor], List[Tensor]]
"""
划分正负样本,统计对应gt的标签以及边界框回归信息
list元素个数为batch_size
Args:
proposals: rpn预测的boxes
targets:
Returns:
"""
# 检查target数据是否为空
self.check_targets(targets)
assert targets is not None
dtype = proposals[0].dtype
device = proposals[0].device
# 获取标注好的boxes 以及 labels 信息
gt_boxes = [t["boxes"].to(dtype) for t in targets]
gt_labels = [t["labels"] for t in targets]
# append ground-truth bboxes to proposal
# 将gt_boxes拼接到proposal后面
proposals = self.add_gt_proposals(proposals