PromptStyler 阅读笔记
无源域泛化:prompt驱动风格生成
ICCV-2023 PromptStyler: Prompt-driven Style Generation for Source-Free Domain Generalization
总结:
- 利用大规模预训练模型CLIP代替多源域实现source free;
- 用风格表征一个域;
- 学习风格词向量(风格多样性、内容一致性)。
CLIP
ICML-2021 Learning Transferable Visual Models From Natural Language Supervision
深度学习系列37:CLIP模型_IE06的博客-CSDN博客
clip预训练模型综述_clip模型_nocol.的博客-CSDN博客
计算文本特征和图像特征的相似度以预测它们是否匹配。
本文方法通过伪词 S ∗ S_∗ S∗ 的可学习风格词向量来学习生成各种风格特征(“a S ∗ S_* S∗ style of a”)(模拟联合模态空间中的各种分布偏移)。为了确保学到的风格不会扭曲内容信息,强制风格-内容特征(“a S ∗ S_∗ S∗ style of a [class]”) 位于联合视觉-语言空间中与其对应的内容特征(“[class]”) 附近。在学到多个风格词向量后,使用合成的风格-内容特征训练线性分类器。
注意到,一个大规模的预训练模型可能已经观察到各种域,因此可以用作实际多源域的有效代理。
从这个角度出发,作者提出了一个问题(setting):“是否可以在不使用任何源域数据的情况下,通过模拟该大规模模型的隐空间中的各种分布偏移来进一步提高模型的泛化能力?”
如图所示,文本特征可以在一个联合视觉-语言空间中有效地表示与其相关的图像特征。
尽管在联合空间中两种模态之间存在模态差异[39],但最近的一项研究证明了跨模态可迁移现象[67];我们可以使用文本特征训练分类器,使用图像特征对分类器进行推理。该训练过程满足SFDG的必要条件,即不需要源域图像。
动机:观察到图像的共享风格可以表征一个域[27,74],并且这种共享风格可以通过伪词 S ∗ S_∗ S∗ 的可学习风格词向量使用CLIP来捕获[17]。如图所示,本文方法学习 S ∗ S_* S∗ 的风格词向量来表示每种风格。
Related Work
-
Domain Generalization
-
多源DG:利用可用的多个源域来学习域不变特征。
但目前尚不清楚哪些源域对DG是理想的,因为应该解决任意未见域。此外,收集和标注大规模的多源域数据来用于训练是昂贵的,有时甚至是不可行的。
-
单源DG:在单个域的基础上生成多个域,然后利用合成的域来学习域不变特征。
-
-
Source-free Domain Generalization
不可访问任何源域和目标域,只给出了目标任务的定义(例如,类名)。
尝试在不使用任何源域的情况下生成不同的域来处理无源DG。本文方法利用一个已经观察到大量域的大规模预训练模型,模拟该大规模模型隐空间中的各种分布偏移。
与现有的DG方法相比,该方法具有几个优点:无需源域图像、无需担心灾难性遗忘。此外,由于只需要任务定义,将这种大规模模型用于下游视觉识别任务非常实用。
-
Large-scale model in Domain Generalization
利用大规模预训练模型(例如CLIP)来利用其强大的泛化能力。
CAD和MIRO在使用可用数据训练神经网络的同时,尝试使用这种大规模模型学习鲁棒特征。
ICLR-2022 Optimal Representations for Covariate Shift(CAD)
ECCV-2022 Domain Generalization by Mutual-Information Regularization with Pre-trained Models(MIRO)
-
Joint vision-language space
大规模视觉-语言模型[26,CLIP,64]使用大量的图像文本对进行训练,并在下游视觉识别任务中取得了最先进的结果。通过利用它们的联合视觉-语言空间,我们可以通过prompt有效地操纵视觉特征。
[17]表明,伪词 S ∗ S_∗ S∗ 的可学习风格词向量可以在prompt(“a painting in the style of S ∗ S_∗ S∗”)下使用CLIP捕获图像的共享风格。根据这一观察,本文认为可学习的风格词向量将能够在不使用任何图像的情况下寻找各种风格来模拟联合视觉-语言空间中的各种分布偏移。
Method
(i) 学习多种风格词向量来表示超球面联合视觉-语言空间(例如CLIP隐空间)中的各种风格。
(ii) 学到风格词向量后,使用由预训练的文本编码器 T ( ⋅ ) T(·) T(⋅) 生成的合成风格-内容特征来训练线性分类器。
(iii) 在推理时,预训练的图像编码器 I ( ⋅ ) I(·) I(⋅) 从输入图像中提取图像特征,作为输入馈送给训练好的线性分类器。由于联合视觉-语言空间的跨模态可迁移现象[67],该分类器可以利用图像特征产生类分数。
本文利用CLIP作为大规模视觉-语言模型;其图像编码器和文本编码器被冻结在整个框架中。
Prompt-driven style generation:Prompt驱动的风格生成
通过tokenization(分词)将输入文本prompt转换为几个token(语言中的基本元素),然后通过word lookup过程将这些tokens替换为相应的词向量。在PromptStyler中,prompt中的伪词 S i S_i Si 是一个占位符,在word lookup过程中被风格词向量 s i ∈ R D \mathrm{s}_i\in \R^D si∈RD 替换。
在提出的方法中使用三种prompt:
- 风格prompt P i s t y l e \mathcal{P}_i^\mathrm{style} Pistyle(“a S i S_i Si style of a”)
- 内容prompt P m c o n t e n t \mathcal{P}_m^\mathrm{content} Pmcontent(“ [ c l a s s ] m [class]_m [class]m”)
- 风格-内容prompt P i s t y l e ∘ P m c o n t e n t \mathcal{P}_i^\mathrm{style}\circ\mathcal{P}_m^\mathrm{content} Pistyle∘Pmcontent(“a S i S_i Si style of a [ c l a s s ] m [class]_m [class]m”)
S i S_i Si 表示第 i i i 个风格词向量的占位符, [ c l a s s ] m [class]_m [class]m 表示第 m m m 个类名。
假设想在一个联合视觉-语言空间中生成 K K K 种不同的风格。在这种情况下,提出的方法需要学习 K K K 个风格词向量 { s i } i = 1 K \{\mathrm{s}_i\}^K_{i=1} {si}i=1K,其中每个 s i \mathrm{s}_i si 随机初始化。
学习这样的词向量有两种可能的设计选择:(1)顺序学习每个风格词向量 s i \mathrm{s}_i si;(2)并行学习所有风格词向量 { s i } i = 1 K \{\mathrm{s}_i\}^K_{i=1} {si}i=1K。本文选择前者,因为它在训练中占用的内存要少得多。
为了使用学到的风格词向量有效模拟联合视觉-语言空间中的各种分布偏移,
-
风格词向量需要多样化,以尽可能多的覆盖可能的域偏移
让各个风格词向量产生的风格特征正交。
-
防止风格词向量扭曲内容信息,让内容信息充分发挥作用
使合成的风格-内容特征靠近对应的内容特征。
Style diversity loss 风格多样性
使由第 i i i 个风格词向量 s i \mathrm{s}_i si 产生的风格特征 T ( P i s t y l e ) ∈ R C T(\mathcal{P}_i^\mathrm{style})\in \R^C T(Pistyle)∈RC 与由之前学到的风格词向量 { s j } j = 1 i − 1 \{\mathrm{s}_j\}_{j=1}^{i-1} {sj}j=1i−1 产生的 { T ( P j s t y l e ) ∈ R C } j = 1 i − 1 \{T(\mathcal{P}_j^\mathrm{style})\in \R^C\}_{j=1}^{i-1} {T(Pjstyle)∈RC}j=1i−1 正交。
(余弦相似度)
Content consistency loss 内容一致性
鼓励风格-内容特征中的内容信息在学习每个第 i i i 个风格词向量 s i \mathrm{s}_i si 时与其对应内容特征 T ( P m c o n t e n t ) ∈ R C T(\mathcal{P}_m^\mathrm{content})\in \R^C T(Pmcontent)∈RC 保持一致。具体而言,使由第 i i i 个风格词向量 s i \mathrm{s}_i si 合成的每个风格-内容特征与其对应的内容特征具有最高的余弦相似度。
对于第
i
i
i 个风格词向量
s
i
\mathrm{s}_i
si,具有第
m
m
m 个类名的风格-内容特征与具有第
n
n
n 个类名的内容特征之间的余弦相似度分数
z
i
m
n
z_{imn}
zimn:
一致性损失:
其中, N N N 表示目标任务中预定义的类的数量。
内容一致性损失 L c o n t e n t \mathcal{L}_{\mathrm{content}} Lcontent 是一种对比损失。
Total prompt loss
学习第
i
i
i 个风格词向量
s
i
\mathrm{s}_i
si 的总损失:
每个风格词向量训练
L
L
L 轮。
Training a linear classifier using diverse styles:使用多样风格训练线性分类器
学到 K K K 个风格词向量 { s i } i = 1 K \{\mathrm{s}_i\}^K_{i=1} {si}i=1K 后,生成用于训练线性分类器的 K ∗ N K*N K∗N 个风格-内容特征。具体而言,通过文本编码器 T ( ⋅ ) T(\cdot) T(⋅) 使用学到的 K K K 个风格和预定义的 N N N 个类来合成这些风格-内容特征。
ArcFace损失作为分类损失 L c l a s s \mathcal{L}_{\mathrm{class}} Lclass
Inference using the trained classifier 推理
在推理时,将训练好的分类器与预训练图像编码器 I ( ⋅ ) I(\cdot) I(⋅) 一起使用。
给定输入图像 x \mathbf{x} x,图像编码器提取其图像特征 I ( x ) ∈ R C I(\mathbf{x})\in \R^C I(x)∈RC。然后,训练好的分类器使用图像特征生成类分数。
Experiments
Datasets
- PACS(4 domains & 7 classes)
- VLCS(4 domains & 5 classes)
- OfficeHome(4 domains & 65 classes)
- DomainNet(6 domains & 345 classes)
使用不同随机种子重复每个实验三次,并报告具有标准误差的平均top-1分类精度。
不同于leave-one-domain-out cross-validation,不利用任何源域数据进行训练。
Implementation detailss
Architecture
CLIP作为大规模预训练视觉-语言模型
文本编码器 T ( ⋅ ) T(·) T(⋅) 使用 Transformer;图像编码器 I ( ⋅ ) I(\cdot) I(⋅) 使用 ResNet-50。在架构中均冻结。
使用ResNet-50,文本或图像提取的特征维度 C = 1024 C=1024 C=1024。
学习风格词向量
遵循prompt learning。
使用均值为0,标准差为0.02的高斯分布随机初始化 K = 80 K=80 K=80 个风格词向量 { s i } i = 1 K \{\mathrm{s}_i\}^K_{i=1} {si}i=1K。
使用ResNet-50,风格词向量的维度 D = 512 D=512 D=512。
每个风格词向量使用SGD优化器进行 L = 100 L=100 L=100 次训练迭代,学习率0.002,动量0.9。
类的数量 N N N 由目标任务预先定义。
训练线性分类器
分类器使用SGD优化器训练50 epochs,学习率0.005,动量0.9,batch_size=128。
In ArcFace loss, its scaling factor is set to 5 with 0.5 angular margin.
推理
输入图像的预处理方式与CLIP模型相同;调整大小为224 × 224并归一化。
Evaluations
zero-shot CLIP方法:
- ZS-CLIP©:使用域不可知的prompt (“[class]”) 生成每个文本特征。
- ZS-CLIP(PC):使用域特定的prompt (“a photo of a [class]”) 生成每个文本特征。
主要结果
t-SNE可视化结果
VLCS(5个类)上的可视化结果
学习80个风格词向量,只对前10个风格产生的特征进行着色。
不同颜色表示不同风格,不同形状表示不同类别。
风格多样性损失
L
s
t
y
l
e
\mathcal{L}_{\mathrm{style}}
Lstyle 和内容一致性损失
L
c
o
n
t
e
n
t
\mathcal{L}_{\mathrm{content}}
Lcontent 的组合在保留内容信息的同时使风格多样。