62 lines
3.1 KiB
Python
62 lines
3.1 KiB
Python
|
import os
|
|||
|
|
|||
|
from PIL import Image
|
|||
|
from tqdm import tqdm
|
|||
|
|
|||
|
from deeplab import DeeplabV3
|
|||
|
from utils.utils_metrics import compute_mIoU, show_results
|
|||
|
|
|||
|
'''
|
|||
|
进行指标评估需要注意以下几点:
|
|||
|
1、该文件生成的图为灰度图,因为值比较小,按照PNG形式的图看是没有显示效果的,所以看到近似全黑的图是正常的。
|
|||
|
2、该文件计算的是验证集的miou,当前该库将测试集当作验证集使用,不单独划分测试集
|
|||
|
'''
|
|||
|
if __name__ == "__main__":
|
|||
|
#---------------------------------------------------------------------------#
|
|||
|
# miou_mode用于指定该文件运行时计算的内容
|
|||
|
# miou_mode为0代表整个miou计算流程,包括获得预测结果、计算miou。
|
|||
|
# miou_mode为1代表仅仅获得预测结果。
|
|||
|
# miou_mode为2代表仅仅计算miou。
|
|||
|
#---------------------------------------------------------------------------#
|
|||
|
miou_mode = 0
|
|||
|
#------------------------------#
|
|||
|
# 分类个数+1、如2+1
|
|||
|
#------------------------------#
|
|||
|
num_classes = 47
|
|||
|
#--------------------------------------------#
|
|||
|
# 区分的种类,和json_to_dataset里面的一样
|
|||
|
#--------------------------------------------#
|
|||
|
name_classes = ["_background_", "pl5", "pl20", "pl30", "pl40", "pl50", "pl60", "pl70", "pl80", "pl100", "pl120", "pm20", "pm55","pr40","p11", "pn", "pne", "p26", "i2", "i4", "i5", "ip", "il60", "il80", "il100", "p5", "p10", "p23", "p3", "pg", "p19", "p12", "p6", "p27", "ph4", "ph4.5", "ph5", "pm30", "w55", "w59", "w13", "w57", "w32", "wo", "io", "po", "indicative"]
|
|||
|
# name_classes = ["_background_","cat","dog"]
|
|||
|
#-------------------------------------------------------#
|
|||
|
# 指向VOC数据集所在的文件夹
|
|||
|
# 默认指向根目录下的VOC数据集
|
|||
|
#-------------------------------------------------------#
|
|||
|
VOCdevkit_path = 'VOCdevkit'
|
|||
|
|
|||
|
image_ids = open(os.path.join(VOCdevkit_path, "VOC2007/ImageSets/Segmentation/val.txt"),'r').read().splitlines()
|
|||
|
gt_dir = os.path.join(VOCdevkit_path, "VOC2007/SegmentationClass/")
|
|||
|
miou_out_path = "miou_out"
|
|||
|
pred_dir = os.path.join(miou_out_path, 'detection-results')
|
|||
|
|
|||
|
if miou_mode == 0 or miou_mode == 1:
|
|||
|
if not os.path.exists(pred_dir):
|
|||
|
os.makedirs(pred_dir)
|
|||
|
|
|||
|
print("Load model.")
|
|||
|
deeplab = DeeplabV3()
|
|||
|
print("Load model done.")
|
|||
|
|
|||
|
print("Get predict result.")
|
|||
|
for image_id in tqdm(image_ids):
|
|||
|
image_path = os.path.join(VOCdevkit_path, "VOC2007/JPEGImages/"+image_id+".jpg")
|
|||
|
image = Image.open(image_path)
|
|||
|
image = deeplab.get_miou_png(image)
|
|||
|
image.save(os.path.join(pred_dir, image_id + ".png"))
|
|||
|
print("Get predict result done.")
|
|||
|
|
|||
|
if miou_mode == 0 or miou_mode == 2:
|
|||
|
print("Get miou.")
|
|||
|
hist, IoUs, PA_Recall, Precision = compute_mIoU(gt_dir, pred_dir, image_ids, num_classes, name_classes) # 执行计算mIoU的函数
|
|||
|
print("Get miou done.")
|
|||
|
show_results(miou_out_path, hist, IoUs, PA_Recall, Precision, name_classes)
|