my-cool-model / run /Eval.py
crapthings's picture
Upload folder using huggingface_hub
f7f604d
raw
history blame
4.51 kB
import os
import sys
import tqdm
import pandas as pd
import numpy as np
from PIL import Image
filepath = os.path.split(os.path.abspath(__file__))[0]
repopath = os.path.split(filepath)[0]
sys.path.append(repopath)
from utils.eval_functions import *
from utils.misc import *
BETA = 1.0
def evaluate(opt, args):
if os.path.isdir(opt.Eval.result_path) is False:
os.makedirs(opt.Eval.result_path)
method = os.path.split(opt.Eval.pred_root)[-1]
if args.verbose is True:
print('#' * 20, 'Start Evaluation', '#' * 20)
datasets = tqdm.tqdm(opt.Eval.datasets, desc='Expr - ' + method, total=len(
opt.Eval.datasets), position=0, bar_format='{desc:<30}{percentage:3.0f}%|{bar:50}{r_bar}')
else:
datasets = opt.Eval.datasets
results = []
for dataset in datasets:
pred_root = os.path.join(opt.Eval.pred_root, dataset)
gt_root = os.path.join(opt.Eval.gt_root, dataset, 'masks')
preds = os.listdir(pred_root)
gts = os.listdir(gt_root)
preds = sort(preds)
gts = sort(gts)
preds = [i for i in preds if i in gts]
gts = [i for i in gts if i in preds]
FM = Fmeasure()
WFM = WeightedFmeasure()
SM = Smeasure()
EM = Emeasure()
MAE = Mae()
MSE = Mse()
MBA = BoundaryAccuracy()
IOU = IoU()
BIOU = BIoU()
TIOU = TIoU()
if args.verbose is True:
samples = tqdm.tqdm(enumerate(zip(preds, gts)), desc=dataset + ' - Evaluation', total=len(
preds), position=1, leave=False, bar_format='{desc:<30}{percentage:3.0f}%|{bar:50}{r_bar}')
else:
samples = enumerate(zip(preds, gts))
for i, sample in samples:
pred, gt = sample
pred_mask = np.array(Image.open(os.path.join(pred_root, pred)).convert('L'))
gt_mask = np.array(Image.open(os.path.join(gt_root, gt)).convert('L'))
if len(pred_mask.shape) != 2:
pred_mask = pred_mask[:, :, 0]
if len(gt_mask.shape) != 2:
gt_mask = gt_mask[:, :, 0]
assert pred_mask.shape == gt_mask.shape, print(pred, 'does not match the size of', gt)
# print(gt_mask.max())
FM.step( pred=pred_mask, gt=gt_mask)
WFM.step(pred=pred_mask, gt=gt_mask)
SM.step( pred=pred_mask, gt=gt_mask)
EM.step( pred=pred_mask, gt=gt_mask)
MAE.step(pred=pred_mask, gt=gt_mask)
MSE.step(pred=pred_mask, gt=gt_mask)
MBA.step(pred=pred_mask, gt=gt_mask)
IOU.step(pred=pred_mask, gt=gt_mask)
BIOU.step(pred=pred_mask, gt=gt_mask)
TIOU.step(pred=pred_mask, gt=gt_mask)
result = []
Sm = SM.get_results()["sm"]
wFm = WFM.get_results()["wfm"]
mae = MAE.get_results()["mae"]
mse = MSE.get_results()["mse"]
mBA = MBA.get_results()["mba"]
Fm = FM.get_results()["fm"]
Em = EM.get_results()["em"]
Iou = IOU.get_results()["iou"]
BIou = BIOU.get_results()["biou"]
TIou = TIOU.get_results()["tiou"]
adpEm = Em["adp"]
avgEm = Em["curve"].mean()
maxEm = Em["curve"].max()
adpFm = Fm["adp"]
avgFm = Fm["curve"].mean()
maxFm = Fm["curve"].max()
avgIou = Iou["curve"].mean()
maxIou = Iou["curve"].max()
avgBIou = BIou["curve"].mean()
maxBIou = BIou["curve"].max()
avgTIou = TIou["curve"].mean()
maxTIou = TIou["curve"].max()
out = dict()
for metric in opt.Eval.metrics:
out[metric] = eval(metric)
pkl = os.path.join(opt.Eval.result_path, 'result_' + dataset + '.pkl')
if os.path.isfile(pkl) is True:
result = pd.read_pickle(pkl)
result.loc[method] = out
result.to_pickle(pkl)
else:
result = pd.DataFrame(data=out, index=[method])
result.to_pickle(pkl)
result.to_csv(os.path.join(opt.Eval.result_path, 'result_' + dataset + '.csv'))
results.append(result)
if args.verbose is True:
for dataset, result in zip(datasets, results):
print('###', dataset, '###', '\n', result.sort_index(), '\n')
if __name__ == "__main__":
args = parse_args()
opt = load_config(args.config)
evaluate(opt, args)