Views
No views yet

| Model | Avg. | HallusionBench | MMVet | MMMU Val | OCRBench | MMStar | MathVista | AI2D Test | MMBenchv1.1 |
|---|---|---|---|---|---|---|---|---|---|
| LLaVA-Llama-3-8B v1.1 | 46.2 | 28.6 | 33.4 | 40.4 | 41.6 | 46.3 | 40.9 | 69.9 | 68.5 |
| w/test-time register | 46.2 | 29.4 | 33.9 | 40.1 | 41.3 | 46.4 | 41.3 | 69.4 | 68.0 |
1import torch
2from transformers import AutoProcessor
3from PIL import Image
4from huggingface_hub import snapshot_download
5import sys, os
6
7repo_path = snapshot_download("amildravid4292/llava-llama-3-8b-test-time-registers")
8sys.path.insert(0, repo_path)
9from modeling_custom_llava import LlavaRegistersForConditionalGeneration
10
11device = "cuda:0"
12
13model = LlavaRegistersForConditionalGeneration.from_pretrained(
14 "xtuner/llava-llama-3-8b-v1_1-transformers",
15 torch_dtype=torch.float16,
16 output_attentions=True
17).to(device)
18
19# user original processor
20processor = AutoProcessor.from_pretrained("xtuner/llava-llama-3-8b-v1_1-transformers")
21
22prompt = ("<|start_header_id|>user<|end_header_id|>\n\n<image>\nHow many tennis balls are in the dog's mouth? Use one word.<|eot_id|>"
23 "<|start_header_id|>assistant<|end_header_id|>\n\n")
24
25# Load image
26image_path = "dog_image.webp"
27raw_image = Image.open(image_path)
28
29inputs = processor(prompt, raw_image, return_tensors='pt').to(device, torch.float16)
30
31# model defaults to using test-time register
32with torch.no_grad():
33 output = model.generate(**inputs, max_new_tokens=20, do_sample=False)
34
35# To use without test-time register
36with torch.no_grad():
37 output = model.generate(**inputs, max_new_tokens=20, do_sample=False, extra_tokens=0, neuron_dict=None)
38
39tokenizer = processor.tokenizer
40decoded_output = tokenizer.decode(output[0], skip_special_tokens=True)
41print("Decoded output:", decoded_output)
421import torch
2from transformers import AutoProcessor
3from PIL import Image
4from huggingface_hub import snapshot_download
5import sys, os
6
7repo_path = snapshot_download("amildravid4292/llava-llama-3-8b-test-time-registers")
8sys.path.insert(0, repo_path)
9from modeling_custom_llava import LlavaRegistersForConditionalGeneration
10
11device = "cuda:0"
12
13# language model attention capture
14class AttentionCaptureModel(LlavaRegistersForConditionalGeneration):
15 def __init__(self, *args, **kwargs):
16 super().__init__(*args, **kwargs)
17 self.captured_attentions = None
18
19 def forward(self, *args, **kwargs):
20 # Capture the attention weights
21 output = super().forward(*args, **kwargs)
22 self.captured_attentions = output.attentions
23 return output
24
25
26model = AttentionCaptureModel.from_pretrained(
27 "xtuner/llava-llama-3-8b-v1_1-transformers",
28 torch_dtype=torch.float16
29).to(device)
30
31# use original processor
32processor = AutoProcessor.from_pretrained("xtuner/llava-llama-3-8b-v1_1-transformers")
33
34
35prompt = ("<|start_header_id|>user<|end_header_id|>\n\n<image>\nHow many tennis balls are in the dog's mouth? Use one word.<|eot_id|>"
36 "<|start_header_id|>assistant<|end_header_id|>\n\n")
37
38# Load image
39image_path = "dog_image.webp"
40raw_image = Image.open(image_path)
41
42inputs = processor(prompt, raw_image, return_tensors='pt').to(device, torch.float16)
43
44# model defaults to using test-time register
45with torch.no_grad():
46 output = model.generate(**inputs, max_new_tokens=1, do_sample=False)
47
48tokenizer = processor.tokenizer
49decoded_output = tokenizer.decode(output[0], skip_special_tokens=True)
50print("Decoded output:", decoded_output)
51
52# get attention
53atts = torch.cat(model.captured_attentions).float()
54# visualize attention from answer to visual tokens
55im = plt.imshow(atts.mean(0).mean(0)[-1, 5:581].cpu().reshape(24,24))
56plt.axis("off")
57plt.suptitle("Mean Attention Map for Answer Token ", fontsize = 20)
58plt.tight_layout()
59plt.colorbar(im)
60plt.show()
611# Override the saved neuron configuration
2custom_neuron_dict = {0: [10, 20, 30]} # Modify neurons 10,20,30 in layer 0
3with torch.no_grad():
4 output = model.generate(**inputs, max_new_tokens=20, do_sample=False, neuron_dict=custom_neuron_dict)1# Use different number of register tokens
2with torch.no_grad():
3 output = model.generate(**inputs, max_new_tokens=20, do_sample=False, extra_tokens=5)1@misc{jiang2025visiontransformersdontneed,
2 title={Vision Transformers Don't Need Trained Registers},
3 author={Nick Jiang and Amil Dravid and Alexei Efros and Yossi Gandelsman},
4 year={2025},
5 eprint={2506.08010},
6 archivePrefix={arXiv},
7 primaryClass={cs.CV},
8 url={https://arxiv.org/abs/2506.08010},
9}