Este modelo foi treinado para classificar vídeos de expressões faciais em três níveis de dor:
Source du modèle
Description de la source
Este modelo foi treinado para classificar vídeos de expressões faciais em três níveis de dor:
O modelo é baseado no (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.
Sources
1 sourceVérifié 18 sept.
Artefacts du modèle
1 artefactExtraits de sources
2 extraitsimport 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()}")
O modelo foi treinado com um dataset de vídeos classificados em três categorias de intensidade de dor.
O modelo foi selecionado com base no F1-score macro na validação. As métricas incluem:
O monitoramento de métricas foi realizado usando Weights & Biases.
Este modelo é adequado para:
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.
--- 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