From 70ba532599b791d110619d72fb95b76216ba676d Mon Sep 17 00:00:00 2001 From: Phil Wang Date: Tue, 28 Dec 2021 10:58:21 -0800 Subject: [PATCH] add ViT for small datasets https://arxiv.org/abs/2112.13492 --- README.md | 58 +++++++++++ images/vit_for_small_datasets.png | Bin 0 -> 82290 bytes setup.py | 2 +- vit_pytorch/extractor.py | 7 +- vit_pytorch/vit_for_small_dataset.py | 142 +++++++++++++++++++++++++++ 5 files changed, 206 insertions(+), 3 deletions(-) create mode 100644 images/vit_for_small_datasets.png create mode 100644 vit_pytorch/vit_for_small_dataset.py diff --git a/README.md b/README.md index 87de09d..d98f999 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ - [Simple Masked Image Modeling](#simple-masked-image-modeling) - [Masked Patch Prediction](#masked-patch-prediction) - [Adaptive Token Sampling](#adaptive-token-sampling) +- [Vision Transformer for Small Datasets](#vision-transformer-for-small-datasets) - [Dino](#dino) - [Accessing Attention](#accessing-attention) - [Research Ideas](#research-ideas) @@ -739,6 +740,52 @@ preds = v(img) # (1, 1000) preds, token_ids = v(img, return_sampled_token_ids = True) # (1, 1000), (1, <=8) ``` +## Vision Transformer for Small Datasets + + + +This paper proposes a new image to patch function that incorporates shifts of the image, before normalizing and dividing the image into patches. I have found shifting to be extremely helpful in some other transformers work, so decided to include this for further explorations. It also includes the `LRA` with the learned temperature and masking out of token attention to itself. + +You can use as follows: + +```python +import torch +from vit_pytorch.vit_for_small_dataset import ViT + +v = ViT( + image_size = 256, + patch_size = 16, + num_classes = 1000, + dim = 1024, + depth = 6, + heads = 16, + mlp_dim = 2048, + dropout = 0.1, + emb_dropout = 0.1 +) + +img = torch.randn(4, 3, 256, 256) + +preds = v(img) # (1, 1000) +``` + +You can also use the `SPT` from this paper as a standalone module + +```python +import torch +from vit_pytorch.vit_for_small_dataset import SPT + +spt = SPT( + dim = 1024, + patch_size = 16, + channels = 3 +) + +img = torch.randn(4, 3, 256, 256) + +tokens = spt(img) # (4, 256, 1024) +``` + ## Dino @@ -1236,6 +1283,17 @@ Coming from computer vision and new to transformers? Here are some resources tha } ``` +```bibtex +@misc{lee2021vision, + title = {Vision Transformer for Small-Size Datasets}, + author = {Seung Hoon Lee and Seunghyun Lee and Byung Cheol Song}, + year = {2021}, + eprint = {2112.13492}, + archivePrefix = {arXiv}, + primaryClass = {cs.CV} +} +``` + ```bibtex @misc{vaswani2017attention, title = {Attention Is All You Need}, diff --git a/images/vit_for_small_datasets.png b/images/vit_for_small_datasets.png new file mode 100644 index 0000000000000000000000000000000000000000..c52b83d80a9c388bb8108f6126fa227d2be7d54e GIT binary patch literal 82290 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 b h n d', h = self.heads), qkv) + + dots = torch.matmul(q, k.transpose(-1, -2)) * self.temperature.exp() + + mask = torch.eye(dots.shape[-1], device = dots.device, dtype = torch.bool) + mask_value = -torch.finfo(dots.dtype).max + dots = dots.masked_fill(mask, mask_value) + + attn = self.attend(dots) + + out = torch.matmul(attn, v) + out = rearrange(out, 'b h n d -> b n (h d)') + return self.to_out(out) + +class Transformer(nn.Module): + def __init__(self, dim, depth, heads, dim_head, mlp_dim, dropout = 0.): + super().__init__() + self.layers = nn.ModuleList([]) + for _ in range(depth): + self.layers.append(nn.ModuleList([ + PreNorm(dim, LSA(dim, heads = heads, dim_head = dim_head, dropout = dropout)), + PreNorm(dim, FeedForward(dim, mlp_dim, dropout = dropout)) + ])) + def forward(self, x): + for attn, ff in self.layers: + x = attn(x) + x + x = ff(x) + x + return x + +class SPT(nn.Module): + def __init__(self, *, dim, patch_size, channels = 3): + super().__init__() + patch_dim = patch_size * patch_size * 5 * channels + + self.to_patch_tokens = nn.Sequential( + Rearrange('b c (h p1) (w p2) -> b (h w) (p1 p2 c)', p1 = patch_size, p2 = patch_size), + nn.LayerNorm(patch_dim), + nn.Linear(patch_dim, dim) + ) + + def forward(self, x): + shifts = ((1, -1, 0, 0), (-1, 1, 0, 0), (0, 0, 1, -1), (0, 0, -1, 1)) + shifted_x = list(map(lambda shift: F.pad(x, shift), shifts)) + x_with_shifts = torch.cat((x, *shifted_x), dim = 1) + return self.to_patch_tokens(x_with_shifts) + +class ViT(nn.Module): + def __init__(self, *, image_size, patch_size, num_classes, dim, depth, heads, mlp_dim, pool = 'cls', channels = 3, dim_head = 64, dropout = 0., emb_dropout = 0.): + super().__init__() + image_height, image_width = pair(image_size) + patch_height, patch_width = pair(patch_size) + + assert image_height % patch_height == 0 and image_width % patch_width == 0, 'Image dimensions must be divisible by the patch size.' + + num_patches = (image_height // patch_height) * (image_width // patch_width) + patch_dim = channels * patch_height * patch_width + assert pool in {'cls', 'mean'}, 'pool type must be either cls (cls token) or mean (mean pooling)' + + self.to_patch_embedding = SPT(dim = dim, patch_size = patch_size, channels = channels) + + self.pos_embedding = nn.Parameter(torch.randn(1, num_patches + 1, dim)) + self.cls_token = nn.Parameter(torch.randn(1, 1, dim)) + self.dropout = nn.Dropout(emb_dropout) + + self.transformer = Transformer(dim, depth, heads, dim_head, mlp_dim, dropout) + + self.pool = pool + self.to_latent = nn.Identity() + + self.mlp_head = nn.Sequential( + nn.LayerNorm(dim), + nn.Linear(dim, num_classes) + ) + + def forward(self, img): + x = self.to_patch_embedding(img) + b, n, _ = x.shape + + cls_tokens = repeat(self.cls_token, '() n d -> b n d', b = b) + x = torch.cat((cls_tokens, x), dim=1) + x += self.pos_embedding[:, :(n + 1)] + x = self.dropout(x) + + x = self.transformer(x) + + x = x.mean(dim = 1) if self.pool == 'mean' else x[:, 0] + + x = self.to_latent(x) + return self.mlp_head(x)