Image to Patch Embedding
| 93 | |
| 94 | |
| 95 | class OverlapPatchEmbed(nn.Module): |
| 96 | """ Image to Patch Embedding |
| 97 | """ |
| 98 | |
| 99 | def __init__(self, img_size=224, patch_size=7, stride=4, in_channels=3, embed_dim=768): |
| 100 | super().__init__() |
| 101 | img_size = to_2tuple(img_size) |
| 102 | patch_size = to_2tuple(patch_size) |
| 103 | |
| 104 | self.img_size = img_size |
| 105 | self.patch_size = patch_size |
| 106 | self.H, self.W = img_size[0] // patch_size[0], img_size[1] // patch_size[1] |
| 107 | self.num_patches = self.H * self.W |
| 108 | self.proj = nn.Conv2d(in_channels, embed_dim, kernel_size=patch_size, stride=stride, |
| 109 | padding=(patch_size[0] // 2, patch_size[1] // 2)) |
| 110 | self.norm = nn.LayerNorm(embed_dim) |
| 111 | |
| 112 | def forward(self, x): |
| 113 | x = self.proj(x) |
| 114 | _, _, H, W = x.shape |
| 115 | x = x.flatten(2).transpose(1, 2) |
| 116 | x = self.norm(x) |
| 117 | return x, H, W |
| 118 |
nothing calls this directly
no outgoing calls
no test coverage detected