In che modo il deep learning aiuta a rilevare più oggetti in una singola immagine?


Risposte:


11

Sebbene molte soluzioni nei sistemi di produzione utilizzino ancora una finestra scorrevole come descritto di seguito in questa risposta, il campo della visione computerizzata si sta muovendo rapidamente. I recenti progressi in questo campo includono R-CNN e YOLO .


Rilevare le corrispondenze di oggetti in un'immagine, quando hai già addestrato un classificatore di oggetti, di solito è una questione di scansione a forza bruta attraverso patch di immagini.

Inizia con la dimensione massima prevista per la patch. Ad esempio, se l'immagine è 1024 x 768, ma sempre una distanza di una strada forse non ti aspetti che un'auto occupi più di 80 x 80 pixel nell'immagine. Quindi prendi un blocco 80x80 di pixel da un angolo dell'immagine e chiedi al tuo classificatore quale possibilità c'è un'auto in quell'angolo. Quindi prendi la prossima patch, magari muoviti di 20 pixel.

Ripeti l'operazione per tutte le posizioni possibili e decidi quali patch hanno più probabilità di contenere auto.

Quindi, riduci le dimensioni di un blocco (forse 60 x 60, spostando di 15 pixel alla volta) e ripeti lo stesso esercizio. Ripeti fino a quando non hai raggiunto la dimensione del blocco più piccola prevista per il tuo obiettivo.

Alla fine avrai un elenco di aree all'interno dell'immagine, con la probabilità che ognuna contenga una macchina.

I blocchi sovrapposti entrambi con alta probabilità sono probabilmente la stessa macchina, quindi la logica deve avere soglie per la fusione dei blocchi - di solito prendendo l'area sovrapposta con il punteggio di probabilità più alto - e dichiarando che c'è solo una macchina in quella zona.

Come al solito con gli approcci ML, sarà necessario sperimentare i meta-parametri corretti - in questo caso dimensioni dei blocchi, dimensioni dei gradini e regole per l'unione / divisione delle aree - al fine di ottenere i risultati più accurati.


10

Vorrei aggiungere la risposta di @ Neil_Slater condividendo la mia applicazione.

Nella mia applicazione, voglio addestrare un modello che può caricare automaticamente una posizione di scacchi da un libro di scacchi come questo:

inserisci qui la descrizione dell'immagine

  1. Prima di fare qualsiasi cosa, mi sono assicurato di avere un modello in grado di rilevare con precisione un pezzo degli scacchi.

inserisci qui la descrizione dell'immagine

Non è stato un problema difficile perché era come allenare le MINIME cifre. Ho raccolto abbastanza campioni, aggiungendo casualmente un po 'di rumore a quei campioni. Il mio modello era un deep learning convoluzionale a 2 strati.

  1. Poiché la scacchiera è sempre un quadrato. Uso il rilevamento quadrato disponibile in OpenCV per darmi un elenco di candidati. Vorrei eliminare qualsiasi quadrato troppo piccolo, troppo grande o non divisibile per 64 (poiché ci sono 64 quadrati).

  2. Quindi, ritaglierei l'immagine in qualcosa del genere:

inserisci qui la descrizione dell'immagine

Ora, ho un'altra rete convoluzionale multistrato per controllare ogni quadrato nel tabellone. La lunghezza del passo è la dimensione dell'immagine divisa per 8 (poiché ci sono otto quadrati in ogni dimensione). La dimensione della patch è uguale alla lunghezza del passo.

La mia tubatura ha funzionato perché sono stato in grado di combinare due diversi classificatori. Personalmente preferisco addestrare due classificatori, in quanto sarebbe più facile addestrare e verificare che cercare di mettere tutto in un unico modello.


3

La domanda in sé non è del tutto chiara, dal momento che non affermi di avere un modello in grado di rilevare un'auto per corsa per un'immagine o stai semplicemente chiedendo quali strumenti, algoritmi o framework utilizzare per rilevare automobili (o altri oggetti) in un'immagine.

Rispondendo alla seconda variante, dovresti utilizzare algoritmi sviluppati per il rilevamento di oggetti, che sono Haar Cascades (che sono incorporati in OpenCV e ci sono tutorial chiari su come addestrare il tuo rilevatore di oggetti personalizzati, ad esempio, banana tutorial ) o CNN, che sono la scelta per il rilevamento di oggetti tramite reti neurali, personalmente, mi piace lavorare con quell'implementazione : codice semplice e completo e risultati sorprendenti.

Entrambi gli approcci (Haar Cascades e CNN) fondamentalmente trovano schemi di forme reciprocamente connesse e situate che descrivono il tuo particolare oggetto (sia esso faccia, banana, macchina o UFO) e usano questi schemi per trovare oggetti su una nuova immagine. L'inclusione reciproca degli oggetti rilevati (quando i bordi degli oggetti si intersecano o uno è incluso da un altro) viene utilizzata per trovare la migliore corrispondenza per ogni regione.


0

La tua domanda afferma esplicitamente che stai cercando solo più auto anziché più oggetti, quindi la risposta è nella domanda. Non stai cercando più oggetti, piuttosto più occorrenze dello stesso oggetto.

Se hai addestrato il sistema abbastanza bene da riconoscere entrambi i tipi di auto, entrambi dovrebbero essere rilevati utilizzando approcci di filtro a cascata standard ... È come chiedere come posso rilevare 2 volti in una fotografia?

Se stavi cercando un'auto e una scimmia, la situazione è molto diversa e, usando approcci comuni con strumenti come CV aperto, in genere ti alleneresti 2 classificatori (uno per le automobili e uno per le scimmie) per scorrere due volte sull'immagine.

Più classi di oggetti diverse vuoi rilevare, più classificatori e iterazioni ti serviranno.

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.