(论文解读)Domain Adaptation via Prompt Learning

news2024/9/21 4:36:25

摘要

无监督域适应( UDA )旨在将从带有标签的源域数据中学习到的模型适应到未标注的目标域数据集。现有的UDA方法通过对齐源域和目标域特征空间来学习领域不变特征。这种对齐是通过约束实现的,例如统计差异最小化或对抗学习。

然而,这些约束会导致语义特征结构的扭曲和类别判别性的丧失。

本文提出一种新的UDA提示学习范式,命名为基于提示学习的领域自适应( Domain Adaptation via Prompt Learning,DAPL )。与之前的工作相比,本文方法使用了预训练的视觉语言模型,并且只优化了很少的参数。其主要思想是将领域信息嵌入到文本提示中,提示是由自然语言生成的一种表示形式,并用于分类。领域信息仅由来自同一领域的图像共享,从而根据每个域动态地自适应分类器。

通过采用这种范式,本文模型不仅在几个跨领域的基准上优于以前的方法,而且训练效率很高,易于实现。

Introduction

近年来,深度学习在大规模标注数据集的帮助下取得了巨大的成功。由于对大规模数据集进行标注成本高、耗时长,研究人员提出利用标注好的相关领域为未标注领域训练模型。然而,在已标注领域上训练的模型可能由于分布偏移而不能很好地泛化到未标注领域。无监督领域适应问题就是为了解决这种领域偏移下的知识转移问题。

传统的UDA方法主要通过对齐源域和目标域来学习领域不变表示。解释图1:利用领域对齐实现的相似特征分布,在源域上训练的分类器可以直接应用于目标域(图1 ,top)。(1)这类方法的一种是基于统计差异最小化,最大均值差异(MMD)和中心矩差异(CMD)。(2)另一种方法通过应用领域判别器,通过对抗训练来学习领域不变特征。这类方法通过混淆域判别器来减少源域和目标域在特征空间中的差异。  无论如何,通过领域对齐来减少差异可能会导致语义信息的丢失。当数据分布的流形结构复杂时,语义信息和领域信息纠缠在一起导致损失。为了弥补这一点,最近的一些UDA方法提出保留语义信息以保证类的判别性。由于领域对齐和保留语义特征两个目标是对抗性的,这些方法在两者之间进行了微妙的权衡。学习解耦的语义信息和领域表征可能是一种替代方法,因为领域对齐可以被放弃。

为了学习解耦的语义信息和领域表示,本文将提示学习方法引入到UDA中,在连续的标签空间中学习表示。解释图2:提示文本由三部分组成:领域无关上下文、领域特定上下文和类标签( token )。每个图像通过文本提示的类别标签对应一个类别。例如,显示"an art work of a dog"的图像可以对应提示"An image of a paingting Dog"。领域无关上下文表示一般的任务信息,并在所有图像之间共享。特定领域的上下文表示领域信息,并在每个领域中共享。类标签区分不同的类别。

提示学习方法允许学习领域和类别解耦的表示,避免了语义信息的丢失。继续解释图1(bottom):本文应用对比目标来训练。只有当图像和文本的领域和类别分别匹配时,图像和文本才构成一对正例,而其他情况都是反例。通过对比源域图像XS和类标签y的表征,在特征空间中分别对"草图"和"狗"的图像和文本表示进行对齐。进一步,通过对比目标域图像XT和标签y,将"素描"的文本表征推离"photo"域。因此,领域和类别的表征是分别对齐的。本文采用CLIP作为骨干网络来促进提示学习和对比学习。

在两个经典的跨域基准测试集上的大量实验表明,本文方法具有良好的性能,例如,我们在Office - Home和VisDA - 2017上取得了74.5 % / 86.9 %的sota性能。

本文贡献

(1)本文提出了基于提示学习的领域自适应( DAPL ),用于无监督的领域自适应(UDA)。本文首个将提示学习应用于无监督领域自适应中的。

(2)本文提出在提示中使用领域特定的上下文。因此,我们不必以丢失语义信息为代价来对齐领域。本文方法可以学习每个类别和领域的连续语义表示。

(3)本文提出的DAPL在Office - Home和VisDA - 2017数据集上取得了最先进的性能,比强基线CLIP提高了2.5 % / 2.5 %的准确性。

Method

源域数据集Ds(大小为Ns):

