VideoMAE Crime5 Continuous
Modelo VideoMAE V2 ViT-Base ajustado para clasificación continua de cinco clases de acciones en video y exportado a ONNX. El repositorio incluye el preprocesamiento, la política temporal de alertas y un script de inferencia reproducible.
Este artefacto es un prototipo académico. No debe utilizarse como único mecanismo para tomar decisiones policiales, legales, laborales o de seguridad sobre personas.
Clases
| Índice | Clase |
|---|---|
| 0 | normal |
| 1 | hurto |
| 2 | robo |
| 3 | agresion_fisica |
| 4 | vandalismo |
Resultados de evaluación
Evaluación multiclase a nivel de video sobre 60 videos de prueba, con 12 videos por clase. Para cada video se promediaron los logits de sus clips.
| Métrica | Resultado |
|---|---|
| Accuracy | 0.7167 |
| Macro-Precision | 0.7751 |
| Macro-Recall | 0.7167 |
| Macro-F1 | 0.7213 |
Métricas por clase
| Clase | Precision | Recall | F1-score |
|---|---|---|---|
| normal | 0.5000 | 0.9167 | 0.6471 |
| hurto | 0.9000 | 0.7500 | 0.8182 |
| robo | 0.8000 | 0.6667 | 0.7273 |
| agresion_fisica | 0.8182 | 0.7500 | 0.7826 |
| vandalismo | 0.8571 | 0.5000 | 0.6316 |
Rendimiento de referencia
Benchmark del checkpoint PyTorch con CUDA, batch 1 y entrada [1, 3, 16, 224, 224]:
| Indicador | Resultado |
|---|---|
| Latencia media por clip | 21.035 ms |
| Latencia mediana | 20.937 ms |
| Latencia P95 | 21.554 ms |
| Throughput | 47.54 clips/s |
| Pico de VRAM durante inferencia | 533.56 MiB |
| Parámetros | 86,231,045 |
Equipo de referencia: NVIDIA GeForce RTX 3080, FP16/AMP. Estas cifras corresponden al modelo PyTorch y no representan la latencia de ONNX Runtime en CPU.
Archivos del modelo
Los dos archivos siguientes forman una sola exportación ONNX con datos externos y deben permanecer juntos en el mismo directorio:
videomae_crime5_continuous.onnxvideomae_crime5_continuous.onnx.data
El checkpoint PyTorch de entrenamiento no es necesario para ejecutar la versión ONNX.
Instalación
Se recomienda Python 3.10 en un entorno virtual:
python -m venv .venv
En Windows PowerShell:
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
En Linux:
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
Inferencia
Con visualización:
python infer_onnx.py `
--video "C:\ruta\video.mp4" `
--provider cpu
Sin interfaz gráfica y guardando el reporte en una ruta específica:
python infer_onnx.py \
--video "/ruta/video.mp4" \
--provider cpu \
--no-display \
--output-json "resultado.json"
Providers admitidos:
auto: intenta CUDA cuando está disponible y, en caso contrario, utiliza CPU.cpu: fuerzaCPUExecutionProvider.cuda: solicitaCUDAExecutionProvidery permite el fallback a CPU si faltan sus dependencias.
Al terminar, el script guarda un JSON con las ventanas procesadas, probabilidades, alertas, provider utilizado y estadísticas de latencia. Si no se indica --output-json, lo guarda en inference_results/.
Entrada y salida
- Entrada: tensor
float32con forma[1, 3, 16, 224, 224]y disposición NCTHW. - Color: RGB.
- Muestreo: 16 fotogramas separados por 4 fotogramas; el clip abarca 61 fotogramas.
- Transformación espacial: redimensionar el lado corto a 224 y aplicar recorte central de 224 × 224.
- Normalización: media
[0.485, 0.456, 0.406]y desviación[0.229, 0.224, 0.225]. - Salida: cinco logits en el orden de clases indicado anteriormente.
El softmax y la política temporal se aplican fuera del grafo ONNX.
Política temporal de alertas
| Parámetro | Valor |
|---|---|
| Suavizado de probabilidades | 4 ventanas |
| Umbral de delito | 0.40 |
| Confirmación para iniciar | 2 ventanas |
| Liberación para finalizar | 3 ventanas |
| Stride de inferencia | 64 fotogramas |
En el conjunto de prueba, esta política detectó 50 de 54 eventos y clasificó correctamente 46 de 54, con 0.6799 alertas falsas por minuto normal. La política fue seleccionada en validación y se aplica en infer_onnx.py; no forma parte del modelo ONNX.
Validación de la exportación
La equivalencia numérica entre PyTorch y ONNX Runtime fue comprobada con la misma entrada:
- Diferencia absoluta máxima:
0.00000507. - Diferencia absoluta media:
0.00000327. - Predicción coincidente: sí.
- Provider ONNX validado:
CPUExecutionProvidercon ONNX Runtime 1.23.2.
Consulta VALIDATION.md para conocer el procedimiento completo y benchmark.json para los resultados estructurados.
Uso previsto
El modelo está destinado a investigación, demostraciones académicas y prototipos de análisis de video. Puede emplearse como componente de apoyo para marcar fragmentos que posteriormente serán revisados por una persona.
Limitaciones
- Fue entrenado y evaluado sobre una partición procesada de UCF-Crime; su desempeño puede cambiar con otras cámaras, regiones, condiciones de iluminación o ángulos.
- Las clases visualmente próximas pueden confundirse, especialmente acciones breves o parcialmente ocultas.
- El recall de
vandalismofue 0.50 en la evaluación por video. - Una predicción describe el contenido visual del clip, no identifica personas ni determina responsabilidad legal.
- La política temporal reduce alertas aisladas, pero no elimina falsos positivos ni falsos negativos.
- Se requiere validación adicional antes de cualquier uso operativo.
Licencia y atribución
El dataset no se distribuye en este repositorio. El artefacto se deriva de VideoMAE V2 y de pesos preentrenados asociados; antes de cualquier redistribución o uso comercial deben revisarse sus licencias y las condiciones del dataset. Consulta LICENSE_NOTES.md. Por esta razón, la ficha declara temporalmente license: other y no concede por sí sola derechos adicionales.
Integridad
Los hashes SHA-256 se encuentran en SHA256SUMS.txt. Deben regenerarse después de cualquier modificación de los archivos del repositorio.