Qual è l'approccio migliore per riconoscere i modelli nei dati e qual è il modo migliore per saperne di più sull'argomento?

StackOverflow https://stackoverflow.com/questions/1441319

Domanda

Uno sviluppatore con cui sto lavorando sta sviluppando un programma che analizza le immagini della pavimentazione per trovare crepe nella pavimentazione. Per ogni crack che trova il suo programma, produce una voce in un file che mi dice quali pixel compongono quel crack particolare. Esistono due problemi con il suo software:

1) Produce diversi falsi positivi

2) Se trova una crepa, ne trova solo piccole sezioni e le indica come crepe separate.

Il mio compito è quello di scrivere software in grado di leggere questi dati, analizzarli e dire la differenza tra falsi positivi e crepe effettive. Devo anche determinare come raggruppare tutte le piccole sezioni di una crepa come una sola.

Ho provato vari modi di filtrare i dati per eliminare i falsi positivi e ho usato le reti neurali con un successo limitato per raggruppare le crepe. Capisco che ci saranno errori, ma fin d'ora, ci sono troppi errori. Qualcuno ha qualche idea per un esperto non-AI sul modo migliore per svolgere il mio compito o saperne di più su di esso? Che tipo di libri dovrei leggere o che tipo di lezioni dovrei prendere?

EDIT La mia domanda è più su come notare gli schemi nei dati del mio collega e identificarli come veri e propri crack. Mi interessa la logica di livello superiore, non tanto la logica di basso livello.

MODIFICA In tutta realtà, occorrerebbero ALMENO 20 immagini di esempio per fornire una rappresentazione accurata dei dati con cui sto lavorando. Varia molto. Ma ho un esempio qui , qui e qui . Queste immagini sono già state elaborate dal processo del mio collega. I dati rosso, blu e verde sono ciò che devo classificare (il rosso indica la crepa scura, il blu indica la crepa chiara e il verde indica una crepa ampia / sigillata).

È stato utile?

Soluzione

Oltre ai commenti utili sull'elaborazione delle immagini, sembra anche che tu abbia a che fare con un clustering problema .

Gli algoritmi di clustering derivano dalla letteratura machine learning , in particolare apprendimento non supervisionato . Come suggerisce il nome, l'idea di base è provare a identificare cluster naturali di punti dati all'interno di un ampio set di dati.

Ad esempio, l'immagine seguente mostra come un algoritmo di clustering potrebbe raggruppare un gruppo di punti in 7 cluster (indicati da cerchi e colori):

 k-means
(fonte: natekohl.net )

Nel tuo caso, un algoritmo di clustering tenterebbe di unire ripetutamente piccole crepe per formare crepe più grandi, fino a quando non verranno soddisfatti alcuni criteri di arresto. Il risultato finale sarebbe una serie più piccola di crepe unite. Ovviamente, le crepe sono leggermente diverse rispetto ai punti bidimensionali: parte del trucco per far funzionare un algoritmo di clustering sarà definire una metrica della distanza utile tra due crepe.

Gli algoritmi di clustering più diffusi includono k-mean clustering ( demo ) e cluster gerarchico . Questo secondo link ha anche una bella spiegazione dettagliata di come funziona k-mean.

MODIFICA : questo documento di alcuni ingegneri di Phillips sembra pertinente a ciò che stai cercando di fare:

  • Chenn-Jung Huang, Chua-Chin Wang, Chi-Feng Wu, " Tecniche di elaborazione delle immagini per l'identificazione del cluster di difetti dei wafer , " Progettazione e test IEEE di computer, vol. 19, n. 2, pagg. 44-48, marzo / aprile, 2002.

Stanno facendo un'ispezione visiva per difetti sui wafer di silicio e usano un filtro mediano per rimuovere il rumore prima di utilizzare un algoritmo di clustering più vicino per rilevare i difetti.