目标域数据集Du(大小为Nu):

源域数据集和目标域数据集共享K个类别范畴。

3.1 Preliminaries

本文采用CLIP作为骨干网络。本文模型由一个图像编码器f(·)和一个文本编码器g(·)组成。图像编码器可以是ResNet或者Vision Transformer (ViT),文本编码器是Transformer。图像和文本输入通过编码器直接从高维空间转换到低维特征空间。

CLIP使用图像-文本对以对比的方式进行训练。每个输入文本以' a photo of a [ CLASS ] ' 的格式描述一个类别。一个正对包含图像xi和描述该图像对应类别的文本ti组成。负对是在小批量中具有不相关描述tj和图像xi。训练的目标是使正对的余弦相似度最大和使负对的余弦相似度最小。对比学习目标将图像和文本表示在同一特征空间中对齐。

利用对齐后的特征,模型能够进行zero-shot推理。通过计算与k个文本的与相似度得到预测概率,该图像属于相似度最大的类别:

上面描述的输入文本是由一系列离散的token组成的手动设计的提示文本。将人工设计的提示转化为单词嵌入空间中的固定向量。由于这些向量对于类别的表示可能是次优的,我们可以优化标记的连续嵌入。连续表征tk允许更精确地描述对上下文变量学习重要的语义特征。

现有的提示学习方法采取了一种领域无关的风格,其中上下文在所有的领域的类别中是共享的,本文提示表示为:

3.2. Domain Adaptation via Prompt Learning

(1)由于领域无关的上下文提示不能解决领域之间的分布偏移问题,本文提出使用领域特定上下文(DSC)来捕获每个领域的特征。具体来说,我们提出上下文提示包含两个部分,领域无关上下文和领域特定上下文。(m2 ∈ {1, 2, . . . , M2},d ∈ {s,u})表示领域特定token,其维度和单词嵌入的维度相同。领域上下文提示在所有的类别中共享,但是其专门为每个领域设计(源域与目标域中不同)。其中M2代表领域特定token的个数。

提示的整体格式设计为:

(2)当文本特征空间中的[Class]token不足以对每个类别之间的差异进行建模时,领域无关上下文可以按照类特定的样式进行表示。因此每个类别可以用不同的token 进行初始化(其中d用于区分源域和目标域,k用于区分不同的类别,M1表示领域无关上下文的token数目,M2表示领域特定上下文的token数目):

可训练的类别特定上下文(领域无关上下文)比仅使用[Class]token可以学习到更细粒度的表示。本文就是采用的Eq.5中的类别特定上下文+领域特定上下文+[Class]。

(3)由于本文源域和目标域中的提示并不同,因此本文由2k个类别。给定源域中一组训练样本,可以得到该图像属于K个类别的预测概率:

根据图像x属于k个类别的预测概率分数,得到其真实类别标签,并且将其交叉熵损失最小化。损失函数:

(4)为了更深地探索未标记的数据,本文为目标域数据生成伪标签,从K个类别中选出预测概率最大的类别作为训练数据xu的伪标签yu。

本文只为目标域中预测概率大于伪标签质量标准τ的类别生成伪标签,并且使用CLIP的zero-shot能力生成伪标签。

然后使用目标域数据集及其伪标签基于Eq.6训练目标域的提示,通过对比学习目标进行训练:

(5)本文DAPL方法可以以端到端的方式进行训练,损失函数为:

3.3. Disentanglement by Contrastive Learning

本文采用对比损失L作为优化目标。本文为对比损失达到预期目标做了直观的解释:视觉编码器和文本编码器分别将输入编码为两个解耦的潜在表示,将领域信息和内在的类别信息进行分类。当类别信息和领域信息都对齐时,文本特征和图像特征之间的距离才最小。通过最小化正对之间的距离,正确标签的预测概率才最大化。

解释图4(a):首先,假设视觉表征

包含两个部分:领域d的领域信息zd和类别c的内在类别信息zc。类似,文本特征也包含以上两个部分pd和pc。接下来证明领域信息和类别信息可以通过优化目标进行分开。

