A survey of self-supervised and few-shot object detection论文整理

文章目录

  • 文章思路
    • 1. 简介
    • 2. 相关综述
    • 3. 目标检测的背景
    • 4. FSOD
    • 5. 自监督预训练
    • 6. 关键&趋势
    • 7. 相关任务


文章思路

大致理解一下之后再翻译

1. 简介

直到最近,标准FSOD的过程都是先在ImageNet上预训练一个backbone,再用base数据集在backbone基础上训练一个object detector,最终在novel class上微调。然而,随着自监督表征学习的发展,许多目标检测的方法逐渐用无监督代理任务学出来的参数初始化自己的backbone。
典型预训练自监督算法的问题在于它们出发点是分类任务,目标是最大化ImageNet数据集的Top-1表现。但是分类任务中丢弃的一些是目标检测任务的关键信息。而且,事实证明更高的Top-1正确率不能保证更高的目标检测精度。
就有一些自监督目标检测的方法出现。这些方法不仅针对分类,还在预训练阶段加入更多模块一起预训练,比如基于Faster R-CNN的目标检测方法会将RPN和及检测head和特征提取层一起预训练。尤其是现在FSOD的在MS COCO数据集上的SOTA方法就是同时自监督预训练了backbone和目标检测器。(DETReg)

2. 相关综述

pass

3. 目标检测的背景

  • 关键概念
    一般图像输入backbone特征提取的维度为3(长、宽、三通道),但是有的时候遇到Few shot的问题时,backbone输入的是W×H×4,深度多一个尺度,是为了放support object的mask真值(W×H)。
    单一尺度特征:从具体backbone的某一层取出的output。一般是feature map(W×H×C),特征图的W、H会因为做了多次卷积比原图小很多。
    多尺度特征:包括不同尺度的特征图。但是如果只是简单的结合不同backbone层的输出,会使得底层高分辨率的特征图停留在低语义信息状态。最常见的方法就是使用FPN,利用top-down上下采样、横向连接通道,可以将高层语义信息保留回低层。
    Faster R-CNN:多尺度特征送入RPN生成根据预设的anchor预测proposal位置、大小以及当前proposal存在object的概率,经过NMS去除低质量、冗余的proposal,送入ROI池化层统一大小,送入ROI head(Box head)进行object分类和bbox精细回归,最后再走一遍NMS。
    Mask R-CNN:基于Fast R-CNN框架解决实例分割问题。
    一阶段目标检测:YOLO、SSD、RetinaNet等,直接在特征图预设的位置上进行目标检测,可能后续会进行refine。
    DETR:将transformer引入目标检测,结构简单,用匈牙利算法代替NMS,优化困难。
    Deformable DETR:DETR的提高,多尺度可变形注意力模块可以只注意一小块特征,训练epoch是DETR的1/10。
  • 数据集和衡量指标
    Pascal VOC和MS COCO

