learning transferable visual models from natural language supervision
高新能的迁移学习模型,结合了文本和图像信息
CLIP不在imagenet 128k的数据集上做预训练,能取得与预训练的ResNet50有同样的效果
clip的监督信号来自自然语言处理

网络的输入是图片-文本对,分别经过encoder提取特征,这个encoder可以是一个resnet,或者是一个vision transformer。然后在这些特征上进行对比学习,文本里的encoder可以是CBOW或者是tesxt trnaosformer。
在clip的对比学习中,配对的样本是正样本,如上图左矩阵中对角线的部分,所以共有n^2-n个副样本,clip的训练是在4亿张数据上进行的
clip的推理
Prompt template: 首先使用一组单词,将之加入句式中组成句子,然后进入test encoder编码器抽取特征,其实直接使用单词抽取特征也是可以的,但是clip在训练的过程中,text encoder接受的是一组句子,所以推理为了与训练的过程保持一致,还是采取了将单词编码成句子的方式。
于是将imagenet上1000类的图片,编码成这样的1000类文本特征。
在分类过程中,网络接受任意一张图片,经过image encoder抽取特征,将得到的特征与文本特征计算 cosine similarity,取出最相似的文本特征,就得到了那个对应的类别。
在Prompt template的过程中,类别单词可以不仅限于imageent的1000类,所以clip做到了类别的拓展。 这是之前任何一个在imagenet上预;训练的模型都做不到的,摆脱了categorical label的限制。
由于clip把视觉的语义和文字的语义联系到了一起,学习到的特征语义性非常强,迁移的效果也非常好。
clip的有趣应用
style clip:把stylegan和clip结合到了一起,使用文字信息引导图像的生成
clip draw:做法更简单,用文字信息生成抽象的画,在普通的gpu上不到一分钟就可以生成
open-vocabulary object detection via vision and language knowledge distillation: 使用clip来做目标检测,

原来的目标检测只能分辨玩具,clip的数据能做更细粒度的分类
github:johanmodin/clifs 用于视频检索,直接输入关键词,网络模型就检索视频里的每一帧,与文本特征相匹配,返回包含检索目标的图片。
———————————————————————————————————————————
有限制的类别限制了模型的泛化性,灵感来自于自然语言处理。
在自然语言处理的自监督训练模型中,不论使用atuoregessive(自回归预测)还是masked language(掩码完形填空)的方式,目标函数与下游任务无关,目的仅仅在于提取出一个高效有用的特征
作者尝试了小模型resnet 大模型vision transformer两种模型,结果发现迁移学习的性能和网络模型的大小是成正比的
作者为了进一步验证clip学习到特征的有效性,尝试了liner-prob,在模型训练好了之后,freeze the backbone,只训练分类头,发现clip也比之前的工作性能好,计算更高效。
这种多模态模型的训练是很困难的,首先作者借鉴了VirTex的多模态训练工作,在图像中使用CNN进行训练,在文本中使用Transformer训练。同时对比学习对无监督的训练也有诸多好处,把预测性任务转为对比学习的任务之后,学习效率提高了4倍

