Views
No views yet
uv add canvit-pytorch1import torch
2from canvit_pytorch import CanViTForImageClassification, Viewpoint, sample_at_viewpoint
3from canvit_pytorch.preprocess import preprocess
4from PIL import Image
5
6clf = CanViTForImageClassification.from_pretrained(
7 "canvit/canvitb16-add-vpe-finetune-g128px-s512px-in1k-2026-04-06"
8).eval()
9assert isinstance(clf, CanViTForImageClassification)
10assert clf.n_classes == 1000
11assert clf.local_dim == 768
12
13image = preprocess(512)(Image.open("cat.jpg").convert("RGB"))
14assert isinstance(image, torch.Tensor)
15image = image.unsqueeze(0) # [1, 3, 512, 512]
16
17state = clf.init_state(batch_size=1, canvas_grid_size=32)
18
19# Process one or more glimpses sequentially
20with torch.inference_mode():
21 vp = Viewpoint.full_scene(batch_size=1, device=image.device)
22 glimpse = sample_at_viewpoint(spatial=image, viewpoint=vp, glimpse_size_px=128)
23 logits, state = clf(glimpse=glimpse, state=state, viewpoint=vp)
24
25assert logits.shape == (1, 1000)
26pred = logits.argmax(dim=-1) # ImageNet-1K class indexcanvit/canvitb16-add-vpe-pretrain-g128px-s512px-in21k-dv3b16-2026-02-02yberreby/dinov3-vitb16-lvd1689m-in1k-512x512-linear-clf-probe) algebraically fused into a single LN → Linear headtorchvision.transforms.v2.RandomResizedCrop(512, scale=(0.2, 1.0)), RandomHorizontalFlip1@article{berreby2026canvit,
2 title={CanViT: Toward Active-Vision Foundation Models},
3 author={Berreby, Yoha{\"i}-Eliel and Du, Sabrina and Durand, Audrey and Krishna, B. Suresh},
4 year={2026},
5 eprint={2603.22570},
6 archivePrefix={arXiv},
7 primaryClass={cs.CV},
8 url={https://arxiv.org/abs/2603.22570}
9}