Qual è la tua ipotesi migliore su come funziona Google Ricerca immagini? Posso caricare una foto e cercare immagini simili. Quale algoritmo utilizza per identificare immagini simili?
Qual è la tua ipotesi migliore su come funziona Google Ricerca immagini? Posso caricare una foto e cercare immagini simili. Quale algoritmo utilizza per identificare immagini simili?
Risposte:
Non so quale algoritmo venga utilizzato da Google. Ma, dal momento che volevi una migliore ipotesi, lasciami dare alcune idee su come potrebbe essere costruito un sistema simile .
L'intero campo relativo alla ricerca immagine-base-per-immagine si chiama Content Based Image Retrieval (CBIR) . L'idea è, in qualche modo, costruire una rappresentazione dell'immagine (non necessariamente comprensibile dagli umani) che contenga le informazioni sul contenuto dell'immagine .
Esistono due approcci di base:
L'approccio locale di basso livello è molto ben studiato. L'approccio attuale migliore estrae le funzionalità locali (qui è disponibile una scelta dell'algoritmo di estrazione delle funzionalità) e utilizza i loro descrittori locali (di nuovo, la scelta dei descrittori) per confrontare le immagini.
Nelle opere più recenti, i descrittori locali vengono prima raggruppati e quindi i cluster vengono trattati come parole visive : la tecnica è quindi molto simile alla ricerca di documenti di Google, ma utilizza parole visive anziché lettere.
Puoi pensare alle parole visive come equivalenti alle radici delle parole nel linguaggio: ad esempio, le parole: lavoro, lavoro, lavoro appartengono tutte alla stessa parola radice.
Uno degli svantaggi di questo tipo di metodi è che di solito funzionano in modo insufficiente su immagini a trama bassa.
Ho già dato e visto molte risposte che descrivono in dettaglio questi approcci, quindi fornirò solo collegamenti a tali risposte:
Gli approcci semantici si basano tipicamente su rappresentazioni gerarchiche dell'intera immagine. Questi approcci non sono ancora stati perfezionati, soprattutto per i tipi di immagine generali. C'è un certo successo nell'applicare questo tipo di tecniche a specifici domini di immagini.
Dato che sono attualmente nel mezzo della ricerca di questi approcci, non posso trarre alcuna conclusione. Ora, detto questo, ho spiegato un'idea generale dietro queste tecniche in questa risposta .
Ancora una volta, a breve: l'idea generale è quella di rappresentare un'immagine con una struttura a forma di albero, dove le foglie contengono i dettagli dell'immagine e gli oggetti si trovano nei nodi più vicini alla radice di tali alberi. Quindi, in qualche modo, si confrontano i sottoalberi per identificare gli oggetti contenuti in diverse immagini.
Ecco alcuni riferimenti per diverse rappresentazioni degli alberi. Non li ho letti tutti e alcuni usano questo tipo di rappresentazioni per la segmentazione anziché il CBIR, ma comunque eccoli qui:
Oltre alla risposta di penelope, ci sono due approcci, l'hashing percettivo e il modello bag-of-words le cui funzionalità di base sono facilmente implementabili e sono quindi piacevoli da giocare o da cui imparare, prima di avventurarsi in territori più avanzati.
Hash percettivo
Gli algoritmi di hashing percettivo mirano a costruire un hash, che a differenza di un hash crittografico, fornirà valori di hash simili o quasi simili per immagini identiche che sono state leggermente distorte, ad esempio dal ridimensionamento o dalla compressione JPEG. Servono a uno scopo utile nel rilevamento vicino ai duplicati in una raccolta di immagini.
Nella sua forma più semplice, puoi implementarlo come segue:
Converti l'immagine in scala di grigi
Rendi la tua immagine zero media
Il risultato è un hash a 64 bit resiliente, poiché si basa sui componenti a bassa frequenza dell'immagine. Una variante di questo tema sarebbe quella di dividere ogni immagine in 64 sottoblocchi e confrontare la media dell'immagine globale con la media locale di sottoblocco e scrivere un 1 o 0 di conseguenza.
L'hashing percettivo è implementato ad esempio da phash
Modello bag-of-words
Il modello bag-of-words mira a identificare semanticamente un'immagine, ad esempio tutte le immagini con cani in esse. Lo fa usando alcune patch di immagini con lo stesso spirito in cui si classificherebbe un documento di testo in base al verificarsi di determinate parole. Si potrebbero classificare le parole, dire "cane" e "cani" e memorizzarle come identificatore in un file invertito in cui la categoria "cane" ora punta a tutti i documenti contenenti "cane" o "cani".
Nella sua forma più semplice, si può fare questo con le immagini come segue:
Ora hai una vasta collezione di descrittori SIFT. Il problema è che anche da immagini quasi identiche ci sarà una discrepanza tra i descrittori. Volete raggruppare gli stessi identici più o meno come trattare alcune parole, come "cane" e "cani" come identici e dovete compensare gli errori. È qui che entra in gioco il clustering.
Una query di immagine, ad es. Trovami immagini simili alla query-immagine, viene quindi risolta come segue:
L'altro approccio interessante che sembra essere trascurato nelle risposte precedenti sono le reti neurali profonde convoluzionali. Sembra che Google lo stia utilizzando proprio ora per il suo motore di ricerca di immagini e il suo servizio di traduzione . Le CNN sono estremamente potenti in compiti cognitivi come la ricerca della somiglianza. Sembra che la CNN esegua una procedura simile di Bag-of-worlds che è incorporata attraverso i suoi strati di rete. Il rovescio della medaglia di queste tecniche è l'incapacità di disimparare e la necessità di enormi set di dati per la formazione e, naturalmente, pesanti costi di calcolo in fase di formazione.
Documento suggerito al riguardo:
e implementazione di recupero di immagini di deep learning open source (il documento successivo): https://github.com/paucarre/tiefvision