El análisis automático de videos deportivos permite identificar y clasificar momentos relevantes dentro de un partido de fútbol —como saques de banda, faltas, corners o tiros al arco—, lo que facilita el análisis táctico, la indexación y la generación de resúmenes automáticos.
Este proyecto implementa un sistema de clasificación de eventos futbolísticos a partir de videos, utilizando clips temporales generados automáticamente y un modelo 3D CNN (por defecto r3d_18 de TorchVision) entrenado sobre datos del conjunto SoccerNet.
Objetivo: Detectar y clasificar eventos de fútbol a partir de clips cortos de video, con una interfaz visual desarrollada en Gradio.
El enfoque está inspirado en el trabajo de Carreira & Zisserman (2017):
“Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset.”
📄 Arxiv PDF
Dicho trabajo introdujo las redes convolucionales 3D infladas (I3D), que extienden las convoluciones espaciales de 2D a 3D para capturar información temporal.
Nuestro modelo sigue este principio, implementado mediante Convoluciones 3D (R2ELus1D_18) de torchvision, optimizada para clips de fútbol.
- 📹 Entrada: Clips de video cortos recortados directamente desde la interfaz.
- 🧠 Modelo base:
Convoluciones 3D (R2ELus1D_18)preentrenada en Kinetics, adaptada a 8 clases de eventos. - ⚡ Procesamiento de video:
- Muestreo uniforme de
T = 16frames. - Resize por lado corto (256 px) y center crop (112×112).
- Normalización por canal (mean=0.45, std=0.225).
- Muestreo uniforme de
- 💬 Interfaz Gradio:
- Permite subir y recortar un clip.
- Ejecuta la inferencia en tiempo real.
- Genera un archivo
.pydescargable con la predicción.
- 📦 Salida:
- Clase predicha y Top-3 probabilidades.
- Archivo
.pycon código para imprimir la predicción.
ProyectoReferee/
│
├── App/
│ ├── app.py
│ ├── apt.txt
│
├── DummyTestingVideos/
│ ├── Falla penal Cristiano Ronaldo C.mp4
│ ├── Gol de tiro libre de Neymar.mp4
│ ├── How to Improve Throw Ins.mp4
│ ├── Olivier GIROUD GOAL _ FIFA PUSKAS.mp4
│ ├── different angle of Heung-min S.mp4
│
├── LICENSE
├── README.md
├── RefereeAservice.ipynb
├── requirements.txt
├── modelo.pth
El modelo está basado en R2ELus1D_18 de torchvision.models.video, donde utilizamos los pesos del modelo preentrados en KINETICS400_V1 modificada para ajustarse al número de clases de SoccerNet:
CLASS_LABELS = [
"Ball out of play",
"Throw-in",
"Foul",
"Indirect free-kick",
"Clearance",
"Shots on target",
"Shots off target",
"Corner"
]- Dataset: SoccerNet
- Duración de clip: 16 frames (≈1.6 s a 10 FPS)
- División: 70% entrenamiento / 15% validación / 15% prueba
- Optimizador:
AdamW - Pérdida:
CrossEntropyLoss - Resolución: 112×112
App pública disponible en Hugging Face Spaces 👇 👉 https://huggingface.co/spaces/Jeferson08/Referee
Funciones principales:
- Subir un clip de video (mp4, mkv, avi, etc.).
- Recortarlo visualmente desde la interfaz (Trim).
- Clasificar el evento con el modelo.
- Descargar un
.pycon los resultados.
| Clase predicha | Probabilidad | Ejemplo visual |
|---|---|---|
| Shots on target | 0.91 | 🎯 |
| Foul | 0.06 | 🚫 |
| Corner | 0.02 | 🥅 |
El modelo puede mejorarse con clips más largos, utilizando todo el dataset de Soccernet o probando nuevas arquitecturas temporales (Transformer 3D, TimeSformer, etc.).
- Python 3.10
- PyTorch / Torchvision
- OpenCV
- Gradio
- NumPy / Pandas
- SoccerNet Dataset
Hecho con ❤️ usando PyTorch y Gradio
