再识Clip

来源

CLIP损失函数的理解-CSDN博客

Simple Implementation of OpenAI CLIP model: A Tutorial | Towards Data Science

【小白】一文读懂CLIP图文多模态模型_clip模型-CSDN博客

从 CLIP 聊聊多模态自监督学习新范式 - 知乎 (zhihu.com)

CLIP 论文逐段精读【论文精读】_哔哩哔哩_bilibili更多论文:https://github.com/mli/paper-reading/, 视频播放量 260656、弹幕量 2383、点赞数 9848、投硬币枚数 11533、收藏人数 7294、转发人数 2497, 视频作者 跟李沐学AI, 作者简介 BosonAI 联合创始人 - ,相关视频:知识蒸馏 代码精讲|Distilling the Knowledge in a Neural Network,CLIP 改进工作串讲(上)【论文精读·42】,ViT论文逐段精读【论文精读】,GPT,GPT-2,GPT-3 论文精读【论文精读】,DALL·E 2(内含扩散模型介绍)【论文精读】,大模型时代的科研基础之:Prompt Engineering,MoCo 论文逐段精读【论文精读】,AlphaFold 2 论文精读【论文精读】,CLIP模型演示 简单的10行代码即可完成 yolo创新点不够 可以借鉴此想法,对比学习论文综述【论文精读】icon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1SL4y1s7LQ/

正文

clip出自Learning Transferable Visual Models From Natural Language Supervision(从自然语言监督中学习可迁移的视觉模型)

OpenAI宣布了两个新模型:DALL-E和CLIP,这两个模型都是以某种方式连接文本和图像的多模态模型。

用于对比语言-图像预训练。简而言之,这个模型学习整个句子和它描述的图像之间的关系;从某种意义上说,当模型被训练时,给定一个输入句子,它将能够检索与该句子对应的最相关的图像。这里重要的是,它是在完整的句子上训练的,而不是像汽车、狗等单个类。直觉是,当在整个句子上训练时,模型可以学习更多的东西,并在图像和文本之间找到一些模式。

使用 image encoder 可以是 resnet / Vit 编码图片, Text encoder 是 bert encoder,编码后的两个模态向量在大 batch 内做对比学习训练;训练集用了可怕的 400 million image text pair.

实现编码Simple Implementation of OpenAI CLIP model: A Tutorial | Towards Data Science

def forward(self, batch):# 编码到固定大小的向量image_features = self.image_encoder(batch["image"])text_features = self.text_encoder(input_ids=batch["input_ids"], attention_mask=batch["attention_mask"])# 投影到共享空间image_embeddings = self.image_projection(image_features)text_embeddings = self.text_projection(text_features)# Calculating the Loss# 计算图像与文本间的相似度    Text @ Image.Tlogits = (text_embeddings @ image_embeddings.T) / self.temperature# 计算图像之间的相似性images_similarity = image_embeddings @ image_embeddings.T# 计算文本间的相似性texts_similarity = text_embeddings @ text_embeddings.T# targets包容了边界条件:即类似的图片or描述应该被考虑为同个嵌入targets = F.softmax((images_similarity + texts_similarity) / 2 * self.temperature, dim=-1)# texts_loss = cross_entropy(logits, targets, reduction='none')# images_loss = cross_entropy(logits.T, targets.T, reduction='none')loss =  (images_loss + texts_loss) / 2.0 # shape: (batch_size)return loss.mean()def cross_entropy(preds, targets, reduction='none'):log_softmax = nn.LogSoftmax(dim=-1)loss = (-targets * log_softmax(preds)).sum(1)if reduction == "none":return losselif reduction == "mean":return loss.mean()

论文本身的伪代码:

关于loss:在线性代数中,衡量两个向量是否有相似特征,余弦相似度

逻辑上去解释这个公式:

如何理解应用于CLIP的对比损失函数的优化方式? - 思念殇千寻的回答 - 知乎

即CLIP是学习(image, text)图文对之间的正确匹配的。在我看来,这个正确匹配有两个对称的方面:

1)对于每一个caption,和它吻合的图片得到label 1,和它不吻合的图片得到label 0。(这个对应于caption_loss)这个方面可以使用CrossEntropy来监督。

2)对于每一个image,和它吻合的caption得到label 1,和它不吻合的caption得到label 0。(这个对应于image_loss)这个方面也可以使用CrossEntropy来监督。

而将两个loss相加除以2,得到的损失函数就同时考虑了两个方面了。如果一个模型在这两个方面都做得好,那么大概率(或者说一定?)是能够成功学习到correct pairings of a batch of (image, text) 的。text_embeds @ image_embeds,所以正着看就是为每个caption寻找吻合的image,转置后反着看就是为每个image寻找吻合的caption。

