Approcci Innovativi per la Rilevazione di Anomalie nella Sorveglianza Video
Testando vari modelli per rilevare attività strane nei dati video.
― 11 leggere min
Indice
Non potendo accedere a telecamere di sorveglianza reali durante i miei studi, ho usato solo video che ho scaricato. I dati video richiedono un sacco di potenza di calcolo per essere elaborati. Purtroppo, non avevo un server GPU fancy nella mia azienda o nel laboratorio di ricerca, quindi ho dovuto accontentarmi di un computer normale con 32 GB di RAM e un decente processore Intel Core i9. Avevo anche una scheda grafica Nvidia GeForce RTX2080, che mi ha dato un po' di spinta.
Adesso parleremo dei test che ho fatto dove ho combinato due modelli per verificare quanto bene rilevavano attività insolite (o Anomalie). Spiegherò come i risultati variavano in base al fatto che li avessi eseguiti in parallelo o uno dopo l'altro. Poi, condividerò gli esperimenti che ho fatto per rilevare oggetti e anomalie, che mi hanno aiutato a capire quali modelli funzionassero meglio per ciascuna situazione. Infine, concluderò con un riassunto di tutto.
Preprocessing dei Dati
Qui spiegherò come ho preparato i dati per il test.
Come già detto, i video mostrano spesso azioni normali interrotte da quelle insolite. Per questo, ho dovuto tagliare i video in pezzi per concentrarmi sulle attività insolite e analizzarle meglio. Anche con questo approccio, gestire tutti questi dati video è stato un vero mal di testa per quanto c’era.
Caricare tutti i video contemporaneamente era fuori discussione, perché la memoria del mio computer non riusciva a reggerli. Per affrontare questo problema, ho deciso di usare uno strumento speciale chiamato generatore. Pensalo come un cameriere che ti porta i piatti uno per uno invece di servirti l'intero pasto tutto insieme.
Il mio primo test è stato vedere come funzionavano i diversi generatori. Ne ho provati quattro diversi:
- Un generatore che crea sequenze video muovendo una finestra lungo il video.
- Un generatore che usa anch'esso una finestra mobile, ma sovrappone le sequenze.
- Un generatore che utilizza un passo dinamico per raccogliere immagini da ciascun video.
- Un generatore che combina la finestra mobile con il passo dinamico.
Il terzo generatore è risultato essere la scelta migliore. Perché? Perché risolve alcuni grandi problemi che hanno gli altri. Per i primi due generatori, il tempo che impiega il modello ad apprendere dipende dalla lunghezza dei video: video lunghi significano tempi di apprendimento più lunghi. Inoltre, decidere la dimensione della finestra mobile è complicato; deve catturare l'intera azione, altrimenti il modello potrebbe non apprendere correttamente.
Certo, anche il terzo generatore non è perfetto. Ha il suo problema quando si tratta di video di lunghezze diverse. Ad esempio, per azioni brevi, il tempo tra le immagini è breve, mentre per video più lunghi, ci può essere un lungo intervallo tra le immagini. Quindi, i video brevi ottengono immagini più dettagliate, mentre i video lunghi possono apparire meno chiari.
Questo terzo generatore mi consente di creare sequenze che non hanno bisogno che le immagini siano sovrapposte, il che è figo. Cambiando la dimensione del passo, posso decidere quanto velocemente voglio rilevare le cose, che si tratti di sequenze o di video. Questa flessibilità mi aiuta a gestire sia video finiti che in corso.
Dopo aver scelto il mio generatore, dovevo decidere le dimensioni delle mie immagini. Ho regolato la dimensione e ho trovato che la dimensione migliore era... beh, diciamo che funzionava perfettamente.
Per la dimensione della sequenza, ho testato varie lunghezze tra 15 e 30 immagini. Poiché i miei video girano a una certa velocità (30 fotogrammi al secondo), ho scoperto che usare 20 immagini era ottimale.
Per vedere quanto bene andasse ciascun esperimento, ho creato il mio metodo per definire il passo nella scelta delle immagini. In questo modo, potevo testare i miei modelli nelle stesse condizioni di addestramento, che stessi controllando un intero video o lavorando con sequenze. Il mio obiettivo principale è aiutare le persone a tenere d'occhio flussi continui, quindi mi concentrerò sulle performance relative al Rilevamento delle sequenze.
Dopo aver impostato le mie sequenze, ho reso i miei dati un po' più vivaci applicando alcune tecniche di miglioramento come effetti specchio, zoom e cambiamenti di luminosità. Questo ha aiutato a moltiplicare i miei dati senza allontanarmi troppo dalla realtà.
Poi ho esaminato diversi modi per preprocessare i dati, fondamentalmente come pulire e preparare le immagini. Ho iniziato con trucchi standard del mondo della visione computerizzata: calcolare come si muovono le cose tra le immagini, confrontare le immagini per trovare differenze e applicare maschere.
Le mie scoperte? Il metodo del flusso ottico non mi ha impressionato affatto. È rimasto al 50% di accuratezza durante l'addestramento. Il metodo della differenza inter-immagine ha portato risultati leggermente migliori, ma ha fatto peggio quando ho usato una maschera. Sorprendentemente, quando ho usato solo l'augmented data, i risultati sono stati i migliori. Senza alcun preprocessing, la mia accuratezza era bassa, anche se il recall era alto. Con solo l'augmented data, sono riuscito a ottenere una buona accuratezza e un recall solido.
Poi sono passato a metodi di preprocessing più avanzati usando modelli specializzati per il rilevamento delle anomalie. Ho pensato di usare qualcosa chiamato DINO. Dopo averlo provato, ho notato che richiedeva molto tempo di elaborazione, quindi non era pratico per le mie esigenze in tempo reale. Tuttavia, si è comportato bene con il rilevamento degli spari senza bisogno di addestramento extra.
Per il rilevamento delle lotte, le cose non sono andate altrettanto bene, portandomi ad escludere i Vision Transformers dai miei piani e concentrarmi su modelli che si adattassero meglio alle mie esigenze.
Ora, parliamo di YOLO, il mio punto di riferimento per individuare oggetti nei miei video e capire cosa stessero facendo le persone. Ha fatto un buon lavoro, quindi l'ho aggiunto al mio setup.
Esperimenti in Modalità Serie
Ora è il momento di vedere come si sono comportati i miei modelli quando sono stati impilati uno dopo l'altro. Ho iniziato a spezzare i miei video per catturare ogni fotogramma, che poi ho passato attraverso YOLO per individuare tutti i diversi oggetti nelle immagini. Dopo, ho rimontato il video e l'ho passato attraverso un altro modello chiamato CGRU per controllare le anomalie.
Ho confrontato questo metodo con l'uso di CGRU da solo, e i risultati sono stati piuttosto rivelatori. Risulta che aggiungere YOLO non ha cambiato molto le prestazioni del modello. Questo significa che il modello non prestava davvero attenzione ai bounding boxes durante l'addestramento. Ho anche migliorato il mio preprocessing utilizzando i bounding boxes per creare maschere che si concentrassero sulle parti dell'immagine con gli oggetti e eliminassero il più possibile lo sfondo.
Per qualsiasi immagine priva di rilevamento oggetti, avevo due opzioni: tenere l'immagine originale o sostituirla con una nera. Ho testato entrambe le opzioni, e mentre si sono comportate in modo simile, ho notato leggere differenze. Usare uno sfondo nero sembra migliorare il rilevamento delle azioni normali, ma ha danneggiato l'accuratezza per le lotte e gli incendi. Questo potrebbe succedere quando dettagli importanti vengono persi durante il rilevamento, facendo sì che il modello ignori informazioni cruciali.
Mi sono reso rapidamente conto che le impostazioni per i parametri di rilevamento oggetti, come la confidenza e le soglie di sovrapposizione, erano essenziali. Ho impostato la barra di confidenza al 55% per i miei test.
Ora, quando si trattava di rilevare le azioni svolte dalle persone, la versione 7 di YOLO ha fatto un buon lavoro delineando i loro "scheletri," simile a quello che fa OpenPose. Così, ho eseguito l'estimazione della posa sui miei video per vedere come influenzava il rilevamento dei comportamenti. Per semplificare le cose, mi sono concentrato solo sulle classi Fight e Gunshot, poiché non tutte le anomalie necessitavano di umani.
Poi ho testato se l'estimazione della posa migliorava le cose. Inizialmente, ho rimosso gli sfondi dai video per affinare il rilevamento, ma presto ho realizzato che questo poteva compromettere il rilevamento di altri tipi di anomalie. Così, ho riportato indietro lo sfondo e ho riaddestrato il mio modello per vedere se potesse ancora individuare cose come incendi.
In termini di prestazioni complessive, l'aggiunta della classe incendi non ha cambiato molto, ma i risultati hanno mostrato un calo nel rilevamento degli spari poiché alcuni di essi erano etichettati come incendi. Questo mi ha portato a sostituire il mio modello multiclasse con un setup normale/anomalo per vedere come YOLO influenzasse le cose. Ho addestrato due nuovi modelli: uno senza sfondi e l'altro con essi.
Indipendentemente dal preprocessing, combinare diversi tipi di anomalie ha costantemente migliorato le prestazioni dei miei modelli. Tuttavia, l'inclusione di anomalie non correlate, come incendi, tendeva a danneggiare i risultati. Ho anche notato che l'uso di YOLO per preparare i miei dati ha aumentato l'accuratezza.
Elaborazione in Modalità Parallela
Successivamente, ho deciso di eseguire i miei modelli in parallelo. L'idea era rilevare oggetti mentre analizzavo il tempo e poi combinare i risultati per migliorare l'accuratezza. Il mio primo esperimento è stato combinare CGRU addestrato nella categoria "spari" con YOLO, usando una semplice regola: se il modello prevedeva "normale" ma segnalava un'arma, cambiava l'output in "sparato".
Per il rilevamento degli incendi, ho fatto lo stesso. Ho valutato quanto bene funzionasse questa combinazione per ciascuna sequenza video e ho impostato una soglia di confidenza al 55%.
I risultati per il rilevamento degli incendi sono stati promettenti. La combinazione di CGRU e YOLO ha migliorato il rilevamento degli incendi, mentre il rilevamento degli spari non ha mostrato alcun cambiamento. A prima vista, sembrava che entrambi i modelli stessero raccogliendo le stesse caratteristiche per il rilevamento degli spari, il che indicava quanto fosse importante la precisione di YOLO per le prestazioni complessive.
Ho deciso di modificare un po' le regole per il rilevamento degli spari. Poiché YOLO utilizza calcoli per capire se un oggetto è stato rilevato, ho pensato: "Ehi, forse un colpo dovrebbe registrarsi solo se è vicino a una persona." Così, ho addestrato un nuovo modello che includeva immagini di armi e alcune altre immagini per vedere come si comportava.
Il mio nuovo modello per rilevare le persone ha fatto un lavoro migliore di prima, anche se il rilevamento delle armi ha avuto ancora alti e bassi. Quando ho confrontato i risultati, le prestazioni del mio nuovo modello per il rilevamento degli spari hanno visto un bel miglioramento.
Poi ho esaminato come ridurre i falsi positivi. Dopo nuove valutazioni mantenendo tutto sotto controllo, ho notato meno falsi allarmi. Tuttavia, questo ha significato che i veri positivi sono diminuiti leggermente, mostrando la necessità di precisione in YOLO.
Data la gravità delle anomalie che stavo cercando di rilevare, volevo mantenere il modello con il tasso di falsi negativi più basso, anche se questo significava tollerare alcuni falsi allarmi. Inoltre, addestrare un singolo modello di rilevamento oggetti per coprire tutte le mie anomalie semplificherebbe la vita.
Confronto delle Prestazioni di Ognuno dei Nostri Modelli
È tempo di condividere come si sono comportati tutti i modelli complessivamente! Avevo tre distinti per rilevare lotte, spari e incendi. Li valuterò sulla loro classificazione video (una rilevazione per video) e sulla loro velocità nel rilevare anomalie in un flusso continuo (una rilevazione per sequenza).
Per le lotte, il modello ha fatto bene quando controllava video interi, raggiungendo circa l'85,6% di accuratezza, ma è sceso nel flusso continuo al 63,1%. Il rilevamento degli spari è salito all'86,5% di accuratezza per i video interi, ma è sceso leggermente nelle sequenze al 91,8%, mostrando che si comporta meglio in scenari statici. D'altra parte, il rilevamento degli incendi è stato solido, con un punteggio dell'83,8% per i video e un salto all'86,0% per le sequenze, rivelando che è un performer affidabile!
Quando ho combinato tutti i miei dataset per un modello multiclasse, ho notato alcune tendenze interessanti. Nonostante avessi più dati, le prestazioni di rilevamento sono diminuite sia per la classe incendi che per quella degli spari nei flussi continui, ma nel complesso il mio modello multiclasse si è mantenuto decentemente.
Guardando video di incidenti reali, il mio modello multiclasse ha avuto prestazioni rispettabili. Anche le velocità con cui poteva elaborare i dati non erano male, registrando tempi di rilevamento tra 104 e 744 millisecondi.
Conclusioni
Attraverso tutti questi test e aggiustamenti, cosa ho imparato? Se vuoi semplicemente rilevare un qualsiasi incidente, un modello binario (normale/anomalo) è la strada giusta. Potrebbe non individuare esattamente cosa sia andato storto, ma copre tutte le basi.
D'altra parte, se il tuo obiettivo è individuare un tipo specifico di anomalia, come una lotta o un incendio, attenerti a un modello specializzato dovrebbe dare risultati migliori. Se vuoi mescolare tutti i tipi di anomalie e avere un umano che si occupi dei dettagli later, un modello normale/anomalo soddisfa perfettamente le tue esigenze.
In breve, sperimentare con questi modelli è stata un’avventura pazzesca. È vero che il rilevamento in tempo reale non è sempre perfetto, ma con i giusti aggiustamenti e approcci, possiamo arrivare abbastanza vicini da fornire intuizioni preziose per tenere d'occhio la sicurezza!
Titolo: Real-Time Anomaly Detection in Video Streams
Estratto: 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.
Autori: Fabien Poirier
Ultimo aggiornamento: 2024-11-29 00:00:00
Lingua: English
URL di origine: https://arxiv.org/abs/2411.19731
Fonte PDF: https://arxiv.org/pdf/2411.19731
Licenza: https://creativecommons.org/licenses/by-nc-sa/4.0/
Modifiche: Questa sintesi è stata creata con l'assistenza di AI e potrebbe presentare delle imprecisioni. Per informazioni accurate, consultare i documenti originali collegati qui.
Si ringrazia arxiv per l'utilizzo della sua interoperabilità ad accesso aperto.
Link di riferimento
- https://github.com/cs60050/TeamGabru
- https://www.kaggle.com/datasets/naveenk903/movies-fight-detection-dataset
- https://www.kaggle.com/datasets/yassershrief/hockey-fight-vidoes
- https://github.com/metal3d/keras-video-generators
- https://arxiv.org/ftp/arxiv/papers/2205/2205.10756.pdf
- https://github.com/ultralytics/yolov5
- https://github.com/meituan/YOLOv6
- https://pjreddie.com/projects/pascal-voc-dataset-mirror/
- https://cocodataset.org/
- https://www.othello.group
- https://www.univ-paris8.fr/UR-Laboratoire-d-Intelligence-Artificielle-et-Semantique-des-Donnees-LIASD