GeneralizedRCNNResize


GenerlizedRCNN

  • [:, None, None] : Shape [3] -> [3, 1, 1]

  • Numpy中的*运算符表示元素积(element-wise product,对应位置相乘)

    • a = np.array([1,2,3])
    • b = np.array([2,2,2])
    • a * b
    • array([ 2., 4., 6.])
  • 两个矩阵a、b,将它们的维度从后往进行比较,如果所有维度满足以下条件之一才能进行广播。

    • 相等

    • 其中有一个为1


boxes1 # shape[N,4]
boxes2 # shape[M,4]

    lt = torch.max(boxes1[:, None, :2], boxes2[:, :2])  # left-top [N,M,2]
    rb = torch.min(boxes1[:, None, 2:], boxes2[:, 2:])  # right-bottom [N,M,2]
  • 这里把第一个boxes1的第二个维度加一个,变成[N,1,4], 这样遇到第二个boxes就会自动广播为[N,M,4]:把每一行进行了复制M可以看出行,这样boxes1的[:,M,4]每一列都是相同的比如[1,2,3]->[[1,2,3],[1,2,3]]
  • 再次广播,boxes2遇到boxes1,后面两个维度完全一样了,这样就是boxes2变成了[N,M,4],相当于把boxes2整个进行了N次复制
  • 这样boxes1的[:,M,4]其实只是一个box的[xmin,ymin,xmax,ymax]重复M次,本质只有一个坐标
  • boxes2的[0,:,:]相当于原始的boxes2,这样就相当于拿boxes1的第一个box坐标(行)和boxes2的所有坐标进行了对比(计算)

Author: Moule Lin
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Moule Lin !
  TOC