Spaces:
Runtime error
Runtime error
| import librosa | |
| import torch | |
| from PIL import Image | |
| from torch.utils.data import Dataset | |
| from torchvision import transforms | |
| import torch.nn.functional as F | |
| img_transform = transforms.Compose([ | |
| transforms.Resize((224, 224)), | |
| transforms.ToTensor() | |
| ]) | |
| class TriModalDataset(Dataset): | |
| def __init__(self, dataframe): | |
| self.df = dataframe.reset_index(drop=True) | |
| def __len__(self): | |
| return len(self.df) | |
| def __getitem__(self, idx): | |
| row = self.df.iloc[idx] | |
| category = row["category"] | |
| text = row["text"] | |
| # Image | |
| image = Image.open( | |
| f"generated_images/{category}.png" | |
| ).convert("RGB") | |
| image = img_transform(image) | |
| # Audio | |
| y, sr = librosa.load( | |
| f"ESC-50-master/audio/{row['filename']}", | |
| sr=16000 | |
| ) | |
| mel = librosa.feature.melspectrogram( | |
| y=y, | |
| sr=sr, | |
| n_mels=128 | |
| ) | |
| mel = librosa.power_to_db(mel) | |
| mel = torch.tensor(mel).float().unsqueeze(0) | |
| return image, mel, text | |
| def collate_fn(tokenizer): | |
| def collate(batch): | |
| images, audios, texts = zip(*batch) | |
| images = torch.stack(images) | |
| max_width = max(audio.shape[-1] for audio in audios) | |
| padded_audio = [] | |
| for audio in audios: | |
| pad = max_width - audio.shape[-1] | |
| padded_audio.append(F.pad(audio, (0, pad))) | |
| audios_tensor = torch.stack(padded_audio) | |
| tokens = tokenizer( | |
| list(texts), | |
| padding=True, | |
| truncation=True, | |
| return_tensors="pt" | |
| ) | |
| return images, audios_tensor, tokens | |
| return collate |