Rilevamento anomalo online


10

Voglio elaborare immagini di microscopia segmentate automaticamente per rilevare immagini difettose e / o segmentazioni difettose, come parte di una pipeline di imaging ad alta produttività. C'è una serie di parametri che possono essere calcolati per ogni immagine grezza e segmentazione e che diventano "estremi" quando l'immagine è difettosa. Ad esempio, una bolla nell'immagine provocherà anomalie come dimensioni enormi in una delle "celle" rilevate o un conteggio delle celle anomalo basso per l'intero campo. Sto cercando un modo efficace per rilevare questi casi anomali. Idealmente, preferirei un metodo che abbia le seguenti proprietà (approssimativamente in ordine di desiderabilità):

  1. non richiede soglie assolute predefinite (sebbene le percentuali predefinite siano OK);

  2. non richiede di avere tutti i dati in memoria o di aver visto tutti i dati; sarebbe OK che il metodo fosse adattivo e aggiornasse i suoi criteri quando vedeva più dati; (ovviamente, con una piccola probabilità, possono verificarsi anomalie prima che il sistema abbia visto abbastanza dati e ci mancheranno, ecc.)

  3. è parallelizzabile: ad esempio in un primo round, molti nodi che lavorano in parallelo producono anomalie candidate intermedie, che subiscono quindi un secondo round di selezione dopo il completamento del primo round.

Le anomalie che sto cercando non sono sottili. Sono del tipo che sono chiaramente evidenti se si guarda un istogramma dei dati. Ma il volume di dati in questione e l'obiettivo finale di eseguire questo rilevamento di anomalie in tempo reale mentre vengono generate le immagini, preclude qualsiasi soluzione che richiederebbe l'ispezione degli istogrammi da parte di un valutatore umano.

Grazie!


Ho ragione che il tuo problema è essenzialmente univariato?
user603

1
Pubblica alcuni dati che potrebbero aiutarmi a "vedere" il problema che hai. Conosco abbastanza bene l'istogramma che evidenzia il valore anomalo e potrei essere in grado di fornire alcune indicazioni su un modo efficace per rilevare questi casi anomali usando metodi statistici al posto di ispezionare istogrammi da un valutatore umano. Guarda una recente discussione sul rilevamento della casualità stats.stackexchange.com/questions/12955/… Naturalmente stai cercando di rilevare violazioni deterministiche della casualità.
IrishStat

Puoi darci maggiori dettagli? I parametri sono continui o discreti? Quale distribuzione hanno i parametri per le immagini non difettose? Gaussiana? I parametri sono indipendenti o correlati? All'incirca quanti parametri estraete, per immagine? Quante immagini al secondo devi essere in grado di gestire (o quale latenza per immagine è accettabile)? Forse puoi mostrare alcuni istogrammi per alcuni parametri tipici, attraverso un ampio set di dati di immagini non difettose, e quindi mostrare l'istogramma corrispondente per le immagini difettose? Questo può aiutare a trovare una buona soluzione.
DW

Risposte:


3

Hai considerato qualcosa come un classificatore di una classe?

Avresti bisogno di un set di formazione di immagini conosciute, che vengono utilizzate per formare un classificatore che cerca di distinguere tra "immagini come il tuo set di allenamento" e tutto il resto. C'è una tesi di David Tax che probabilmente ha più informazioni di quelle che in realtà richiedono sull'argomento, ma potrebbe essere un buon punto di partenza.

Oltre a richiedere un set di formazione, sembra che soddisfi le tue esigenze:

  • I parametri vengono appresi dai dati (nessun hockery di annunci qui)

  • Una volta ottenuto il modello, non è necessario conservare i dati in memoria.

  • Allo stesso modo, il classificatore addestrato potrebbe essere eseguito su tutti i nodi che hai.

