CLIP模型能够用于零样本分类、语义图像搜索等多种场景。在Roboflow推理服务器上,可以通过三种方式利用CLIP模型:
图像嵌入(embed_image):用于计算图像嵌入。嵌入图像的过程类似于将图像信息压缩到更易于管理的大小。当嵌入一张图像时,输入的是包含数万个像素的图像,并将其精炼到仅有几百个数字的嵌入向量。这些嵌入向量对人类眼睛特别有意义,但与其他嵌入向量相比,它们可以证明非常有用。
# 定义请求负载
infer_clip_payload = {
"image": {
"type": "url",
"value": "https://i.imgur.com/Q6lDy8B.jpg",
},
}
# 定义推理服务器URL(localhost:9001, infer.roboflow.com等)
base_url = "https://infer.roboflow.com"
# 定义Roboflow API密钥
api_key = <YOUR API KEY HERE>
res = requests.post(
f"{base_url}/clip/embed_image?api_key={api_key}",
json=infer_clip_payload,
)
embeddings = res.json()['embeddings']
print(embeddings)
可以一次请求嵌入多张图像:
# 定义请求负载
infer_clip_payload = {
"image": [
{
"type": "url",
"value": "https://i.imgur.com/Q6lDy8B.jpg",
},
{
"type": "url",
"value": "https://i.imgur.com/Q6lDy8B.jpg",
}
]
}
res = requests.post(
f"{base_url}/clip/embed_image?api_key={api_key}",
json=infer_clip_payload,
)
文本嵌入(embed_text):CLIP模型可以像处理图像一样为文本生成嵌入。
# 定义请求负载
infer_clip_payload = {
"text": "the quick brown fox jumped over the lazy dog",
}
res = requests.post(
f"{base_url}/clip/embed_text?api_key={api_key}",
json=infer_clip_payload,
)
embeddings = res.json()['embeddings']
print(embeddings)
可以将多个文本块批量到一个请求中:
# 定义请求负载
infer_clip_payload = {
"text": [
"the quick brown fox jumped over the lazy dog",
"how vexingly quick daft zebras jump"
]
}
res = requests.post(
f"{base_url}/clip/embed_text?api_key={api_key}",
json=infer_clip_payload,
)
比较(compare):CLIP模型的真正价值在于嵌入的比较。比较是使用余弦相似度计算两个嵌入之间的数学距离。这个距离可以被认为是一个相似度分数。如果两个嵌入的余弦相似度接近1,则它们是相似的。
执行比较时,需要定义一个提示和一个或多个主题。由于可以比较任何组合的文本或图像,还必须定义提示类型和主题类型。
# 定义请求负载
infer_clip_payload = {
"prompt": {
"type": "url",
"value": "https://i.imgur.com/Q6lDy8B.jpg",
},
"prompt_type": "image",
"subject": "A very cute raccoon",
"subject_type": "text",
}
res = requests.post(
f"{base_url}/clip/compare?api_key={api_key}",
json=infer_clip_payload,
)
similarity = res.json()['similarity']
print(similarity)
infer_clip_payload = {
"subject": {
"type": "url",
"value": "https://i.imgur.com/Q6lDy8B.jpg",
},
"subject_type": "image",
"prompt": [
"A very cute raccoon",
"A large dog",
"A black cat",
],
"prompt_type": "text",
}