MCPcopy Create free account
hub / github.com/OpenGVLab/UniFormerV2 / SpeicalPatchEmbed

Class SpeicalPatchEmbed

slowfast/models/uniformer.py:201–225  ·  view source on GitHub ↗

Image to Patch Embedding

Source from the content-addressed store, hash-verified

199
200
201class SpeicalPatchEmbed(nn.Module):
202 """ Image to Patch Embedding
203 """
204 def __init__(self, img_size=224, patch_size=16, in_chans=3, embed_dim=768):
205 super().__init__()
206 img_size = to_2tuple(img_size)
207 patch_size = to_2tuple(patch_size)
208 num_patches = (img_size[1] // patch_size[1]) * (img_size[0] // patch_size[0])
209 self.img_size = img_size
210 self.patch_size = patch_size
211 self.num_patches = num_patches
212 self.norm = nn.LayerNorm(embed_dim)
213 self.proj = conv_3xnxn(in_chans, embed_dim, kernel_size=patch_size[0], stride=patch_size[0])
214
215 def forward(self, x):
216 B, C, T, H, W = x.shape
217 # FIXME look at relaxing size constraints
218 # assert H == self.img_size[0] and W == self.img_size[1], \
219 # f"Input image size ({H}*{W}) doesn't match model ({self.img_size[0]}*{self.img_size[1]})."
220 x = self.proj(x)
221 B, C, T, H, W = x.shape
222 x = x.flatten(2).transpose(1, 2)
223 x = self.norm(x)
224 x = x.reshape(B, T, H, W, -1).permute(0, 4, 1, 2, 3).contiguous()
225 return x
226
227
228class PatchEmbed(nn.Module):

Callers 1

__init__Method · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected