Views
No views yet
timm specific variation of the architecture with registers, global average pooling.timm:| variant | width | mlp width (mult) | heads | depth | timm orig |
|---|---|---|---|---|---|
| tiny | 192 | 768 (4) | 3 | 12 | n |
| wee | 256 | 1280 (5) | 4 | 14 | y |
| pwee | 256 | 1280 (5) | 4 | 16 (parallel) | y |
| small | 384 | 1536 (4) | 6 | 12 | n |
| little | 320 | 1792 (5.6) | 5 | 14 | y |
| medium | 512 | 2048 (4) | 8 | 12 | y |
| mediumd | 512 | 2048 (4) | 8 | 20 | y |
| betwixt | 640 | 2560 (4) | 10 | 12 | y |
| base | 768 | 3072 (4) | 12 | 12 | n |
timm using recipe template described below.1from urllib.request import urlopen
2from PIL import Image
3import timm
4
5img = Image.open(urlopen(
6 'https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/beignets-task-guide.png'
7))
8
9model = timm.create_model('vit_so150m_patch16_reg4_gap_256.sbb_e250_in12k', pretrained=True)
10model = model.eval()
11
12# get model specific transforms (normalization, resize)
13data_config = timm.data.resolve_model_data_config(model)
14transforms = timm.data.create_transform(**data_config, is_training=False)
15
16output = model(transforms(img).unsqueeze(0)) # unsqueeze single image into batch of 1
17
18top5_probabilities, top5_class_indices = torch.topk(output.softmax(dim=1) * 100, k=5)1from urllib.request import urlopen
2from PIL import Image
3import timm
4
5img = Image.open(urlopen(
6 'https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/beignets-task-guide.png'
7))
8
9model = timm.create_model(
10 'vit_so150m_patch16_reg4_gap_256.sbb_e250_in12k',
11 pretrained=True,
12 features_only=True,
13)
14model = model.eval()
15
16# get model specific transforms (normalization, resize)
17data_config = timm.data.resolve_model_data_config(model)
18transforms = timm.data.create_transform(**data_config, is_training=False)
19
20output = model(transforms(img).unsqueeze(0)) # unsqueeze single image into batch of 1
21
22for o in output:
23 # print shape of each feature map in output
24 # e.g.:
25 # torch.Size([1, 896, 16, 16])
26 # torch.Size([1, 896, 16, 16])
27 # torch.Size([1, 896, 16, 16])
28
29 print(o.shape)1from urllib.request import urlopen
2from PIL import Image
3import timm
4
5img = Image.open(urlopen(
6 'https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/beignets-task-guide.png'
7))
8
9model = timm.create_model(
10 'vit_so150m_patch16_reg4_gap_256.sbb_e250_in12k',
11 pretrained=True,
12 num_classes=0, # remove classifier nn.Linear
13)
14model = model.eval()
15
16# get model specific transforms (normalization, resize)
17data_config = timm.data.resolve_model_data_config(model)
18transforms = timm.data.create_transform(**data_config, is_training=False)
19
20output = model(transforms(img).unsqueeze(0)) # output is (batch_size, num_features) shaped tensor
21
22# or equivalently (without needing to set num_classes=0)
23
24output = model.forward_features(transforms(img).unsqueeze(0))
25# output is unpooled, a (1, 260, 896) shaped tensor
26
27output = model.forward_head(output, pre_logits=True)
28# output is a (1, num_features) shaped tensor1@misc{rw2019timm,
2 author = {Ross Wightman},
3 title = {PyTorch Image Models},
4 year = {2019},
5 publisher = {GitHub},
6 journal = {GitHub repository},
7 doi = {10.5281/zenodo.4414861},
8 howpublished = {\url{https://github.com/huggingface/pytorch-image-models}}
9}1@article{darcet2023vision,
2 title={Vision Transformers Need Registers},
3 author={Darcet, Timoth{'e}e and Oquab, Maxime and Mairal, Julien and Bojanowski, Piotr},
4 journal={arXiv preprint arXiv:2309.16588},
5 year={2023}
6}1@article{dosovitskiy2020vit,
2 title={An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale},
3 author={Dosovitskiy, Alexey and Beyer, Lucas and Kolesnikov, Alexander and Weissenborn, Dirk and Zhai, Xiaohua and Unterthiner, Thomas and Dehghani, Mostafa and Minderer, Matthias and Heigold, Georg and Gelly, Sylvain and Uszkoreit, Jakob and Houlsby, Neil},
4 journal={ICLR},
5 year={2021}
6}