초기화할 때 몇 가지 매개변수를 지정할 수 있어:
backend_url
: 백엔드의 URL이야. (필수)indice_name
: 사용할 인덱스의 이름을 명시해야 해. (필수)aesthetic_score
: 미적 평가 점수로, aesthetic-predictor에 의해 평가됐어. 기본값은 9야.use_mclip
: 다국어 버전의 CLIP을 사용할지의 여부야. 기본값은 False.aesthetic_weight
: 미적 점수의 가중치야. 기본값은 0.5야.modality
: 인덱스에서 이미지나 텍스트 중 어떤 것을 검색할지 선택해. Multimodal.IMAGE 또는 Multimodal.TEXT 중 하나야. 기본값은 Multimodal.IMAGE.num_images
: API에서 반환할 이미지의 수야. 기본값은 40이야.deduplicate
: 이미지 임베딩으로 결과의 중복을 제거할지 여부야. 기본값은 true.use_safety_model
: 안전하지 않은 이미지를 제거할지 여부야. 기본값은 true.use_violence_detector
: 폭력적인 이미지를 제거할지 여부야. 기본값은 true.(초기화 예): 기본 매개변수로 호스팅된 백엔드에 Laion5B를 질의하려면:
Laion5B
는 매우 큰 이미지와 텍스트 데이터를 포함하는 데이터베이스이고, indice_name="laion5B-L-14"
에서 indice_name
은 이 데이터베이스 내에서 특정한 인덱스(데이터를 정리하고 검색하기 위한 구조)를 지정하는 데 사용되는 키워드 인자Laion5B
는 여러 인덱스를 가질 수 있으며, 이들 각각은 데이터를 다루는 데 있어 특정한 목적이나 최적화를 제공"laion5B-L-14"
라는 인덱스 이름은, Laion5B
데이터베이스 안에서 from clip_retrieval.clip_client import ClipClient, Modality
client = ClipClient(url="https://knn.laion.ai/knn-service", indice_name="laion5B-L-14")
results = client.query(text="an image of a cat")
results[0]
# 출력: {'url': 'https://example.com/kitten.jpg', 'caption': 'an image of a kitten', 'id': 14, 'similarity': 0.2367108941078186}
제공된 이미지와 유사한 캡션을 가진 이미지도 찾을 수 있어. 이미지는 로컬 경로나 URL을 통해 전달할 수 있어.
cat_results = client.query(image="cat.jpg")
dog_results = client.query(image="https://example.com/dog.jpg")
제공된 클립 임베딩과 유사한 캡션을 가진 이미지를 찾을 수도 있어.
cat_results = client.query(embedding_input=cat_embedding)
all_results = [result for result in [client.query(image=image) for image in os.listdir("my-images")]]
with open("search-results.json", "w") as f:
json.dump(all_results, f)
img2dataset
은 특정 형식의 데이터(이 경우는 JSON 파일)에서 이미지와 관련 메타데이터(예: 캡션)를 추출하여, img2dataset
도구는 이 정보를 바탕으로 각 이미지를 다운로드하고, 각 이미지에 해당하는 캡션과 함께 데이터셋을 구성해. img2dataset "search-results.json" \
--input_format="json" \
--output_folder="knn_search_dataset" \
--caption_col="caption"
export CUDA_VISIBLE_DEVICES=
를 실행할 수 있어.wget https://github.com/rom1504/img2dataset/raw/main/tests/test_files/test_1000.parquet
clip-retrieval end2end test_1000.parquet /tmp/my_output
--run_back False
를 사용해.예를 들어, img2dataset
를 설치하고 다음을 실행해서 example_folder
에 몇몇 이미지를 가져와봐:
pip install img2dataset
echo 'https://placekitten.com/200/305' >> myimglist.txt
echo 'https://placekitten.com/200/304' >> myimglist.txt
echo 'https://placekitten.com/200/303' >> myimglist.txt
img2dataset --url_list=myimglist.txt --output_folder=image_folder --thread_count=64 --image_size=256
이미지와 동일한 이름의 텍스트 파일을 그 폴더에 두면, 텍스트 임베딩도 얻을 수 있어.
그런 다음 clip-retrieval inference --input_dataset image_folder --output_folder embeddings_folder
를 실행해.
출력 폴더에는 다음이 포함될 거야:
img_emb/
: numpy로 이미지 임베딩이 포함된 img_emb_0.npy
text_emb/
: numpy로 텍스트 임베딩이 포함된 text_emb_0.npy
metadata/
: 이미지 경로, 캡션, 메타데이터가 포함된 metadata_0.parquet
이건 백만 단위의 샘플까지 확장될 수 있어. 3080에서 1400 샘플/초로, 10M 샘플을 2시간 안에 처리할 수 있어.