Qual é o seu melhor palpite sobre como a Pesquisa de imagens do Google funciona? Posso fazer upload de uma foto e procurar imagens semelhantes. Qual algoritmo ele usa para identificar imagens semelhantes?
Qual é o seu melhor palpite sobre como a Pesquisa de imagens do Google funciona? Posso fazer upload de uma foto e procurar imagens semelhantes. Qual algoritmo ele usa para identificar imagens semelhantes?
Respostas:
Não sei qual algoritmo o Google usa. Mas, como você queria uma melhor estimativa, deixe-me dar algumas idéias sobre como um sistema semelhante pode ser construído .
Todo o campo que trata da pesquisa-imagem-base-por-imagem é chamado de Recuperação de Imagem Baseada em Conteúdo (CBIR) . A idéia é, de alguma forma, construir uma representação de imagem (não necessariamente compreensível por humanos) que contenha as informações sobre o conteúdo da imagem .
Existem duas abordagens básicas:
A abordagem local de baixo nível é muito bem pesquisada. A melhor abordagem atual extrai recursos locais (há uma opção de algoritmo de extração de recursos envolvida aqui) e usa seus descritores locais (novamente, escolha de descritores) para comparar as imagens.
Em trabalhos mais recentes, os descritores locais são agrupados primeiro e depois os clusters são tratados como palavras visuais - a técnica é muito semelhante à pesquisa de documentos do Google, mas usando palavras visuais em vez de palavras-letra.
Você pode pensar nas palavras visuais como equivalentes às raízes das palavras na linguagem: por exemplo, as palavras: trabalho, trabalho, trabalho pertencem à mesma raiz da palavra.
Uma das desvantagens desses tipos de métodos é que eles geralmente apresentam baixo desempenho em imagens de baixa textura.
Eu já dei e vi muitas respostas detalhando essas abordagens; portanto, fornecerei links para essas respostas:
As abordagens semânticas são tipicamente baseadas em representações hierárquicas de toda a imagem. Essas abordagens ainda não foram aperfeiçoadas, especialmente para os tipos de imagem gerais. Existe algum sucesso na aplicação desse tipo de técnica a domínios de imagem específicos.
Como atualmente estou no meio da pesquisa dessas abordagens, não posso tirar conclusões. Agora, dito isso, expliquei uma idéia geral por trás dessas técnicas nesta resposta .
Mais uma vez, em breve: a idéia geral é representar uma imagem com uma estrutura em forma de árvore, onde as folhas contêm os detalhes da imagem e os objetos podem ser encontrados nos nós mais próximos da raiz dessas árvores. Então, de alguma forma, você compara as subárvores para identificar os objetos contidos nas diferentes imagens.
Aqui estão algumas referências para diferentes representações em árvore. Eu não li todos eles, e alguns deles usam esse tipo de representação para segmentação em vez do CBIR, mas ainda assim, aqui estão eles:
Além da resposta de Penélope, existem duas abordagens, o hash perceptivo e o modelo de saco de palavras cuja funcionalidade básica é facilmente implementada e é agradável brincar com ou aprender com ela antes de se aventurar em um território mais avançado.
Hash perceptivo
Os algoritmos de hash perceptivo têm como objetivo construir um hash, que diferentemente de um hash criptográfico, fornecerá valores de hash semelhantes ou quase similares para imagens idênticas que foram ligeiramente distorcidas, por exemplo, por escala ou compactação JPEG. Eles servem a um propósito útil na detecção perto de duplicatas em uma coleção de imagens.
Em sua forma mais básica, você pode implementar isso da seguinte maneira:
Converter imagem em escala de cinza
Faça com que sua imagem seja zero
O resultado é um hash resiliente de 64 bits, porque é baseado nos componentes de baixa frequência da imagem. Uma variante desse tema seria dividir cada imagem em 64 sub-blocos e comparar a média da imagem global com a média do sub-bloco local e escrever 1 ou 0 de acordo.
O hash perceptivo é implementado, por exemplo, por phash
Modelo de saco de palavras
O modelo de saco de palavras visa identificar semanticamente uma imagem, por exemplo, todas as imagens com cães. Isso é feito usando certos patches de imagem no mesmo espírito que se classificaria um documento de texto com base na ocorrência de certas palavras. Pode-se categorizar as palavras, dizer "cachorro" e "cães" e armazená-las como identificador em um arquivo invertido, onde a categoria "cachorro" agora aponta para todos os documentos que contêm "cachorro" ou "cães".
Em sua forma mais simples, é possível fazer isso com imagens da seguinte maneira:
Agora você tem uma enorme coleção de descritores SIFT. O problema é que, mesmo a partir de imagens quase idênticas, haverá alguma incompatibilidade entre os descritores. Você deseja agrupar os idênticos mais ou menos como tratar algumas palavras, como "cachorro" e "cães" como idênticos e precisa compensar os erros. É aqui que entra o cluster para jogar.
Uma consulta de imagem, por exemplo, encontre-me imagens semelhantes à imagem de consulta, será resolvida da seguinte maneira:
A outra abordagem interessante que parece ser negligenciada nas respostas acima são as Redes Neurais Convolucionais Profundas. Parece que o Google está usando agora para seu mecanismo de busca de imagens e seu serviço de tradução . As CNNs são extremamente poderosas em tarefas cognitivas, como a descoberta de similaridades. Parece que a CNN realiza um procedimento semelhante ao do Saco dos Mundos, que é incorporado às suas camadas de rede. A desvantagem dessas técnicas é a incapacidade de desaprender e a necessidade de grandes conjuntos de dados para treinamento e, claro, os custos computacionais pesados no estágio de treinamento.
Artigo sugerido sobre esse assunto:
e implementação de recuperação de imagem de aprendizado profundo de código aberto (o artigo posterior): https://github.com/paucarre/tiefvision