RepMet
提出了一种可以同时学习特征提取网络、嵌入空间和描述每个类别分布混合模型(表征)的端到端网络。通过替换特征提取网络的 classification head,可以用在小样本目标检测领域。
小样本检测在特定任务和一般范畴分类的任务下取得了很大的进步,但是在目标检测领域,由于背景的存在和需要准确定位物体的位置,还有很大的进步空间。
表征的计算方法是用K近邻算法来建模,以往的方法如原型网络的基本假设是类别分布在嵌入空间中是单峰的(类似正态分布,只有一个峰),也就是说存在一个原型点。但是在实际中,类别的表征不一定是单峰的,可能是多个模式的混合表示(这里也可以理解为其概率密度函数一众最高点)。
文章认为小样本分类任务的方法无法用在小样本检测任务的原因是:一个检测器训练批次通常只包含一张图像,前景与背景 ROI 比率严重不平衡。这对小样本的学习器非常不友好,因为其通常需要在每个训练批次中包含多个类别的平衡的 ROI 比率,并且通常难以应付非结构化噪声(这里指背景)。
RepMet(DML sub-net)用在小样本检测任务的方法是替换目标检测网络的分类算法,而特征提取和定位物体的算法还保持不变。文中以 deformable-FPN(Faster RCNN 的变种,使用空洞卷积)为例,超参数 K=5,σ=0.5, 在 few-shot 任务上利用提出的分类算法(DML)来得出 ROI 的后验类别,具体做法是输入 ROI 的特征向量,利用迁移学习的思想,将与特征向量表征最相近(在L2距离下)的表征替换为该特征向量的表征,通过将某种类别的知识迁移到测试集的新类别来完成 few-shot learn。如下图,在训练阶段同时学习特征提取网络、嵌入空间内的表征(包括各个类别和背景)。在测试阶段输入的是训练集里没有的类别,往往要通过一张或者几张图片来得到其在嵌入空间的表征,这里迁移了已有类别的表征来提高性能。
RepMet 网络结构
黄色框提取出来的是分类类别的表征信息,其在嵌入空间中的分布可以看作一种混合模型(可以理解为K近邻算法其概率密度函数一众最高点),这里通过更新 FC layer 的参数来训练混合表示。输入为网络提取到的特征,之后(蓝色方框)用来将其转换到嵌入空间里的特征向量。将该特征向量与各类的每个表征计算距离矩阵:
距离矩阵用来计算图像属于某个类别的概率:
其属于某个具体类别的概率为:
计算两类损失函数:分类损失和嵌入特征空间的损失,分类损失即输入图片的特征与各类别各表征的交叉熵损失,嵌入损失如下:
i* 表示正确的类别,上式要求嵌入特征向量 E 与正确类别的表征之间的最近距离,要比与其他错误类别的表征之间的最近距离小 α,否则会受到惩罚,| · |+ 为 RELU 激活函数。
Benchmark
本文采用正则化迁移的方法提出了一个小样本检测的 Benchmark。之前的 Benchmark 每个任务只包含一个 episode(训练/测试图片的选择),而新提出的 Benchmark 基于 ImageNet-LOC 数据集,其每个任务包含500个随机的 episode。每一个 episode 都是一个 n-shot,m-way 小样本检测的任务(这里 n 可取1、5、10),该任务中类别的每一类都有 10*m 张 query images,每张 query image 至少包含一个或多个该类的实例。下图为 1-shot,5-way episode 示例:
该 Benchmark 包含三个 baseline :
- fine-tuning deformable-FPN 的分类分支。
- 将 deformable-FPN 的检测头换为本文提出的 DML sub-net,不过不使用 embedding module 模块,将 deformable-FPN 特征提取网络最后两个全连接层的输出作为 embedding module。
- 将 DML sub-net 连接到特征提取网络之后,不过 embedding module 不与该网络一起训练,而是利用将前景和背景的 ROI 输入到 triplet loss 用原型网络 Prototypical NetWork 来训练。
baseline 和本文提出的方法在相同的数据集上预训练(并不是 ImageNet-LOC),测试在相同的 episodes。训练数据大都是 ImageNet-LOC 数据集中的动物和鸟类,类别数为100。测试数据的类别是 ImageNet-LOC 数据集中214类的动物和鸟类(保证训练和测试数据在同样的特征域),与训练数据的类别没有交叉。对采用 DML sub-net 的方法,在每一 episode 将提取出的特征向量的表征替换掉嵌入网络中与之最相近的表征(迁移的思想)来完成训练和预测。训练阶段将和 bounding box 的 IoU 大于等于0.7的 ROI 留下,特征提取网络和 embedding module 同时优化。实验结果如下:
可以理解为训练过程就是 fine-tuning 的过程,对用采用 DML sub-net 的方法微调了嵌入模块和表征模块。图中3和4对比可以得出同时训练的重要性。
对于第三种方法精度的衰退,文章中的解释不是很懂:
Although the ex-ternal embedding was trained on the same training images as our method and the other baselines, it was infeasible to sample the entire collection of possible background ROIs that are being processed by our method when training as a detector end-to-end. Therefore, we had to resort to sampling 200 ROIs per image, which reduced the baseline’s ability to reject the background.
同时为了检验共同学习到的嵌入和特定表征的相互依赖性,对每个 episode 训练得到的表征进行了重复测试(只使用没有用于训练的验证图像),反映在图中的最后两行。第一行使用训练数据调整过的表征,而第二行使用预训练后得到的与之类别相近的表征,只展示出了 5-shot 的结果。可以看出同时训练得到对应的嵌入和表征是很重要的,后面的训练过程实际上就是微调预训练表征的过程。同时可以看到精度的上升,其对没有见过的类别的鲁棒性上升。
同时对比了 deformable-FPN 和本文的方法在通用检测任务上的性能:
补充
- query image
给定 support images,在 query image 找到所有与 support images 中种类相同的物体,如下图,左上角和右上角的叫做 support image,中间大图叫做 query image。
- Beachmark
baseline 主要关注自己提出的方法,比如最原始最简单的方法出来的结果(参照物)。然后再这个基础上改进,增加各种组件,可以看出提升了多少,通过 baseline 我们可以知道这个方法能不能 work,有多少提升。benchmark 主要对比别人的方法,这个方法不一定是最好的,但一定是最有代表性且被广泛认可的(一种标准和规则)。其所用的数据就是 benchmark data,其方法就是 benchmark method,提出的方法的在 benchmark data 上得出的结果与 benchmark method 的结果对比才能知道你的方法是否足够好。