- Notifications
You must be signed in to change notification settings - Fork 21
Open
Description
Hi, I have a question on how to generate lvis_cat_name_pt_feat.npy used for evaluation.
I wrote the following code to mimick your extracted embeddings, the templates is copied from ULIP-templates:
from open_clip import tokenize meta_path = osp.join(path_to_meta_data, "split", "lvis.json") with open(meta_path, "r") as file: meta = json.load(file) cats = sorted(np.unique([data['category'] for data in meta])) # load your extracted embeddings cat_embs_openshape_big_g_14 = np.load(osp.join(path_to_meta_data, "lvis_cat_name_pt_feat.npy"), allow_pickle=True) clip, _, _ = open_clip.create_model_and_transforms(model_name="ViT-bigG-14", pretrained='laion2b_s39b_b160k') clip.to("cuda").eval() with torch.no_grad(): gen_cat_embs = [] for name in tqdm.tqdm(cats): texts = [template.format(name) for template in _TEMPLATES] texts = tokenize(texts).to(device=device, non_blocking=True) if len(texts.shape) < 2: texts = texts[None, ...] class_emb = clip.encode_text(texts) class_emb = class_emb / class_emb.norm(dim=-1, keepdim=True) class_emb = class_emb.mean(dim=0) gen_cat_embs.append(class_emb) gen_cat_embs = torch.stack(gen_cat_embs, dim=0).cpu().numpy() # C x D assert np.allclose(gen_cat_embs, cat_embs_openshape_big_g_14) The assertion above gives wrong and I mannually checked that none of the row in gen_cat_embs equals to the 1st row of cat_embs_openshape_big_g_14, so the problem is not about the order of category names or templates. Could you please give a hint on this?
Metadata
Metadata
Assignees
Labels
No labels