| import torch | |
| import torch.nn as nn | |
| class FusionModel(nn.Module): | |
| def __init__(self, visual_dim=1024, audio_dim=1024, hidden_dim=1024): | |
| super(FusionModel, self).__init__() | |
| self.visual_proj = nn.Linear(visual_dim, hidden_dim // 2) | |
| self.audio_proj = nn.Linear(audio_dim, hidden_dim // 2) | |
| self.mlp = nn.Sequential( | |
| nn.Linear(hidden_dim, 512), | |
| nn.LayerNorm(512), | |
| nn.ReLU(), | |
| nn.Linear(512, 256), | |
| nn.LayerNorm(256), | |
| nn.ReLU(), | |
| nn.Linear(256, 128), | |
| nn.LayerNorm(128), | |
| nn.ReLU(), | |
| nn.Linear(128, 1) | |
| ) | |
| def forward(self, visual_features, audio_features): | |
| # Project visual and audio features separately and concatenate | |
| visual_proj = self.visual_proj(visual_features) | |
| audio_proj = self.audio_proj(audio_features) | |
| fused_features = torch.cat((visual_proj, audio_proj), dim=-1) | |
| output = self.mlp(fused_features) | |
| return output | |