解释图4(b):四个图像-文本对,其中有两个类别(猫、狗)和两个领域(照片、素描)。图像I1与提示P1形成正对,与提示P2形成负对。通过优化对比目标,图像特征f(I1)与g(P1)的句子嵌入之间的距离最小化,图像特征f(I1)与g(P2)的句子嵌入之间的距离最大化。这就表示狗的类别信息可以从草图/照片的领域信息中进行脱离开。相反,假设领域信息和类别信息仍然纠缠,即领域表示( p1d和p2d)包含狗的类别信息。在这种情况下,I1和P2仍然匹配,并且f (I1)和g (P2)之间的距离可以通过移除该类信息进一步最大化。换句话说,通过优化对比损失来减少领域表示中的类别信息。类似地,以( I1, P3)为负对,我们从类别表征中移除域信息,否则由于类表示中照片的纠缠域信息,f(I1)仍然匹配g(P3)。结合这两个负对,通过最小化对比目标,可以迫使领域表示和内在类别信息相互解耦。

Conclusion

本文介绍了一种新颖的用于无监督域适应的提示学习方法,它不像传统方法那样在领域之间进行特征对齐。相反,我们为每个领域设计特定领域的上下文,以促进学习源域和目标域的不同领域表示。通过利用提示学习,本文在多模态方法和领域自适应方法之间架起了一座桥梁。广泛的结果证明了本文方法的优势。提示学习方法未来可以扩展到无监督域适应中的其他视觉任务,如语义分割等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2072399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【自动驾驶】控制算法(四)坐标变换与横向误差微分方程

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作&…

浙大版循环结构程序设计 7-6-1 贪心法-找零钱

7-6-1 贪心法-找零钱 #include <stdio.h>int main(){int n5,n2,n1,money,total;int flag 1; //判断是否符合条件然后跳出循环scanf("%d",&money);if(money>100){printf("Invalid.");}for(n5money/5;(flag1)&&(n5>0);n5--){for(n2…

2-75 基于matlab的多尺度小波核svm预测

基于matlab的多尺度小波核svm预测&#xff0c;数据归一化操作&#xff0c;尺度小波核函数作为核函数进行训练&#xff0c;训练后的模型进行预测。程序已调通&#xff0c;可直接运行。 2-75 多尺度小波核 SVM预测 - 小红书 (xiaohongshu.com)

Java 认识String类

1. 创建字符串 常见的构造 String 的方式 //方式一&#xff1a;String str "hello world";//方式二&#xff1a;String str2 new String("Hello world");//方式三&#xff1a;char[] array {a,b,c};String str3 new String(array);注意事项&#xff1…

Promise学习之初步认识Promise

目录 前言 一、认识Promise (一) 含义 (二) 代码演示 二、Promise状态 三、总结 前言 在上一篇的学习中&#xff0c;我们已经认识到了同步与异步&#xff0c;异步代码在解决同步代码问题的同时&#xff0c;也会产生一些新的问题&#xff0c;比如常说的回调地狱&#xff0…

DBSCAN算法及Python实践

DBSCAN&#xff08;Density-Based Spatial Clustering of Applications with Noise&#xff0c;具有噪声的基于密度的空间聚类应用&#xff09;算法是一种基于密度的聚类算法&#xff0c;它在机器学习和数据挖掘领域有广泛的应用。以下是DBSCAN算法的主要原理和特点&#xff1a…

系统编程-管道

管道 目录 管道 1、管道的特点 2、无名管道的使用步骤 &#xff08;1&#xff09;在进程中使用 pipe 函数来获取管道的文件描述符 &#xff08;2&#xff09;使用 fork 函数来创建子进程 &#xff08;3&#xff09;通过获取到的文件描述符来进行数据的传输 &#xff08…

第八周:机器学习

目录 摘要 Abstract 一、注意力机制V.S.自注意力机制 1、引入 2、注意力机制 3、自注意力机制 二、自注意力机制 1、输入 2、输出 3、序列标注 4、Multi-head Self-attention 5、比较 总结 摘要 前两周学习了CNN的基本架构&#xff0c;针对全局信息的考虑问题&…

【Kotlin设计模式】Kotlin实现单例模式

前言 单例模式&#xff08;Singleton Pattern&#xff09;&#xff0c;是确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问这个实例。在 Android 中&#xff0c;有许多系统服务和 API 使用了单例模式&#xff0c;比如&#xff1a; Context: 通过getApplication…

SpringBoot2:创建项目及启动时相关报错整理

