[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}}} PRDp×Cs,QRDq×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),ARDp×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和本文方法的数目都少,说明定位错误的情况出现少,问题还是集中在分类上。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值