零样本图像分类

使用 Hugging Face 的多模态模型

James Chapman

Curriculum Manager, DataCamp

CLIP

  • 对比式语言-图像预训练(CLIP)
  • 计算图像与文本的相似度
  • 基于 4 亿对图文训练
  • 两个编码器:
    • 视觉编码器
    • 文本编码器
  • 图文匹配紧密时产生相似向量

CLIP 文本与图像编码示意图

1 https://openai.com/index/clip/
使用 Hugging Face 的多模态模型

零样本学习

  • 执行模型未专门训练的任务

零样本学习对飞机的排序

1 https://openai.com/index/clip/
使用 Hugging Face 的多模态模型

用例:产品分类

from datasets import load_dataset
import matplotlib.pyplot as plt

dset = "rajuptvs/ecommerce_products_clip"
dataset = load_dataset(dset)

print(dataset["train"][0]["Description"])
plt.imshow(dataset["train"][0]["image"]) plt.show()
Blive High quality premium Full sleeves printed 
Shirt direct from the manufacturers.Gives you 
a clean and classy look while also 
making you feel comfortable.Trusted 
brand online and no compromise on quality.

数据集中一件衬衫的图片

使用 Hugging Face 的多模态模型

使用 CLIP 的零样本学习

model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")


categories = ["shirt", "trousers", "shoes", "dress", "hat", "bag", "watch"]
inputs = processor(text=categories, images=dataset["train"][0]["image"], return_tensors="pt", padding=True) outputs = model(**inputs)
probs = outputs.logits_per_image.softmax(dim=1)
categories[probs.argmax().item()]
shirt
使用 Hugging Face 的多模态模型

CLIP 分数

  • 编码后的图像与描述的相似度
  • 取值范围:100(完全一致)到 0(不一致)
from torchmetrics.functional.multimodal import clip_score


image = dataset["train"][0]["image"] description = dataset["train"][0]["Description"]
from torchvision.transforms import ToTensor image = ToTensor()(image)*255
score = clip_score(image, description, "openai/clip-vit-base-patch32")
print(f"CLIP 分数: {score}")
CLIP 分数: 28.495952606201172
使用 Hugging Face 的多模态模型

开始练习吧!

使用 Hugging Face 的多模态模型

Preparing Video For Download...