当前位置: 首页 > news >正文

再识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博客

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • clickhouse 保证幂等性
  • 9月11号作业
  • Netty权威指南:Netty总结-编解码与序列化
  • 【数据结构-二维前缀和】力扣221. 最大正方形
  • 18069 x的n次方
  • 【CSS in Depth 2 精译_029】5.2 Grid 网格布局中的网格结构剖析(上)
  • digits Social Login插件 google OAuth 2.0登录 400 redirect_uri_mismatch错误解决
  • Python 从入门到实战14(字符串相关操作)
  • 电源自动测试系统有哪些原理和优势?
  • [综述笔记]Federated learning for medical image analysis: A survey
  • 决策树算法原理
  • 一文彻底了解DNS协议工作原理,恐怕没有比这更通俗易懂的了吧?
  • 1.C++入门1(c++编译过程,命名空间,C++输入输出,缺省参数)
  • es6(1)
  • 如何使用Spoon连接data-integration-server并在服务器上执行转换
  • 分享的文章《人生如棋》
  • CSS居中完全指南——构建CSS居中决策树
  • JavaScript设计模式之工厂模式
  • JS题目及答案整理
  • JWT究竟是什么呢?
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • nodejs:开发并发布一个nodejs包
  • react-native 安卓真机环境搭建
  • text-decoration与color属性
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 使用Swoole加速Laravel(正式环境中)
  • 一天一个设计模式之JS实现——适配器模式
  • 《天龙八部3D》Unity技术方案揭秘
  • scrapy中间件源码分析及常用中间件大全
  • 移动端高清、多屏适配方案
  • ​低代码平台的核心价值与优势
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (超详细)语音信号处理之特征提取
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (五)Python 垃圾回收机制
  • (一)Docker基本介绍
  • (转)memcache、redis缓存
  • .NET Core跨平台微服务学习资源
  • .Net Web项目创建比较不错的参考文章
  • .net 提取注释生成API文档 帮助文档
  • .NET 直连SAP HANA数据库
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .NET正则基础之——正则委托
  • @antv/g6 业务场景:流程图
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • [000-002-01].数据库调优相关学习
  • [2]十道算法题【Java实现】
  • [3300万人的聊天室] 作为产品的上游公司该如何?
  • [bzoj 3124][sdoi 2013 省选] 直径
  • [BZOJ2208][Jsoi2010]连通数
  • [C#]猫叫人醒老鼠跑 C#的委托及事件
  • [C#]使用C#部署yolov8-seg的实例分割的tensorrt模型