CLIP
CLIP是由openAI推出的用于图片分类、目标检测的图像+文本多模态预训练模型
**CLIP预训练方法: ** 使用配对的图片文字集(pairs)作为输入,图片和文本分别通过图像编码器和文本编码器得到图片和文本各自的一些特征,每一个training batch中都有n个图片文本对,就得到n个图片特征和n个文本特征,CLIP在这些特征上做对比学习,将特征矩阵对角线上的张量积为正样本,其他的全为负样本,无需手工标注,实现了无监督的预训练方式。这种训练所需要的数据量是庞大的,这里openAI收集了4亿个图片文本对,使得CLIP异常强大。
zero-shot预测:将感兴趣的图片和文本放入训练好的图像编码器和文本编码器中进行特征提取,模型就会计算出图片和各个文本的相似度,从而选择出与图片最相近的文本。CLIP不像之前的CV模型具有严格的分类头(categorical label),它具有zero-shot能力,其标签是可以人为输入的,这是CLIP的创新之处。由于CLIP在训练时将视觉语义和文字语义联系起来了,所以它学到的特征的语义性很强,迁移效果好。
训练时使用固定标签分类头的传统模型其迁移效果不佳,特别是对于抽象噪音多的图片识别准确率大幅度下降
CLIP的有趣用途:
AI绘图:
只需要改变文本描述就可以改变图像风格
使用风格图片与提示文本进行绘画
OCR(Optical Character Recognition,光学字符识别):
在视频中定位相关物体的出现帧
论文
背景补充:Transformer处理方式的出现对自然语言处理(NLP)领域产生了革命性的影响。Transformer模型由Vaswani等人在2017年的论文《Attention Is All You Need》中提出,它是一种基于注意力机制(attention mechanism)的深度学习模型,专门设计用于处理序列数据,如文本。
以下是Transformer模型对NLP领域重要性的几个关键点:
- 注意力机制:Transformer模型完全依赖于注意力机制,摒弃了传统的循环神经网络(RNN)和长短期记忆网络(LSTM)结构。注意力机制使得模型能够直接捕捉输入序列中的长距离依赖关系,这在处理自然语言时尤为重要,因为语言中的意义往往依赖于远距离的词汇关系。
- 并行处理:由于Transformer模型不依赖于序列数据的顺序处理(即不需要像RNN那样逐个处理序列元素),它能够利用现代GPU的并行计算能力,显著提高了训练速度和效率。
- 可扩展性:Transformer模型结构简单且模块化,易于扩展。通过增加模型的大小(如增加层数、隐藏层维度等),可以显著提高模型的性能,这在大型预训练语言模型(如GPT、BERT、T5等)中得到了体现。
- 预训练和微调范式:Transformer模型的出现促进了预训练和微调(pre-training and fine-tuning)的范式,即首先在大规模文本数据上预训练模型,然后在特定任务上进行微调。这种方法在多种NLP任务上取得了前所未有的性能,如文本分类、问答、语言生成等。
- 跨领域影响:Transformer模型的成功不仅限于NLP领域,它还被广泛应用于计算机视觉、语音识别等其他领域,推动了跨模态学习和多任务学习的发展。
Transformer模型和Bert接受上下文语义的训练方法的出现极大地推动了NLP领域的发展,它不仅提高了各种任务的性能,还改变了研究人员对序列数据处理和模型设计的思考方式。作者受此启发,也打算使用自然语言的监督信号来训练视觉模型。
使用自然语言的监督信号来训练视觉模型的好处:
1.使用这种监督信号不需要去标注数据,人工标注分类的效率较低,一旦直接使用爬取的图片和描述文本,数据集就可以快速建立,规模也可以做的足够大,模型就能训练的足够好。
2.模型学习到的是图像加文本描述的多模态特征,zero-shot的迁移效果好。
先前其实也有研究团队在探索这方面的模型预训练方法,但是当时的自然语言处理还没有出现自监督训练/transformer的方式,时机不对,效果不佳,2017年之后相关研究的数据集又不够大,效果不够好,openAI的数据集够大,训练出来的模型就很强大。
其实采用对比学习的预训练方法是出于效率考虑:如果像gpt一样给定一张图片,逐字逐句去生成对应的文本描述,这样的预测学习效率太低(很难),只是判断图像文本是否配对的话,训练效率会快很多,就算是openAI也承担不起生成式学习的代价
典型的对比学习思路,在transformer模型的选择上也是很稳健,作者也介绍了训练过程中对于任务的实际操作,涉及到大量细节的工程优化,尽管思路清晰,CLIP的落地训练也是步步为营。
训练好后,在模型zero-shot的预测过程中需要用到prompt engineering
prompt起到一个提示的作用,将标签词补充成句子可以与之前用于训练文本编码器的文本描述句子所匹配,减少distribution gap, 也可以在一定程度上避免词语的多义性所导致的歧义问题,这里可以根据不同的标签类型使用不同的prompt,提高预测准确度,用不同prompt模板,将所得结果综合一下,可以得到更好的结果。
文章接下来的部分,作者对于CLIP模型在27个数据集上的预测结果做了分析,显示了CLIP惊人的zero-shot预测能力,CLIP对于日常物体的分类能力较强,而对于纹理识别、计数、专业领域分类的任务表现不佳。
对某些专业领域,zero-shot预测实在是强人所难,所以作者又尝试了few-shot,并将结果与常见的Baseline做了比较,把CLIP中的图像编码器取出来冻住,去做linear probe就可以实现few-shot
few-shot确实可以提高CLIP的准确率,在训练样本数少时,CLIP的few-shot表现还不如zero-shot,但是随着训练样本的增多,few-shot的CLIP完全可以超过其本身的zero-shot表现,在处理较难的数据集时,最好还是使用few-shot提高模型准确度,但这有失CLIP的本意。
既然说了zero-shot和few-shot,那么作者就又讲讲下游任务上用全部的数据所得到的结果,一般使用Linear probe和fine tune这两种方法来衡量模型学到的特征好坏。
Linear probe是把预训练好的模型冻住,再在上面训练一个分类头,而Fine tune是把整个网络放开,做端到端的学习。Fine tune比较灵活,在下游数据集比较大的时候效果比Linear probe好很多,但是作者使用的是Linear probe。一是因为微调会改变模型参数,可能将原本不好的模型调整好,而Linear probe可以更准确的反映出预训练模型的好坏。二是因为微调需要调参,CLIP模型很大,要微调的超参和设计方案太多了,微调需要对于每一个下游数据集调整参数,Linear probe就只是抽特征学最后一层分类层,相对于微调来说大大简化了流程。
结果也是意料之中。
模型与人也做了一些比较,显示模型的zero-shot能力比人更强,但是学习能力显然是人更胜一筹(CLIP的few-shot能力不够)。
最后还得讲讲CLIP的limitations.
现有的CLIP训练规模没有办法使模型达到SOTA的标准,在特定数据集上和最优的模型仍然存在不小的差距,只能和baseline比一比。
在细分类以及抽象概念的判断方面,CLIP的zero-shot能力还是很弱。
虽然CLIP在日常自然图像识别方面的泛化性能很好,但是在与训练数据差异很大的数据集上它的泛化会很差。
CLIP还是需要你给定标签词语,没有实现图片识别的全自动化(gpt化)。
CLIP需要投喂超大量的数据。
整个CLIP的研发过程反复使用相同的几个数据集进行调参测试,无形中已带入偏见。
从网上爬下来的未清洗审查的数据会带有社会上的偏见,不当的使用CLIP可能会放大偏见。
来试试clip的能力如何
导入想识别的图片与感兴趣的标签
本来想为难一下clip的,结果初始四个看似与巫师无关的标签值中竟然有一个匹配概率很高(bird)
仔细一想,Ciri的精灵语名为Zireael,是燕子的意思,难道说模型这么强,这都能匹配上?我再试试!
我吃柠檬!CLIP是真的知道Ciri的名字啊!!!!!
完全没压力,这里甚至只有father and daughter 和正确选项有权值分布
但是上图是网图,很可能在4亿训练集中,选对不足为奇,我在Cyberpunk2077中cos希里并截屏得到的图片算是zero-shot了,看看效果如何。
坏消息:CLIP没能认出这是Ciri
好消息:它认为这里Witcher元素更加匹配,并且car的权值0.2255与背景符合,非常合理,太棒了!
又是非常合理的结果,Cyberpunk占比远超Witcher, 我的取景点是从大坝进入主城区的普通公路,平平无奇,竟然被认出来了,CLIP确实效果奇佳,zero-shot的泛化能力非常强!!!
参考文献:
Learning Transferable Visual Models From Natural Language Supervision (arxiv.org)
CLIP 论文逐段精读【论文精读】_哔哩哔哩_bilibili