mIOU 는 각 class별 IOU의 평균값입니다
ground truth라벨을 가지고 있는 매트릭스와, 예측으로 나온 라벨을 가지고 있는 매트릭스로 계산됩니다.

GT 라벨 매트릭스와 pred 라벨 매트릭스에서 각각 클래스별 빈도수를 구해봅니다
‼️ TIP : np.bincount 활용하면 쉽게 구현 가능 - integer형 1차원 array에 대해 bin 개수를 count해준다
gt = np.array([[0, 0, 0, 0],[2, 1, 1, 2],[2, 1, 1, 2],[1, 1, 0, 0]])
pred = np.array([[0, 0, 1, 0],[2, 1, 1, 1],[2, 2, 1, 2],[2, 1, 1, 2]])
gt_bin = np.bincount(np.reshape(gt, gt.shape[0]*gt.shape[1]))
pred_bin = np.bincount(np.reshape(pred, pred.shape[0]*pred.shape[1]))
print(gt_bin)
print(pred_bin)


gt_1d = np.reshape(gt, gt.shape[0]*gt.shape[1])
pred_1d = np.reshape(pred, pred.shape[0]*pred.shape[1])
print(gt_1d, '\\n', pred_1d)

이렇게 하면 (GT픽셀 , pred픽셀) 쌍이 될 수 있는 경우는 3x3=9가지 입니다
| (0,0) | category 0 |
|---|---|
| (0,1) | category 1 |
| (0.2) | category 2 |
| (1,0) | category 3 |
| (1,1) | category 4 |
| (1,2) | category 5 |
| (2,0) | category 6 |
| (2,1) | category 7 |
| (2,2) | category 8 |
category = GT x 3 + pred
ex) 0x3+0=0, 1x3+1=4
cats = gt_1d * 3 + pred_1d
print(cats)

카테고리별로 몇개인지 알아보면
cats_cnt = np.bincount(cats)
print(cats_cnt)
