Classificador de Dor em Vídeo

Este modelo foi treinado para classificar vídeos de expressões faciais em três níveis de dor:

  • High_Pain (Dor Intensa)
  • Low_Pain (Dor Leve)
  • No_Pain (Sem Dor)

Modelo

O modelo é baseado no VideoMAE (Video Masked Autoencoder) e foi refinado (fine-tuned) especificamente para detectar e classificar níveis de dor a partir de vídeos de expressões faciais.

Exemplo de uso

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' 


from transformers import VideoMAEImageProcessor, AutoModelForVideoClassification
import torch
import numpy as np
import av



def extract_frames(video_path, num_frames=16):
    frames = []
    try:
        container = av.open(video_path)
        stream = container.streams.video[0]
        indices = np.linspace(0, stream.frames - 1, num=num_frames, dtype=int)
        
        for i, frame in enumerate(container.decode(stream)):
            if i in indices:
                img = frame.to_ndarray(format="rgb24")
                frames.append(img)
            if len(frames) == num_frames:
                break
                
        container.close()
    except Exception as e:
        print(f"Erro ao processar o vídeo: {e}")
        
    if len(frames) < num_frames:
        pad_size = num_frames - len(frames)
        if frames:
            last_frame = frames[-1]
            frames += [last_frame.copy() for _ in range(pad_size)]
        else:
            frames = [np.zeros((224, 224, 3), dtype=np.uint8)] * num_frames
            
    return frames

processor = VideoMAEImageProcessor.from_pretrained("maike616/pain-classifier-video")
model = AutoModelForVideoClassification.from_pretrained("maike616/pain-classifier-video")

high = r'AI4Pain Dataset\Validation\video\high_pain\1_Pain_HIGH_20.mp4'
low  = r'AI4Pain Dataset\Validation\video\low_pain\1_Pain_LOW_3.mp4'
no_pain = r'AI4Pain Dataset\Validation\video\no_pain\1_Rest_1.mp4'

video_frames = extract_frames(no_pain)

inputs = processor(video_frames, return_tensors="pt")

with torch.no_grad():
    outputs = model(**inputs)
    probs = torch.softmax(outputs.logits, dim=1)
    predicted_class_idx = outputs.logits.argmax(-1).item()
    predicted_class = model.config.id2label[predicted_class_idx]
    
print(f"Classe predita: {predicted_class}")
print(f"Probabilidades: {probs[0].tolist()}")

Detalhes do Treinamento

Dataset

O modelo foi treinado com um dataset de vídeos classificados em três categorias de intensidade de dor.

Hiperparâmetros

  • Arquitetura base: VideoMAE
  • Taxa de aprendizado: 3e-5
  • Optimizer: AdamW com weight decay de 0.01
  • Scheduler: OneCycleLR
  • Batch size: 32
  • Número de frames: 16

Técnicas aplicadas

  • Mixed Precision Training
  • Early Stopping baseado em F1-score
  • Amostragem uniforme de frames

Métricas de Desempenho

O modelo foi selecionado com base no F1-score macro na validação. As métricas incluem:

  • F1-score
  • Precision e Recall por classe
  • ROC AUC
  • Matrizes de confusão

O monitoramento de métricas foi realizado usando Weights & Biases.

Limitações

  • O modelo foi treinado para processar exatamente 16 frames por vídeo
  • O desempenho pode ser afetado pela qualidade da imagem, iluminação, e posicionamento facial
  • O modelo foi treinado com expressões faciais específicas e pode não generalizar bem para todos os tipos de expressão de dor

Casos de Uso

Este modelo é adequado para:

  • Pesquisa em análise de dor
  • Aplicações em saúde para monitoramento de pacientes
  • Estudos sobre expressões faciais e dor

Créditos

Este modelo utiliza o VideoMAE como base, desenvolvido pela MCG-NJU. O treinamento e adaptação para classificação de dor foram realizados como parte do projeto de pesquisa desenvolvido na WP3-Ceteli.

Downloads last month
90
Safetensors
Model size
86.2M params
Tensor type
F32
·
Inference Providers NEW
This model is not currently available via any of the supported Inference Providers.