Skip to content

Commit

Permalink
[ADDED] Separated test, evaluation and metrics codes
Browse files Browse the repository at this point in the history
  • Loading branch information
danperazzo committed Jun 15, 2023
1 parent 221cc1e commit 234df5b
Show file tree
Hide file tree
Showing 4 changed files with 87 additions and 91 deletions.
File renamed without changes.
83 changes: 83 additions & 0 deletions evaluation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import cv2
import os
from metrics import lpips, PSNR, ssim
import time
from tqdm import tqdm
import pandas as pd

def imwrite(results_folder, name ,img):
cv2.imwrite(results_folder +'/' +name,img)

def imread(data_folder, name):
img_rgb = cv2.imread(data_folder + '/' + name)
return img_rgb

def prepare_results_folder(order, block_shape, method):
results_folder = 'results_' + f'order_{order:.3f}_'+f'blocks_{block_shape}'

if not os.path.exists(results_folder):
os.mkdir(results_folder)

method_folder = results_folder+'/'+method
if not os.path.exists(method_folder):
os.mkdir(method_folder)

return method_folder

def average_l(lst):
return sum(lst) / len(lst)


def test_for_parameters(compressor, data_folder, results_method_folder):

img_list = os.listdir( data_folder )
ssim_list = []
psnr_list = []
lpips_list = []
time_encode = []
time_decode = []

for imname in tqdm(img_list):

img_rgb = imread(data_folder, imname)
start_encode = time.time()
img_rgb_code = compressor.encode_rgb(img_rgb)
end_encode = time.time()

start_decode = time.time()
img_rgb_compress = compressor.decode_rgb(img_rgb_code)
end_decode = time.time()

imwrite(results_method_folder, imname, img_rgb_compress)

ssim_val = ssim(img_rgb, img_rgb_compress)
psnr_val = PSNR(img_rgb, img_rgb_compress)
lpips_val = lpips(img_rgb, img_rgb_compress)

time_encode_val = end_encode - start_encode
time_decode_val = end_decode - start_decode


ssim_list.append(ssim_val)
psnr_list.append(psnr_val)
lpips_list.append(lpips_val)
time_encode.append(time_encode_val)
time_decode.append(time_decode_val)


ssim_avg = average_l(ssim_list)
psnr_avg = average_l(psnr_list)
lpips_avg = average_l(lpips_list)
time_encode_avg = average_l(time_encode)
time_decode_avg = average_l(time_decode)


df = pd.DataFrame({'image_name': (img_list+['mean']),
'ssim': ssim_list + [ssim_avg],
'psnr': psnr_list + [psnr_avg],
'lpips': lpips_list + [lpips_avg],
'time_encode':time_encode + [time_encode_avg],
'time_decode':time_decode + [time_decode_avg]})

csv_path = results_method_folder +'/results_num.csv'
df.to_csv(csv_path)
27 changes: 0 additions & 27 deletions utils.py → metrics.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
import cv2
import numpy as np
import os
import scipy
import torch

def average_l(lst):
return sum(lst) / len(lst)

def rgb_ssim(img0, img1, max_val,
filter_size=11,
filter_sigma=1.5,
Expand Down Expand Up @@ -75,25 +70,3 @@ def rgb_lpips(np_gt, np_im, net_name, device):
ssim = lambda x,y :rgb_ssim(x/255, y/255, max_val=1)
lpips = lambda x,y :rgb_lpips(np.float32(x/255), np.float32(y/255), net_name='vgg', device=torch.device("cpu"))


def imwrite(results_folder,method, name ,img):
cv2.imwrite(results_folder + '/' + method + '/' +name,img)

def imread(data_folder, name):
img_rgb = cv2.imread(data_folder + '/' + name)
return img_rgb

def prepare_results_folder(order, block_shape, all_methods):
results_folder = 'results_' + f'order_{order:.3f}_'+f'blocks_{block_shape}'

if not os.path.exists(results_folder):
os.mkdir(results_folder)

for method in all_methods:
method_folder = results_folder+'/'+method
if not os.path.exists(method_folder):
os.mkdir(method_folder)

return results_folder


68 changes: 4 additions & 64 deletions test.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
import os

from compression_transforms import compression_factory
from utils import imwrite, imread, prepare_results_folder, PSNR, ssim, lpips, average_l
import pandas as pd
import time
from tqdm import tqdm
from compression import compression_factory
from evaluation import test_for_parameters, prepare_results_folder


orders = [0.20, 0.30, 0.50]
Expand All @@ -13,67 +8,12 @@
data_folder = 'datasets/kodak/'


def test_for_parameters(compressor, data_folder):

results_folder = prepare_results_folder(compressor.order, compressor.block_size, all_methods)

img_list = os.listdir( data_folder )
ssim_list = []
psnr_list = []
lpips_list = []
time_encode = []
time_decode = []

for imname in tqdm(img_list):

img_rgb = imread(data_folder, imname)
start_encode = time.time()
img_rgb_code = compressor.encode_rgb(img_rgb)
end_encode = time.time()

start_decode = time.time()
img_rgb_compress = compressor.decode_rgb(img_rgb_code)
end_decode = time.time()

imwrite(results_folder, method, imname, img_rgb_compress)

ssim_val = ssim(img_rgb, img_rgb_compress)
psnr_val = PSNR(img_rgb, img_rgb_compress)
lpips_val = lpips(img_rgb, img_rgb_compress)

time_encode_val = end_encode - start_encode
time_decode_val = end_decode - start_decode


ssim_list.append(ssim_val)
psnr_list.append(psnr_val)
lpips_list.append(lpips_val)
time_encode.append(time_encode_val)
time_decode.append(time_decode_val)


ssim_avg = average_l(ssim_list)
psnr_avg = average_l(psnr_list)
lpips_avg = average_l(lpips_list)
time_encode_avg = average_l(time_encode)
time_decode_avg = average_l(time_decode)


df = pd.DataFrame({'image_name': (img_list+['mean']),
'ssim': ssim_list + [ssim_avg],
'psnr': psnr_list + [psnr_avg],
'lpips': lpips_list + [lpips_avg],
'time_encode':time_encode + [time_encode_avg],
'time_decode':time_decode + [time_decode_avg]})

csv_path = results_folder + '/' + method +'/results_num.csv'
df.to_csv(csv_path)

for block in block_shapes:
for order in orders:
for method in all_methods:

results_folder = prepare_results_folder(order, block, method)
compressor = compression_factory(method, order, block)
print(f'Order: {order}, method: {method}, block: {block}')
test_for_parameters(compressor, data_folder)
test_for_parameters(compressor, data_folder, results_folder)

0 comments on commit 234df5b

Please sign in to comment.