Path: blob/master/Efficient-image-loading/benchmark.py
3118 views
from argparse import ArgumentParser12import numpy as np3from prettytable import PrettyTable45from create_lmdb import store_many_lmdb6from create_tfrecords import store_many_tfrecords7from loader import (8CV2Loader,9LmdbLoader,10PILLoader,11TFRecordsLoader,12TurboJpegLoader,13methods,14)15from tools import get_images_paths161718def count_time(loader, iters):19time_list = []20num_images = len(loader)21for i in range(iters):22loader = iter(loader)23for idx in range(num_images):24image, time = next(loader)25time_list.append(time)26time_list = np.asarray(time_list)27print_stats(time_list, type(loader).__name__)28return np.asarray(time_list)293031def print_stats(time, name):32print("Time measures for {}:".format(name))33print("{} mean time - {:.8f} seconds".format(name, time.mean()))34print("{} median time - {:.8f} seconds".format(name, np.median(time)))35print("{} std time - {:.8f} seconds".format(name, time.std()))36print("{} min time - {:.8f} seconds".format(name, time.min()))37print("{} max time - {:.8f} seconds".format(name, time.max()))38print("\n")394041def benchmark(method, path, iters=100, **kwargs):4243image_loader = methods[method](path, **kwargs) # get image loader44time = count_time(image_loader, iters) # measure the time for loading4546return time474849if __name__ == "__main__":50parser = ArgumentParser()5152parser.add_argument(53"--path", "-p", type=str, help="path to image folder",54)55parser.add_argument(56"--method",57nargs="+",58required=True,59choices=["cv2", "pil", "turbojpeg", "lmdb", "tfrecords"],60help="Image loading methods to use in benchmark",61)62parser.add_argument(63"--mode",64"-m",65type=str,66required=True,67choices=["BGR", "RGB"],68help="Image color mode",69)70parser.add_argument(71"--iters", type=int, help="Number of iterations to average the results",72)73args = parser.parse_args()7475benchmark_methods = args.method76image_paths = get_images_paths(args.path)7778results = {}79for method in benchmark_methods:80if method == "lmdb":81path = "./lmdb/images"82store_many_lmdb(image_paths, path)83elif method == "tfrecords":84path = "./tfrecords/images.tfrecords"85store_many_tfrecords(image_paths, path)86else:87path = args.path8889time = benchmark(method, path, mode=args.mode, iters=args.iters)90results.update({method: time})9192table = PrettyTable(["Loader", "Mean time", "Median time"])9394print(95f"Benchmark on {len(image_paths)} {args.mode} images with {args.iters} averaging iteration results:\n",96)9798for method, time in results.items():99table.add_row([method, time.mean(), np.median(time)])100print(table)101102103