MMFN的网络设计如图2所示,由多模态特征编码器、多粒度特征融合模块、单模态分支和基于CLIP相似度的模态加权以及分类器组成。
具体来说,这篇文章使用了三种预训练的编码器对多模态特征进行编码,分别是基于transformer的BERT和SWIN-T,基于对比学习的CLIP。
需要注意的是,BERT和SWIN-T的输出都是token级的,BERT的输出表示为
T
b
=
[
t
1
b
,
t
2
b
,
.
.
.
,
t
n
w
b
]
T^b=[t_1^b,t_2^b,...,t_{nw}^b]
Tb=[t1b,t2b,...,tnwb],其中
t
i
b
t_i^b
tib表示文本嵌入中第i个token(也就是第i个词)的最后一个隐藏状态的输出,
d
b
d_b
db是单词嵌入的维度。SWIN-T的输出表示为
V
s
=
[
v
1
s
,
v
2
s
,
.
.
.
,
v
n
p
s
]
V^s=[v_1^s,v_2^s,...,v_{n_p}^s]
Vs=[v1s,v2s,...,vnps],其中,
v
i
s
∈
R
s
s
v_i^s\in R^{s_s}
vis∈Rss为模型最后一层输出处对应于输入的第i个patch的隐藏状态,????????为SWIN-T中的patch数,
d
s
d_s
ds为视觉嵌入的隐藏大小。
CLIP文本和图片编码器的结果为
X
c
=
[
t
c
,
v
c
]
X^c=[t^c,v^c]
Xc=[tc,vc],分别表示图片和文本模态的嵌入向量,他们处于同一个嵌入空间。
拿到了这些特征后,本文的单模态分支就是把BERT和SWIN-T的token级向量进行平平均池化,然后和CLIP的编码结果拼起来经过一个映射头,作为两个单模态分支特征,即:
F
t
=
Φ
T
(
T
b
ˉ
;
t
c
)
F^t=\Phi_T(\bar{T_b};t^c)
Ft=ΦT(Tbˉ;tc)
F
v
=
Φ
V
(
V
s
ˉ
;
v
c
)
F^v=\Phi_V(\bar{V_s};v^c)
Fv=ΦV(Vsˉ;vc) 接下来我们看粗细粒度的多模态融合模块,所谓细粒度,就是把
T
b
T_b
Tb和
V
s
V_s
Vs分别送入两个transformer架构的共注意力机制模块,得到互相加权后的文本和图片细粒度特征:
F
v
t
=
C
T
(
(
T
b
W
t
)
,
(
V
s
W
v
)
)
F^{vt}=CT((T^bW^t),(V^sW^v))
Fvt=CT((TbWt),(VsWv))
F
t
v
=
C
T
(
(
V
s
W
v
)
,
(
T
b
W
t
)
)
F^tv=CT((V^sW^v),(T^bW^t))
Ftv=CT((VsWv),(TbWt)) 然后通过几个全连接层把互相加权过的细粒度特征和粗粒度特征融合:
M
f
=
F
F
N
1
(
F
v
t
;
F
t
v
)
M^f=FFN_1(F^{vt};F^{tv})
Mf=FFN1(Fvt;Ftv)
M
c
=
F
F
N
2
(
t
c
;
v
c
)
M^c=FFN_2(t^c;v^c)
Mc=FFN2(tc;vc)
F
m
=
s
i
m
i
l
a
r
i
t
y
⋅
Φ
M
(
M
f
,
M
c
)
F^m=similarity\cdot \Phi_M(M^f,M^c)
Fm=similarity⋅ΦM(Mf,Mc) similarity是通过CLIP特征算出来的模态间余弦相似度,作者认为,如果直接将单模态分支表示发送给分类器进行决策,分类器可能更倾向于使用具有更深网络的多模态表示来拟合结果,而单模态分支可能会干扰决策并导致更严重的歧义问题。因此使用CLIP余弦相似度作为多模态特征加权的系数来指导分类器的学习过程,也就是给多模态特征加权。
将三个分支的特征送入分类头得到pre,损失函数是交叉熵。