读论文记录:

下游应用、

引言

  • CLIP 的突出贡献是利用 大数据(400 million image text pair 四亿)、 大模型(VIT large)和 大算力 (12 days on 256 v100 GPUs)达到了非常好的性能、泛化性和鲁棒性。
  • 验证了10个图像编码器,从ResNet到Vit,得到结论即泛化性能和模型的规模大小成正比。
  • 迁移学习(zero-shot),在30个未经训练的数据集上通过简单的分类头训练就能达到resnet的效果。
  • 泛化性:不局限于分类任务,而是专注于文本相似度,可以预测到更为准确贴合的标签。
  • 利用nlp的思想,把无监督与文本训练数据和图像结合起来。

模型、

训练目标设计与训练效率的关系:从生成式、到词袋预测(多分类)、再到对比学习(判断是否最匹配),模型训练效率稳步提升。

因为clip本身模型大+数据集大的特性,一些训练上的设置和普通的对比学习有差异。比如temperature它设置的是可学习的(调参成本太高),学习头使用的是线性的而不是非线性的(正常对比学习这里会差10个点,但是数据量太大、以及这里引入了文本模态并非单一图像模态这里基本没区别)

图像编码器选型:

实验

clip迁移到下游预训练任务:

prompt engineering and ensembling

动机:多义性与歧义性,加上上下文语义信息可以减弱;预训练的时候用的是句子。

结果分析-zeroshot

zero-shot在难数据集上表现不好(纹理分类、计算图片有几个物体),在简单数据集上表现出色

结果分析-fewshot

平均了20个数据集(有些每个class的label少于16个),★代表zero-shot,

结果分析-全参数

动机【为什么Linear Probe而不用微调】:为了验证预训练模型的好坏,所以尽量减少对模型主题/参数的调整。

模型局限性

  1. clip在zero-shot上达到了resnet的效果,但是并没有达到sota(ViT、MAE、Noisy Student),还差了十几个点。
  2. clip在难数据集上差很多
  3. clip在out of distribution上表现的不好(mnist)(27个数据集不能代表全部的zero-shot)
  4. 非生成式
  5. 很贵,用的数据很多(自监督、伪标签能更好的利用数据)
  6. 在某些few-shot场景上可能会降点

基础知识&扩展知识

resnet / Vit 编码

bert encoder

bert、gpt、t5

n-grams

ResNet论文逐段精读【论文精读】_哔哩哔哩_bilibili

多模态小记:CLIP、BLIP与BLIP2-CSDN博客

BLIP:统一视觉语言理解与生成的预训练模型_blip预训练模型-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/421570.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BC173 牛牛逆序输出(c 语言)

1.// 描述 //牛牛在尝试把一个整数逆序地输出。 //输入描述: //输入一个正整数 n。保证个位数不是 0 //输出描述: //逆序输出这个正整数。 //2345 //5432 2.我们先输入n,然后我们进行取余,然后将余数存储起来在arr中,然后除10。…

串口接收不到数据之电阻虚焊bug分析思路

单片机和EC移远通信模块进行通信,相同的代码运行在相同的硬件上,但是一个能联网,一个因为没有EC的应答连不上网。 开始分析,排除软件问题,给EC模块发为什么没应答? 1.发送失败 2.接收失败 排除情况2&#x…

redis底层—网络模型

1.用户空间和内核空间 2.阻塞IO 3.非阻塞IO 4.IO多路复用 select模式的三个问题: 能监听的FD最大不超过1024 每次select都需要把所有要监听的FD都拷贝到内核空间 每次都要遍历所有FD来判断就绪状态 poll模式的问题: poll利用链表解决了select中监听FD上限…

基于RFID技术的光交箱哑资源智能化管理方案

一、现状 (一)现状与挑战 在当前通信网络基础设施中,哑资源如光缆接头、跳线等在网络中占据着重要地位。然而,传统的哑资源管理方式存在诸多问题,一方面,管理主要依赖人工记录和定期巡检,效率…

活动|华院计算宣晓华受邀出席“AI引领新工业革命”大会,探讨全球科技的最新趋势

8月31日,“AI引领新工业革命”大会于上海图书馆圆满落幕。本次大会由TAA校联会和台协科创工委会联合主办,得到上海市台办、上海市台联、康师傅的大力支持。大会邀请了NVIDIA全球副总裁、亚太区企业营销负责人刘念宁,元禾厚望资本创始合伙人潘…

【视频教程】GEE遥感云大数据在林业中的应用与典型案例实践

