在尝试使用PyTorch实施Faster RCNN时,我遇到了很棒的指南here,并且对IoU计算阶段之后发生的操作感到困惑。 我知道可以将正标签分配给锚,其IoU:
,对于IoU小于0.3的锚点为负。其余的不在乎。 有人可以解释下一节中发生的情况吗?
考虑a和b的情况,我们需要在这里找到两件事
- 每个gt_box及其对应的锚定框的最高iou
- 每个锚定框及其对应的地面真相框的最高iou
案例1
gt_argmax_ious = ious.argmax(axis=0) print(gt_argmax_ious) gt_max_ious = ious[gt_argmax_ious, np.arange(ious.shape[1])] print(gt_max_ious) # Out: # [2262 5620] # [0.68130493 0.61035156]
案例2
argmax_ious = iou.argmax(axis=1) print(argmax_ious.shape) print(argmax_ious) max_ious = ious[np.arange(len(inside_index)), argmax_ious] print(max_ious) # Out: # (22500,) # [0, 1, 0, ..., 1, 0, 0] # [0.06811669 0.07083762 0.07083762 ... 0. 0. 0.]
找到具有此max_ious(gt_max_ious)的anchor_boxes
gt_argmax_ious = np.where(ious == gt_max_ious)[0] print(gt_argmax_ious) # Out: # [2262, 2508, 5620, 5628, 5636, 5644, 5866, 5874, 5882, 5890, 6112, # 6120, 6128, 6136, 6358, 6366, 6374, 6382]
现在我们有三个数组
argmax_ious
-告诉哪个地面真理对象的每个锚点都具有最大iou。max_ious
-用每个锚点将max_iou
告知地面真理对象。gt_argmax_ious
-告诉具有最高交叉点(IoU)重叠的锚点与地面真实框。使用
argmax_ious
和max_ious
,我们可以为满足[b]和[c]的锚框分配标签和位置。使用gt_argmax_ious
,我们可以为满足[a]的锚框分配标签和位置。