4. FSOD

  • FSOD框架
    FSOD把object分成base(已知的、有大量训练样本的)和novel(未知的、目标、少样本)。我们先假定大多数FSOD模型的backbone已经预先在分类问题上预训练过了。之后会进行:
    (1)base集训练:大量有标签的样本可以用来训练。
    (2)few shot微调:一小部分有标签的样本(同时有base和novel)进行微调
    (3)few shot评估:单纯FSOD的方法只看novel class检测效果,而广义看的话,会同时比较novel和base的检测效果。
    base和novel class在训练和测试集都有,base训练时候训练样本中只用base标签样本,微调的时候support set是训练样本的子集(同时有base和novel)。
    而对于没有微调的方法,novel样本被作为support样本限制调整模型,而预测就直接在测试样本上进行。
  • FSOD和少样本分类(FSC)最重要的区别
    (1)FSOD的同一张图片中可能出现多个base、novel类的物体,而FSC默认每张图片中只有一个主体。在base训练阶段,FSC剔除所有novel图片,而FSOD会保留包括base物体的含有novel标签的图片。
    (2)FSOD会在base和novel class上同时微调和evaluate,但是FSC只在novel上微调和evaluate。
    (3)基于梯度的FSC方法,比如MAML,很大程度上依赖于“learning to learn”机制,在元学习阶段,N-way K-shot的数据准备是通过抽取一部分训练集(support set)加上一部分验证集(query set),在support上训练,在query上预测,然后梯度下降使得每一组loss最小,找到一组合适的初始化参数。相反,大多数FSOD方法并不使用多episode,纯微调的FSOD方法在base训练过程一次性训练所有class,并在evaluate之前只在固定的support集合上训练一次。因此,微调的FSOD没有经过多轮训练,出来的预训练参数不是最优的。
    (4)episodic 评价
    FSC会训练很多episode,每轮都根据support和query进行参数调整,就可以减少方差。相反,FSOD因为只有一个support set,就很容易产生超调。
    (5)验证集和测试集的划分
    FSC通常验证和测试是不同的样本集,而FSOD训练和验证是统一的集合,测试集用来调整超参和测试效果,不可避免的会高估模型的泛化能力。
  • FSOD数据集
    (1)Pascal VOC
    对于Few shot的情况,会划分15个base类别和5个novel类别。Pascal VOC提供三种不同的划分结果,即split1、2、3。有1,2,3,5,10shot的可选项。
    (2)MS COCO
    对于Few shot的情况,会划分60个base类别和20个novel类别。有10,30shot的可选项。
    (3)LVIS
    对于Few shot的情况,会划分776个base类别和454个novel类别。有10shot的可选项。
    TFA-split?Kang-split?
  • FSOD衡量指标
    (1)mAP:每一类别的平均精度的再次平均。而每一类别单独的AP定义是precision-recall曲线下的面积。具体如下:
    一个class的AP:根据置信度降序排名检测到的detection,从第一名(k=1)开始,如果和真值的IOU值超过设定的阈值(比如50%或者75%)就认定这个detection是True Positive(TP);如果这个detection的IOU数值低于阈值但是对应的gt是目标物体,当前的detection就设定为False Negative(FN)。
    precision@K:前K个box中TP的数量÷K。随着K增多,precision@K会波动,不确定增减。
    recall@K:前K个box中TP的数量÷对应真值的总数。随着K增多,recall@K也会增多。
  • FSOD方法
    (1)只微调的方法的baseline
    只微调的方法通常从传统的目标检测框架比如Faster R-CNN开始做微小框架修改,它们在大量base class训练集上做base训练,再在包含base和novel的support训练集上做few shot微调训练。分成两步训练的原因是:解决base和novel class之间的样本极度不平衡,避免在novel上直接训练会产生的超调问题。
    LSTD是第一个将微调策略使用在FSOD上的。先利用Faster-RCNN网络训练source classes,将训练好的参数(除了classification部分)直接搬去训练新样本,classification部分的参数随机初始化。通过惩罚项,使得新训练的微调阶段的target网络接近source网络。
    TFA改Faster-RCNN的地方更少,只将classification的全连接层用cosine相似度代替,因为作者认为这样特征表示可以减少类内方差。首先,在换了classification head的Faster-RCNN上训练base训练集;微调阶段,已经训练好的classification的权重被随机数叠加?,然后保持backbone和RPN不动,对模型最后一层进行support训练集微调。
    MPSR也是一个微调的方法,他们将FPN和传统的特征金字塔结合,base上训练好后,微调的时候直接丢弃已经训练的classification层,然后不冻结任何部分,一起微调。
    RetentiveRCNN将TFA扩展到generalized FSOD(novel识别效果好的同时base识别效果也不能差)。他们还观察到base和novel之间的范数差异很大,也就解释了为什么用cosine相似度分类层比全连接层效果好?。在用base训练集训练好一个完整的Faster-RCNN之后,冻结RPN、detection分支,并行加入一个新的RPN、detection分支用来在support上微调。他们还用一个连续loss,类似于连续学习的继承知识,使得在base上做的预测和support上的决定相似。
    DETReg在可变形DETR基础上进行微调,获得了coco数据集上目前最好的效果。
    (2)基于conditioning的方法
    我们称需要检测的图像为query image。标注好的support images用来做参考。
    Prototype-based 方法:base训练阶段,RepMet通过学习每一个目标类别的表征方式/Prototype,然后分类proposal标准就是和这些表征的距离。few shot微调阶段,计算出novel class的表征,然后用新的表征分类novel class,最大化识别novel的检测误差来微调novel的prototype?。
    ACM-MetaRCNN将Faster RCNN和原型网络结合,用无参数调节的原型网络替代classification层。
    (3)基于modulation的方法
    基于modulation的方法通常利用一个独立的conditioning分支(也叫reweighting网络)从support向量中计算support weight(也叫class embedding、prototype、attentive-vector)。每个类别有自己的support weight。用support weight×query feature得到class-specific query feature,这个过程就叫modulation或者aggregation。最后在class-specific query feature同时检测目标前景和背景。
    meta-YOLO第一个同时使用微调和conditioning,它提取query image的特征,然后使用reweighting模块从support images(4个通道,第四个通道是一个二元mask矩阵)得到reweighting vector,用reweighting vector调节query feature使得预测层的输出的bbox是和reweighting vector表示有关的class。base训练阶段,这两个模块和预测层在base集上训练;微调阶段,模型在每个类别(包括base和novel)K张support图片上进行微调。
    meta-RCNN、attention-FSOD、FGN基于faster RCNN。
    meta-DETR:见另一篇文章~

