Получите изображения на основе запроса (текст или изображение), используя открытую модель клипа Open AI.
Текст как запрос.
Изображение как запрос.
Clip (контрастный языковой предварительный тренировки)-это нейронная сеть, обучаемая различным парам (изображение, текст). Он может отображать изображения и текст в одно и то же скрытое пространство, чтобы их можно было сравнить, используя меру сходства.
Расширяя работу в этом репозитории, я создал простую поисковую систему изображения, которая может принимать как текст, так и изображения в качестве запроса. Поисковая система работает следующим образом:
image_id: {"url": https://abc.com/xyz, "feature_vector": [0.1, 0.3, ..., 0.2]}
Я использовал версию Lite of Unsplash DataSet, которая содержит 25 000 изображений. Поиск K-ближайшего соседа работает на Amazon Elasticsearch Service. Я развернул службу запросов в качестве функции AWS Lambda и поместил перед ней шлюз API. Фронт разработан с использованием потока.
pip install -e . --no-cache-dir
python scripts/download_unsplash.py --image_width=480 --threads_count=32
Это загрузит и извлечет zip -файл, который содержит метаданные о фотографиях в наборе данных. The script will use the URLs of the photos to download the actual images to unsplash-dataset/photos . Загрузка может пройти в неудаче для нескольких изображений (см. Эта проблема). Поскольку Clip в любом случае понизит изображения до 224 x 224, вы можете настроить ширину загруженных изображений, чтобы уменьшить пространство для хранения. You may also want to increase the threads_count parameter to achieve a faster performance.
python scripts/ingest_data.py
Сценарий загрузит предварительную модель клипа и обрабатывает изображения с помощью партии. Он будет использовать GPU, если есть один.
Стройте изображение Docker для 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 .
Запустите изображение Docker как контейнер.
docker run -p 9000:8080 -it --rm clip-image-search
Проверьте контейнер с помощью запроса Post.
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"query": "two dogs", "input_type": "text"}'
streamlit run streamlit_app.py