열린 AI의 사전 처리 된 클립 모델을 사용하여 쿼리 (텍스트 또는 이미지)를 기반으로 이미지를 검색하십시오.
텍스트로 텍스트.
쿼리로 이미지.
클립 (대비 언어 이미지 사전 훈련)은 다양한 (이미지, 텍스트) 쌍으로 훈련 된 신경망입니다. 이미지와 텍스트를 동일한 잠재 공간에 매핑하여 유사성 측정을 사용하여 비교할 수 있습니다.
이 저장소의 작업을 확장하여 텍스트와 이미지를 모두 쿼리로 가져갈 수있는 간단한 이미지 검색 엔진을 만들었습니다. 검색 엔진은 다음과 같이 작동합니다.
image_id: {"url": https://abc.com/xyz, "feature_vector": [0.1, 0.3, ..., 0.2]}
25,000 개의 이미지가 포함 된 Unsplash 데이터 세트의 Lite 버전을 사용했습니다. K-Nearest Neighbor Search는 Amazon Elasticsearch Service에 의해 구동됩니다. 쿼리 서비스를 AWS Lambda 기능으로 배포하고 API 게이트웨이를 그 앞에 배치했습니다. 프론트 엔드는 sleamlit을 사용하여 개발되었습니다.
pip install -e . --no-cache-dir
python scripts/download_unsplash.py --image_width=480 --threads_count=32
이렇게하면 데이터 세트의 사진에 대한 메타 데이터가 포함 된 zip 파일을 다운로드하여 추출합니다. 스크립트는 사진의 URL을 사용하여 실제 이미지를 unsplash-dataset/photos 으로 다운로드합니다. 몇 가지 이미지에 대해 다운로드가 실패 할 수 있습니다 (이 문제 참조). 클립은 이미지를 224 x 224로 다운 샘플링하므로 다운로드 된 이미지의 너비를 조정하여 저장 공간을 줄일 수 있습니다. 더 빠른 성능을 달성하기 위해 threads_count 매개 변수를 늘릴 수도 있습니다.
python scripts/ingest_data.py
스크립트는 사전 처리 된 클립 모델을 다운로드하고 이미지를 배치로 처리합니다. GPU가 있으면 GPU를 사용합니다.
AWS Lambda의 Docker Image를 구축하십시오.
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
사후 요청으로 컨테이너를 테스트하십시오.
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"query": "two dogs", "input_type": "text"}'
streamlit run streamlit_app.py