[ PROMPT_NODE_22758 ]
applications
[ SKILL_DOCUMENTATION ]
# CLIP 应用指南
CLIP 的实际应用与使用案例。
## 零样本图像分类
python
import torch
import clip
from PIL import Image
model, preprocess = clip.load("ViT-B/32")
# 定义类别
categories = [
"a photo of a dog",
"a photo of a cat",
"a photo of a bird",
"a photo of a car",
"a photo of a person"
]
# 准备图像
image = preprocess(Image.open("photo.jpg")).unsqueeze(0)
text = clip.tokenize(categories)
# 分类
with torch.no_grad():
image_features = model.encode_image(image)
text_features = model.encode_text(text)
logits_per_image, _ = model(image, text)
probs = logits_per_image.softmax(dim=-1).cpu().numpy()
# 打印结果
for category, prob in zip(categories, probs[0]):
print(f"{category}: {prob:.2%}")
## 语义图像搜索
python
# 索引图像
image_database = []
image_paths = ["img1.jpg", "img2.jpg", "img3.jpg"]
for img_path in image_paths:
image = preprocess(Image.open(img_path)).unsqueeze(0)
with torch.no_grad():
features = model.encode_image(image)
features /= features.norm(dim=-1, keepdim=True)
image_database.append((img_path, features))
# 使用文本搜索
query = "a sunset over mountains"
text_input = clip.tokenize([query])
with torch.no_grad():
text_features = model.encode_text(text_input)
text_features /= text_features.norm(dim=-1, keepdim=True)
# 查找匹配项
similarities = []
for img_path, img_features in image_database:
similarity = (text_features @ img_features.T).item()
similarities.append((img_path, similarity))
# 按相似度排序
similarities.sort(key=lambda x: x[1], reverse=True)
for img_path, score in similarities[:3]:
print(f"{img_path}: {score:.3f}")
## 内容审核
python
# 定义安全类别
categories = [
"safe for work content",
"not safe for work content",
"violent or graphic content",
"hate speech or offensive content",
"spam or misleading content"
]
text = clip.tokenize(categories)
# 检查图像
with torch.no_grad():
logits, _ = model(image, text)
probs = logits.softmax(dim=-1)
# 获取分类结果
max_idx = probs.argmax().item()
confidence = probs[0, max_idx].item()
if confidence > 0.7:
print(f"Classified as: {categories[max_idx]} ({confidence:.2%})")
else:
print(f"Uncertain classification (confidence: {confidence:.2%})")
## 图文检索
python
# 文本数据库
captions = [
"A beaut