Ecco alcuni articoli / libri correlati che citano che potrebbero essere utili:

  • M. Taubenlatt e J. Batchelder, & # 8220; Ispezione di wafer modellati utilizzando il filtro spaziale per l'ambiente cluster , & # 8221; Ottica applicata, vol. 31, n. 17 giugno 1992, pagg. 3354-3362.
  • F.-L. Chen e S.-F. Liu, & # 8220; Un approccio di rete neurale per riconoscere il modello spaziale di difetto nella fabbricazione di semiconduttori. & # 8221; Trans IEEE. Produzione di semiconduttori, vol. 13, n. 3, agosto 2000, pagg. 366-373.
  • G. Earl, R. Johnsonbaugh e S. Jost, Riconoscimento dei modelli e analisi delle immagini , Prentice Hall, Upper Saddle River, N.J., 1996.

Altri suggerimenti

Il tuo problema ricade nel campo molto ampio della classificazione delle immagini. Questi tipi di problemi possono essere notoriamente difficili e, alla fine, risolverli è un'arte. È necessario sfruttare ogni conoscenza del dominio problematico per renderlo trattabile.

Un problema fondamentale è la normalizzazione. Volete avere oggetti classificati in modo simile per essere il più simili possibile nella loro rappresentazione dei dati. Ad esempio, se hai un'immagine delle crepe, tutte le immagini hanno lo stesso orientamento? In caso contrario, ruotare l'immagine potrebbe aiutare nella tua classificazione. Allo stesso modo, ridimensionamento e traduzione (fare riferimento a this )

Desideri anche rimuovere il maggior numero possibile di dati irrilevanti dai tuoi set di allenamento. Invece di lavorare direttamente sull'immagine, forse potresti usare estrazione dei bordi (ad esempio rilevamento dei bordi di Canny ). Ciò rimuoverà tutto il "rumore" dall'immagine, lasciando solo i bordi. L'esercizio si riduce quindi all'identificazione di quali bordi sono le crepe e quali sono i pavimenti naturali.

Se vuoi seguire rapidamente una soluzione, ti suggerisco di tentare la fortuna con un Rete neurale convoluzionale , che può eseguire una classificazione delle immagini piuttosto buona con un minimo di preelaborazione e noramlizzazione. È abbastanza noto nel riconoscimento della grafia e potrebbe essere giusto per quello che stai facendo.

Sono un po 'confuso dal modo in cui hai scelto di risolvere il problema. Se il tuo collega non sta identificando crepe complete, e questa è la specifica, allora questo è il tuo problema. Ma se riesci a ricucire tutte le crepe ed evitare i suoi falsi positivi, allora non hai appena fatto il suo lavoro?

A parte questo, penso che si tratti di un problema rilevamento dei bordi piuttosto che un problema di classificazione. Se il rilevatore di bordi è corretto, i tuoi problemi scompaiono.

Se sei ancora impostato sulla classificazione, allora avrai bisogno di un set di allenamento con risposte note, dal momento che hai bisogno di un modo per quantificare ciò che differenzia un falso positivo da un vero crack. Tuttavia, continuo a pensare che sia improbabile che il tuo classificatore sia in grado di collegare le fessure, poiché queste sono specifiche per ogni singola lastra di pavimentazione.

Devo essere d'accordo con ire_and_curses, una volta che ti immergi nel regno del rilevamento dei bordi per correggere il crack crack dei tuoi co-sviluppatori e rimuovere i suoi falsi positivi, sembra che faresti il ??suo lavoro. Se riesci a correggere ciò che il suo software non ha rilevato e rimuovere i suoi falsi positivi attorno a ciò che ti ha dato. Sembra che saresti in grado di farlo per l'immagine completa.

Se la specifica è per lui di rilevare le crepe e le classifichi, allora è suo compito fare il rilevamento dei bordi e rimuovere i falsi positivi. E il tuo lavoro è prendere quello che ti ha dato e classificare che tipo di crack è. Se devi eseguire il rilevamento dei bordi per farlo, sembra che non sei lontano dal mettere fuori lavoro il tuo co-sviluppatore.

Ci sono alcune ottime risposte qui. Ma se non sei in grado di risolvere il problema, puoi considerare Mechanical Turk. In alcuni casi può essere molto conveniente per problemi ostinati. Conosco persone che lo usano per tutti i tipi di cose come questa (verifica che un essere umano può fare facilmente ma risulta difficile da codificare).