1、创建时报错 Initialization failed for https://start.aliyun.com/ Please check URL, network and proxy settings.Error message: Error parsing JSON response换官网地址初始化即可&#xff1a;https://start.spring.io/ 那么&#xff0c;大家肯定会疑问&#xff0c;官网…

【SpringBoot】10 日志持久化(log4j2)

介绍 日志概念 日志是系统生成的数据&#xff0c;用于记录网络、端点、物联网、应用程序、操作系统等&#xff0c;在运行时所发生事件的信息&#xff0c;便于开发人员或维护人员进行故障排查、性能优化、安全审计等工作。 日志作用 问题追踪及调试&#xff1a;当程序出现问…

C语言 | Leetcode C语言题解之第372题超级次方

题目&#xff1a; 题解&#xff1a; //计算a的b次方 int mypow(int a, int b){a a % 1337; // 防止a过大超出规模int ret 1;for(int i 0; i < b; i){ret * a;ret ret % 1337; //防止超出规模}return ret; } //整体计算 int superPow(int a, int* b, int bSize){if(a 1…

Android Jitpack制作远程仓库aar流程

开发高效提速系列目录 软件多语言文案脚本自动化方案Android Jitpack制作远程仓库aar流程 Android Jitpack制作远程仓库aar流程 背景aar制作与使用1. aar制作2. aar使用 异常解决总结 博客创建时间&#xff1a;2023.08.24 博客更新时间&#xff1a;2023.08.24 以Android stud…

leetcode刷题之二分算法

目录 简介 第一个错误的版本 算法思路 代码实现 两个数组的交集 算法思路 代码实现 两个数组的交集2 算法思路 代码实现 有效的完全平方数 算法思路 代码实现 猜数字大小 算法思路 代码实现 排列硬币 算法思路 代码实现 寻找比目标字母大的最小字母 代码实…

XTuner微调个人小助手认知实战

1 微调前置基础 本节主要重点是带领大家实现个人小助手微调&#xff0c;如果想了解微调相关的基本概念&#xff0c;可以访问XTuner微调前置基础。 2 准备工作 环境安装&#xff1a;我们想要用简单易上手的微调工具包 XTuner 来对模型进行微调的话&#xff0c;第一步是安装 XTun…

YOLO+Sort实现目标追踪

在前面的目标检测、实例分割的学习中&#xff0c;我们多是对单张图像进行处理&#xff0c;而事实上在我们的实际应用中多数需要对视频进行操作&#xff0c;当然这个操作也是讲视频转换为一帧帧的图像&#xff0c;但博主发现在ultralytics这个算法平台中&#xff0c;针对视频的处…

docker容器基本命令、docker进入容器的指令、容器的备份、镜像底层原理、使用commit命令制造镜像、将镜像推送到阿里云镜像仓库与私服仓库

除了exit 还有 ctrlpq exit退出停止 ctrlpq 退出不停止 将本地镜像推到阿里云 登入阿里云 容器镜像服务 实力列表 镜像仓库 创建镜像仓库 安装里面步骤来 这里192.168.10.145这部分用自己ifconfig地址

虚惊一场的一次事故,在事故中学习

上周日吃着晚饭时&#xff0c;“叮叮”两声&#xff0c;老板在QQ上单独M我。 “服务器好像崩了” “昨天和前天在线人数猛猛下滑 现在更是只有879人在线了” 看完消息&#xff0c;我震惊了&#xff0c;忙用筷子将碗中剩下的饭菜一股脑扒拉到嘴里&#xff0c;来到书桌前坐下&a…

华为OD机试-转盘寿司(C++ Java Python)

题目描述:寿司店周年庆&#xff0c;正在举办优惠活动回馈新老客户。寿司转盘上总共有n盘寿司&#xff0c;prices[i]是第i盘寿司的价格&#xff0c;如果客户选择了第i盘寿司&#xff0c;寿司店免费赠送客户距离第i盘寿司最近的下一盘寿司j&#xff0c;前提是prices[j]<prices…

RISC-V (七)外部设备中断

中断的分类 -本地中断 -software interrupt&#xff08;软终端&#xff09; -timer interrupt&#xff08;定时器中断&#xff09; -全局中断 -external interrupt&#xff08;外部中断 &#xff09; qemu主要是参考FU540-C000这款芯片做出来的&#xff0c;可以经常看一下这款…