我以為只有box能計算iou值,但我看了maskrcnn后,發現該模型對mask進行了iou的計算,該方法巧妙之處在於
mask1與mask2必須有相同的height and width,而后在同一個位置的值累加,即交叉面積,而后將mask1與mask2
所有值累加為並集,而后計算類似於box的iou計算了。
然而,我為了簡化,將變量a看作mask,並將mask1與mask2均等於a,以下是詳細代碼:
import numpy as np
a=np.array([[1,0,1,0,1,1],[1,0,1,0,1,0]])
print(a > .5)
masks = np.reshape(a > .5, (-1, 1)).astype(np.float32) # flatten two dimension,but line only one
print('masks=',masks)
area1 = np.sum(masks, axis=0) # 計算mask_面積
print('mask_area1=',area1)
mask_intersections = np.dot(masks.T, masks)
print('mask_intersections=',mask_intersections)
union = area1[:, None]+area1[None,:]-mask_intersections
print(union)
iou_mask=union/mask_intersections
print('iou_mask=',iou_mask)
結果如下: