Simple Science

Ciencia de vanguardia explicada de forma sencilla

# Informática # Visión por Computador y Reconocimiento de Patrones # Aprendizaje automático

Enfoques innovadores para la detección de anomalías en la vigilancia por video

Probando varios modelos para detectar actividades inusuales en datos de video.

Fabien Poirier

― 12 minilectura


Técnicas de Detección de Técnicas de Detección de Anomalías en Videos tiempo real de actividades inusuales. Probando modelos para la detección en
Tabla de contenidos

Como no pude acceder a cámaras de vigilancia reales durante mis estudios, todos los videos que usé fueron algunos que descargué. Los datos de video necesitan mucha potencia de computadora para procesarse. Desafortunadamente, no tenía un fancy servidor GPU en mi empresa o laboratorio de investigación, así que tuve que arreglármelas con una computadora normal que tenía 32 GB de RAM y un buen procesador Intel Core i9. También tenía una tarjeta gráfica Nvidia GeForce RTX2080, que me dio un pequeño impulso.

En esta parte, hablaremos sobre las pruebas que realicé donde combiné dos modelos para verificar qué tan bien detectaban actividades inusuales (o Anomalías). Explicaré cómo cambiaron los resultados dependiendo de si los ejecuté en paralelo o uno tras otro. Luego, compartiré los experimentos que hice para detectar objetos y anomalías, lo que me ayudó a averiguar qué modelos funcionaban mejor para cada situación. Finalmente, terminaré con un resumen de todo.

Preprocesamiento de Datos

Aquí, explicaré cómo preparé los datos para la prueba.

Como se mencionó anteriormente, los videos a menudo muestran acciones normales interrumpidas por inusuales. Por eso, tuve que cortar los videos en pedazos para concentrarme en las actividades inusuales y analizarlas mejor. Aún con este enfoque, manejar todos estos datos de video fue un verdadero dolor de cabeza por la cantidad que había.

Cargar todos los videos de una vez era imposible porque la memoria de mi computadora simplemente no lo soportaba. Para lidiar con este problema, decidí usar una herramienta especial llamada generador. Piensa en ello como un camarero trayéndote los platos uno a la vez en lugar de servir toda la comida de una vez.

Mi primera prueba fue ver cómo funcionaban diferentes generadores. Probé cuatro tipos diferentes:

  1. Un generador que crea secuencias de video moviendo una ventana a lo largo del video.
  2. Un generador que también usa una ventana deslizante pero superpone las secuencias.
  3. Un generador que usa un paso dinámico para recolectar imágenes de cada video.
  4. Un generador que combina la ventana deslizante con el paso dinámico.

El tercer generador resultó ser la mejor opción. ¿Por qué? Porque resuelve algunos grandes problemas que tienen los otros. Para los dos primeros generadores, el tiempo que tarda en aprender los modelos depende de la duración de los videos—los videos largos significan tiempos de aprendizaje más largos. Además, decidir el tamaño de la ventana deslizante es complicado; necesita capturar toda la acción, o el modelo podría no aprender correctamente.

Por supuesto, el tercer generador tampoco es perfecto. Tiene su propio problema al lidiar con videos de diferentes longitudes. Por ejemplo, con acciones cortas, el tiempo entre imágenes es corto, mientras que para videos más largos, puede haber una larga espera entre imágenes. Así que, los videos cortos obtienen imágenes más detalladas, mientras que los videos largos pueden parecer menos claros.

Este tercer generador me permite crear secuencias que no necesitan que las imágenes estén superpuestas, lo cual es genial. Al cambiar el tamaño del paso, puedo decidir qué tan rápido quiero detectar cosas, ya sea por secuencia o por video. Esta flexibilidad me ayuda a lidiar tanto con videos finitos como con los continuos.

Una vez que elegí mi generador, tuve que decidir el tamaño de mis imágenes. Ajusté el tamaño y encontré que el mejor tamaño era... bueno, digamos que funcionó perfectamente.

Para el tamaño de la secuencia, probé varias longitudes entre 15 y 30 imágenes. Dado que mis videos corren a cierta velocidad (30 fotogramas por segundo), descubrí que usar 20 imágenes era lo óptimo.

Para ver qué tan bien funcionó cada experimento, creé mi propio método para definir el paso al elegir imágenes. De esta manera, pude probar mis modelos bajo las mismas condiciones que durante el entrenamiento, ya fuera revisando un video completo o trabajando con secuencias. Mi objetivo principal es ayudar a las personas a vigilar flujos continuos, así que me centraré en el rendimiento relacionado con la Detección de secuencias.

Después de configurar mis secuencias, hice que mis datos fueran un poco más vivos aplicando algunas técnicas de mejora como efectos espejo, acercamientos y cambios de brillo. Esto ayudó a multiplicar mis datos sin alejarme demasiado de la realidad.

A continuación, miré diferentes formas de preprocesar datos—básicamente, cómo limpiar y preparar imágenes. Comencé con trucos estándar del mundo de la visión por computadora: calcular cómo se mueven las cosas entre imágenes, comparar imágenes para encontrar diferencias y aplicar máscaras.

¿Mis hallazgos? El método de flujo óptico no me impresionó en absoluto. Se mantuvo en un 50% de precisión durante el entrenamiento. El método de diferencia entre imágenes trajo resultados un poco mejores, pero luego se empeoró cuando usé una máscara. Sorprendentemente, cuando solo usé aumento de datos, los resultados fueron los mejores. Sin ningún preprocesamiento, mi precisión fue baja, aunque la recuperación fue alta. Con solo aumento de datos, logré obtener una precisión decente y una recuperación sólida.

Luego pasé a algunos métodos de preprocesamiento más avanzados utilizando modelos especializados para la detección de anomalías. Pensé en usar algo llamado DINO. Después de probarlo, noté que tomaba mucho tiempo de procesamiento, así que no era práctico para mis necesidades en tiempo real. Sin embargo, funcionó bien para la detección de disparos sin necesidad de entrenamiento adicional.

Para la detección de peleas, las cosas no fueron tan bien, lo que me llevó a excluir los Transformadores de Visión de mis planes y concentrarme en modelos que se ajustaban mejor a mis necesidades.

Ahora, hablemos de YOLO, mi opción preferida para detectar objetos en mis videos y averiguar qué están haciendo las personas. Hizo un buen trabajo, así que lo añadí a mi configuración.

Experimentos en Modo Series

Ahora, es momento de ver cómo se desempeñaron mis modelos cuando se apilaron uno tras otro. Comencé descomponiendo mis videos para capturar cada fotograma, que luego pasé por YOLO para detectar todos los diferentes objetos en las imágenes. Después de eso, volví a juntar el video y lo pasé por otro modelo llamado CGRU para verificar anomalías.

Comparé este método con el uso de CGRU por sí solo, y los resultados fueron bastante reveladores. Resulta que agregar YOLO no cambió mucho el rendimiento del modelo. Eso significa que el modelo no prestó mucha atención a los cuadros delimitadores durante el entrenamiento. También mejoré mi preprocesamiento usando los cuadros delimitadores para crear máscaras que se centraran en las partes de la imagen con los objetos y eliminaran tanto fondo como pude.

Para cualquier imagen que careciera de detección de objetos, tuve dos opciones: o mantener la imagen original o reemplazarla con una negra. Probé ambas opciones, y aunque funcionaron de manera similar, vi ligeras diferencias. Usar un fondo negro parece mejorar la detección de acciones normales, pero perjudicó la precisión para peleas y fuegos. Esto podría suceder cuando se pierden detalles importantes durante la detección, haciendo que el modelo ignore información crucial.

Rápidamente me di cuenta de que los ajustes para los parámetros de detección de objetos, como la confianza y los umbrales de superposición, eran esenciales. Puse la barra de confianza al 55 por ciento para mis pruebas.

Ahora, cuando se trataba de detectar acciones realizadas por personas, YOLO versión 7 se destacó al esbozar sus "esqueletos," similar a lo que hace OpenPose. Así que, realicé estimación de pose en mis videos para ver cómo impactaba en la detección de comportamientos. Para mantenerlo simple, me concentré solo en las clases de Pelea y Disparo, ya que no todas las anomalías necesitaban humanos.

Luego probé si la estimación de pose mejoraba las cosas. Al principio, saqué los fondos de los videos para agudizar la detección, pero pronto me di cuenta de que eso podría desajustar la detección de otros tipos de anomalías. Así que, volví a agregar el fondo y volví a entrenar mi modelo para ver si aún podía detectar cosas como incendios.

En términos de rendimiento general, agregar la clase de fuego no cambió mucho, pero los resultados mostraron una caída en la detección de disparos, ya que algunos de ellos fueron etiquetados como incendios. Esto me llevó a cambiar mi modelo multinivel por uno normal/anormal para ver cómo influía YOLO. Entrené dos modelos nuevos—uno sin fondos y otro con ellos.

Independientemente del preprocesamiento, combinar diferentes tipos de anomalías mejoró consistentemente el rendimiento de mis modelos. Sin embargo, la inclusión de anomalías no relacionadas, como incendios, tendía a perjudicar los resultados. También noté que usar YOLO para preparar mis datos aumentó la precisión.

Procesamiento en Modo Paralelo

A continuación, decidí ejecutar mis modelos en paralelo. La idea aquí era detectar objetos mientras analizaba el tiempo, luego combinar resultados para mejorar la precisión. Mi primer experimento fue combinar CGRU entrenado en la categoría de "disparo" con YOLO, usando una regla simple: si el modelo predecía "normal" pero detectaba un arma, cambiaría la salida a "disparo."

Para la detección de incendios, hice lo mismo. Evalué qué tan bien funcionaba esta combinación para cada secuencia de video y establecí un umbral de confianza en 55 por ciento.

Los resultados para detectar incendios fueron prometedores. La combinación de CGRU y YOLO mejoró la detección de incendios, mientras que la detección de disparos no mostró cambios. A primera vista, parecía que ambos modelos estaban captando las mismas características para la detección de disparos, lo que indicaba cuán importante era la precisión de YOLO para el rendimiento general.

Decidí ajustar un poco las reglas para detectar disparos. Dado que YOLO usa cálculos para averiguar si se ha detectado un objeto, pensé: "Oye, tal vez un disparo solo debería registrarse si está cerca de una persona." Así que, entrené un modelo nuevo que incluía imágenes de armas y algunas otras imágenes para ver cómo se desempeñaba.

Mi nuevo modelo para detectar personas hizo un mejor trabajo que antes, aunque la detección de armas todavía tenía sus altibajos. Cuando comparé los resultados, el rendimiento de mi nuevo modelo para la detección de disparos vio un pequeño aumento.

Luego investigué cómo reducir falsos positivos. Después de nuevas evaluaciones mientras mantenía todo bajo control, vi que había menos falsas alarmas. Sin embargo, eso significó que los verdaderos positivos disminuyeron un poco, mostrando una necesidad de precisión en YOLO.

Dada la gravedad de las anomalías que intentaba detectar, quería mantener el modelo que tenía la tasa de falso negativo más baja, incluso si eso significaba permitir algunas alertas falsas. Además, entrenar un único modelo de detección de objetos para cubrir todas mis anomalías haría que todo fuera más simple.

Comparación de Rendimiento para Cada Uno de Nuestros Modelos

¡Es hora de compartir cómo se desempeñaron todos los modelos en general! Tenía tres distintos para detectar peleas, disparos e incendios. Los evaluaré en su clasificación de video (una detección por video) y en su velocidad para detectar anomalías en un flujo continuo (una detección por secuencia).

Para peleas, el modelo se desempeñó bien al revisar videos completos, alcanzando una precisión del 85.6%, pero se quedó corto en flujos continuos con un 63.1%. La detección de disparos subió a una precisión del 86.5% para videos completos pero cayó un poco en secuencias al 91.8%, mostrando que funciona mejor en escenarios estáticos. Por otro lado, la detección de incendios fue sólida, anotando un 83.8% para videos y subiendo a un 86.0% para secuencias, revelando que es un buen performer.

Cuando combiné todos mis conjuntos de datos para un modelo multinivel, noté algunas tendencias interesantes. A pesar de tener más datos, el rendimiento de detección cayó para la clase de fuego y disparo en flujos continuos, pero en general, mi modelo multinivel se mantuvo decentemente.

Al ver videos de incidentes de la vida real, mi modelo multinivel se desempeñó respetablemente. Las velocidades a las que pudo procesar datos tampoco estaban mal, registrando tiempos de detección entre 104 y 744 milisegundos.

Conclusiones

A través de todas estas pruebas y ajustes, ¿qué aprendí? Si solo quieres detectar algún incidente, un modelo binario (normal/anómalo) es el camino a seguir. Puede que no señale exactamente qué salió mal, pero cubre todas las bases.

Por otro lado, si tu objetivo es detectar un tipo específico de anomalía, como una pelea o un incendio, atenerse a un modelo especializado debe dar mejores resultados. Si quieres mezclar todo tipo de anomalías y que un humano averigüe los detalles más tarde, un modelo normal/anormal se ajusta perfectamente a tus necesidades.

En resumen, experimentar con estos modelos ha sido un viaje salvaje. Es cierto que la detección en tiempo real no siempre es perfecta, pero con los ajustes y enfoques correctos, podemos acercarnos lo suficiente para obtener valiosos insights para mantener un ojo en la seguridad.

Fuente original

Título: Real-Time Anomaly Detection in Video Streams

Resumen: This thesis is part of a CIFRE agreement between the company Othello and the LIASD laboratory. The objective is to develop an artificial intelligence system that can detect real-time dangers in a video stream. To achieve this, a novel approach combining temporal and spatial analysis has been proposed. Several avenues have been explored to improve anomaly detection by integrating object detection, human pose detection, and motion analysis. For result interpretability, techniques commonly used for image analysis, such as activation and saliency maps, have been extended to videos, and an original method has been proposed. The proposed architecture performs binary or multiclass classification depending on whether an alert or the cause needs to be identified. Numerous neural networkmodels have been tested, and three of them have been selected. You Only Looks Once (YOLO) has been used for spatial analysis, a Convolutional Recurrent Neuronal Network (CRNN) composed of VGG19 and a Gated Recurrent Unit (GRU) for temporal analysis, and a multi-layer perceptron for classification. These models handle different types of data and can be combined in parallel or in series. Although the parallel mode is faster, the serial mode is generally more reliable. For training these models, supervised learning was chosen, and two proprietary datasets were created. The first dataset focuses on objects that may play a potential role in anomalies, while the second consists of videos containing anomalies or non-anomalies. This approach allows for the processing of both continuous video streams and finite videos, providing greater flexibility in detection.

Autores: Fabien Poirier

Última actualización: 2024-11-29 00:00:00

Idioma: English

Fuente URL: https://arxiv.org/abs/2411.19731

Fuente PDF: https://arxiv.org/pdf/2411.19731

Licencia: https://creativecommons.org/licenses/by-nc-sa/4.0/

Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.

Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.

Artículos similares

Aprendizaje automático Mejorando el Monitoreo de Procesos en la Manufactura con Aprendizaje Activo

Aprende cómo el aprendizaje activo mejora la eficiencia del monitoreo en los procesos de manufactura.

Christian Capezza, Antonio Lepore, Kamran Paynabar

― 7 minilectura