Recupere as imagens com base em uma consulta (texto ou imagem), usando o modelo de clipe pré -treinado da IA.
Texto como consulta.
Imagem como consulta.
O clipe (pré-treinamento de imagem de linguagem contrastiva) é uma rede neural treinada em uma variedade de pares (imagem, texto). Ele pode mapear imagens e texto no mesmo espaço latente, para que possam ser comparados usando uma medida de similaridade.
Estendendo o trabalho neste repositório, criei um mecanismo de pesquisa de imagens simples que pode tomar texto e imagens como consulta. O mecanismo de pesquisa funciona da seguinte maneira:
image_id: {"url": https://abc.com/xyz, "feature_vector": [0.1, 0.3, ..., 0.2]}
Usei a versão Lite do conjunto de dados UNSPLASH que contém 25.000 imagens. A pesquisa vizinha mais antiga é alimentada pelo Amazon Elasticsearch Service. Implantei o serviço de consulta como uma função da AWS Lambda e coloquei um gateway de API na frente dele. O front -end é desenvolvido usando o streamlit.
pip install -e . --no-cache-dir
python scripts/download_unsplash.py --image_width=480 --threads_count=32
Isso baixará e extrairá um arquivo zip que contém os metadados sobre as fotos no conjunto de dados. O script usará os URLs das fotos para fazer o download das imagens reais para unsplash-dataset/photos . O download pode falhar para algumas imagens (consulte este problema). Como o clipe diminuirá as imagens para 224 x 224 de qualquer maneira, convém ajustar a largura das imagens baixadas para reduzir o espaço de armazenamento. Você também pode aumentar o parâmetro threads_count para obter um desempenho mais rápido.
python scripts/ingest_data.py
O script baixará o modelo de clipe pré -treinado e processará as imagens por lote. Ele usará a GPU se houver um.
Construa a imagem do Docker para a AWS Lambda.
docker build --build-arg AWS_ACCESS_KEY_ID=YOUR_AWS_ACCESS_KEY_ID
--build-arg AWS_SECRET_ACCESS_KEY=YOUR_AWS_SECRET_ACCESS_KEY
--tag clip-image-search
--file server/Dockerfile .
Execute a imagem do Docker como um contêiner.
docker run -p 9000:8080 -it --rm clip-image-search
Teste o contêiner com uma solicitação de postagem.
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"query": "two dogs", "input_type": "text"}'
streamlit run streamlit_app.py