Récupérez des images basées sur une requête (texte ou image), en utilisant le modèle de clip pré-entraîné d'Open AI.
Texte comme requête.
Image comme requête.
Clip (pré-formation d'image linguistique contrastive) est un réseau neuronal formé sur une variété de paires (image). Il peut mapper des images et du texte dans le même espace latent, afin qu'ils puissent être comparés en utilisant une mesure de similitude.
En étendant le travail dans ce référentiel, j'ai créé un moteur de recherche d'images simples qui peut prendre à la fois du texte et des images en tant que requête. Le moteur de recherche fonctionne comme suit:
image_id: {"url": https://abc.com/xyz, "feature_vector": [0.1, 0.3, ..., 0.2]}
J'ai utilisé la version Lite de l'ensemble de données UNSPLASH qui contient 25 000 images. La recherche de voisin K-Dearest est alimentée par Amazon Elasticsearch Service. J'ai déployé le service de requête en tant que fonction AWS Lambda et mis une passerelle API devant elle. Le frontend est développé à l'aide de rationalisation.
pip install -e . --no-cache-dir
python scripts/download_unsplash.py --image_width=480 --threads_count=32
Cela téléchargera et extrait un fichier zip qui contient les métadonnées sur les photos de l'ensemble de données. Le script utilisera les URL des photos pour télécharger les images réelles sur unsplash-dataset/photos . Le téléchargement peut échouer pour quelques images (voir ce problème). Étant donné que le clip échantillonnera les images à 224 x 224 de toute façon, vous voudrez peut-être ajuster la largeur des images téléchargées pour réduire l'espace de stockage. Vous pouvez également augmenter le paramètre threads_count pour obtenir une performance plus rapide.
python scripts/ingest_data.py
Le script téléchargera le modèle de clip pré-entraîné et traitera les images par lot. Il utilisera GPU s'il y en a un.
Construisez l'image Docker pour 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 .
Exécutez l'image Docker en tant que conteneur.
docker run -p 9000:8080 -it --rm clip-image-search
Testez le conteneur avec une demande de post.
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"query": "two dogs", "input_type": "text"}'
streamlit run streamlit_app.py