1. 出处
2021 CVPR
北大
2. 问题
小样本目标检测在只有少量样本可用的情况下,很容易忽视新物体的细粒度的特征。
已有的方法有几个缺陷:
- support特征和query特征之间的关系几乎没被探索过,在support特征上进行的全局池化操作用于调制query分支,这易于损失局部细节信息。support图像和query图像之间的外观变化差异很大或者有遮挡时,会对结果产生很大误导。没有足够的对比性信息的话,模型难以学到关键特征用于分类和定位。
- 尺度变化问题仍然是小样本检测任务的阻碍
3. 解决方案
为了充分利用有标注novel object的特征,并捕获query object细粒度的特征,作者提出了DCNet。在元学习架构基础上构建,Dense Relation Distillation模型目的是完全利用support features, support features和query features密集匹配,以前向传播的方式覆盖了所有空间位置。
当外观变化时,局部细节特征对匹配候选目标或模板具有决定性作用,因此,作者不再获取support set的全局表示,而是提出了dense relation distillation mechanism,query特征和support特征在像素级别上匹配。key和value maps从特征中产生,分别担任endoding视觉语义用于匹配,包含细节外观信息用于decoding.
为了缓解尺度不同的问题,作者设计了context-aware feature aggregation module在RoI pooling阶段捕获不同尺度的关键线索。识别不同尺度的物体需要不同的不同层的上下文信息,然而固定的池化分辨率会造成重要上下文信息的损失。因此作者提出了一个适应性的聚合机制(一种注意力机制)。
4. 整体结构
4.1 基础检测模型
采用Faster R-CNN
4.2 特征加权
作者采用Meta-RCNN作为baseline方法,RoI特征由RoI池化层产生,特定类的向量由reweighting module产生,和特征提取器共享backbone参数。
4.3 DCNet
4.3.1 输入
query images和support images的特征通过共享的特征提取器,获取到的特征作为Dense Relation Distillation Module的输入
4.3.2 Dense Relation Distillation Module结构
query feature和support feature通过复杂的编码器编码成成对的key-value图,query编码器和support编码器采用相同的结构,但不共享参数。
key maps用于度量query特征和support特征之间的相似度,能够辅助决定在哪提取相关的support值。学到的key maps编码视觉语义用于匹配,value maps存储细节信息用于识别。
生成的key和value map进一步喂入关系蒸馏部分,query和support的keys图密集匹配用于处理target目标。
关系蒸馏:通过度量query特征和support特征的key图之间的相似性,计算support特征的value图软权重。
4.3.3 Context-aware Feature Aggregation
修正后的query特征,随后被喂入RPN,输出region proposal,以proposals和特征作为输入,RoI Align模型为最终分类回归进行特征提取。在原始实现中,池化操作通过一个固定的8分辨率实现,会导致训练过程中信息损失,对于一般的检测,这种信息损失会由于数据量大得以补救,但在小样本场景下这种问题就很严重了。
由于小样本的本质,随着尺度变化被放大,模型易于失去泛化到新类的能力。
基于以上原因,作者提出了Context-aware Feature Aggregation模型。不再使用固定的8分辨率,而是选择4,8,12三种分辨率,进行平行池化。
因为每个生成的特征包含不同level的语义信息,为了有效聚合不同尺度RoI pooling的特征,作者提出了注意力机制来适应性地混合池化结果。
结构:为包含两个blocks的每个特征都添加一个注意力分支,第一个block包含一个全局平均池化,第二个包含两个连续的全连接层。随后为生成的权重进行softmax标准化,来平衡各个feature的贡献度。最终输出是三部分特征的加权求和。
5. 学习策略
整个学习过程分两个阶段:
-
元训练
在base classes上进行训练
-
元微调
在base classes和novel classes上进行微调
由于novel classes只有k个bbox,所以为了平衡base classes和novel classes,作者也为每个base classes选择k个boxes。
训练方法和元训练阶段一样,但很少轮就能收敛。