前言
本文介绍篇来自Google的ICLR2023的论文:F-VLM,开源地址。
1、出发点
本篇论文想将clip这种VLM强大的zero-shot分类能力迁移给开放词汇检测任务。那么就得要求特征层包含“局部感知”和“判别特征”的能力。本文通过K-means聚类clip的Image Encoder的特征层,并将其用于分类,发现效果还不错:
于是作者想到直接冻结clip的特征提取层,然后微调一个检测器不就能得到一个不错的开放词汇检测器了吗。
2、方法
这里简单补充下解决的任务:模型在 C B C_B CB的检测数据上训练;在 C N + C B C_N+C_B CN+CB上进行评测。其中 C N C_N CN不包含在 C B C_B CB中。
2.1.训练阶段
整体训练过程还是很简洁的,其实可以看出是个双流的网络:
1) 图像特征部分:类似FasterRCNN的提取每个候选框
b
b
b的视觉特征,
r
b
=
F
a
s
t
e
r
R
C
N
N
_
H
e
a
d
(
R
O
I
A
l
i
g
n
(
F
P
N
,
b
)
)
r_b = FasterRCNN\_Head(ROIAlign(FPN, b))
rb=FasterRCNN_Head(ROIAlign(FPN,b))
2) 文本特征部分:为了能够任意拓展到任意个数类别,这里用的是文本特征
t
t
t和
r
b
r_b
rb之间的余弦相似度。当然,这里作者还额外引入了一个"background"的类别,用以区分背景。
z
(
r
b
)
=
S
o
f
t
m
a
x
(
1
τ
[
c
o
s
(
r
b
,
t
b
g
)
,
c
o
s
(
r
b
,
t
1
)
,
.
.
.
c
o
s
(
r
b
,
t
∣
C
B
∣
)
]
)
z(r_b) = Softmax(\frac{1}{\tau}[cos(r_b, t_{bg}), cos(r_b, t_1), ... cos(r_b, t_{|C_B|})])
z(rb)=Softmax(τ1[cos(rb,tbg),cos(rb,t1),...cos(rb,t∣CB∣)])
注意:这里是每个
r
b
r_b
rb都要和所有类别标签计算个相似度。然后用以分类损失和回归损失计算。
2.2.测试阶段
原论文的符号挺多,这里还是直接看图吧:还是双流看:
1)图像特征:在RPN得到候选框后
b
b
b后,借助ROIAlign得到FM的每个物体的特征层,然后通过VLM Pooling Layer得到
v
i
v_i
vi,然后跟每个文本特征向量
t
i
t_i
ti得到VLM Score;
2)文本特征:在RPN得到
r
k
r_k
rk后,跟
t
j
t_j
tj得到相似度,(这块跟训练阶段保持一致).
3)然后通过几何变换公式5得到最终的置信度分数:
说明
这里训练跟测试感觉区别较大,即为何引入公式5,我也不清楚啥原因:原文作者解释说经过ROIAlign后的feature虽然有助于分类,但却缺乏局部感知能力,即框不够精准。于是引入公式5。
本人猜测:应该是在训练阶段:由于只用到了
C
B
C_B
CB,可能过拟合到这些类别上倾向;于是在测试阶段,又额外根据候选框
b
b
b经过ROIAlign得到一些可能是
C
N
C_N
CN的特征,毕竟clip的ImageEncoder有不错的局部感知和判别性特征能力,于是将二者的置信度结合了一下。既要不过拟合
C
B
C_B
CB类别,也要保持泛化。仅代表个人观点。
3、实验
总结
由于论文偏早,因此精度可能不高,但至少是一篇将VLM尝试引入OVD任务的开山之作。