🚀 Prova Zilliz Cloud, la versione completamente gestita di Milvus, gratuitamente—sperimenta prestazioni 10 volte più veloci! Prova Ora>>

milvus-logo
LFAI

Panoramica

  • Scenarios
August 04, 2020
Rife Wang

Yupoo Picture Manager serve decine di milioni di utenti e gestisce decine di miliardi di immagini. Poiché la galleria degli utenti si sta ampliando, Yupoo ha l'urgente necessità di una soluzione in grado di individuare rapidamente le immagini. In altre parole, quando un utente inserisce un'immagine, il sistema deve trovare l'immagine originale e le immagini simili nella galleria. Lo sviluppo del servizio di ricerca per immagini fornisce un approccio efficace a questo problema.

Il servizio di ricerca per immagini ha subito due evoluzioni:

  1. Inizio della prima indagine tecnica all'inizio del 2019 e lancio del sistema di prima generazione nei mesi di marzo e aprile 2019;
  2. ha iniziato a studiare il piano di aggiornamento all'inizio del 2020 e ha avviato l'aggiornamento generale al sistema di seconda generazione nell'aprile 2020.

Questo articolo descrive la scelta della tecnologia e i principi di base delle due generazioni di sistemi di ricerca per immagini sulla base della mia esperienza personale in questo progetto.

Panoramica

Che cos'è un'immagine?

Prima di occuparci di immagini, dobbiamo sapere che cos'è un'immagine.

La risposta è che un'immagine è un insieme di pixel.

Ad esempio, la parte nel riquadro rosso di questa immagine è virtualmente una serie di pixel.

1-what-is-an-image.png 1-cosa-è-un'immagine.png

Supponiamo che la parte nel riquadro rosso sia un'immagine, allora ogni quadratino indipendente nell'immagine è un pixel, l'unità di informazione di base. Quindi, la dimensione dell'immagine è 11 x 11 px.

2-what-is-an-image.png 2-cosa-è-un'immagine.png

Rappresentazione matematica delle immagini

Ogni immagine può essere rappresentata da una matrice. Ogni pixel dell'immagine corrisponde a un elemento della matrice.

Immagini binarie

I pixel di un'immagine binaria sono bianchi o neri, quindi ogni pixel può essere rappresentato da 0 o 1. Ad esempio, la rappresentazione matriciale di un'immagine binaria 4 * 4 è:

0 1 0 1
1 0 0 0
1 1 1 0
0 0 1 0

Immagini RGB

I tre colori primari (rosso, verde e blu) possono essere mescolati per produrre qualsiasi colore. Per le immagini RGB, ogni pixel ha le informazioni di base di tre canali RGB. Analogamente, se ogni canale utilizza un numero a 8 bit (in 256 livelli) per rappresentare la sua scala di grigi, la rappresentazione matematica di un pixel è la seguente:

([0 .. 255], [0 .. 255], [0 .. 255])

Prendendo come esempio un'immagine RGB 4*4:

3-4-x-4-rgb-image.png 3-4-x-4-rgb-image.png

L'essenza dell'elaborazione delle immagini consiste nell'elaborare queste matrici di pixel.

Il problema tecnico della ricerca per immagini

Se si cerca l'immagine originale, cioè un'immagine con esattamente gli stessi pixel, è possibile confrontare direttamente i loro valori MD5. Tuttavia, le immagini caricate su Internet sono spesso compresse o filigranate. Anche un piccolo cambiamento in un'immagine può creare un risultato MD5 diverso. Finché c'è incoerenza nei pixel, è impossibile trovare l'immagine originale.

Per un sistema di ricerca per immagine, vogliamo cercare immagini con contenuti simili. Dobbiamo quindi risolvere due problemi fondamentali:

  • Rappresentare o astrarre un'immagine in un formato di dati che possa essere elaborato da un computer.
  • I dati devono essere comparabili per il calcolo.

In particolare, abbiamo bisogno delle seguenti caratteristiche:

  • Estrazione delle caratteristiche dell'immagine.
  • Calcolo delle caratteristiche (calcolo della somiglianza).

