Spaces:
Runtime error
Runtime error
| import sys | |
| sys.path.append('../..') | |
| from model import longclip | |
| import torch | |
| from torchvision.datasets import CocoCaptions | |
| from PIL import Image | |
| device = "cuda" if torch.cuda.is_available() else "cpu" | |
| model, preprocess = longclip.load("../../checkpoints/longclip-B.pt", device=device) | |
| model.eval() | |
| coco = CocoCaptions(root="data/coco/val2017/", annFile="data/coco/annotations/captions_val2017.json", transform=None) | |
| image_features = [] | |
| text_features = [] | |
| pred_true = 0 | |
| with torch.no_grad(): | |
| for image, captions in coco: | |
| image_input = preprocess(image).unsqueeze(0).to(device) | |
| image_features.append(model.encode_image(image_input)) | |
| captions = captions[0:5] | |
| caption_input = longclip.tokenize(captions).to(device) | |
| text_features.extend(model.encode_text(caption_input)) | |
| image_features = torch.stack(image_features).squeeze() | |
| image_features /= image_features.norm(dim=-1, keepdim=True) | |
| print(image_features.shape) | |
| text_features = torch.stack(text_features) | |
| text_features /= text_features.norm(dim=-1, keepdim=True) | |
| similarity = image_features.squeeze() @ text_features.squeeze().T | |
| print("I2T") | |
| for i in range(5000): | |
| pred = similarity[i] | |
| b = pred.argsort()[-1:] | |
| for j in range(5): | |
| true_index = 5 * i + j | |
| if true_index in b: | |
| pred_true = pred_true + 1 | |
| break | |
| print(pred_true / 5000) | |
| pred_true = 0 | |
| for i in range(5000): | |
| pred = similarity[i] | |
| b = pred.argsort()[-5:] | |
| for j in range(5): | |
| true_index = 5 * i + j | |
| if true_index in b: | |
| pred_true = pred_true + 1 | |
| break | |
| print(pred_true / 5000) | |
| pred_true = 0 | |
| for i in range(5000): | |
| pred = similarity[i] | |
| b = pred.argsort()[-10:] | |
| for j in range(5): | |
| true_index = 5 * i + j | |
| if true_index in b: | |
| pred_true = pred_true + 1 | |
| break | |
| print(pred_true / 5000) | |
| pred_true = 0 | |
| print("T2I") | |
| similarity = similarity.T | |
| for i in range(25000): | |
| pred = similarity[i] | |
| b = pred.argsort()[-1:] | |
| true_index = i//5 | |
| if true_index in b: | |
| pred_true = pred_true + 1 | |
| print(pred_true/25000) | |
| pred_true = 0 | |
| for i in range(25000): | |
| pred = similarity[i] | |
| b = pred.argsort()[-5:] | |
| true_index = i//5 | |
| if true_index in b: | |
| pred_true = pred_true + 1 | |
| print(pred_true/25000) | |
| pred_true = 0 | |
| for i in range(25000): | |
| pred = similarity[i] | |
| b = pred.argsort()[-10:] | |
| true_index = i//5 | |
| if true_index in b: | |
| pred_true = pred_true + 1 | |
| print(pred_true/25000) | |