Views
No views yet
pip install "sentence_transformers[image]"1from sentence_transformers import SentenceTransformer
2
3model = SentenceTransformer("royokong/e5-v")
4
5# Encode text inputs
6texts = [
7 "A dog sitting in the grass.",
8 "A dog standing in the snow.",
9 "A cat sitting in the grass.",
10 "A cat standing in the snow.",
11]
12text_embeddings = model.encode(texts)
13print(text_embeddings.shape)
14# (4, 4096)
15
16# Encode image inputs
17images = [
18 "https://huggingface.co/royokong/e5-v/resolve/main/assets/dog.jpg",
19 "https://huggingface.co/royokong/e5-v/resolve/main/assets/cat.jpg",
20]
21image_embeddings = model.encode(images)
22print(image_embeddings.shape)
23# (2, 4096)
24
25# Compute text-image similarities
26similarities = model.similarity(text_embeddings, image_embeddings)
27print(similarities)
28# tensor([[0.7183, 0.3579],
29# [0.5806, 0.5522],
30# [0.4714, 0.6479],
31# [0.4150, 0.8081]])1import torch
2import torch.nn.functional as F
3import requests
4from PIL import Image
5from transformers import AutoTokenizer
6from transformers import LlavaNextProcessor, LlavaNextForConditionalGeneration
7
8llama3_template = '<|start_header_id|>user<|end_header_id|>\n\n{}<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n \n'
9
10processor = LlavaNextProcessor.from_pretrained('royokong/e5-v')
11model = LlavaNextForConditionalGeneration.from_pretrained('royokong/e5-v', torch_dtype=torch.float16).cuda()
12
13img_prompt = llama3_template.format('<image>\nSummary above image in one word: ')
14text_prompt = llama3_template.format('<sent>\nSummary above sentence in one word: ')
15
16urls = [
17 'https://huggingface.co/royokong/e5-v/resolve/main/assets/dog.jpg',
18 'https://huggingface.co/royokong/e5-v/resolve/main/assets/cat.jpg',
19]
20images = [Image.open(requests.get(url, stream=True).raw) for url in urls]
21
22texts = ['A dog sitting in the grass.',
23 'A dog standing in the snow.',
24 'A cat sitting in the grass.',
25 'A cat standing in the snow.']
26
27text_inputs = processor([text_prompt.replace('<sent>', text) for text in texts], return_tensors="pt", padding=True).to('cuda')
28img_inputs = processor([img_prompt]*len(images), images, return_tensors="pt", padding=True).to('cuda')
29
30with torch.no_grad():
31 text_embs = model(**text_inputs, output_hidden_states=True, return_dict=True).hidden_states[-1][:, -1, :]
32 img_embs = model(**img_inputs, output_hidden_states=True, return_dict=True).hidden_states[-1][:, -1, :]
33
34 text_embs = F.normalize(text_embs, dim=-1)
35 img_embs = F.normalize(img_embs, dim=-1)
36
37print(text_embs @ img_embs.t())
38# tensor([[0.7275, 0.3630],
39# [0.5957, 0.5522],
40# [0.4709, 0.6406],
41# [0.4202, 0.7974]])