[FSOD][笔记]Context-Transformer: Tackling Object Confusion for Few-Shot Detection(AAAI 2020)
论文题目: Context-Transformer: Tackling Object Confusion for Few-Shot Detection
论文地址:https://arxiv.org/pdf/2003.07304.pdf
简介
本文讨论了如何将迁移学习用在小样本目标检测任务上。若使用迁移学习,通常的做法是使用target-domain的数据对source-domain的检测器进行微调。但是由于小样本任务中,target-domain的数据非常少,会导致检测器分类失败。为了解决这个问题,作者提出了一个Context-Transformer模块,用以增强分类性能。
动机
作者为什么要提出Context-Transformer模块,以及这个模块是如何增强检测器分类性能的呢?
作者认为,在小样本目标检测任务中,定位是没太大问题的,只是分类有困难。为什么会出现这种情况呢?因为目标检测采用BBOX用于定位,OBJ+BG用于分类(BBOX指bounding box,OBJ指目标,BG指背景)。其中,BBOX和类别无关,所以直接用source-source BBOX没有太大问题,但是OBJ+BG是类别相关的,对于新的类别是会被随机初始化,如果标注量不足,会导致新类别的目标难以区分。
所以应该如何解决目标难以区分这个问题呢?人类识别一个物体,除了观察物体本身的特征,还会利用周围的环境作为线索,对物体类别进行推测。比如一张图上有个动物,通过动物的外观很难区分是狗还是马,如果图上有人骑在动物上,并且还有一大片草地,难么这个动物是马的可能性很大。
如果模仿人类的这个思考过程,会不会让模型的分类性能提高呢?所以作者设计了Context-Transformer模块来模仿人类的思考过程。首先从周围环境寻找与待识别目标相关联的目标作为线索,然后将线索作为附加信息,用以增强待识别目标的特征,最后和BG一起送入分类器进行分类,使得分类性能提升。
框架
图1
总体框架如图,分为上下两个部分。上半部分是常规的检测框架(本文用了SSD),下半部分为Context-Transformer模块。首先将target-domain的image输入在source-domain上训练好的SSD,然后将SSD其中一个输出OBJ输入Context-Transformer模块做一个特征增强,然后将增强后的特征和BG一起送入分类器进行分类。
细节
Context-Transformer模块
图2
Context-Transformer模块的输入有两部分:Prior Box(所有待分类的proposal)和Contextual Field(周围环境与Prior Box相关联的全部proposal)。Contextual Field是如何获得的呢?文中直接取所有的Prior Box做了pool作为Contextual Field(做pool的原因是作者认为可以不用过多关注细节)。
再来看一下细节。
1.P和Q分别代表一张输入图像的k个空间尺度上所有像素点的m个候选区域的集合reshape成的向量。具体表示如下:
P
∈
R
D
p
×
C
s
,
Q
∈
R
D
q
×
C
s
P\in R^{{}^{D_{p}\times C_{s}}},Q\in R^{{}^{D_{q}\times C_{s}}}
P∈RDp×Cs,Q∈RDq×Cs
其中,
D
p
=
∑
k
=
1
K
H
k
×
W
k
×
M
k
D_{p}\ =\ \sum\nolimits^{K}_{k=1} H_{k}\times W_{k}\times M_{k}
Dp = ∑k=1KHk×Wk×Mk
D
q
=
∑
k
=
1
K
U
k
×
V
k
×
M
k
D_{q}\ =\ \sum\nolimits^{K}_{k=1} U_{k}\times V_{k}\times M_{k}
Dq = ∑k=1KUk×Vk×Mk
2.Affinity Matrix
矩阵A的每一列代表所有待分类的proposal,每一列代表待分类的proposal和它的Contextual之间的相关度分数。
A
=
f
(
P
)
×
g
(
Q
)
⊤
,
A
∈
R
D
p
×
D
q
A\ =\ f\left( P\right) \times g\left( Q\right)^{\top } ,A\in R^{D_{p}\times D_{q}}
A = f(P)×g(Q)⊤,A∈RDp×Dq
3.L
有了Affinity Matrix后,对于每一个proposal,都要计算所有proposal对应的Contextual的信息的权值向量L(讲道理,对于每个目标来说,图像上的任何BBOX都有可能包含它,包含的越多,相关度分数越高,那么这个BBOX中的其它目标与它相关度越高,我感觉这里相关度高的逻辑是空间位置上越近越相关),这样一来,L的每一行都包含了距离这个proposal中待分类目标空间位置比较近的其它目标的信息。
L
(
i
,
:
)
=
s
o
f
t
m
a
x
(
A
(
i
,
:
)
)
×
h
(
Q
)
L\left( i,:\right) =softmax\left( A\left( i,:\right) \right) \times h\left( Q\right)
L(i,:)=softmax(A(i,:))×h(Q)
4.对proposal信息进行增强后送去分类
增强后的信息:
P
^
=
P
+
ϕ
(
L
)
\hat{P} \ =\ P+\phi \left( L\right)
P^ = P+ϕ(L)
分类:
Y
^
=
s
o
f
t
m
a
x
(
P
^
×
Θ
)
\hat{Y} \ =softmax\ \left( \hat{P} \times \Theta \right)
Y^ =softmax (P^×Θ)
实验
数据集
source-domain:COCO中与VOC07+12不重叠的60类所涵盖的图片
target-domain:VOC07+12
Context-Transformer
1.Context-Transformer模块对模型性能的影响
表1
Baseline表示只用最原始的fine-tune方法,OBJ(S)代表保留source的OBJ。从表格中可看出,保留source的OBJ可以减轻过拟合,添加Context-Transformer模块可以减轻目标分类混淆的情况,它们都能提升mAP。作者还在test的时候移除了Context-Transformer模块,指标仅比在test阶段使用Context-Transformer模块略有下降,说明训练阶段使用的Context-Transformer模块使得检测器泛化能力增强。
2.Context-Transformer模块设计细节
表2
1)是否使用pool?
实验表明使用pool效果更好,因为找relation不需要过多关注细节,所以使用pool是可行的。而使用pool之后,由于context小了,学习的难度下降,所以性能提升。
2)是否需要使用fc?
实验表明使用fc效果更好,因为fc增加了学习的灵活度。如果使用residual FC效果更更好,因为residual减少了小样本场景下初始化的随机性。
3)计算两个embedding的距离用Euclidean好还是用Cosine好呢?
实验表明不论选哪种,效果都差不多。
4)要不要利用source的OBJ呢?
实验表明利用了source的OBJ效果更好
shot数目的影响
表3
从表3可看出,增加shot并没有提升,shot增加一定量的时候,模型的性能趋于稳定。作者的解释是shot量足够的时候,造成目标confusion的原因消失了,这时候Context-Transformer模块对于减轻confusion的作用已经很小了,所以性能没有变化。但是总体看,mAP还是比baseline提升了,说明在训练时使用Context-Transformer模块确实泛化了检测模型。
注:我认为Context-Transformer模块并没怎么减轻目标confusion,可以看表1的最后两行,添加与不添加Context-Transformer模块仅差了0.4个点,这个作用已经非常小了。
和其它方法对比
1.与SSD框架对比
表4
对比了2个比较早期的基于SSD检测方法,提升了好几个点。
2.使用其它few-shot learner替换Context-Transformer
表5
从结果看出,还是Context-Transformer性能最好,说明一般的小样本分类方法对于提升检测器比不过本文方法。而其中比Non-local方法要好,说明这个模块可以减轻目标混淆(因为Non-local没有用到context信息)。其实这样看来,我又有点相信Context-Transformer能减轻目标混淆了,之所以表1看起来这么不明显,可能可以理解为相对于检测器泛化性能提升,减轻混淆这个提升比较小。
Context信息的作用
1.Context Affinity
学到的Context对识别目标有没有帮助呢?作者可视化了与目标最相关的proposal:
图3
从图中可以看出,Baseline错误的把car识别成了train,把hourse识别成了dog。而本文的模型利用了周围环境,比如说识别hourse的时候,周围有人,通过人这个线索,没有把hourse错误的识别成了dog,说明context是起到作用的。
2.可视化检测结果
图4
看效果,不但类别更正确了,连位置都更准了。比如baseline里的boat顶部,BBOX就没能把它全部框住,而本文方法框的更准确了
3.可视化mAP前4的类别定位和分类正误情况
图5
从图中看出,定位和分类都正确的数目比baseline多。正确定位错误分类的比baseline少,证明分了性能是改善了,错误定位baseline和本文方法的数目都少,说明定位错误的情况出现少,问题还是集中在分类上。