由于数据集过大,temperature被设计为一个可学习的参数,没有调节。除了使用random crop之外没有使用其他数据增强的方式,在moco simlcr中十分重要的非线性投射层,也被简化为了linear-projection
有关如何在多个gpu上训练大模型
第3节
zero-shot研究动机,原来的对比学习目标都是抽取特征,如moco simCLR DINO这些方法,但是对比学习想迁移到其他数据还是需要有标签的finetune,还有可能遇到数据集不好迁移,distribution shift的问题。那如何只做一次 训练一个模型,这就是zero-shot transfer。
Prompt engineering :一个模型微调中很流行的概念,在CLIP中,就是使用文本信息引导图片分类
另外,如果使用一个单词作为图片的prompt,经常会有歧义性的这个问题
所以把每一个单词都放到提示模板里 "a photo of {label}",具体的使用中,作者使用了80个这样的模板,最后把结果综合起来会是更好的结果
CLIP的局限性
CLIP只能和resnet50这种basline模型打成平手,但是和真正的state of art还有10几个点的差距,当然可以通过增大数据规模的方式来弥补这个差距,但是得还需要在4亿的基础上再*1000,所以对于openAI这种硬件条件来说也是无法训练的,所以需要找到提高训练效率的方法
另外,clip不是万能的方法,在很多困难的数据集中,例如找出图片中有多少个物体、区分视频中的异常帧,在这些数据集中,clip的性能和瞎猜差不多
另外虽然clip的泛化性能很好,但是如果训练数据和测试数据之间真的已经out of distribution的话,那clip的泛化性能也会变得很差,例如clip在minst数据集上性能很差
clip的分类任务还是从给定的类别里作选择,选出相似或者不相似,另外一种更灵活的方式是直接为图片生成标题,以后可能会将生成式模型的损失函数和对比模型的损失函数结合
clip利用数据效率不高,训练一共用了128亿张图片,自监督学习和self-training(伪标签的方式可能会有更高的利用效率
虽然clip一直在做zero-shot,但是是一直在imagenet上做测试的,网络和超参的调整也都以imagenet的性能为导向,所以可能imagenet给予了一种隐含的指示
OpenAI这批的clip训练数据是网上爬的,所以会有种族社会和宗教的偏见
clip存在一种很奇怪的现象,从zero-shot迁移到few-shot的过程中,不给训练样本的性能反而比给了样本的性能还要差
1:34简短的代码实战
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、
2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p
Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图
目前我正在使用这个正则表达式从YoutubeURL中提取视频ID:url.match(/v=([^&]*)/)[1]我怎样才能改变它,以便它也可以从这个没有v参数的YoutubeURL获取视频ID:http://www.youtube.com/user/SHAYTARDS#p/u/9/Xc81AajGUMU感谢阅读。编辑:我正在使用ruby1.8.7 最佳答案 对于Ruby1.8.7,这就可以了。url_1='http://www.youtube.com/watch?v=8WVTOUh53QY&feature=feedf'url
写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c
TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是
TCP是面向连接的协议,连接的建立和释放是每一次面向连接的通信中必不可少的过程。TCP连接的管理就是使连接的建立和释放都能正常地进行。三次握手TCP连接的建立—三次握手建立TCP连接①若主机A中运行了一个客户进程,当它需要主机B的服务时,就发起TCP连接请求,并在所发送的分段中用SYN=1表示连接请求,并产生一个随机发送序号x,如果连接成功,A将以x作为其发送序号的初始值:seq=x。主机B收到A的连接请求报文,就完成了第一次握手。客户端发送SYN=1表示连接请求客户端发送一个随机发送序号x,如果连接成功,A将以x作为其发送序号的初始值:seq=x②主机B如果同意建立连接,则向主机A发送确认报
VXLAN简介定义RFC定义了VLAN扩展方案VXLAN(VirtualeXtensibleLocalAreaNetwork,虚拟扩展局域网)。VXLAN采用MACinUDP(UserDatagramProtocol)封装方式,是NVO3(NetworkVirtualizationoverLayer3)中的一种网络虚拟化技术。目的随着网络技术的发展,云计算凭借其在系统利用率高、人力/管理成本低、灵活性/可扩展性强等方面表现出的优势,已经成为目前企业IT建设的新趋势。而服务器虚拟化作为云计算的核心技术之一,得到了越来越多的应用。服务器虚拟化技术的广泛部署,极大地增加了数据中心的计算密度;同时,为
一、什么是web项目ui自动化测试?通过测试工具模拟人为操控浏览器,使软件按照测试人员的预定计划自动执行测试的一种方式,可以完成许多手工测试无法完成或者不易实现的繁琐工作。正确使用自动化测试,可以更全面的对软件进行测试,从而提高软件质量进而缩短迭代周期。二、构建测试用例的“九部曲”(一)创建流程包划分功能模块日常测试活动中,都会根据功能模块进行拆分,所以在设计器中我们可以通过创建流程包的方式来拆分需要测试的功能模块,如下图中操作创建一个电脑流程包并且取名为对应的功能模块名称,如果有多个功能模块就创建多个对应的流程包,实在RPA设计器有易用的图形可视化界面,方便管理较多的功能模块。(二)在流程包