学习日记48:DenseCLIP

摘要:

使用对比图像-文本对的大规模预训练的模型可以依靠自然语言的监督产生高质量的视觉表征学习,并且对下游任务的可迁移性效果极好,但将这种通过对比学习得到的知识迁移到稠密预测并没有什么好办法。作者提出了一个新的稠密预测框架,将CLIP中原始的图像-文本匹配问题转换为像素-文本匹配问题,并使用像素-文本得分图来指导稠密预测模型的学习。

问题背景:

预训练+微调是一个十分经典的将预训练模型的能力应用于下游任务的范式,通常是在通过监督分类或自监督学习得到的主干上添加检测器或分割解码器等任务特定模块进行微调。CLIP不同于之前的模型,他通过索大规模含噪图像-文本的对比学习来学习高质量视觉表示,虽然已经有将CLIP应用于分类任务并获得不错的效果,但是将其应用于稠密任务的尝试几乎没有;

另外,改方法不止局限于CLIP,可以通过使用预训练的语言模型来指导密集预测任务的训练,从而适用于任何骨干模型。

方法:

Language-Guided Dense Prediction

对于CLIP这种视觉语言的预训练模型将其用于密集预测可以简单的只使用图像编码器作为预训练的主干,但这样就丢失了其文本信息;于是作者提出了如下流程:

与CLIP流程不同的是,图像编码器除了全局图像特征外还提取了图像编码器最后一层输出的与文本匹配的特征图,然后将其与全局特征拼接通过多头注意力机制。

这样除了全局特征外还获得了一个z,其仍然保留了足够的空间信息,可以作为特征图,另外z与全局特征相似,可以很好的与文本特征对其。对于文本特征,可以从模板' a photo of a CLS . '中构建带有K个类名的文本提示,并使用CLIP文本编码器提取当t时的特征。然后使用语言兼容的特征图z和文本特征t计算像素-文本得分图。

这个得分图是十分重要的,作者认为得分图可以被看作是具有较低分辨率的分割结果,因此可以使用它们来计算一个辅助分割损失;另外,可以将得分图拼接到最后的特征图上,以显式地结合文本信息;这样这个方式就可以适应多种主干网络;

Context-Aware Prompting

减少视觉域和文本域之间的差距可以显著提高CLIP模型在下游任务的性能,不使用人工预定义模板也许是一个很好的方向。

之前的CLIP的文本提示可能是'a photo of a CLS ',现在改为使用一个可学习的文本上下文+类别名称编码来实现;

除此之外,可以使用视觉上下文来细化文本,使用Transformer中的cross attention来建模视觉和文本之间的关系。文章提出了两种细化方式,pre-language-model prompting与post-model prompting。

pre-language-model prompting也就是说先于语言模型前加入视觉信息来细化文本信息,即视觉编码器输出的全局特征和最后一层特征先与一系列可学习的向量进入Transformer建模关系然后得到文本提示;另一种是在文本编码器之后对文本进行细化,直接使用文本编码与视觉编码器的输出一起输入Transformer建模关系,然后使用得到的结构微调文本提示。

作者最后选择后者,由于文本编码器的输入依赖于图像,因此在推理过程中,预模型提示需要额外的前向传递。在模型后提示的情况下,我们可以将训练后提取的文本特征进行存储,从而可以减少文本编码器在推理时带来的开销。实证结果表明,模型后提示比模型前提示能取得更好的效果。

实验:

把通用 DenseCLIP 框架,分别适配到三种稠密预测任务(语义分割 / 目标检测 / 实例分割)的具体落地方式,核心区别只在于辅助损失函数怎么设计。

分割实验:

消融实验:

仅将骨干替换为 CLIP 预训练权重即可带来 1% 的 mIoU 提升,印证大规模图文对比预训练得到的视觉特征,相比传统单图像监督预训练,在稠密预测下游任务中具备更强的迁移能力;在模型中加入语言域提示(Language-domain prompt,即 CoOp 可学习文本前缀) ,实验结果显示分割 mIoU 直接提升 2.5%,性能提升十分明显。 在此基础上,我们对比了两种引入图像视觉上下文的图文提示方案:模型前提示(pre-model prompting)和模型后提示(post-model prompting)。两种方式都能进一步提升分割精度,但模型后提示不仅效果更好,计算开销也更低。

目标检测:

多主干扩展

可视化

相关推荐
李日华大战鸡红5 小时前
滑膜观测器(学习记录)
stm32·单片机·学习·matlab·机器人
传奇开心果编程6 小时前
【现代声明式UI学与练】第4课 列表渲染与 key——如何高效渲染列表、key 的作用、列表重排时的状态保持
学习·flutter·react native·ui·swiftui·android jetpack
传奇开心果编程6 小时前
【Compose Multiplatform 跨端开发学与练】第5课 网络与数据层
android·网络·学习·ui·ios·kotlin·composer
yt004yt7 小时前
园区 VOC 绿岛集中治理项目,管网与监测系统设计要点
大数据·学习
一条破秋裤7 小时前
06_从设备读数据_字符设备read_write流程
学习
m4Rk_8 小时前
【论文阅读】Agent 记忆机制(92):EMPO²——让 Memory 从经验复用走向主动探索
论文阅读·人工智能·学习·开源·github
欣欣之王来了9 小时前
前端开发学习路线图:2026年Vue方向最新版
前端·学习·架构·项目·vue3教程
wdfk_prog9 小时前
LWIP教程 00:从网线上的电信号到 lwIP——PHY、MAC、DMA 与 `netif` 的完整边界
运维·网络·笔记·学习·ip
m0_7341724210 小时前
Python用zip配对前先检查长度
python·学习
乌暮10 小时前
拆解网页的底层逻辑:用费曼学习法讲透 HTML 与 CSS
前端·css·学习·html