I used the original data you provided, 81.5 and 83.1.
![image](https://private-user-images.githubusercontent.com/118873316/259002803-d0de7b69-175a-4ad5-ac71-1efba26beade.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk1NzE5MzUsIm5iZiI6MTcxOTU3MTYzNSwicGF0aCI6Ii8xMTg4NzMzMTYvMjU5MDAyODAzLWQwZGU3YjY5LTE3NWEtNGFkNS1hYzcxLTFlZmJhMjZiZWFkZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNjI4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDYyOFQxMDQ3MTVaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00N2UzMzRiNjMxMjE0ZjRjMDI4MGJhOGQzZTk1OTU5NGNiNGY3ZGFjYmM3OTEwMTJjMTcyYmMyY2ZlYjQ0MGNhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.r2Y-s1XSrw-qMSFYGghPJgbNsd2dJdS_hxbVPC6kghA)
About STCN, I used the original data you provided, 83.3(computed with official model without top-k) and 85.3.
![image](https://private-user-images.githubusercontent.com/118873316/259003406-3722cfbe-13d9-4f38-82da-4ad7122abfae.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk1NzE5MzUsIm5iZiI6MTcxOTU3MTYzNSwicGF0aCI6Ii8xMTg4NzMzMTYvMjU5MDAzNDA2LTM3MjJjZmJlLTEzZDktNGYzOC04MmRhLTRhZDcxMjJhYmZhZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNjI4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDYyOFQxMDQ3MTVaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03YTI0YWZhNDEyNWM1MzdjMjhkNzMxOWUzMjBmYjc2MzlhZTFjMGUwYjUyYTkzZWNjYjIyZDliMmEzMDE4MWI2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.H5mmSwq_UDAr8ziJTBFiMcPHGvZWSa53e_zQB_XYsEk)
![image](https://private-user-images.githubusercontent.com/118873316/259003588-4fe3aa96-a133-4d32-9a88-ff40612a006d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk1NzE5MzUsIm5iZiI6MTcxOTU3MTYzNSwicGF0aCI6Ii8xMTg4NzMzMTYvMjU5MDAzNTg4LTRmZTNhYTk2LWExMzMtNGQzMi05YTg4LWZmNDA2MTJhMDA2ZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNjI4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDYyOFQxMDQ3MTVaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zYmRiZDY2Njg5MzMyN2QyMzk5YzUwYzhlMTQ3YWEwNzg3ZGNjOThmYzFiZmMyMTg2NmU1OTczNGYxZDc3MjI1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.FrtFYap6NibvSEGxZvzIZ1xUKQUX37xMnBu8kCCcRF8)
def calculate_iou(pred_mask, true_mask, class_id):
pred_class = (pred_mask == class_id)
true_class = (true_mask == class_id)
intersection = np.logical_and(pred_class, true_class)
union = np.logical_or(pred_class, true_class)
iou = (np.sum(intersection) + 1e-6) / (np.sum(union) + 1e-6)
return iou
def calculate_miou(pred_dir, gt_dir):
pred_images = [Image.open(path) for path in pred_dir]
gt_images = [Image.open(path) for path in gt_dir]
num_classes = np.max(np.array(pred_images[0])) + 1 # Assuming class labels start from 0
class_ious = np.zeros(num_classes)
for class_id in range(num_classes):
class_iou_sum = 0
class_pixel_count = 0
for i in range(len(pred_images)):
pred_mask = np.array(pred_images[i])
true_mask = np.array(gt_images[i])
class_iou = calculate_iou(pred_mask, true_mask, class_id)
class_iou_sum += class_iou
class_pixel_count += np.sum(true_mask == class_id)
class_ious[class_id] = class_iou_sum / len(pred_images)
mean_iou = np.mean(class_ious)
return mean_iou, class_ious