Spaces:
Runtime error
Runtime error
| import torch | |
| import torch.nn as nn | |
| # from diffusers import AutoencoderKL as vae | |
| # import copy | |
| from clip.model import Transformer, LayerNorm | |
| # import clip | |
| # import torchvision.transforms as transforms | |
| import os | |
| import certifi | |
| # import urllib | |
| os.environ["REQUESTS_CA_BUNDLE"] = certifi.where() | |
| os.environ["SSL_CERT_FILE"] = certifi.where() | |
| # result = urllib.request.urlopen('https://www.example.com') | |
| class VisionTransformer(nn.Module): | |
| def __init__(self, input_resolution: int, patch_size: int, width: int, layers: int, heads: int, output_dim: int): | |
| super().__init__() | |
| self.input_resolution = input_resolution | |
| self.output_dim = output_dim | |
| self.conv1 = nn.Conv2d(in_channels=3, out_channels=width, kernel_size=patch_size, stride=patch_size, bias=False) | |
| scale = width ** -0.5 | |
| self.class_embedding = nn.Parameter(scale * torch.randn(width)) | |
| self.positional_embedding = nn.Parameter(scale * torch.randn((input_resolution // patch_size) ** 2 + 1, width)) | |
| self.ln_pre = LayerNorm(width) | |
| self.transformer = Transformer(width, layers, heads) | |
| self.ln_post = LayerNorm(width) | |
| self.proj = nn.Parameter(scale * torch.randn(width, output_dim)) | |
| def forward(self, x: torch.Tensor): | |
| x = self.conv1(x) # shape = [*, width, grid, grid] | |
| x = x.reshape(x.shape[0], x.shape[1], -1) # shape = [*, width, grid ** 2] | |
| x = x.permute(0, 2, 1) # shape = [*, grid ** 2, width] | |
| x = torch.cat([self.class_embedding.to(x.dtype) + torch.zeros(x.shape[0], 1, x.shape[-1], dtype=x.dtype, device=x.device), x], dim=1) # shape = [*, grid ** 2 + 1, width] | |
| x = x + self.positional_embedding.to(x.dtype) | |
| x = self.ln_pre(x) | |
| x = x.permute(1, 0, 2) # NLD -> LND | |
| x = self.transformer(x) | |
| x = x.permute(1, 0, 2) # LND -> NLD | |
| # x = self.ln_post(x[:, 0, :]) | |
| # | |
| # if self.proj is not None: | |
| # x = x @ self.proj | |
| x = self.ln_post(x) | |
| return x | |