| import torch | |
| import torch.nn as nn | |
| from transformers import ViTMAEModel | |
| class VibeMAE(nn.Module): | |
| def __init__(self): | |
| super().__init__() | |
| # This is the pre-trained brain from Facebook | |
| self.mae = ViTMAEModel.from_pretrained("facebook/vit-mae-base") | |
| # This is the "Vibe Head" that calculates the 3 scores | |
| self.vibe_head = nn.Sequential( | |
| nn.Linear(768, 256), | |
| nn.ReLU(), | |
| nn.Linear(256, 3), # Outputs: Ferd, Aura, Munch | |
| nn.Sigmoid() # Keeps scores between 0 and 1 | |
| ) | |
| def forward(self, x): | |
| outputs = self.mae(x) | |
| # We take the [CLS] token which represents the "vibe" of the whole face | |
| latent = outputs.last_hidden_state[:, 0, :] | |
| return self.vibe_head(latent) |