CLIP 浅析

embedded/2024/10/18 16:50:53/

CLIP 浅析

文章目录

  • CLIP 浅析
    • 概述
    • 如何训练CLIP
    • 如何使用Clip进行图像分类
    • 优缺点分析
      • 优点
      • 缺点

概述

CLIP的英文全称是Contrastive Language-Image Pre-training,即一种基于对比文本-图像对的预训练方法或者模型

如何训练CLIP

CLIP包括两个模型:Text EncoderImage Encoder,其中Text Encoder用来提取文本的特征,可以采用NLP中常用的text transformer模型;而Image Encoder用来提取图像的特征,可以采用常用CNN模型或者vision transformer

其中CLIP的流程图如下

CLIP.png

首先CLIP通过一个文本编码器和图像编码器获得相关特征

在这里插入图片描述

其中对于通过文本编码器获得的特征记为 T i T_i Ti 表示第 i i i个文本特征,其中共含有 N N N个特征, N N N为训练数据集中的文本信息中的类别个数,对于通过图像编码器获得的特征记为 I i I_i Ii 表示第 i i i个图像特征,并将 I i I_i Ii与每一个文本特征 T i T_i Ti进行余弦相似度计算。并使用softmax计算概率得到最相似的图文匹配对。其中伪代码如下

# image_encoder - ResNet or Vision Transformer
# text_encoder - CBOW or Text Transformer
# I[n, h, w, c] - minibatch of aligned images
# T[n, l] - minibatch of aligned texts
# W_i[d_i, d_e] - learned proj of image to embed
# W_t[d_t, d_e] - learned proj of text to embed
# t - learned temperature parameter# 分别提取图像特征和文本特征
I_f = image_encoder(I) #[n, d_i]
T_f = text_encoder(T) #[n, d_t]# 对两个特征进行线性投射,得到相同维度的特征,并进行l2归一化
I_e = l2_normalize(np.dot(I_f, W_i), axis=1)
T_e = l2_normalize(np.dot(T_f, W_t), axis=1)# 计算缩放的余弦相似度:[n, n]
logits = np.dot(I_e, T_e.T) * np.exp(t)# 对称的对比学习损失:等价于N个类别的cross_entropy_loss
labels = np.arange(n) # 对角线元素的labels
loss_i = cross_entropy_loss(logits, labels, axis=0)
loss_t = cross_entropy_loss(logits, labels, axis=1)
loss = (loss_i + loss_t)/2

为了训练CLIP,OpenAI从互联网收集了共4个亿的文本-图像对,论文称之为WebImageText

如何使用Clip进行图像分类

因为ImageNet中的label全是图像类别的表情,为了更好的适应Transformer,作者使用了A photo of {label}的句子作为输入。

img

伪代码如下

# 首先生成每个类别的文本描述
labels = ["dog", "cat", "bird", "person", "mushroom", "cup"]
text_descriptions = [f"A photo of a {label}" for label in labels]
text_tokens = clip.tokenize(text_descriptions).cuda()# 提取文本特征
with torch.no_grad():text_features = model.encode_text(text_tokens).float()text_features /= text_features.norm(dim=-1, keepdim=True)

然后通过计算余弦相似度,并使用softmax计算概率得到最相似的图文匹配对。

优缺点分析

优点

因为CLIP使用图文对的形式进行训练,所以可以从互联网上获得大量的数据进行训练,从而无需大量的人工标注。因为大数据集的原因使得CLIP与CV中常用的先预训练然后微调不同,CLIP可以直接实现zero-shot的图像分类,即不需要任何训练数据,就能在某个具体下游任务上实现分类。

同时OpenAI证明了CLIP在许多数据集上与ResNet50具有相似甚至更好的准确率。

image-20240511213152514

image-20240511213335644

缺点

因为CLIP采用了大量的数据集以及复杂的视觉结构使得它需要消耗恐怖的计算资源。同时对于训练集外的数据,无法做到很好的预测。


http://www.ppmy.cn/embedded/39772.html

相关文章

数据库查询--条件查询

目录 1.关系运算条件的查询 2.逻辑运算符条件的查询 3.带关键字IN的查询 4.带BETWEEN AND关键字的查询 5.空值查询 6.带LIKE关键字的模糊查询 1.关系运算条件的查询 在SELECT语句中,最常见的是使用WHERE字句指定关系运算条件对数据进行过滤。 语法格式&#x…

2024年最新消息预知在线客服系统源码

源码说明: 下 载 地 址 : runruncode.com/php/19755.html - 新增消息预知功能,可以提前查看即将收到的消息。 - 新增消息撤回功能,可以撤回已发送的消息。 - 新增消息已读未读标记,可以标记消息为已读或未读。 -…

【2024亚马逊云科技峰会】Amazon Bedrock + Llama3 生成式AI实践

在 4 月 18 日,Meta在官网上公布了旗下最新大模型Llama 3。目前,Llama 3已经开放了80亿(8B)和700亿(70B)两个小参数版本,上下文窗口为8k,据称,通过使用更高质量的训练数据…

设计模式 六大原则之单一职责原则

文章目录 概述代码例子小结 概述 先看下定义吧,如下: 单一职责原则的定义描述非常简单,也不难理解。一个类只负责完成一个职责或者功能。也就是说在类的设计中, 我们不要设计大而全的类,而是要设计粒度小、功能单一的类。 代码例…

FebHost:什么是域名DNS服务器?

域名服务器是一种将域名转换为IP地址的计算机。在域名系统(DNS)中,它起着至关重要的作用。用户只需在浏览器的地址栏输入域名,而无需手动输入网站服务器的IP地址,就可以访问网站。 每个已注册的域名都必须在其DNS记录…

【网络】深入了解端口,一个端口能否被多个进程绑定

引言 在计算机网络中,端口是一项关键概念,它在网络通信中扮演着重要的角色。本文将深入介绍端口的作用、分类,并分析一个端口能否被多个进程绑定的问题。 1. 端口的作用 端口是计算机与网络通信的入口或出口,用于标识进程和应用…

用友畅捷通T+ keyEdit sql注入漏洞

产品介绍 畅捷通 T 是一款灵动,智慧,时尚的基于互联网时代开发的管理软件,主要针对中小型工贸与商贸企业,尤其适合有异地多组织机构(多工厂,多仓库,多办事处,多经销商)的…

【数据分析】 JupyterNotebook安装及使用简介

各位大佬好 ,这里是阿川的博客 , 祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 在数据分析中,一般用Pycharm编辑代…