0. 简介
anchor_head中的get_bboxes如何将score变成bboxes。
1. get_bboxes
assert len(cls_scores) == len(bbox_preds)
num_levels = len(cls_scores)
mlvl_anchors = [
self.anchor_generators[i].grid_anchors(cls_scores[i].size()[-2:],
self.anchor_strides[i])
for i in range(num_levels)
]
首先生成anchor,存进mlvl_anchors,每个level一个M * 4的Tensor,左上角右下角表示,左上右下是缩放后图片中的左上右下。
之后使用get_bboxes_single处理每一张图片
对于每个level,取出cls_score(720xHxW),bbox_pred(36xHxW),anchor(Mx4)
- 将score和pred拉直成Mx80、Mx4的Tensor,与anchor一致。
- 使用sigmoid或者softmax将cls_score转化成scores
- nms_pre=1000表示进行nms的个数
- 取得每个anchor的score,存为max_score(Mx1)
- 使用topk获得前1000个用来进行nms
- anchor、pred、score均取前1000个
- 使用delta2bbox将这1000个pred转化成bboxes
- bboxes放入mlvl_bboxes中,scores放入mlvl_scores中
之后:
- 将mlvl_bboxes(M(筛选过后)x4)、mlvl_scores中的各level合并
- rescale=TRUE =》 mlvl_bboxes回归到原图的尺寸
- use_sigmoid_cls = TRUE =》 mlvl_scores的每个元素第一维padding0,表示背景
将结果送入multiclass_nms进行nms,获得100个点,获得
det_bboxes(100x5), det_labels(100)。