本文最后更新于41 天前,其中的信息可能已经过时,如有错误请发送邮件到3046699620@qq.com
CLIP是一个神经网络,它使用自然语言来监督视觉训练,可以将它运用到任何视觉分类任务,具体的就是将类别的名字用自然语言进行描述,然后和图片一起进行混合编码,可以0样本学习(zero-shot learning)。值得注意的是,该神经网络并没有使用到标签,是自监督学习。
背景
自监督学习会涉及到对比学习的概念,SimCLR (A Simple Framework for Contrastive Learning of Visual Representations)是一种对比学习网络,可以对含有少量标签的数据集进行训练推理,它包含无监督学习和有监督学习两个部分。
在第一阶段先进行无监督学习,对输入图像进行两次随机图像增强,即由一幅图像得到两个随机处理过后的图像,依次放入网络进行训练,计算损失并更新梯度。如图所示,将小狗进行了两次随机图像变换,再经过残差网络,再进行图片编码,再使用一个MLP(多层感知机)做预测或者投影,到另外一个空间,进行横向比较,从同一个图像生成的结果相近,与猫对比,则相差较远,损失函数目的就是使得两个正样本距离更近(\( z_{ \theta } \),\( z_{\theta}^{0} \)),与负样本之间的距离更远(\( z_{ \theta } {1} \))。第二阶段,加载第一阶段的特征提取层训练参数,用少量带标签样本进行有监督学习(只训练全连接层)。这一阶段损失函数为交叉熵损失函数CrossEntropyLoss。
再进一步发展,提出了一种新的自监督学习方法,BYOL(Bootstrap Your Own Latent),和以往需要大量负样本的对比学习方法不同(SimCLR),BYOL不依赖于负样本对。
BYOL使用online和target两个神经网络来学习,online网络由一组权重定义并由三个阶段组成:encoder 、projector(投影到同一个空间) 、predictor 。target与online架构相同,但使用不同的参数。target提供了用于训练online的回归目标,其参数是online参数的指数移动平均值。学习loss的梯度只会反向传播给online网络,不会反向传播给target网络,类似于MoCo,target网络使用动量更新,相当于target模拟给online提供了一个负样本。(补充:为什么使用指数移动平均值,整体网络的不确定性很大,target和online同时学习,很快就会收敛,收敛到online和target结果一致,也就是模式崩塌,loss为0,然而并不希望出现这样的结果,通过降低学习的效率来避免这样的情况,也就是target不进行学习,target通过历史online进行慢慢的更新,online预测结果和target进行对比,计算损失,更新迭代)
CLIP
模型的输入是一个图片和文字的配对,图片输入到图片编码器,得到一个特征向量,文本会通过一个文本编码器,从而得到对应文本的特征向量。CLIP会在这些特征上做对比学习,配对的图片文本对就是正样本,那么在矩阵中对角线上的即正样本,那么就有N个正样本,\(N^{2}-N\)个负样本。
并没有分类头,那么如何进行预测,作者在这里做了一个处理,就是将数据集中的类别描述成一个句子,比如 dog,就描述为A photo of a dog,句子进入文本编码器,得到特征向量,同样图片也进行编码,得到图片特征,图像特征和文本特征进行相似性计算。
其它
导师给我发的论文是关于Text-Image,看了两篇论文发现它们的工作都是在CLIP预训练模型上开展,所以决定仔细看看CLIP模型,李沐论文精度系列刚好讲到,我也跟着视频学习了一下,CLIP真的太强了,与自然语言结合,图片具有语义,对图片类别的描述更具体,CLIP可以具体到颜色等等,运用到行人重识别上,也就可以描述出穿的什么颜色衣服,描述出行人的动作,很有意思。本文没有记录具体细节,感兴趣的话可以看看李沐的视频。
参考
BYOL(NeurIPS 2020)原理解读-CSDN博客
SimCLR图像分类——pytorch复现_simclr pytorch-CSDN博客
深度学习(自监督:MoCo)——Momentum Contrast for Unsupervised Visual Representation Learning-CSDN博客
深度学习(自监督:BYOL)——Bootstrap Your Own Latent A New Approach to Self-Supervised Learning_byol, bootstrap your own latent-CSDN博客
CLIP 论文逐段精读【论文精读】_哔哩哔哩_bilibili