CLIP学习笔记

CLIP是一个神经网络,它使用自然语言来监督视觉训练,可以将它运用到任何视觉分类任务,具体的就是将类别的名字用自然语言进行描述,然后和图片一起进行混合编码,可以0样本学习(zero-shot learning)。值得注意的是,该神经网络并没有使用到标签,是自监督学习。

背景

SimCLR

自监督学习会涉及到对比学习的概念,SimCLR [1](A Simple Framework for Contrastive Learning of Visual Representations)是一种对比学习网络,可以对含有少量标签的数据集进行训练推理,它包含无监督学习和有监督学习两个部分。

在第一阶段先进行无监督学习,对输入图像进行两次随机图像增强,即由一幅图像得到两个随机处理过后的图像,依次放入网络进行训练,计算损失并更新梯度。如图所示,将小狗进行了两次随机图像变换,再经过残差网络,进行图片编码,使用一个MLP(多层感知机)做预测或者投影到另外一个空间,进行横向比较,从同一个图像生成的结果相近,与猫对比,则相差较远,损失函数目的就是使得两个正样本距离更近([latex] z_{ \theta } [/latex],[latex] z_{\theta}^{0} [/latex]),与负样本之间的距离更远([latex] z_{ \theta } {1} [/latex])。第二阶段,加载第一阶段的特征提取层训练参数,用少量带标签样本进行有监督学习(只训练全连接层)。这一阶段损失函数为交叉熵损失函数CrossEntropyLoss[2]

BYOL

再进一步发展,提出了一种新的自监督学习方法,BYOL(Bootstrap Your Own Latent)[3][4],和以往需要大量负样本的对比学习方法不同(SimCLR),BYOL不依赖于负样本对。

BYOL使用online和target两个神经网络来学习,online网络由一组权重定义并由三个阶段组成:encoder 、projector(投影到同一个空间) 、predictor 。target与online架构相同,但使用不同的参数。target提供了用于训练online的回归目标,其参数是online参数的指数移动平均值。学习loss的梯度只会反向传播给online网络,不会反向传播给target网络,类似于MoCo[5],target网络使用动量更新,相当于target模拟给online提供了一个负样本。(补充:为什么使用指数移动平均值,整体网络的不确定性很大,target和online同时学习,很快就会收敛,收敛到online和target结果一致,也就是模式崩塌,loss为0,然而并不希望出现这样的结果,通过降低学习的效率来避免这样的情况,也就是target不进行学习,target通过历史online进行慢慢的更新,online预测结果和target进行对比,计算损失,更新迭代)

CLIP

CLIP模型由图像编码器和文本编码器两个部分组成,图像编码器负责将图像转换为特征向量,可以是卷积神经网络或Transformer模型(ViT)[7],文本编码器负责将文本转换为特征向量,通常是一个transformer模型,通过共享一个向量空间来实现跨模态的信息交互。

模型的输入是一个图片和文字的配对,图片输入到图片编码器,得到一个特征向量,文本会通过一个文本编码器,从而得到对应文本的特征向量。CLIP会在这些特征上做对比学习,配对的图片文本对就是正样本,在矩阵中对角线上的即正样本,有N个正样本,[latex]N^{2}-N[/latex]个负样本。

clip中没有分类头,进行预测的话,这里做了一个处理,就是将数据集中的类别描述成一个句子,以 ImageNet 为例,CLIP 先把 ImageNet 这1000个类(如图中"plane", “car”, “dog”, …, “brid”)变成一个句子,也就是将这些类别去替代 “A photo of a {object}” 中的 “{object}” ,以 “plane” 类为例,它就变成"A photo of a plane",那么 ImageNet 里的1000个类别就都在这里生成了1000个句子,然后通过先前预训练好的 Text Encoder 就会得到1000个文本的特征。

在推理时,只要把这张图片扔给 Image Encoder,得到图像特征后,就拿这个图片特征去跟所有的文本特征去做 cosine similarity(余弦相似度)计算相似度,看这张图片与哪个文本最相似,就把这个文本特征所对应的句子挑出来,从而完成分类任务。

参考

[1]SimCLR图像分类——pytorch复现_simclr pytorch-优快云博客

[2]Pytorch CrossEntropyLoss() 原理和用法详解-优快云博客

[3]BYOL(NeurIPS 2020)原理解读-优快云博客

[4]深度学习(自监督:BYOL)——Bootstrap Your Own Latent A New Approach to Self-Supervised Learning_byol, bootstrap your own latent-优快云博客

[5]深度学习(自监督:MoCo)——Momentum Contrast for Unsupervised Visual Representation Learning-优快云博客

[6]CLIP 论文逐段精读【论文精读】_哔哩哔哩_bilibili

[7]深入浅出一文图解Vision in Transformer(ViT)

[8]【CLIP】多模态预训练模型CLIP论文详解-优快云博客

DVWA(Damn Vulnerable Web Application)是一个用于学习和练习网络安全的靶场平台,下面是DVWA的搭建过程: 1. 安装环境: - 首先,你需要将 DVWA 下载到你的 Web 服务器上。你可以在 GitHub 上找到 DVWA 的源码。 - 将下载好的源码放置在你的 Web 服务器根目录下。 2. 配置数据库: - 打开 DVWA 文件夹中的 `config` 子文件夹,将 `config.inc.php.dist` 文件重命名为 `config.inc.php`。 - 编辑 `config.inc.php` 文件,配置数据库连接信息。输入你的 MySQL 数据库主机名、用户名、密码和数据库名称,保存文件。 3. 初始化数据库: - 在浏览器中访问 DVWA 的 URL,如 `http://your-ip-address/dvwa`。 - 首次访问时,DVWA 会自动检测你的环境并引导你初始化数据库。点击 "Create / Reset Database" 按钮进行初始化。 4. 设置安全性级别: - 初始化数据库后,DVWA 会跳转到登录页面。使用默认的管理员用户名和密码(admin/password)登录。 - 在 "DVWA Security" 标签页中,选择安全性级别。初始情况下,选择 `low` 级别以方便学习和实践。 5. 开始使用 DVWA: - 确认安全性级别后,在 DVWA 主界面上你将看到各种漏洞和挑战,比如 SQL 注入、跨站点脚本(XSS)、文件包含等。 - 选择你感兴趣的漏洞或挑战,按照提示进行测试和实践。 请注意,在搭建 DVWA 靶场之前,确保你已经具备了运行 Web 服务器和 MySQL 数据库的环境,并且已经正确配置了相关的服务。此外,为了安全起见,建议在局域网或虚拟机环境中使用 DVWA 进行学习和实践。 希望以上信息能对你有所帮助!如果有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lumos~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值