🚀 Experimente o Zilliz Cloud, o Milvus totalmente gerenciado, gratuitamente—experimente um desempenho 10x mais rápido! Experimente Agora>>

milvus-logo
LFAI

Descrição geral

  • Scenarios
August 04, 2020
Rife Wang

O Yupoo Picture Manager serve dezenas de milhões de utilizadores e gere dezenas de milhares de milhões de imagens. Como a sua galeria de utilizadores está a aumentar, a Yupoo tem uma necessidade comercial urgente de uma solução que possa localizar rapidamente a imagem. Por outras palavras, quando um utilizador introduz uma imagem, o sistema deve encontrar a sua imagem original e imagens semelhantes na galeria. O desenvolvimento do serviço de pesquisa por imagem constitui uma abordagem eficaz a este problema.

O serviço de pesquisa por imagem passou por duas evoluções:

  1. Começou a primeira investigação técnica no início de 2019 e lançou o sistema de primeira geração em março e abril de 2019;
  2. Começou a investigação do plano de atualização no início de 2020 e iniciou a atualização geral para o sistema de segunda geração em abril de 2020.

O presente artigo descreve a seleção de tecnologias e os princípios básicos subjacentes às duas gerações de sistemas de pesquisa por imagem, com base na minha própria experiência neste projeto.

Descrição geral

O que é uma imagem?

Antes de falarmos de imagens, temos de saber o que é uma imagem.

A resposta é que uma imagem é um conjunto de pixéis.

Por exemplo, a parte da caixa vermelha nesta imagem é praticamente uma série de pixéis.

1-what-is-an-image.png 1-o-que-é-uma-imagem.png

Suponhamos que a parte na caixa vermelha é uma imagem, então cada pequeno quadrado independente na imagem é um pixel, a unidade básica de informação. Então, o tamanho da imagem é 11 x 11 px.

2-what-is-an-image.png 2-o-que-é-uma-imagem.png

Representação matemática de imagens

Cada imagem pode ser representada por uma matriz. Cada pixel da imagem corresponde a um elemento da matriz.

Imagens binárias

Os pixéis de uma imagem binária são pretos ou brancos, pelo que cada pixel pode ser representado por 0 ou 1. Por exemplo, a representação matricial de uma imagem binária 4 * 4 é:

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

Imagens RGB

As três cores primárias (vermelho, verde e azul) podem ser misturadas para produzir qualquer cor. Para imagens RGB, cada pixel tem a informação básica de três canais RGB. Da mesma forma, se cada canal utilizar um número de 8 bits (em 256 níveis) para representar a sua escala de cinzentos, então a representação matemática de um pixel é:

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

Tomando uma imagem 4 * 4 RGB como exemplo:

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

A essência do processamento de imagens consiste em processar estas matrizes de pixéis.

O problema técnico da pesquisa por imagem

Se estiver à procura da imagem original, ou seja, uma imagem com exatamente os mesmos pixels, pode comparar diretamente os seus valores MD5. No entanto, as imagens carregadas na Internet são frequentemente comprimidas ou têm marcas de água. Mesmo uma pequena alteração numa imagem pode criar um resultado MD5 diferente. Enquanto houver inconsistência nos pixéis, é impossível encontrar a imagem original.

Para um sistema de pesquisa por imagem, queremos procurar imagens com conteúdo semelhante. Então, precisamos de resolver dois problemas básicos:

  • Representar ou abstrair uma imagem como um formato de dados que pode ser processado por um computador.
  • Os dados devem ser comparáveis para efeitos de cálculo.

Mais especificamente, precisamos das seguintes caraterísticas:

  • Extração de caraterísticas da imagem.
  • Cálculo das caraterísticas (cálculo da semelhança).

O sistema de pesquisa por imagem de primeira geração

Extração de caraterísticas - abstração de imagens

O sistema de pesquisa por imagem de primeira geração utiliza o algoritmo Percetual hash ou pHash para a extração de caraterísticas. Quais são os princípios básicos deste algoritmo?

4-first-generation-image-search.png 4-primeira-geração-pesquisa-de-imagem.png

Como mostra a figura acima, o algoritmo pHash efectua uma série de transformações na imagem para obter o valor de hash. Durante o processo de transformação, o algoritmo abstrai continuamente as imagens, aproximando assim os resultados de imagens semelhantes.

Cálculo de caraterísticas - cálculo de semelhança

Como calcular a semelhança entre os valores pHash de duas imagens? A resposta é utilizar a distância de Hamming. Quanto mais pequena for a distância de Hamming, mais semelhante é o conteúdo das imagens.

O que é a distância de Hamming? É o número de bits diferentes.

Por exemplo,

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

Existem dois bits diferentes nos dois valores acima, pelo que a distância de Hamming entre eles é 2.

Agora já sabemos o princípio do cálculo da semelhança. A questão seguinte é: como calcular as distâncias de Hamming de dados à escala de 100 milhões de imagens à escala de 100 milhões de imagens? Em suma, como procurar imagens semelhantes?

Na fase inicial do projeto, não encontrei uma ferramenta satisfatória (ou um motor de computação) que pudesse calcular rapidamente a distância de Hamming. Por isso, alterei o meu plano.

A minha ideia é que, se a distância de Hamming entre dois valores de pHash for pequena, então posso cortar os valores de pHash e as partes pequenas correspondentes serão provavelmente iguais.

Por exemplo:

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

Dividimos os dois valores acima em oito segmentos e os valores de seis segmentos são exatamente os mesmos. Pode deduzir-se que a sua distância de Hamming é próxima e, por isso, estas duas imagens são semelhantes.

Após a transformação, pode constatar que o problema do cálculo da distância de Hamming se tornou num problema de equivalência de correspondência. Se eu dividir cada valor de pHash em oito segmentos, desde que haja mais de cinco segmentos que tenham exatamente os mesmos valores, então os dois valores de pHash são semelhantes.

Assim, é muito simples resolver a correspondência de equivalência. Podemos utilizar a filtragem clássica de um sistema de base de dados tradicional.

Naturalmente, utilizo a correspondência de vários termos e especifico o grau de correspondência utilizando minimum_should_match no ElasticSearch (este artigo não introduz o princípio do ES, pode aprendê-lo por si próprio).

Porque é que escolhemos o ElasticSearch? Em primeiro lugar, porque fornece a função de pesquisa acima referida. Em segundo lugar, o próprio projeto de gestão de imagens utiliza o ES para fornecer uma função de pesquisa de texto integral e é muito económico utilizar os recursos existentes.

Resumo do sistema de primeira geração

O sistema de pesquisa por imagem de primeira geração escolhe a solução pHash + ElasticSearch, que tem as seguintes caraterísticas

  • O algoritmo pHash é simples de utilizar e pode resistir a um certo grau de compressão, marca de água e ruído.
  • O ElasticSearch utiliza os recursos existentes do projeto sem acrescentar custos adicionais à pesquisa.
  • Mas a limitação deste sistema é óbvia: o algoritmo pHash é uma representação abstrata de toda a imagem. Se destruirmos a integridade da imagem, como adicionar um contorno preto à imagem original, é quase impossível avaliar a semelhança entre a imagem original e as outras.

Para ultrapassar estas limitações, surgiu o sistema de pesquisa de imagens de segunda geração com uma tecnologia subjacente completamente diferente.

Este artigo foi escrito por rifewang, utilizador de Milvus e engenheiro de software da UPYUN. Se gostou deste artigo, venha dizer olá! https://github.com/rifewang

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

Continue Lendo