美文网首页
mmseg计算每张图的iou

mmseg计算每张图的iou

作者: JIAWEIJIAWEI | 来源:发表于2023-04-29 20:13 被阅读0次

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)}')

相关文章

网友评论

      本文标题:mmseg计算每张图的iou

      本文链接:https://www.haomeiwen.com/subject/rnmgjdtx.html