File size: 4,082 Bytes
24b727a 35e1ecb 24b727a 2c9648a 24b727a 32e8f6f 24b727a 32e8f6f 24b727a 32e8f6f 24b727a 32e8f6f 24b727a 35e1ecb 24b727a 35e1ecb 32e8f6f 24b727a 32e8f6f 24b727a 32e8f6f 24b727a 32e8f6f 24b727a 32e8f6f 24b727a 32e8f6f 24b727a 32e8f6f 24b727a 32e8f6f 24b727a 32e8f6f 24b727a 32e8f6f 24b727a 32e8f6f 24b727a 32e8f6f 2c9648a 32e8f6f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
---
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 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. |