mmseg计算每张图的iou
2023-04-29 本文已影响0人
JIAWEIJIAWEI
mean_iou函数返回的IoU数组中的nan值通常表示该类别在预测结果和标签图像中都没有出现。这意味着该类别的交集和并集都为0,因此无法计算IoU。可以忽略这些nan值,只关注有效的IoU值。
需要指定类别数(num_classes)和忽略的类别(ignore_index),如ADE20K数据集num_classes=150,ignore_index=255。gt_semantic_seg =gt_semantic_seg -1
img = mmcv.imread(img,'color')
result = inference_segmentor(model, img)
gt_semantic_seg = mmcv.imread('gt_semantic_seg.png', 'unchanged')
单张图iou
from mmseg.apis import inference_segmentor, init_segmentor
import mmcv
from mmseg.core.evaluation import mean_iou
import numpy as np
num_classes=150
ignore_index=255
img='img.jpg'
gt_semantic_seg = 'label.png'
config_file = 'pspnet_r50-d8_512x1024_40k_cityscapes.py'
checkpoint_file = 'pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth'
model = init_segmentor(config_file, checkpoint_file, device='cuda:0')
img = mmcv.imread(img, 'color')
result = inference_segmentor(model, img)
gt_semantic_seg = mmcv.imread(gt_semantic_seg, 'unchanged')
gt_semantic_seg = gt_semantic_seg - 1
iou = mean_iou(result[0], gt_semantic_seg, num_classes, ignore_index)
mIoU = np.nanmean(iou['IoU'])
print(f'Image mIoU={mIoU}')
批量计算iou并写入文件
from mmseg.apis import inference_segmentor, init_segmentor
import mmcv
from mmseg.core.evaluation import mean_iou
import numpy as np
import os
num_classes=150
ignore_index=255
config_file = 'pspnet_r50-d8_512x1024_40k_cityscapes.py'
checkpoint_file = 'pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth'
mainFolder = "/images/validation/"
labelFolder = "/annotations/validation/"
outFolders = "/result/label/"
myFolders = os.listdir(mainFolder)
all_mIoU = list()
model = init_segmentor(config_file, checkpoint_file, device='cuda:0')
for folder in myFolders:
img_path = mainFolder + '/' + folder
label_path= labelFolder + folder.replace('.jpg', '.png')
img = mmcv.imread(img_path, 'color')
label= mmcv.imread(label_path, 'unchanged') - 1
result = inference_segmentor(model, img)
model.show_result(img, result, out_file=outFolders + folder.replace('.jpg', '.png'), opacity=1)
iou = mean_iou(result[0], label, num_classes, ignore_index)
mIoU = round(np.nanmean(iou['IoU'])*100, 2)
all_mIoU.append(mIoU)
with open(outFolders + 'miou.txt', 'a') as f:
print(f'{folder} {mIoU}', file=f)
print(f'all mIoU={np.mean(all_mIoU)}')