Abrufen Sie Bilder basierend auf einer Abfrage (Text oder Bild) mit dem vorgezogenen Clip -Modell von Open AI.
Text als Abfrage.
Bild als Abfrage.
CLIP (kontrastive Sprachbild vor dem Training) ist ein neuronales Netzwerk, das auf einer Vielzahl von (Bild, Text) ausgebildet ist. Es kann Bilder und Text in denselben latenten Raum abbilden, so dass sie mit einer Ähnlichkeitsmaßnahme verglichen werden können.
Wenn ich die Arbeit in diesem Repository erweiterte, habe ich eine einfache Bildsuchmaschine erstellt, die sowohl Text als auch Bilder als Abfrage aufnehmen kann. Die Suchmaschine funktioniert wie folgt:
image_id: {"url": https://abc.com/xyz, "feature_vector": [0.1, 0.3, ..., 0.2]}
Ich habe die Lite -Version des UNSPLASH -Datensatzes verwendet, der 25.000 Bilder enthält. Die K-Nearest-Nachbar-Suche wird vom Amazon Elasticsearch-Service angetrieben. Ich habe den Abfragedienst als AWS -Lambda -Funktion eingesetzt und ein API -Gateway davor gestellt. Der Frontend wird mit Stromflächen entwickelt.
pip install -e . --no-cache-dir
python scripts/download_unsplash.py --image_width=480 --threads_count=32
Dadurch wird eine ZIP -Datei heruntergeladen und extrahiert, die die Metadaten über die Fotos im Datensatz enthält. Das Skript verwendet die URLs der Fotos, um die tatsächlichen Bilder auf unsplash-dataset/photos herunterzuladen. Der Download kann für einige Bilder fehlschlagen (siehe dieses Problem). Da Clip die Bilder auf 224 x 224 sowieso abbeispielt, möchten Sie möglicherweise die Breite der heruntergeladenen Bilder anpassen, um den Speicherplatz zu reduzieren. Möglicherweise möchten Sie auch den Parameter threads_count erhöhen, um eine schnellere Leistung zu erzielen.
python scripts/ingest_data.py
Das Skript lädt das vorgezogene Clip -Modell herunter und verarbeitet die Bilder per Batch. Es wird GPU verwenden, wenn es einen gibt.
Erstellen Sie das Docker -Bild für 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 .
Führen Sie das Docker -Bild als Container aus.
docker run -p 9000:8080 -it --rm clip-image-search
Testen Sie den Container mit einer Postanforderung.
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"query": "two dogs", "input_type": "text"}'
streamlit run streamlit_app.py