且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

别再用平均池化层了!Meta AI把注意力塞到池化层,性能立刻提升0.3(二)

更新时间:2022-08-22 13:54:24

研究人员对模型块的选择也提出了一些建议,例如在batch size够大的情况下,BatchNorm往往效果比LayerNorm更好。但训练大模型或者高分辨率的图像输入时,由于batch size更小,所以BatchNorm在这种情况下就不太实用了。

 

下一个模块就是基于注意力的池化层了。

 

在主干模型的输出端,预处理后的向量通过类似Transformer的交叉注意力层(cross attention layer)的方式进行融合。

别再用平均池化层了!Meta AI把注意力塞到池化层,性能立刻提升0.3(二)注意力层中的每个权重值取决于预测patch与可训练向量(CLS)之间的相似度,结果和经典ViT中的class token类似。

 

然后将产生的d维向量添加到CLS向量中,并经过一个前馈网络处理。

 

与之前提出的class-attention decoder不同之处在于,研究人员仅仅只用一个block和一个head,大幅度简化了计算量,也能够避免多个block和head之间互相影响,从而导致注意力权重失真。

 

因此,class token和预处理patch之间的通信只发生在一个softmax中,直接反映了池化操作者如何对每个patch进行加权。

 

也可以通过将CLS向量替换为k×d矩阵来对每个类别的attention map进行归一化处理,这样就可以看出每个块和每个类别之间的关联程度。

 

但这种设计也会增加内存的峰值使用量,并且会使网络的优化更加复杂。通常只在微调优化的阶段以一个小的学习率和小batch size来规避这类问题。

 

实验结果


在图像分类任务上,研究人员首先将模型与ImageNet1k和ImageNet-v2上的其他模型从参数量,FLOPS,峰值内存用量和256张图像batch size下的模型推理吞吐量上进行对比。

 

别再用平均池化层了!Meta AI把注意力塞到池化层,性能立刻提升0.3(二)实验结果肯定是好的,可以看到PatchConvNet的简单柱状结构(column architecture)相比其他模型更加简便和易于扩展。对于高分辨率图像来说,不同模型可能会针对FLOPs和准确率进行不同的平衡,更大的模型肯定会取得更高的准确率,相应的吞吐量就会低一些。

 

在语义分割任务上,研究人员通过ADE20k数据集上的语义分割实验来评估模型,数据集中包括2万张训练图像和5千张验证图像,标签超过150个类别。由于PatchConvNet模型不是金字塔式的,所以模型只是用模型的最后一层输出和UpperNet的多层次网络输出,能够简化模型参数。研究结果显示,虽然PatchConvNet的结构更简单,但与最先进的Swin架构性能仍处于同一水平,并且在FLOPs-MIoU权衡方面优于XCiT。

别再用平均池化层了!Meta AI把注意力塞到池化层,性能立刻提升0.3(二)在检测和实例分割上,研究人员在COCO数据集上对模型进行评估,实验结果显示PatchConvNet相比其他sota架构来说,能够在FLOPs和AP之间进行很好的权衡。别再用平均池化层了!Meta AI把注意力塞到池化层,性能立刻提升0.3(二)在消融实验中,为了验证架构问题,研究人员使用不同的架构对比了Transformer中的class attention和卷积神经网络的平均池化操作,还对比了卷积主干和线性投影之间的性能差别等等。实验结果可以看到卷积主干是模型取得***性能的关键,class-attention几乎没有带来额外的性能提升。

别再用平均池化层了!Meta AI把注意力塞到池化层,性能立刻提升0.3(二)另一个重要的消融实验时attention-based pooling和ConvNets之间的对比,研究人员惊奇地发现可学习的聚合函数甚至可以提高一个ResNet魔改后模型的性能。

 

通过把attention添加到ResNet50中,直接在Imagenet1k上获得了80.1%的最高准确率,比使用平均池化层的baseline模型提高了+0.3%的性能,并且attention-based只稍微增加了模型的FLOPs数量,从4.1B提升到4.6B。