From daf3abbeb5e9d88cb08d5ce281777e2fcdccbd9f Mon Sep 17 00:00:00 2001 From: Phil Wang Date: Thu, 27 May 2021 22:02:17 -0700 Subject: [PATCH] add NesT --- README.md | 37 +++++++++ images/nest.png | Bin 0 -> 76438 bytes setup.py | 2 +- vit_pytorch/nest.py | 177 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 215 insertions(+), 1 deletion(-) create mode 100644 images/nest.png create mode 100644 vit_pytorch/nest.py diff --git a/README.md b/README.md index a5e19ee..ca500d2 100644 --- a/README.md +++ b/README.md @@ -378,6 +378,32 @@ img = torch.randn(1, 3, 224, 224) pred = model(img) # (1, 1000) ``` +## NesT + + + +This paper decided to process the image in heirarchical stages, with attention only within tokens of local blocks, which aggregate as it moves up the heirarchy. The aggregation is done in the image plane, and contains a convolution to allow it to pass information across the boundary. + +You can use it with the following code (ex. NesT-T) + +```python +import torch +from vit_pytorch.nest import NesT + +nest = NesT( + image_size = 224, + patch_size = 4, + dim = 96, + heads = 3, + num_heirarchies = 3, # number of heirarchies + block_repeats = (8, 4, 1), # the number of transformer blocks at each heirarchy, starting from the bottom + num_classes = 1000 +) + +img = torch.randn(1, 3, 224, 224) +pred = nest(img) # (1, 1000) +``` + ## Masked Patch Prediction Thanks to Zach, you can train using the original masked patch prediction task presented in the paper, with the following code. @@ -787,6 +813,17 @@ Coming from computer vision and new to transformers? Here are some resources tha } ``` +```bibtex +@misc{zhang2021aggregating, + title = {Aggregating Nested Transformers}, + author = {Zizhao Zhang and Han Zhang and Long Zhao and Ting Chen and Tomas Pfister}, + year = {2021}, + eprint = {2105.12723}, + archivePrefix = {arXiv}, + primaryClass = {cs.CV} +} +``` + ```bibtex @misc{caron2021emerging, title = {Emerging Properties in Self-Supervised Vision Transformers}, diff --git a/images/nest.png b/images/nest.png new file mode 100644 index 0000000000000000000000000000000000000000..3ddbdc2389d2b856f591c8a3c62d70e9e3c8c682 GIT binary patch literal 76438 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 b h (x y) d', h = heads), qkv) + + dots = einsum('b h i d, b h j d -> b h i j', q, k) * self.scale + + attn = self.attend(dots) + + out = einsum('b h i j, b h j d -> b h i d', attn, v) + out = rearrange(out, 'b h (x y) d -> b (h d) x y', x = h, y = w) + return self.to_out(out) + +def Aggregate(dim, dim_out): + return nn.Sequential( + nn.Conv2d(dim, dim_out, 3, padding = 1), + ChanNorm(dim_out), + nn.MaxPool2d(2) + ) + +class Transformer(nn.Module): + def __init__(self, dim, seq_len, depth, heads, mlp_mult, dropout = 0.): + super().__init__() + self.layers = nn.ModuleList([]) + self.pos_emb = nn.Parameter(torch.randn(seq_len)) + + for _ in range(depth): + self.layers.append(nn.ModuleList([ + PreNorm(dim, Attention(dim, heads = heads, dropout = dropout)), + PreNorm(dim, FeedForward(dim, mlp_mult, dropout = dropout)) + ])) + def forward(self, x): + *_, h, w = x.shape + + pos_emb = self.pos_emb[:(h * w)] + pos_emb = rearrange(pos_emb, '(h w) -> () () h w', h = h, w = w) + x = x + pos_emb + + for attn, ff in self.layers: + x = attn(x) + x + x = ff(x) + x + return x + +class NesT(nn.Module): + def __init__( + self, + *, + image_size, + patch_size, + num_classes, + dim, + heads, + num_heirarchies, + block_repeats, + mlp_mult = 4, + channels = 3, + dim_head = 64, + dropout = 0. + ): + super().__init__() + assert (image_size % patch_size) == 0, 'Image dimensions must be divisible by the patch size.' + num_patches = (image_size // patch_size) ** 2 + patch_dim = channels * patch_size ** 2 + fmap_size = image_size // patch_size + blocks = 2 ** (num_heirarchies - 1) + + seq_len = (fmap_size // blocks) ** 2 # sequence length is held constant across heirarchy + mults = [2 ** i for i in reversed(range(num_heirarchies))] + + layer_heads = list(map(lambda t: t * heads, mults)) + layer_dims = list(map(lambda t: t * dim, mults)) + + layer_dims = [*layer_dims, layer_dims[-1]] + dim_pairs = zip(layer_dims[:-1], layer_dims[1:]) + + self.to_patch_embedding = nn.Sequential( + Rearrange('b c (h p1) (w p2) -> b (p1 p2 c) h w', p1 = patch_size, p2 = patch_size), + nn.Conv2d(patch_dim, layer_dims[0], 1), + ) + + block_repeats = cast_tuple(block_repeats, num_heirarchies) + + self.layers = nn.ModuleList([]) + + for level, heads, (dim_in, dim_out), block_repeat in zip(reversed(range(num_heirarchies)), layer_heads, dim_pairs, block_repeats): + is_last = level == 0 + depth = block_repeat + + self.layers.append(nn.ModuleList([ + Transformer(dim_in, seq_len, depth, heads, mlp_mult, dropout), + Aggregate(dim_in, dim_out) if not is_last else nn.Identity() + ])) + + self.mlp_head = nn.Sequential( + ChanNorm(dim), + Reduce('b c h w -> b c', 'mean'), + nn.Linear(dim, num_classes) + ) + + def forward(self, img): + x = self.to_patch_embedding(img) + b, c, h, w = x.shape + + num_heirarchies = len(self.layers) + + for level, (transformer, aggregate) in zip(reversed(range(num_heirarchies)), self.layers): + block_size = 2 ** level + x = rearrange(x, 'b c (b1 h) (b2 w) -> (b b1 b2) c h w', b1 = block_size, b2 = block_size) + x = transformer(x) + x = rearrange(x, '(b b1 b2) c h w -> b c (b1 h) (b2 w)', b1 = block_size, b2 = block_size) + x = aggregate(x) + + return self.mlp_head(x)