近年来遥感技术得到了突飞猛进的发展,航天、航空、临近空间等多遥感平台不断增加,数据的空间、时间、光谱分辨率不断提高,数据量猛增,遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…

基于STM32C8T6的CubeMX:HAL库点亮LED

三个可能的问题和解决方法: 大家完成之后回来看,每一种改错误都是一种成长,不要畏惧,要快乐,积极面对,要耐心对待 STMCuBeMX新建项目的两种匪夷所思的问题https://mp.csdn.net/mp_blog/creation/editor/1…

网络基础入门指南(三)

一、远程管理交换机 1.配置IP地址 远程管理需要通过IP地址访问网络设备交换机的接口,默认无法配置IP地址需要使用虚接口vlan1 2.配置远程登录密码 远程管理需要配置VTY接口VTY是虚拟终端,是一种网络设备远程连接的方式vty 0 4表示可同时打开5个会话 3…

1.C++入门1(c++编译过程,命名空间,C++输入输出,缺省参数)

⭐从本章开始学习c,此篇文章作为c专栏的第一篇文章。 ⭐本人c代码的Gitee仓库:c学习 橘子真甜/yzc的c学习 - 码云 - 开源中国 (gitee.com) 目录 一.编程过程 二.命名空间(namespace) 2.1 为何要用命名空间 2.2 命名空间的定义…

2024.9.11

在界面上显示当前时间,再设置一个闹钟,到了时间就吱吱响(至少5遍) #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),speecher(new QTe…

Fiddle的使用------一个非常好用且正规的抓包工具

Fiddle的下载安装(看完再去下载安装) https://www.telerik.com/download/fiddler 1.点击连接,在表格填上数据,点击下载,下载结束了就安装,一路next就可以了。 2.修改一下设置 以上跟我一样设置&#xff…

鼠标hover过渡动画(已验证)

基于css中的grid方案实现的一个hover小动画&#xff0c;以下代码基于vue2&#xff0c;其他的可以直接复制html和css就可以&#xff0c;注意&#xff1a;以下代码在部分浏览器不兼容 注&#xff1a;部分代码来自我接入的GPT4o/Claude网站 <template><div class"h…

全国各地身份证号开头6位数字及地区对照表

具体请前往&#xff1a;全国各地身份证号开头6位数字-省市县/区对照表

数据库中的主码、候选码、主属性、非主属性

参考链接 候选码、主码、全码、外码、主属性、主键、主关键字、非主属性清晰总结 - 知乎 (zhihu.com) 1.码&#xff1a; 能够标识一条记录的属性或者属性集 2.候选码 能够标识一条记录的最小属性集 任一候选键的任何真子集都不能唯一标识一个记录&#xff08;比如在成绩表…

用Python爬虫制作一个简易翻译器

我们通常是通过requestsBS4的方法来获取网页内容&#xff0c;这种方法导入模块较多&#xff0c;速度相对有点儿慢&#xff0c;此时我们可以用requests的post方法向指定服务器发送请求&#xff0c;获取数据后格式化为json&#xff0c;然后获取相关键值。这种方法用到了requests和…

shell学习3---for循环

for循环格式 基本格式 for 变量名称(注意是名称不是变量$等) [ in 名称范围 ] (可以不写) do 执行内容 &#xff08;若满足循环则做什么动作&#xff09; done &#xff08;for循环结束标志&#xff09; 名称范围是字符 [rootserver1 ~]# ./for…

google vr 入门之VrPanoramaView制作全景图列表(1)

展示图片的列表我这里使用RecycleView&#xff0c;activity_main.xml <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android“http://schemas.android.com/apk/res/android” xmlns:tools“http://schemas.android.com/tool…

【orin-nx Linux下创建简单C++项目 CMake构建编译系统】

【注意】&#xff1a;需要安装gcc 和 cmake 安装视频 #.sh 文件添加权限 chmod x cmake-3.30.3-linux-aarch64.sh1、在root下创建一个文件夹testaubo 2、在testaubo文件夹下创建5个文件夹以及一个cmake文件 2.1、【src】 文件夹存放C的 .cpp文件2.2、【include】 文件夹存…

【Unity错误】No cloud project ID was found by the Analytics SDK

在编译默认的URP 2D项目时&#xff0c;出现这样一个错误&#xff1a;No cloud project ID was found by the Analytics SDK. This means Analytics events will not be sent. Please make sure to link your cloud project in the Unity editor to fix this problem. 原因&…

深入理解TCP三次握手

在网络通信中&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一个可靠的、面向连接的协议&#xff0c;它保证了数据包的顺序和完整性。为了建立一个稳定的连接&#xff0c;TCP 使用了一个被称为 三次握手&#xff08;Three-W…