Il sistema di ricerca per immagini di prima generazione

Estrazione delle caratteristiche - astrazione dell'immagine

Il sistema di ricerca per immagini di prima generazione utilizza l'algoritmo Perceptual hash o pHash per l'estrazione delle caratteristiche. Quali sono le basi di questo algoritmo?

4-first-generation-image-search.png 4-prima-generazione-immagine-ricerca.png

Come mostrato nella figura precedente, l'algoritmo pHash esegue una serie di trasformazioni sull'immagine per ottenere il valore hash. Durante il processo di trasformazione, l'algoritmo astrae continuamente le immagini, avvicinando così i risultati di immagini simili.

Calcolo delle caratteristiche - calcolo della somiglianza

Come calcolare la somiglianza tra i valori di pHash di due immagini? La risposta è utilizzare la distanza di Hamming. Quanto più piccola è la distanza di Hamming, tanto più simile è il contenuto delle immagini.

Che cos'è la distanza di Hamming? È il numero di bit diversi.

Ad esempio,

Value 1: 0 1 0 1 0
Value 2: 0 0 0 1 1

Ci sono due bit diversi nei due valori di cui sopra, quindi la distanza di Hamming tra loro è 2.

Ora conosciamo il principio del calcolo della somiglianza. La domanda successiva è: come calcolare le distanze di Hamming di 100 milioni di dati su 100 milioni di immagini? In breve, come cercare immagini simili?

Nella fase iniziale del progetto, non ho trovato uno strumento (o un motore di calcolo) soddisfacente in grado di calcolare rapidamente la distanza di Hamming. Così ho cambiato il mio piano.

La mia idea è che se la distanza di Hamming di due valori di pHash è piccola, allora posso tagliare i valori di pHash e le piccole parti corrispondenti saranno probabilmente uguali.

Per esempio:

Value 1: 8 a 0 3 0 3 f 6
Value 2: 8 a 0 3 0 3 d 8

Dividiamo i due valori di cui sopra in otto segmenti e i valori di sei segmenti sono esattamente uguali. Si può dedurre che la loro distanza di Hamming è vicina e quindi queste due immagini sono simili.

Dopo la trasformazione, si può notare che il problema del calcolo della distanza di Hamming è diventato un problema di equivalenza. Se divido ogni valore di pHash in otto segmenti, se ci sono più di cinque segmenti che hanno esattamente gli stessi valori, allora i due valori di pHash sono simili.

È quindi molto semplice risolvere la corrispondenza di equivalenza. Possiamo utilizzare il classico filtraggio di un sistema di database tradizionale.

Naturalmente, io uso la corrispondenza a più termini e specifico il grado di corrispondenza usando minimum_should_match in ElasticSearch (questo articolo non introduce il principio di ES, potete impararlo da soli).

Perché scegliere ElasticSearch? In primo luogo, offre la funzione di ricerca di cui sopra. In secondo luogo, il progetto di gestione delle immagini utilizza ES per fornire una funzione di ricerca full-text ed è molto economico utilizzare le risorse esistenti.

Sintesi del sistema di prima generazione

Il sistema di ricerca per immagini di prima generazione sceglie la soluzione pHash + ElasticSearch, che presenta le seguenti caratteristiche:

  • L'algoritmo pHash è semplice da usare e può resistere a un certo grado di compressione, watermark e rumore.
  • ElasticSearch utilizza le risorse esistenti del progetto senza aggiungere ulteriori costi alla ricerca.
  • Ma il limite di questo sistema è evidente: l'algoritmo pHash è una rappresentazione astratta dell'intera immagine. Una volta distrutta l'integrità dell'immagine, ad esempio aggiungendo un bordo nero all'immagine originale, è quasi impossibile giudicare la somiglianza tra l'originale e le altre.

Per superare queste limitazioni, è nato il sistema di ricerca di immagini di seconda generazione con una tecnologia di base completamente diversa.

Questo articolo è stato scritto da rifewang, utente di Milvus e ingegnere informatico di UPYUN. Se vi piace questo articolo, venite a salutarci! https://github.com/rifewang

Like the article? Spread the word

Continua a Leggere