MSP-Fusion-V0 / processing_msp.py
MahmoodAnaam's picture
Training in progress, step 500
d9d4894 verified
Raw
History Blame Contribute Delete
2.53 kB
import torch
from transformers.processing_utils import ProcessorMixin
class MSPProcessor(ProcessorMixin):
attributes = ["feature_extractor", "video_processor", "tokenizer"]
feature_extractor_class = "MSPAudioFeatureExtractor"
video_processor_class = "MSPVisualVideoProcessor"
tokenizer_class = "AutoTokenizer"
def __call__(self, images=None, text=None, videos=None, audio=None, **kwargs):
if getattr(self, "feature_extractor", None) and audio is not None:
if "sampling_rate" in kwargs:
sampling_rate = kwargs["sampling_rate"]
else:
sampling_rate = self.feature_extractor.sampling_rate
if isinstance(audio, (str, bytes)):
audio = self.feature_extractor._load_audio(
audio, sample_rate=sampling_rate
)
elif (
isinstance(audio, list) and audio and isinstance(audio[0], (str, bytes))
):
audio = [
self.feature_extractor._load_audio(a, sample_rate=sampling_rate)
for a in audio
]
if getattr(self, "video_processor", None) and videos is not None:
if isinstance(videos, (str, bytes)):
videos = self.video_processor._load_video(videos)
elif (
isinstance(videos, list)
and videos
and isinstance(videos[0], (str, bytes))
):
videos = [self.video_processor._load_video(v) for v in videos]
if getattr(self, "tokenizer", None) and text is not None:
if isinstance(text, bytes):
text = text.decode("utf-8")
elif isinstance(text, list) and text and isinstance(text[0], bytes):
text = [t.decode("utf-8") for t in text]
outputs = super().__call__(
images=images, text=text, videos=videos, audio=audio, **kwargs
)
if "device" in kwargs:
device = kwargs["device"]
for key, value in outputs.items():
if isinstance(value, torch.Tensor):
outputs[key] = value.to(device)
elif (
isinstance(value, list)
and value
and isinstance(value[0], torch.Tensor)
):
outputs[key] = [v.to(device) for v in value]
return outputs