文前吐槽一下:微信公证号的原创是个摆设吗?这篇文章昨天发出来之后,在几个“大佬”的公众号处看到了与这篇文章“神似”的翻译,甚至就连文中吐槽、结尾亮点都一样,翻译的措辞更是如出一辙。很难不让人想到:这篇文章被洗稿了。单就翻译而言,每个人都有自己的措辞风格,如果全篇措辞风格99%神似,呵呵...... 但不管怎么说,这篇文章还是非常值得研读一番,故再次推荐给各位。
极市导读
一直以来,Transformer的性能距离最佳的CNN仍存在差距,而今天由颜水成团队开源的新秀VOLO打破了这一宿命,成为了ImageNet数据上首个无需额外数据达到87.1%的模型。 >>加入极市CV技术交流群,走在计算机视觉的最前沿
近来,Transformer在CV领域遍地开花,取得了非常好的性能,指标屡创新高。但Transformer的性能距离最佳的CNN仍存在差距,不由产生出一种Transformer不过如此的感觉。可是,就在今天,Transformer领域的新秀VOLO打破了Transformer无法打败最优CNN的宿命,成为了ImageNet数据上首个无需额外数据达到87.1%的模型;与此同时,VOLO在下游语义分割任上也创新了新记录,比如Cityscapes数据上的84.3%,ADE20K数据上的54.3%。
标题&作者团队
paper: https://arxiv.org/abs/2106.13112
code: https://github.com/sail-sg/volo
视觉识别任务已被CNN主宰多年。基于自注意力的ViT在ImageNet分类方面表现出了极大的潜力,在没有额外数据前提下,但其性能距离最优秀的CNN仍具有差距。
本文旨在缩小上述性能差异并证实:基于注意力的模型确实可以做的比CNN更好。我们发现:限制ViT在ImageNet分类方面性能的主要原因在于其将细粒度特征编码为词表达过程的低效性。为解决该问题,本文提出了一种新颖的outlook
注意力并构建了一种广义架构Vision Outlooker
(VOLO)。不同于仅仅聚焦于粗粒度全局依赖建模的自注意力,所提Outlook注意力旨在更高效的将细粒度特征与上下文信息编码到词表达中,而这对于识别性能非常重要,但往往被自注意力所忽视。
实验结果表明:无需任务额外训练数据,所提出的VOLO成为ImageNet分类任务上首个达到87.1%top1精度的模型。此外,预训练VOLO在下游任务上的迁移能力同样非常好,比如,在语义分割任务上,所提方案在ADE20K验证集上达到了54.3%,在Cityscapes验证集上达到了84.3%的mIoU指标,均创下了新记录。
本文所提方法可以视作两阶段架构,第一个阶段包含多个用于生成细粒度词表达的Outlookers;第二个阶段采用Transformer序列集成全局信息。在每个阶段的开始,我们需要采用一个块嵌入模块将词表达映射到期望的形状。
Outlooker包含一个用于空间信息编码的outlook注意力层与一个用于通道间信息交互的多层感知器。给定C维词表达输入
,Outlooker可以表示为如下形式:
Outlook注意力非常简单、高效且易于实现(见上图),其背后隐含的主要洞察在于:
对于每个空间位置(i,j),Outlook注意力计算局部
窗口内全部相似性。不用于自注意力仅需Query-Key矩阵乘(即
),outlook通过简单的reshape操作简化了上述过程。
给定输入X,每个C维词首先采用两个线性层投影为Outlook权值
与
。假设
表示局部窗口内所有值,即
Outlook Attention
位置(i,j)处的Outlook权值可以直接用作注意力权值,并reshap为
后接Softmax函数。因此,值投影可以写成如下形式:
Dense Aggregation
Outlook注意力采用稠密方式聚合上述投影值表达,描述如下:
下图给出了Pytorch风格的伪代码实现,其中Eqn3,Eqn4, Eqn5对应上面三个公式。
多头Outlook注意力的实现非常简单,假设头数为N。我们仅需调节
的形状为
。因此,outlook权值与值嵌入被均匀的拆分为N份:
。对于每对
,Outlook注意力分别计算后并结果拼接构成多头Outlook注意力的输出。
本文所提Outlook注意力继承了卷积与自注意力各自的优点,包含如下:
我们在LV-ViT基础上构建了本文所提VOLO,在ImageNet上仅需150M参数即可取得86.2%的top1精度。原始的LV-ViT采用块嵌入模块将输入
投影为
的词,然后通过一系列Transformer模块在
词上进行处理。为利用细粒度词表达,在第一阶段,我们调整了块嵌入模块并
的图像块进行词化,而非
;后接Outlookers堆叠生成细粒度的更具表达能力的词表达。在第二阶段,我们采用另一个块嵌入模块进行词下采样,然后采用一系列Transformer编码全局信息。
基于上述网络架构,我们构建了五个版本的VOLO,见下表。
我们首先在ImageNet上进行了所提方法的性能对比,然后在下游任务上进行迁移能力对比。
上表给出了所提方法与其他CNN、Transformer等方法的性能对比,从中可以看到:
接下来,我们以前述预训练模型在语义分割任务上进行迁移能力验证。
上面两个表分别给出了Cityscapes与ADE20K数据上的性能对比,从中可以看到:
上表对比了模型缩放的性能影响,从中可以看到:
上表对比了,Outlooker数量与头数的影响对比,从中可以看到:
全文到此结束,更多消融实验与分析建议查看原文。
本文亮点总结
1. 本文发现,限制ViT在ImageNet分类方面性能的主要原因在于其将细粒度特征编码为词表达过程的低效性。
2. VOLO可以视作两阶段架构,第一个阶段包含多个用于生成细粒度词表达的Outlookers;第二个阶段采用transformer序列集成全局信息。
3. 无需任务额外训练数据,VOLO成为ImageNet分类任务上首个达到87.1%top1精度的模型。预训练VOLO在下游任务上的迁移能力也非常好,在语义分割任务中,在ADE20K验证集上达到了54.3%,在Cityscapes验证集上达到了84.3%的mIoU指标,均创下了新记录。