videomae-base-finetuned-kinetics-movieshots-multitask
gullalc
Clasificación de video
VideoMAE afinado para la clasificación de escala y movimiento de tomas. El modelo VideoMAE-base afinado con el conjunto de datos Kinetics y Movienet está diseñado para clasificar la escala de tomas en cinco clases: ECS (toma de primerísimo plano), CS (toma de primer plano), MS (toma media), FS (toma completa) y LS (toma larga). También clasifica el movimiento de las tomas en cuatro clases: Estática, Movimiento, Tiro y Empuje. El modelo se afinó utilizando el conjunto de datos Movienet durante 5 épocas.
Como usar
from transformers import VideoMAEImageProcessor, VideoMAEModel, VideoMAEConfig, PreTrainedModel
class CustomVideoMAEConfig(VideoMAEConfig):
def __init__(self, scale_label2id=None, scale_id2label=None, movement_label2id=None, movement_id2label=None, **kwargs):
super().__init__(**kwargs)
self.scale_label2id = scale_label2id if scale_label2id is not None else {}
self.scale_id2label = scale_id2label if scale_id2label is not None else {}
self.movement_label2id = movement_label2id if movement_label2id is not None else {}
self.movement_id2label = movement_id2label if movement_id2label is not None else {}
class CustomModel(PreTrainedModel):
config_class = CustomVideoMAEConfig
def __init__(self, config, model_name, scale_num_classes, movement_num_classes):
super().__init__(config)
self.vmae = VideoMAEModel.from_pretrained(model_name, ignore_mismatched_sizes=True)
self.fc_norm = nn.LayerNorm(config.hidden_size) if config.use_mean_pooling else None
self.scale_cf = nn.Linear(config.hidden_size, scale_num_classes)
self.movement_cf = nn.Linear(config.hidden_size, movement_num_classes)
def forward(self, pixel_values, scale_labels=None, movement_labels=None):
vmae_outputs = self.vmae(pixel_values)
sequence_output = vmae_outputs[0]
if self.fc_norm is not None:
sequence_output = self.fc_norm(sequence_output.mean(1))
else:
sequence_output = sequence_output[:, 0]
scale_logits = self.scale_cf(sequence_output)
movement_logits = self.movement_cf(sequence_output)
if scale_labels is not None and movement_labels is not None:
loss = F.cross_entropy(scale_logits, scale_labels) + F.cross_entropy(movement_logits, movement_labels)
return {"loss": loss, "scale_logits": scale_logits, "movement_logits": movement_logits}
return {"scale_logits": scale_logits, "movement_logits": movement_logits}
scale_lab2id = {"ECS": 0, "CS": 1, "MS": 2, "FS": 3, "LS": 4}
scale_id2lab = {v:k for k,v in scale_lab2id.items()}
movement_lab2id = {"Static": 0, "Motion": 1, "Pull": 2, "Push": 3}
movement_id2lab = {v:k for k,v in movement_lab2id.items()}
config = CustomVideoMAEConfig(scale_lab2id, scale_id2lab, movement_lab2id, movement_id2lab)
model = CustomModel(config, model_name, 5, 4)
Funcionalidades
- Clasificación de escala de tomas en cinco clases: ECS, CS, MS, FS, LS
- Clasificación de movimiento de tomas en cuatro clases: Estática, Movimiento, Tiro, Empuje
- Precisión en la escala de tomas: 88.32%
- Precisión en el movimiento de tomas: 91.45%
- Basado en Transformers y Safetensors
Casos de uso
- Clasificación de escalas de tomas en videos.
- Clasificación de movimiento de tomas en videos.
- Aplicación en análisis de películas o videos para estudio de planos y movimientos de cámara.