|
import torch |
|
import sys |
|
import pathlib |
|
CURRENT_DIR = pathlib.Path(__file__).parent |
|
sys.path.append(str(CURRENT_DIR)) |
|
from tqdm import tqdm |
|
import utility |
|
import data |
|
from option import args |
|
import metric |
|
import onnxruntime |
|
import cv2 |
|
from data.data_tiling import tiling_inference |
|
|
|
|
|
def prepare(a, b, device): |
|
def _prepare(tensor): |
|
return tensor.to(device) |
|
|
|
return _prepare(a), _prepare(b) |
|
|
|
|
|
def test_model(session, loader, device): |
|
torch.set_grad_enabled(False) |
|
self_scale = [2] |
|
for idx_data, d in enumerate(loader.loader_test): |
|
eval_ssim = 0 |
|
eval_psnr = 0 |
|
for idx_scale, scale in enumerate(self_scale): |
|
d.dataset.set_scale(idx_scale) |
|
for lr, hr, filename in tqdm(d, ncols=80): |
|
lr, hr = prepare(lr, hr, device) |
|
sr = tiling_inference(session, lr.cpu().numpy(), 8, (56, 56)) |
|
sr = torch.from_numpy(sr).to(device) |
|
sr = utility.quantize(sr, 255) |
|
eval_psnr += metric.calc_psnr( |
|
sr, hr, scale, 255, benchmark=d) |
|
eval_ssim += metric.calc_ssim( |
|
sr, hr, scale, 255, dataset=d) |
|
mean_ssim = eval_ssim / len(d) |
|
mean_psnr = eval_psnr / len(d) |
|
print("psnr: %s, ssim: %s"%(mean_psnr, mean_ssim)) |
|
return mean_psnr, mean_ssim |
|
|
|
def main(): |
|
loader = data.Data(args) |
|
if args.ipu: |
|
providers = ["VitisAIExecutionProvider"] |
|
provider_options = [{"config_file": args.provider_config}] |
|
else: |
|
providers = ['CUDAExecutionProvider', 'CPUExecutionProvider'] |
|
provider_options = None |
|
onnx_file_name = args.onnx_path |
|
ort_session = onnxruntime.InferenceSession(onnx_file_name, providers=providers, provider_options=provider_options) |
|
test_model(ort_session, loader, device="cpu") |
|
|
|
|
|
if __name__ == '__main__': |
|
main() |
|
|