| 24 | class CLIPVisionEmbeddings(Module): |
| 25 | |
| 26 | def __init__(self, image_size, num_channels, patch_size, hidden_size, |
| 27 | dtype): |
| 28 | super().__init__() |
| 29 | self.image_size = image_size |
| 30 | self.num_channels = num_channels |
| 31 | self.patch_size = patch_size |
| 32 | self.embed_dim = hidden_size |
| 33 | self.dtype = dtype |
| 34 | |
| 35 | self.class_embedding = Parameter(shape=[ |
| 36 | self.embed_dim, |
| 37 | ], |
| 38 | dtype=self.dtype) |
| 39 | |
| 40 | self.patch_embedding = Conv2d(in_channels=self.num_channels, |
| 41 | out_channels=self.embed_dim, |
| 42 | kernel_size=(self.patch_size, |
| 43 | self.patch_size), |
| 44 | stride=(self.patch_size, self.patch_size), |
| 45 | bias=False, |
| 46 | dtype=self.dtype) |
| 47 | |
| 48 | self.num_patches = (self.image_size // self.patch_size)**2 |
| 49 | self.num_positions = self.num_patches + 1 |
| 50 | self.position_embedding = Embedding(self.num_positions, |
| 51 | self.embed_dim, |
| 52 | dtype=self.dtype) |
| 53 | |
| 54 | def forward(self, pixel_values): |
| 55 | batch_size = shape(pixel_values, 0) |