jaimin's picture
Upload 78 files
bf53f45 verified
import pandas as pd
import torch
import tqdm
from eval_tools import time_sync
from mivolo.model.create_timm_model import create_model
if __name__ == "__main__":
face_person_ckpt_path = "/data/dataset/iikrasnova/age_gender/pretrained/checkpoint-377.pth.tar"
face_person_input_size = [6, 224, 224]
face_age_ckpt_path = "/data/dataset/iikrasnova/age_gender/pretrained/model_only_age_imdb_4.32.pth.tar"
face_input_size = [3, 224, 224]
model_names = ["face_body_model", "face_model"]
# batch_size = 16
steps = 1000
warmup_steps = 10
device = torch.device("cuda:1")
df_data = []
batch_sizes = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
for ckpt_path, input_size, model_name, num_classes in zip(
[face_person_ckpt_path, face_age_ckpt_path], [face_person_input_size, face_input_size], model_names, [3, 1]
):
in_chans = input_size[0]
print(f"Collecting stat for {ckpt_path} ...")
model = create_model(
"mivolo_d1_224",
num_classes=num_classes,
in_chans=in_chans,
pretrained=False,
checkpoint_path=ckpt_path,
filter_keys=["fds."],
)
model = model.to(device)
model.eval()
model = model.half()
time_per_batch = {}
for batch_size in batch_sizes:
create_t0 = time_sync()
for _ in range(steps):
inputs = torch.randn((batch_size,) + tuple(input_size)).to(device).half()
create_t1 = time_sync()
create_taken = create_t1 - create_t0
with torch.no_grad():
inputs = torch.randn((batch_size,) + tuple(input_size)).to(device).half()
for _ in range(warmup_steps):
out = model(inputs)
all_time = 0
for _ in tqdm.tqdm(range(steps), desc=f"{model_name} batch {batch_size}"):
start = time_sync()
inputs = torch.randn((batch_size,) + tuple(input_size)).to(device).half()
out = model(inputs)
out += 1
end = time_sync()
all_time += end - start
time_taken = (all_time - create_taken) * 1000 / steps / batch_size
print(f"Inference {inputs.shape}, steps: {steps}. Mean time taken {time_taken} ms / image")
time_per_batch[str(batch_size)] = f"{time_taken:.2f}"
df_data.append(time_per_batch)
headers = list(map(str, batch_sizes))
output_df = pd.DataFrame(df_data, columns=headers)
output_df.index = model_names
df2_transposed = output_df.T
out_file = "batch_sizes.csv"
df2_transposed.to_csv(out_file, sep=",")
print(f"Saved time stat for {len(df2_transposed)} batches to {out_file}")