paper:Conditional Positional Encodings for Vision Transformers
official implementation:GitHub - Meituan-AutoML/CPVT
第一个问题或许可以通过删除位置编码来解决,因为除了位置编码之外,vision Transformer 的所有其他组件(如MHSA和FFN)都可以直接应用于更长的序列。然而,这种解决方案对模型的性能造成了严重影响。因为输入序列的顺序是一个重要的线索,而过没有位置编码,模型就无法提取顺序。去除位置编码后,DeiT-tiny在ImageNet上的精度从72.2%降低到了68.2%,如表1所示。
其次,DeiT通过对位置编码进行插值使其可以用于较长的输入序列,但这种方法需要对模型进一步微调,否则性能就会显著下降,如表1所示。
最后,相对位置编码可以同时应对上述两种问题,但是相对位置编码无法提供绝对位置信息,这对分类性能非常重要,如表1所示,相对位置编码的模型性能较差(70.5% vs. 72.2%)。

作者认为,一个成功的视觉任务的位置编码应该满足以下的要求:
作者发现,用位置编码描述局部关系就足以满足上述所有条件。首先,它满足permutation-variant,因为输入序列的排列顺序也会影响局部邻域的顺序。但对输入图像中的对象进行平移并不会改变其局部邻域的顺序,即translation-equivariance。其次,模型可以很容易地泛化到较长的输入序列,因为只涉及到一个token的局部邻域。此外,如果任何一个输入token的绝对位置都已知,则可以通过输入token之间的相互关系来推断出其它token的绝对位置。作者表明,由于zero-padding,边界上的token也可以知道它们的绝对位置。

因此作者提出了位置编码生成器(PEG)来动态地生成基于输入token的局部邻域的位置编码。PEG如图2所示,我们首先将DeiT中展平后的输入序列

基于条件位置编码,作者提出了条件位置编码Vision Transformer(CPVT),除了位置编码,作者完全遵循ViT和DeiT来设计CPVT,并有三种不同尺寸的模型CPVT-Ti、CPVT-S和CPVT-B。和DeiT中原始的位置编码类似,条件位置编码也被添加到输入序列之中,如图1(b)所示。在CPVT中,PEG的位置对模型的性能也很重要,具体将在实验部分进行研究。
此外,DeiT和ViT都使用了一个额外的可学习的类别token来执行分类,即图1(a)和(b)中的cls_token。类别token本身的设计不是平移不变的,尽管它可以学习这种特性。一个简单的替代方法是直接使用全局平均池化(GAP),它本质上是平移不变的,从而得到了CPVT-GAP。结合CPE和CPVT-GAP得到了更好的分类性能。
不同大小的CPVT的结构如下表所示

和其它SOTA模型在ImageNet上的性能对比,如表4所示,可以看到在相似的参数量和计算量区间范围内,CPVT的性能要优于DeiT。
本文提出的PEG忽略padding时是平移等变的,因此如果我们进一步使用具有平移不变性的GAP而不是cls_token,CVPT也具有了平移不变性。这对分类任务是有帮助的。实验结果如表3所示,使用GAP可以将CPVT的精度提升超过1%。

有人可能会怀疑PEG带来的改进是由于PEG中的卷积层带来的额外的可学习参数,而不是它的位置表示能力。作者将PEG中3x3卷积的权重随机初始化后在训练阶段固定住,即不更新权重,仍然取得了71.3%的精度,由于不用位置编码的DeiT的68.2%,表明是通过zero padding引入的位置信息提升了性能而不是额外的参数。此外作者又用12层的1x1卷积替换PEG,此时可学习的参数更多了但没有引入位置信息,精度只有68.6%。

作者又比较了将PEG放到不同位置时模型的性能,其中-1表示第一个encoder block的输入位置,0表示第一个encoder block的输出位置,作者认为两者性能差异这么大的原因在于感受野不同,经过第一个block后具有了全局感受野,如果在-1位置处增大感受野性能也会得到提升。为此作者将-1位置处的3x3卷积改成27x27的卷积,结果确实得到了提升,从而验证了作者的观点。
