沐神CLIP论文精读中的小实验

CLIP 论文逐段精读【论文精读】_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1SL4y1s7LQ/?spm_id_from=333.788&vd_source=21011151235423b801d3f3ae98b91e94参考colab链接:

colab

Colab的准备

确保你运行的是GPU运行时;如果不是,请在菜单中的“运行时>更改运行时类型”中选择“GPU”作为硬件加速器。下一个单元将安装CLIP及其依赖项,并检查是否安装了PyTorch 1.7.1或更高版本。

! pip install ftfy regex tqdm
! pip install git+https://github.com/openai/CLIP.git
import numpy as np
import torch
from pkg_resources import packaging

print("Torch version:", torch.__version__)

加载模型

CLIP .available_models()将列出可用CLIP模型的名称。

import clip

clip.available_models()
import clip
from PIL import Image
device= "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32",device=device)

上传红包图片到挂载的云端云盘,修改地址 。网上随便找的红包图片与视频中的不同,看一下能否得出相近结果。

image = preprocess(Image.open("/content/drive/MyDrive/Colab Notebooks/red_envelope.png")).unsqueeze(0).to(device)
text = clip.tokenize(["plane","dog","car","bird","red_envelope"]).to(device)

with torch.no_grad():
  image_features = model.encode_image(image)
  text_feature = model.encode_text(text)
  logits_per_image, logits_per_text = model(image,text)
  probs = logits_per_image.softmax(dim=-1).cpu().numpy()

print("Label probs:",probs)
  1. 图像预处理和文本编码:

    • preprocess 函数用于对图像进行预处理,这通常包括调整图像大小、归一化等步骤,以便模型可以正确处理图像数据。
    • Image.open 用于打开指定路径的图像文件,这里打开的是名为 "red_envelope.png" 的图像。
    • unsqueeze(0) 是一个PyTorch操作,用于在指定维度(这里是第0维)增加一个维度,因为模型可能需要一个批次维度。
    • to(device) 将图像张量移动到指定的设备上,device 变量通常是一个字符串,表示要使用的计算设备,比如 "cuda" 表示GPU或 "cpu" 表示CPU。
  2. CLIP模型的文本编码:

    • clip.tokenize 函数用于将文本转换为模型可以理解的格式,通常是将单词转换为对应的token ID。
    • ["plane","dog","car","bird","red_envelope"] 是一个列表,包含了要与图像关联的文本标签。
  3. 模型推理:

    • model.encode_image(image) 编码图像特征。
    • model.encode_text(text) 编码文本特征。
    • model(image, text) 将图像和文本特征输入到CLIP模型中进行联合推理,得到每个类别的logits。
  4. 结果处理:

    • logits_per_image 和 logits_per_text 是模型输出的logits,分别对应图像和文本的预测结果。
    • softmax(dim=-1) 是一个操作,用于将logits转换为概率分布,便于理解和比较。
    • cpu().numpy() 将概率转换为NumPy数组,以便可以打印和进一步处理。
  5. 输出结果:

    • print("Label probs:", probs) 打印出每个类别的概率。

实验过程

先调戏一下,让CLIP在无关token中判断概率

加上 red_envelope,概率接近1

 将bird改为envelope,把car换成red,,看看CLIP能否分清三者的关系,结果还是坚定的选择了红包,但是没有出现视频里置信度为1的情况。

 把plane,改成money,dog改成new year,,再加上china,并且删除red envelope选项,CLIP是否还能分清呢

显示China的置信度明显更高,而并非分类上的信封hhh

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值