Skip to content
ModelListedExternal
Download

Pain Classifier Video

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

KindOtherVersionRevision 35e1ecb

Model source

Kind
Other
File size
329 MB
Version
vRevision 35e1ecb
Updated
Sep 18, 2026
Downloads
9
Source
Hugging Face

Source description

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.

Sources

1 source
Hugging FacePrimaryVersion 35e1ecb2706479ceaf919ee6c20ca2c02356739d
huggingface.co/maike616/pain-classifier-video/tree/35e1ecb2706479ceaf919ee6c20ca2c02356739d

Verified Sep 18

Model artifacts

1 artifact

model.safetensors

safetensors · 329 MB · SHA-256 c249eb311eb9…5600 · Hugging Face

Download

Source excerpts

2 excerpts

--- library_name: transformers tags: - video-classification - videomae - medical - pain-assessment - healthcare - computer-vision - pytorch metrics: - f1 - accuracy - recall - confusion_matrix - precision --- # 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](https://huggingface.co/MCG-NJU/videomae-base) (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 ```python 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 Treinamen...

Source context: 9 downloads · 1 likes · Pipeline video-classification · Library transformers · Repo maike616/pain-classifier-video