Detección de Ansiedad en Aulas
Sistema de visión por computadora basado en YOLO11-pose para identificar estados ansiosos a través de patrones de movimientos de estudiantes en salas de clases de la Universidad del Bío-Bío.
Problema y Motivación
A pesar del amplio catálogo de apoyo de la DDE (atención clínica, talleres, actividades recreativas), todo opera de forma reactiva. La ansiedad tiene manifestaciones físicas observables: los gestos de auto-contacto (frotarse el cuello, tocarse la cara) aumentan en frecuencia y duración bajo tensión interna. El proyecto acuña el término “estado ansioso” para delimitar el alcance: no se diagnostica ansiedad clínica, se detectan patrones corporales transitorios.
Una revisión sistemática en Web of Science, Scopus e IEEE Xplore (1 428 artículos iniciales, 5 pertinentes tras filtros) reveló que ningún trabajo previo aborda la detección de ansiedad en aulas mediante posturas corporales, validando la originalidad del enfoque.
Construcción del Dataset
Captura
5 sesiones de grabación en asignaturas reales de la UBB (~3 h de material), con consentimientos informados, anonimización de rostros y etiquetado en Roboflow.
Topología de 16 keypoints personalizada
A diferencia de la topología estándar de COCO (17 keypoints), se unificaron los 5 puntos faciales en un único keypoint (cabeza), priorizando la región anatómica relevante (brazos, manos y cabeza) sobre detalles del rostro.
| Keypoint | Descripción |
|---|---|
| 0 | Cabeza |
| 1 | Cuello |
| 2 | Hombro izquierdo |
| 3 | Codo izquierdo |
| 4 | Mano izquierda |
| 5 | Hombro derecho |
| 6 | Codo derecho |
| 7 | Mano derecha |
| 8 | Torso central |
| 9 | Base torso |
| 10 | Cadera izquierda |
| 11 | Rodilla izquierda |
| 12 | Pie izquierdo |
| 13 | Cadera derecha |
| 14 | Rodilla derecha |
| 15 | Pie derecho |
Dos clases para manejar oclusión: person-full-body (16 kp visibles) y person-half-body (solo kp 0–9, torso hacia arriba). Criterios de etiquetado: bounding box ajustada, keypoint ocluido si se intuye su posición, eliminado si no se intuye.
Evolución del dataset:
| Versión | Imágenes | Instancias | Aporte |
|---|---|---|---|
| v1 | 51 | 1 344 | Línea base |
| v2 | 51 | 2 838 | + aumentación (mosaic, mixup, erasing) |
| v3 | 70 | 4 344 | + ángulos inéditos, iluminación variable |
Se aplicó monitoreo incremental (51 → 61 → 70) con punto de corte al detectar saturación de convergencia. La alta densidad (~36 estudiantes/imagen) compensa el volumen reducido: 4 300+ esqueletos anotados.
Entrenamiento: Metodología KDD en 4 Fases
Se siguió la metodología KDD (Fayyad et al., 1996), la cual es un proceso iterativo que permite retroalimentar hallazgos entre fases. Aislándose en cada una una variable crítica: arquitectura (F1), resolución (F2), datos (F3) y hardware (F4).
| Fase | Setup | Hallazgo principal |
|---|---|---|
| F1 | Nano/Small/Medium/Large a 640 px, dataset v1, 200 épocas, Tesla T4 | Box OK (~0.73) pero Pose mAP50-95 ≤0.42. Error de cuantización espacial: a 640 px los estudiantes lejanos ocupan muy pocos píxeles. El bottleneck es la resolución, no la profundidad de red. |
| F2 | YOLO11s a 960 px + aumentación agresiva (mosaic, mixup, erasing, rotación, escalado, flip) | Pose mAP50-95 sube de 0.419 a 0.478 (+14%). Small (9.9M) supera a Large (26.1M) con 62% menos parámetros. Half-body: +20%. La resolución espacial es más determinante que la profundidad. |
| F3 | YOLO11s a 960 px, dataset v3 (70 img, 4 344 instancias) | Pose mAP50-95 alcanza 0.521 (+9%). Half-body: 0.416 (+11%). Curvas estables sin divergencia. Convergencia asintótica: se alcanzó el límite de aprendizaje para este volumen de datos. |
| F4 | YOLO11l a 960 px, dataset v3, Google Colab Pro + NVIDIA A100 (40 GB VRAM) | Benchmark comparativo en GPU local (RTX 3060). Calibración F1-Confidence → umbral óptimo = 0.393 (prioriza sensibilidad, delega reducción de FP al filtro temporal). Selección del modelo final. |
Sistema de Inferencia
Pipeline modular en dos etapas, desacoplando GPU (extracción) de CPU (análisis):
Video → [Extracción: YOLO + ByteTrack + lógica geométrica] → CSV → [Análisis: filtro temporal] → Reporte
Etapa 1 — Tracking y detección de contacto
ByteTrack asigna IDs persistentes a cada estudiante incluso bajo oclusiones (buffer de 600 frames). Por cada persona se extraen los 16 keypoints y se aplica la lógica geométrica: se calcula la longitud del torso (distancia cuello → base-torso) como referencia de escala y se define un umbral dinámico radio = torso × 0.5. Si la distancia de cualquiera de las manos a la cabeza es menor que ese radio, se registra touching_head = True. Este mecanismo escala automáticamente con la profundidad del estudiante: un torso grande en píxeles (primera fila) genera un radio proporcionalmente grande; uno pequeño (fondo) genera uno pequeño, manteniendo la equivalencia del criterio en toda la escena y evitando falsos positivos/negativos por perspectiva.
Los resultados se almacenan en CSV (frame, timestamp, person_id, touching_head, torso_len, distancias, 48 coordenadas crudas). El renderizado visual se suprime para priorizar velocidad de procesamiento.
Etapa 2 — Filtro temporal y reporte
Al finalizar, el módulo de análisis segmenta los datos por persona y detecta bloques de fotogramas consecutivos con contacto. Solo se consideran eventos ≥ 2.0 segundos, umbral basado en Shreve et al.: los gestos de auto-pacificación son sostenidos, no toques instantáneos. El resultado es un reporte tabular con ID de estudiante, número de eventos ansiosos y duración total acumulada.
Hardware de inferencia: GPU NVIDIA RTX 3060 (8 GB VRAM), CPU AMD Ryzen 5 9600X, 32 GB RAM. Hardware de consumo local, sin dependencia de nube.
Resultados
| Fase | Modelo | Res. | Pose mAP50-95 (global) | Full-body | Half-body |
|---|---|---|---|---|---|
| 1 | YOLO11l | 640 | 0.419 | 0.526 | 0.312 |
| 2 | YOLO11s | 960 | 0.478 | 0.581 | 0.375 |
| 3 | YOLO11s | 960 | 0.521 | 0.626 | 0.416 |
| 4 | YOLO11l | 960 | 0.579 | 0.704 | 0.454 |
- Progresión global: +38.19%.
- Full-body: +33.84%.
- Half-body: +45.51%.
El histograma de longitudes de torso (~15 a ~95 px) validó la adaptabilidad del umbral dinámico. El filtro de 2 s eliminó exitosamente el ruido postural (<1 s), reteniendo solo eventos compatibles con estado ansioso. El modelo procesa video a velocidad funcional en la RTX 3060.
Librerías
| Librería | Versión |
|---|---|
| Ultralytics | 8.3.223 |
| torch | 2.9.0 |
| OpenCV | 4.12.0 |
| Pandas | 2.3.3 |
| Numpy | 2.2.6 |
| Roboflow | 1.2.11 |
| Matplotlib | 3.10.7 |
Conclusiones
- Viabilidad: se demostró que es factible detectar estados ansiosos mediante HPE en aulas reales, cubriendo el ciclo completo: datos éticos → entrenamiento iterativo → inferencia en hardware de consumo.
- Diseño de clases: la separación full-body/half-body fue una decisión acertada que permitió manejar la oclusión y fue el motor del progreso en métricas.
- Umbral dinámico: el radio proporcional a la longitud del torso normaliza correctamente la detección a través de distintas profundidades en la escena.
- Filtro temporal: los 2 segundos de contacto continuo conectan la geometría con la interpretación psicológica, eliminando ruido postural.
- Limitaciones: a pesar de contar con más de 4 300 instancias etiquetadas, estas provenían de pocas imágenes (70), capturadas en solo dos aulas y desde únicamente dos ángulos de cámara. Esta baja variabilidad visual limita la capacidad del modelo para generalizar la estimación de postura ante nuevos escenarios, disposiciones de mobiliario o perspectivas no vistas durante el entrenamiento. A esto se suma la resolución monocular y la ausencia de validación clínica concurrente.
- Trabajo futuro: despliegue en streaming con alertas en tiempo real, estimación 3D multicámara, incorporación de señales multimodales e integración con los sistemas de la DDE para consulta por profesionales de salud mental.
Referencias
- Shreve, E. G. et al. (1988). Nonverbal expressions of anxiety in physician-patient interactions. Psychiatry, 51(4).
- Cao, Z. et al. (2017). Realtime multi-person 2D pose estimation using part affinity fields. CVPR.
- Fayyad, U. et al. (1996). From data mining to knowledge discovery in databases. AI Magazine, 17(3).
- Ultralytics. (2025). YOLO11 Documentation. https://docs.ultralytics.com