A seconda dell'applicazione, potresti essere in grado di addestrare un classificatore utile una volta e riutilizzarlo per diversi tipi di campioni / coloranti / macchie / florofori / ecc. In alternativa, potresti essere in grado di indurre gli utenti a valutare manualmente alcuni dei primi lotti di ogni corsa - Immagino che un essere umano possa controllare almeno 5-8 esempi / minuto con una buona interfaccia.



1

Esistono molti approcci possibili, ma è difficile sapere quale potrebbe essere il migliore nella tua situazione senza ulteriori informazioni.

Rn

  • Archivia i vettori delle caratteristiche di tutte le immagini precedenti, insieme alla loro classificazione, sul disco. Periodicamente (diciamo, una volta al giorno) addestra un algoritmo di apprendimento su questi dati e usa l'algoritmo risultante per classificare nuove immagini. Lo spazio su disco è economico; questa soluzione potrebbe essere pragmatica ed efficace per convertire un algoritmo di apprendimento offline in uno che può essere utilizzato nelle impostazioni online.

  • Memorizza i vettori delle caratteristiche di un campione casuale di 1.000 (o 1.000.000) immagini precedenti, insieme alla loro classificazione. Addestra periodicamente un algoritmo di apprendimento su questo sottocampione.

    Nota che puoi aggiornare efficacemente questo sottocampione in modo online usando trucchi standard . Questo è interessante solo se c'è qualche motivo per cui è difficile memorizzare tutti i vettori di funzionalità di tutte le immagini precedenti (il che sembra difficile da immaginare, per me, ma chi lo sa).

  • nccn

    nμnσμiiσix|xiμi|cσiiμσ

    Questo approccio presuppone che ogni parametro di un'immagine non difettosa abbia una distribuzione gaussiana e che i parametri siano indipendenti. Tali ipotesi possono essere ottimistiche. Esistono molte varianti più sofisticate di questo schema che elimineranno la necessità di questi presupposti o miglioreranno le prestazioni; questo è solo un semplice esempio per darti un'idea.

In generale, è possibile esaminare algoritmi online e algoritmi di streaming.


DW Un filtro / modello ARIMA è un'ottimizzazione di "una media corrente" in cui il numero di termini (N) e i pesi specifici da applicare sono identificati empiricamente. Un modello particolare e ovviamente presuntivo è quello di indovinare a "N" il numero di valori da usare nella "media corrente" e quindi di combinare l'inanità assumendo che i pesi siano uguali tra loro.
IrishStat,

@IrishStat, non sono sicuro di aver compreso il tuo commento. Nel caso in cui la mia scrittura non fosse chiara, non stavo suggerendo ARIMA, anche se è qualcosa che si potrebbe prendere in considerazione. Stavo suggerendo qualcosa di molto più semplice: tenere traccia della media di tutte le osservazioni finora e della deviazione standard. Ogni volta che vedi una nuova osservazione, puoi aggiornare la deviazione media e standard (purché tu abbia tenuto traccia del numero di osservazioni viste finora) con metodi standard. Potrebbe essere semplicistico, ma non vedo perché questo sarebbe insano.
DW

0

Rn

Se gli outlier sono abbastanza ovvi, un semplice trucco che funzionerebbe è il seguente. Costruisci una funzione hash sensibile alla località dai tuoi vettori. (Un semplice hash randomizzato come il lato di una serie di iperpiani casuali su cui cade il vettore potrebbe funzionare. Ciò produrrebbe un vettore booleano come valore di hash.) Ora mentre ricevi i vettori, calcoli il valore di hash del vettore e memorizzi il valore hash (il vettore booleano nel caso di iperpiani) e i conteggi in un dizionario. Memorizzi anche il numero totale di vettori visti finora. In qualsiasi momento puoi contrassegnare un dato vettore come anomalo se il numero totale di vettori che si scontrano con esso nell'hash è inferiore a una percentuale predefinita del totale.

Puoi vederlo come costruire un istogramma in modo incrementale. Ma dato che i dati non sono univariati, usiamo il trucco di hashing per farli comportare come tali.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.