多模态预训练模型BLIP, BLIP-2,BLIP-Adapter
BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation
BLIP系列是Salesforce非常经典的作品,在作者自己文章对比的baseline中,blip也一直保持着很高的zero-shot performance。可以说在作者心目中CLIP和BLIP就是VLM中的两块奠基石。
结构
其实好的网络往往不需要对细节进行改进,clip focus在数据工程层面上,blip则是注重于复用pre-trained model并根据任务场景构建新的复合loss来完成性能的提升,在blip之前的ALBEF,VLMo也都是如此。在作者看来这种更贴近任务本质的方式往往可以取得更好的效果。因为复杂的blocks的初始设计思路就是针对某一些特定的任务场景,所以也无法泛化和迁移到其它场景下进行使用。
言归正传,BLIP的结构主要包括三个部分,visual encoder, text encoder和fusion decoder。落实到文章上,就是一个ViT+一个Bert。针对不同的任务,blip使用了不同的loss,想讲清楚blip系列就要先明确这三种loss和对应的任务。
ITC loss
L
i
t
c
=
1
2
E
(
I
,
T
)
∼
D
[
H
(
y
i
2
t
(
I
)
,
p
i
2
t
(
I
)
)
+
H
(
y
t
2
i
(
T
)
,
p
t
2
i
(
T
)
)
]
=
1
2
E
(
I
,
T
)
∼
D
[
(
−
1
)
E
(
I
,
T
)
∼
D
[
∑
y
i
2
t
(
I
)
l
o
g
(
e
x
p
(
s
(
I
,
T
m
)
/
τ
)
∑
j
=
1
J
e
x
p
(
s
(
I
,
T
j
)
/
τ
)
)
]
+
(
−
1
)
E
(
I
,
T
)
∼
D
[
∑
y
t
2
i
(
T
)
l
o
g
(
e
x
p
(
s
(
T
,
I
m
)
/
τ
)
∑
j
=
1
J
e
x
p
(
s
(
T
,
I
j
)
/
τ
)
)
]
]
\mathcal{L}_{itc}=\frac{1}{2}\mathbb{E}_{(I, T)\sim D}[\textbf{H}(\textbf{y}^{i2t}(I), \textbf{p}^{i2t}(I)) + \textbf{H}(\textbf{y}^{t2i}(T), \textbf{p}^{t2i}(T))] \\ = \frac{1}{2}\mathbb{E}_{(I, T)\sim D}[(-1)\mathbb{E}_{(I, T)\sim D}[\sum\textbf{y}^{i2t}(I) log(\frac{exp(s(I, T_m)/ \tau)}{\sum^{J}_{j=1}exp(s(I, T_j)/ \tau)})]+(-1)\mathbb{E}_{(I, T)\sim D}[\sum\textbf{y}^{t2i}(T) log(\frac{exp(s(T, I_m)/ \tau)}{\sum^{J}_{j=1}exp(s(T, I_j)/ \tau)})]]
Litc=21E(I,T)∼D[H(yi2t(I),pi2t(I))+H(yt2i(T),pt2i(T))]=21E(I,T)∼D[(−1)E(I,T)∼D[∑yi2t(I)log(∑j=1Jexp(s(I,Tj)/τ)exp(s(I,Tm)/τ))]+(−1)E(I,T)∼D[∑yt2i(T)log(∑j=1Jexp(s(T,Ij)/τ)exp(s(T,Im)/τ))]]
ITC Loss是在一个batch内计算所有image-text pair score,尽可能让text和image在第一个stage上align。
ITM loss
L
i
t
c
=
E
(
I
,
T
)
∼
D
H
(
y
i
t
m
,
p
i
t
m
(
I
,
T
)
)
\mathcal{L}_{itc}=\mathbb{E}_{(I, T)\sim D}\textbf{H}(\textbf{y}^{itm}, \textbf{p}^{itm}(I, T))
Litc=E(I,T)∼DH(yitm,pitm(I,T))
ITM Loss是从ITC的所有负样本中选择一个最难的样本,在feature后接一个FC层进行二分类。
此时模型forward是原Image和原Text
MLM loss
L
m
l
m
=
E
(
I
,
T
^
)
∼
D
H
(
y
m
s
k
,
p
m
s
k
(
I
,
T
^
)
)
=
E
(
I
,
T
^
)
∼
D
−
∑
y
m
a
s
k
l
o
g
p
m
s
k
(
I
,
T
^
)
\mathcal{L}_{mlm}=\mathbb{E}_{(I, \hat{T})\sim D}\textbf{H}(\textbf{y}^{msk}, \textbf{p}^{msk}(I, \hat{T})) \\ = \mathbb{E}_{(I, \hat{T})\sim D} -\sum \textbf{y}^{mask} log\textbf{p}^{msk}(I, \hat{T})
Lmlm=E(I,T^)∼DH(ymsk,pmsk(I,T^))=E(I,T^)∼D−∑ymasklogpmsk(I,T^)
MLM Loss首先需要对原始的text进行部分mask。具体操作是15%原text mask,12%用[MASK]标记掩盖,1.5%随机替换为原text list中的其它tokens,1.5%保持不变。之后计算预测tokens和原始tokens之间的交叉熵损失。
此时模型forward是原Image和带mask的
T
′
{T}^{'}
T′
CapFit
数据飞轮的代表,和SAM的逐阶段refine有点相似。
- 所有数据(脏数据+coco)一起pretrain
- 用coco进行finetune
- decoder过一遍脏数据生成新的caption
- encoder过滤一遍生成的caption,不合格的过滤掉,保留一部分质量高的caption
- 高质量生成caption+coco二次pretrain
实验结果
没啥好说的,反正很好用。
BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models
BLIP-2未完待续