深度学习--CLIP算法(文本搜图片,图片搜图片)
1. CLIP简介
CLIP全称Constrastive Language-Image Pre-training,是OPAI推出的采用对比学习的文本-图像预训练模型。CLIP惊艳之处在于架构非常简洁且效果好到难以置信,在zero-shot文本-图像检索,zero-shot图像分类,文本→图像生成任务guidance,open-domain 检测分割等任务上均有非常惊艳的表现,本文将对CLIP做一些初步的介绍。
2. CLIP模型简介
CLIP的基本算法原理如下,为了对image和text建立联系,首先分别对image和text进行特征提取,image特征提取的backbone可以是resnet系列模型也可以是VIT系列模型,text特征提取目前一般采用bert模型,特征提取之后,由于做了normalize,直接相乘来计算余弦距离,同一pair对的结果趋近于1,不同pair对的结果趋近于0,因为就可以采用对比损失loss(info-nce-loss),熟悉这个loss的同学应该都清楚,这种计算loss方式效果与batch size有很大关系,一般需要比较大的batch size才能有效果。CLIP的模型如下图所示:
CLIP 能够成功,并且很难自己复现的一个重要原因就是CLIP用了大量的训练数据以及训练资源,真的可以说是大力出奇迹。CLIP用了4亿的图像文本对进行训练。伪代码如下:
- 编码 :通过图像&文本编码器,得分图像和文本特征。
- 投影:首先通过投影矩阵将图像及文本特征映射到相同的维度大小,在进行L2 normalization (使得之后的点积操作直接等效于cosine similarity)
- 相似度计算:点积运算计算文本-图像的cosine similarity,得到 n x n 矩阵的logits(模型预测),越接近1则说明模型预测该文本-图像对是配对的,否则不配对。
- 计算loss:已知 logits 矩阵对角线的文本和图像是配对的,非对角线元素不配对,因此构造训练标签 np.arange(n),然后分别在图像维度(axis=0) 和文本维度(axis=1)计算loss。以图像维度为例简单说明一下这里的逻辑,因为在计算相似度的时候,图像特征矩阵@文本特征矩阵得到的 n x n 矩阵,第一个n 代表的图像,因此我们在axis=0 计算图像维度的loss。
3. CLIP模型优缺点总结
优点
- zero-shot做得好,经过在400million大的未清洗的数据集上训练,在不同的数据集上表现还可以,可以自定义任务,而且效率很高。
- 高效,虽然GPT3做zero-shot也很好,但是CLIP吃的资源少,计算量少,训练效率高。最好的一版CLIP只在256个GPU上训练两周就好了,跟目前图像领域的其他大模型都差不多。
- 灵活和通用:因为他们直接从自然语言中学习广泛的视觉概念,CLIP明显比现有的ImageNet模型更灵活和通用。我们发现他们能够轻松地完成许多不同的任务。
缺点
- 虽然CLIP通常在识别普通物体方面表现良好,但在更抽象或更系统的任务上却表现不佳。比如计算图像中物体的数量,以及在更复杂的任务上,比如预测照片中最近的汽车距离有多近。在这两个数据集上,零射剪辑只比随机猜测好一点点。与特定任务模型相比,Zero-shot CLIP在非常细粒度的分类上也很困难,比如区分汽车模型、飞机变体或花卉种类之间的区别。
- 对于未包含在其预训练数据集中的图像,CLIP的泛化效果也很差。例如,尽管CLIP学习了一个有效的OCR系统,但当从MNIST数据集评估手写数字时,zero-shot CLIP仅达到88%的准确率,远低于数据集上99.75%的人的准确率。(其实还行,毕竟不是专门在MNIST上跑的)
4. CLIP模型开源方案
OPENAI方案:
github代码地址
论文介绍
中文CLIP方案:
中文clip
CLIP图片搜索演示Demo
CLIP视频搜索演示Demo
参考资料:CLIP介绍:连接图像与自然语言
深度学习--CLIP算法(文本搜图片,图片搜图片)相关推荐
- 动手深度学习13——计算机视觉:数据增广、图片分类
文章目录 一.数据增广 1.1 为何进行数据增广? 1.2 常见图片增广方式 1.2.1 翻转 1.2.2 切割(裁剪) 1.2.3 改变颜色 1.2.4 综合使用 1.3 使用图像增广进行训练 1. ...
- 深度学习之自编码器(5)VAE图片生成实战
深度学习之自编码器(5)VAE图片生成实战 1. VAE模型 2. Reparameterization技巧 3. 网络训练 4. 图片生成 VAE图片生成实战完整代码 本节我们基于VAE模型实战F ...
- 模块一:深度学习入门算法
模块一:深度学习入门算法 1.深度学习必备知识 1.1深度学习要解决的问题 机器学习流程: 数据获取 -----> 特征工程 -----> 建立模型 ------> 评估与应用 特征 ...
- 从参数数量视角理解深度学习神经网络算法 DNN, CNN, RNN, LSTM 以python为工具
从参数数量视角理解深度学习神经网络算法 DNN, CNN, RNN, LSTM 以python为工具 文章目录 1. 神经网络数据预处理 1.1 常规预测情景 1.2 文本预测场景 2.全连接神经网络 ...
- Adam 那么棒,为什么还对 SGD 念念不忘?一个框架看懂深度学习优化算法
作者|Juliuszh 链接 | https://zhuanlan.zhihu.com/juliuszh 本文仅作学术分享,若侵权,请联系后台删文处理 机器学习界有一群炼丹师,他们每天的日常是: 拿来 ...
- 用深度学习解决大规模文本分类问题
用深度学习解决大规模文本分类问题 人工智能头条 2017-03-27 22:14:22 淘宝 阅读(228) 评论(0) 声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者 ...
- 图像重建算法_基于深度学习图像重建算法(DLIR)对CT图像质量和剂量优化的研究:体模实验...
编者按:今年Joël Greffier博士等在European Radiology (IF 4.1)上发表了题为<Image quality and dose reduction opportu ...
- 深度学习前沿算法思想
转自: 深度学习前沿算法思想 导读 第一版: 深度学习前沿算法思想 深度学习实践:使用Tensorflow实现快速风格迁移 行为识别:让机器学会"察言观色"第一步 第二版: 谷歌首 ...
- 深度学习优化算法,Adam优缺点分析
优化算法 首先我们来回顾一下各类优化算法. 深度学习优化算法经历了 SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -& ...
最新文章
- redhat 6.0 Enterprise企业版如何使用yum安装软件
- java dom4 引入_java – 使用dom4j从节点获取属性值
- 2021 AAAS Fellow名单出炉!图灵奖得主Yan LeCun、联想芮勇等多位人士入选
- RabbitMQ 简介
- ubuntu 安装eclipse neon版本
- erlang精要(19)-以函数作为参数的函数,返回函数的函数(2)
- 如何运行 SAP Spartacus cypress 端到端测试
- 中小企业上云多地域办公组网,建立高质量云上内网环境
- 支付宝集五福下周一开始;iPhone 面世 13 周年;Laravel 6.10.0 发布 | 极客头条
- android学生管理实例,学生管理系统-基于SQLite数据库的Android应用
- Tomcat8.5下载安装配置
- 远程桌面无法复制粘贴问题
- 百度天气预报API接口的一个坑
- java订单派单规则_重点解读 | 什么是派单?派单的好处有哪些?
- 给大家分享一些IT网课资源的学习网站啦
- Win11找不到wt.exe如何解决?
- lookupedit可编辑可选择
- 腾讯滨海大厦 智能楼宇 智慧建筑 3D可视化管理系统-优锘科技-ThingJS物联网开发案例... 1
- 手撕自动驾驶算法——IMU测量模型、运动模型、误差模型
- 2021-2027全球与中国植物基牛奶替代品市场现状及未来发展趋势
热门文章
- Tortoisegit图文使用教程
- 神经网络讲解与实例,神经网络讲解教案
- 华为交换机配置命令总结
- ctp java_上期CTP 封装JAVA API window Swig
- python生成list_python 使用循环生成list
- FFMPEG视音频编解码
- Easyx GetAsyncKeyState 实现小球移动 防止出界 设置界限 边界设定(easyx | vs2022 | c / c++)
- python3正则表达式匹配但不包括最后一个字符_正则表达式匹配不包含某些字符串的技巧...
- c语言 8位有符号整数,C语言中什么是一个8位的整数
- iOS - App Extension 整体总结