本文来源公众号“GiantPandaCV”,仅用于学术分享,侵权删,干货满满。
原文链接:OutLook Attention:具有局部信息感知能力的ViT
【写在前面】
近段时间,Transformer-based模型在Visual Recognition领域取得了非常大的进展。但是如果不借助额外的训练数据,Transformer-based模型离CNN-based模型还是具有一定的差距(NFNet-F5(CNN-based):86.8%,CaiT(Transformer-based):86.5%)。作者认为,这是因为token embedding并没有进行细粒度特征表示,因此本文提出了一种新的Attention方式,通过局部信息的感知,能够获得更加细粒度的特征表示。
分类任务中,SOTA模型准确率和Model size的对应图
1. 论文和代码地址
VOLO: Vision Outlooker for Visual Recognition
论文地址:https://arxiv.org/abs/2106.13112
官方代码:https://github.com/sail-sg/volo
一看就懂的核心代码: https://github.com/xmu-xiaoma666/External-Attention-pytorch/blob/master/attention/OutlookAttention.py
2. Motivation
前面说到了,token embedding进行特征表示是粗粒度的。为什么是token embedding就是粗粒度的呢?因为一张图片的size往往是比较大的(e.g., 224x224),CNN因为只对局部的信息进行感知(在正常图片上进行滑动窗口操作),所以计算复杂度和图片大小呈线性关系。如果将图片进行token embedding,直接进行Transformer的操作,那就会导致计算复杂度“爆炸”,因为Transformer中的Self-Attention(SA)的复杂度与输入特征的大小是呈平方关系的。
所以Vision Transformer需要将图片先进行token embedding到比较小的size(e.g., 14x14),才能保证计算量在一个合理的范围内。但这就导致了一个信息损失的问题,因为token embedding到较小的size会丢失一些细粒度的信息。
“Embedding的图片太大,会导致计算量过大;embedding的图片过小,会导致信息损失太大”,如何在保证合理计算量的情况下,获得更加细粒度的特征表示,这就是本文要解决的问题。
3. 方法
本文的模型可以分为两步:
第一步,通过一系列Outlooker获得