5. 自监督预训练

(1)自监督图像分类方法:

  • 对比学习
    NCE loss?InfoNCE loss?
    https://zhuanlan.zhihu.com/p/334772391
  • 聚类学习
    基于无监督聚类算法生成伪标签来训练模型。
    SwAV通过同一张图片的一个视角预测另一个视角的聚类分布?它使用Sinkhorn-Knopp算法进行聚类,这个算法之前用作few shot分类中恢复标签?
  • 蒸馏学习
    最大化教师模型和学生模型的预测结果之间的相似度。
    DINO:attention的结果自然而然就是语义分割的标签。

(2)自监督图像分类方法对于初始化目标检测backone的限制

  • detection head都没有预训练
  • 任务差异性

(3)自监督目标检测方法:
自监督目标检测方法试图通过在大量无监督前置任务上预训练整个目标检测框架,解决上述的问题。

  • predictive方法
    例如UP-DETR、DETReg,通过重新预测自动生成的真值crop的位置来预训练detection head,这些crop是通过免训练启发式算法生成的相似颜色、纹理、其他特征的区域。
  • contrastive方法
    通过最小化InfoNCE loss使得正例的特征之间进,负例之间远。可以分成crop级别(InsLoc)的和密集(DenseCL)的方法。
  • self-distillative方法
    不需要负例。 SoCo算法,学生网络利用梯度下降复制教师网络的特征。同一张图的两个view分别喂进学生网络和教师网络得到两个特征图,最小化两个box feature的cosine相似度。

6. 关键&趋势

  • 微调是非常强大的baseline,但对于实际要求过高,希望能有不用微调的好算法出现
  • 自监督目标检测预训练算法的改进有限,对小样本、低数据集效果更好
  • 自监督学习的一个趋势是利用启发式生成弱标签。希望更多传统启发式算法应用于提升自监督训练。重要的是如何将这些启发式算法集成到迭代中,可以随着更好的表征学习到之后,用改进的的启发式算法替代初始的,或者可以发明一个传统启发式算法的可微分的(可学的)版本
  • transformer的兴起,attention机制使得无监督生成语义分割的标签。一些自监督的方法比如EsViT?依赖于Swin?来获得最好的结果,而且可以解决冗余detection问题,替代了启发式方法如NMS的依赖。更近的算法如Pix2Seq表明目标检测可以被看做是语言模型任务,多模态模型
  • 评估准则需要完善:
    (1)很多算法用到的模块相似,很难说好的结果是调参出来的还是想法好,所以一个方向是用老的方法跑新的框架看结果,还有建立一个统一的benchmark
    (2)data split的问题:Kang or TFA

7. 相关任务

  • 弱监督目标检测
  • 用其他标准自监督
  • Low data 目标检测
  • Few shot语义分割
  • Zero shot目标检测

你可能感兴趣的:(计算机视觉)