Exam Behavior Classifier โ€” R(2+1)D-18

Classifies a short clip of a single student into one of five exam behaviors: normal, copying, gesture, mobile, notes.

  • Architecture: torchvision r2plus1d_18, Kinetics-400 pretrained, 5-way head.
  • Input: 16 uniformly-sampled frames, center-cropped to 112ร—112, Kinetics normalization.
  • Training data: 251 clips from the Kaggle ExamCheating_MultiV dataset (V1 prefix-labeled
    • 30 hand-labeled V2 clips).
  • Test (n=38, leakage-free group split): accuracy 71.1%, macro-F1 0.680. On the original clean distribution: 78.8%; on out-of-distribution phone footage: 20% โ€” see the repo for the full distribution-gap analysis.

โš ๏ธ Research & education only โ€” not a proctoring system. Outputs are suggestions for a human to review, never evidence of cheating. Full limitations and ethics discussion in the model card.

Code, training pipeline, and demo app: github.com/MunkhbayarA/exam-cheating-detection

Usage

import torch, torch.nn as nn
from torchvision.models.video import r2plus1d_18
from huggingface_hub import hf_hub_download

CLASSES = ["normal", "copying", "gesture", "mobile", "notes"]

ckpt_path = hf_hub_download("mbradiant/exam-behavior-classifier", "best_model.pt")
ckpt = torch.load(ckpt_path, map_location="cpu", weights_only=True)
model = r2plus1d_18()
model.fc = nn.Linear(model.fc.in_features, len(CLASSES))
model.load_state_dict(ckpt["model"])
model.eval()
# input: float tensor (B, 3, 16, 112, 112), Kinetics-normalized
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support