基于 EasyCV 复现 ViTDet:单层特征超越 FPN

欢迎使用我们最近开源的EasyCV,主要聚焦于最新的Vision Transformer模型,以及相关的下游CV任务

开源地址:
https://github.com/alibaba/EasyCV

ViTDet其实是恺明团队MAE和ViT-based Mask R-CNN两个工作的延续。MAE提出了ViT的无监督训练方法,而ViT-based Mask R-CNN给出了用ViT作为backbone的Mask R-CNN的训练技巧,并证明了MAE预训练对下游检测任务的重要性。而ViTDet进一步改进了一些设计,证明了ViT作为backone的检测模型可以匹敌基于FPN的backbone(如SwinT和MViT)检测模型。

ViT作为检测模型的backbone需要解决两个问题:

  1. 如何提升计算效率?
  2. 如何得到多尺度特征?

ViT-based Mask R-CNN给出了初步的解决方案,ViTDet在此基础上,对如何得到多尺度特征做了进一步的改进。

如何提升计算效率

ViT采用的global self-attention和图像输入大小(HW)的平方成正比,对于检测模型,其输入分辨率往往较大,此时用ViT作为backbone在计算量和内存消耗上都是非常惊人的,比如输入尺寸为1024x1024,采用ViT-B训练Mask R-CNN单batch就需要消耗约20-30GB显存。为了解决这个问题,ViT-based Mask R-CNN将ViT分成4个stage,每个stage的前几个block采用windowed self-attention,最后一个block采用global self-attention,比较table 3 (2)和(3)显著降低显存消耗和训练时间,而且效果只有轻微下降。

ViTDet进一步研究了如何做window的信息聚合,除了采用4个global self-attention以外,还可以采用4个residual block。如下表(a)所示,采用4个conv blocks效果是最好的,并且basic block效果最好(b)。另外表(c)和表(d)表明每个stage的最后一个block使用信息聚合,速度和精度的平衡是最好的。

Backbone

根据ViT-based Mask R-CNN论文table 4 (94)的结果,用预训练过的pos embed加上BEiT提出的relative position bias效果最好,其中将pos embed迁移到下游任务需要对pos embed的进行resize操作。

最开始实现了一版共享的relational position bias,精度上不去,感觉是打开方式不对,后来参照ViTAE的不共享relational paosition bias,能加快收敛速度,代码如下。

def calc_rel_pos_spatial(
    attn,
    q,
    q_shape,
    k_shape,
    rel_pos_h,
    rel_pos_w,
):
    """
    Spatial Relative Positional Embeddings.
    """
    sp_idx = 0
    q_h, q_w = q_shape
    k_h, k_w = k_s
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值