https://www.mturk.com/mturk/welcome

Non sono affatto un esperto, ma prova a guardare Haar Cascades . Potresti anche voler sperimentare il toolkit OpenCV. Queste due cose insieme fanno il rilevamento del volto e altre attività di rilevamento degli oggetti.

Potrebbe essere necessario eseguire "addestramento" sviluppare una cascata di Haar per le crepe nel pavimento.

  

Qual è l'approccio migliore per riconoscere i modelli nei dati e qual è il modo migliore per saperne di più sull'argomento?

L'approccio migliore è studiare il riconoscimento di schemi e l'apprendimento automatico. Vorrei iniziare con la Classificazione dei pattern di Duda e utilizzare Bishop Riconoscimento dei modelli e apprendimento automatico come riferimento. Ci vorrebbe molto tempo prima che il materiale affondasse, ma ottenere il senso di base del riconoscimento dei modelli e dei principali approcci al problema della classificazione dovrebbe darti la direzione. Posso sedermi qui e fare alcune ipotesi sui tuoi dati, ma onestamente probabilmente hai la migliore idea sul set di dati poiché ne hai avuto a che fare più di chiunque altro. Alcune delle tecniche utili, ad esempio, potrebbero essere support vector machine e boosting .

Modifica : un'interessante applicazione di potenziamento è il rilevamento del volto in tempo reale. Guarda il Rilevamento rapido di oggetti di Viola / Jones usando una cascata potenziata di semplice Caratteristiche (pdf). Inoltre, guardando le immagini di esempio, direi che dovresti provare a migliorare un po 'il rilevamento dei bordi. Forse levigare l'immagine con gaussiano e eseguire un rilevamento dei bordi più aggressivo può aumentare il rilevamento di piccole crepe.

Ti suggerisco di prendere qualsiasi manuale di elaborazione delle immagini e leggere sull'argomento. In particolare, potresti essere interessato a Morfologico Operazioni like Dilation e Erosion & # 8206; , che completa il lavoro di un rilevatore di bordi . Un sacco di materiali in rete ...

Questo è un problema di elaborazione delle immagini. Ci sono molti libri scritti sull'argomento, e gran parte del materiale di questi libri andrà oltre un problema di rilevamento della linea come questo. Ecco lo schema di una tecnica che funzionerebbe per il problema.

  1. Quando trovi una crepa, trovi alcuni pixel che compongono la crepa. A tale scopo è possibile utilizzare filtri di rilevamento dei bordi o altri metodi di rilevamento dei bordi.

  2. Inizia con un (qualsiasi) pixel in una crepa, quindi & segui " per creare una linea multipunto dalla fessura - salva i punti che compongono la linea. È possibile rimuovere alcuni punti intermedi se si trovano vicino a una linea retta. Fallo con tutti i pixel di crack. Se hai una crepa a forma di stella, non preoccuparti. Segui i pixel in una (o due) direzioni per creare una linea, quindi rimuovi questi pixel dall'insieme dei pixel di crack. Le altre gambe della stella saranno riconosciute come linee separate (per ora).

  3. Potresti eseguire un assottigliamento sui pixel di crack prima del passaggio 1. In altre parole, controlla i vicini dei pixel e, se ce ne sono troppi, ignora quel pixel. (Questa è una semplificazione - puoi trovare diversi algoritmi per questo.) Un altro passo di preelaborazione potrebbe essere quello di rimuovere tutte le linee che sono troppo sottili o due deboli. Questo potrebbe aiutare con i falsi positivi.

  4. Ora hai molte linee brevi e multipunto. Per gli endpoint di ciascuna linea, trova la linea più vicina. Se le linee rientrano in una tolleranza, allora "connetti" le linee: collegale o aggiungile alla stessa struttura o matrice. In questo modo, è possibile collegare le crepe ravvicinate, che probabilmente sarebbero la stessa crepa nel calcestruzzo.

Sembra che, indipendentemente dall'algoritmo, siano necessarie alcune regolazioni dei parametri per ottenere buone prestazioni. Scrivilo in modo che sia facile apportare piccole modifiche a cose come soglie di intensità, spessore minimo e massimo, ecc.

