SucoCafe's picture
Deploy limpo
1b9d27c
Raw
History Blame Contribute Delete
2.76 kB
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)