Views
No views yet


1from transformers import AutoModel
2from PIL import Image
3import torch
4
5# Load the complete model with all components
6model = AutoModel.from_pretrained(
7 "amildravid4292/clip-vitl14-test-time-registers",
8 trust_remote_code=True
9)
10
11# Check what was loaded
12print(f"Register tokens: {model.num_register_tokens}")
13print(f"Neuron dict: {model.neuron_dict}")
14print(f"Tokenizer available: {model.tokenizer is not None}")
15print(f"Preprocessor available: {model.preprocessor is not None}")
16print(f"Zero-shot classifier available: {model.zeroshot_classifier is not None}")1from PIL import Image
2
3# Load and preprocess image
4image = Image.open("your_image.jpg")
5image_tensor = model.preprocess_image(image).unsqueeze(0)
6
7image_features = model.encode_image(
8 image_tensor
9)
10
11# to run inference with the original model without test-time registers
12image_features = model.encode_image(
13 image_tensor,
14 neuron_dict=None,
15 num_register_tokens=0
16)
171# Tokenize text
2text = ["a photo of a cat", "a photo of a dog"]
3text_tokens = model.tokenize(text)
4
5# Encode text
6text_features = model.encode_text(text_tokens)1
2# load model
3model = AutoModel.from_pretrained('amildravid4292/clip-vitl14-test-time-registers', trust_remote_code=True)
4model = model.to(device).bfloat16()
5classifier = model.zeroshot_classifier.to(device).bfloat16()
6
7# load data
8imagenet_dataset = ImageNet(root='/datasets/ilsvrc/current', split='val', transform=model.preprocessor)
9ground_truth_labels = [imagenet_dataset.targets[i] for i in range(len(imagenet_dataset))]
10loader = torch.utils.data.DataLoader(imagenet_dataset, batch_size=100, num_workers=4, pin_memory=True, shuffle=False)
11
12# run zero-shot classification
13with torch.no_grad():
14 correct = [0, 0]
15 for i, (images, target) in enumerate(tqdm(loader)):
16 images = images.to(device).bfloat16()
17
18 target = target.to(device).bfloat16()
19
20
21 # predict
22 image_features = model.encode_image(images)
23
24 image_features /= image_features.norm(dim=-1, keepdim=True)
25 logits = 100. * image_features @ classifier
26
27 pred = logits.argmax(dim=-1)
28 correct[0] += (pred == target).sum().item()
29 correct[1] += target.size(0)
30
31
32
33print(correct[0]/correct[1])1# Override the saved neuron configuration
2custom_neuron_dict = {0: [10, 20, 30]} # Modify neurons 10,20,30 in layer 0
3
4image_features = model.encode_image(
5 image_tensor,
6 num_register_tokens=4,
7 neuron_dict=custom_neuron_dict
8)1# Use different number of register tokens
2image_features = model.encode_image(
3 image_tensor,
4 num_register_tokens=8 # Override the default
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}