A seconda dell'ambiente di utilizzo, è possibile consentire al giudizio dell'utente di determinare i casi discutibili e / o consentire a un utente di rivedere tutte le crepe e fare clic per combinare, dividere o rimuovere le crepe rilevate.

Hai avuto un'ottima risposta, esp. @ Nate's, e tutti i link e i libri suggeriti valgono la pena. Tuttavia, sono sorpreso che nessuno abbia suggerito che l'unico libro sarebbe stato la mia scelta migliore : O'Reilly's Programmazione dell'intelligenza collettiva . Il titolo potrebbe non sembrare pertinente alla tua domanda, ma, credimi, i contenuti sono : uno dei più pratici e orientati al programmatore di data mining e "machine learning" Che abbia mai visto. Fai un giro! -)

Sembra un problema un po 'in Rock Mechanics, dove ci sono giunti in una massa rocciosa e questi giunti devono essere raggruppati in "insiemi" per orientamento, lunghezza e altre proprietà. In questo caso, un metodo che funziona bene è il clustering, sebbene i classici mezzi K sembrano avere alcuni problemi che ho affrontato in passato usando un algoritmo genetico per eseguire la soluzione interativa.

In questo caso sospetto che potrebbe non funzionare allo stesso modo. In questo caso sospetto che tu debba creare i tuoi gruppi per iniziare con cioè longitudinale, trasversale ecc. E definire esattamente quale sia il comportamento di ciascun gruppo, cioè un singolo ramo longitudinale può spezzarsi lungo la sua lunghezza e se fa ciò che fa che fanno per la sua classificazione.

Una volta ottenuto questo per ogni crack, genererei una crepa o un modello di crepe casuali in base alla classificazione che hai creato. È quindi possibile utilizzare qualcosa di simile a un approccio dei minimi quadrati per vedere quanto la crepa che si sta verificando si adatta alla crepa / crepe casuali che si sono generate. Puoi ripetere questa analisi molte volte come un'analisi Monte-Carlo per identificare quale delle crepe / crepe generate casualmente si adatta meglio a quella che stai controllando.

Per gestire i falsi positivi dovrai creare uno schema per ciascuno dei diversi tipi di falsi positivi, ovvero il bordo di un cordolo è una linea retta. Sarai quindi in grado di eseguire l'analisi individuando qual è il gruppo più probabile per ogni crack che analizzi.

Infine, dovrai "modificare" la definizione di diversi tipi di crack per cercare di ottenere un risultato migliore. Immagino che questo potrebbe utilizzare un approccio automatizzato o un approccio manuale a seconda di come si definiscono i diversi tipi di crack.

Un'altra modifica che a volte aiuta quando sto facendo problemi come questo è quella di avere un gruppo casuale. Modificando la sensibilità di un gruppo casuale, ovvero quanto più o meno probabile debba essere inclusa una crepa nel gruppo casuale, a volte è possibile adattare la sensibilità del modello a schemi complessi che non si adattano realmente da nessuna parte.

Buona fortuna, mi sembra che tu abbia una vera sfida.

Dovresti leggere data mining , in particolare pattern mining .

  

Il data mining è il processo di estrazione dei pattern dai dati. Man mano che vengono raccolti più dati, con una quantità di dati che raddoppia ogni tre anni, il data mining sta diventando uno strumento sempre più importante per trasformare questi dati in informazione. È comunemente usato in una vasta gamma di pratiche di profilazione, come marketing, sorveglianza, rilevazione di frodi e scoperta scientifica.

Un buon libro sull'argomento è Data mining: strumenti e tecniche di apprendimento automatico pratico

 Il data mining può essere acquistato su Amazon.
(fonte: waikato.ac.nz ) ] ( http://www.amazon.com/Data-Mining -Ian-H-Witten / dp / 3446215336 " ISBN 0-12-088407-0 ")

Fondamentalmente quello che devi fare è applicare strumenti statistici e metodologie ai tuoi set di dati. Le metodologie di confronto più utilizzate sono il t-test di Student e il test al quadrato di Chi , per vedere se due variabili non correlate sono correlate con una certa sicurezza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top