谷歌的transformationVisionTransformer的新作被收录在NeurIPS2021,在这篇文章中,Google提出了TokenLearner的方法,VisionTransformer可以利用它来减少计算量up到8倍,分类性能更强!目前,Transformer模型在计算机视觉任务中取得了state-of-the-art的结果,包括目标检测和视频分类等任务。与逐像素处理图像的标准卷积方法不同,VisionTransformer(ViT)将图像视为一系列补丁令牌(即,由多个像素组成的图像的较小部分)。这意味着在神经网络的每一层中,ViT模型使用多头自注意力来根据每对标记之间的关系来处理补丁标记。通过这种方式,ViT模型能够构建整个图像的全局表示。在输入端,图像被平均分成多个部分形成token,例如,一个512×512像素的图像被分成16×16像素的patchtoken。在中间层,上一层的输出成为下一层的token。这里插一句。如果您正在处理视频,则视频“管道”(例如16x16x2视频剪辑(2帧16x16图像)成为标记。视觉令牌的质量和数量决定了VisionTransformer的整体性能。许多VisionTransformer架构面临的主要挑战是它们通常需要太多令牌才能获得合理的结果。例如,即使使用16x16的补丁标记化,单个512x512图像也对应1024个标记。对于具有多帧的视频,每一层可能需要处理数以万计的标记。考虑到Transformer的计算量随着token的数量呈二次方增长,这通常会使Transformer难以处理更大的图像和更长的视频。这就引出了一个问题:真的有必要在每一层处理那么多令牌吗?Google在《TokenLearner:WhatCan8LearnedTokensDoforImagesandVideos?》中提到了“自适应”的概念。本文将在NeurIPS2021上发表。论文地址:https://arxiv.org/pdf/2106.11297.pdf项目地址:https://github.com/google-research/scenic/tree/main/scenic/projects/token_learner实验证明TokenLearner可以自适应生成较少数量的令牌而不是总是依赖于由均匀分布的图像形成的令牌允许VisionTransformer运行得更快并且表现更好。TokenLearner是一个可学习的模块,它获取图像张量(即输入)并生成一小组标记。该模块可以放置在VisionTransformer模型中的不同位置,从而显着减少所有后续层中要处理的令牌数量。实验表明,使用TokenLearner可以在不降低分类性能的情况下节省一半或更多的内存和计算,并且由于其自适应输入的能力甚至可以提高准确性。什么是TokenLearner?TokenLearner其实是一种简单的空间注意力方法。为了让每个TokenLearner学习有用的信息,首先计算空间注意力图(使用卷积层或MLP)以突出显示重要区域。然后,使用这样的空间注意力图对输入的每个区域进行加权(目的是丢弃不需要的区域),并将结果进行空间池化后,就可以生成最终的学习标记。应用于单个图像的TokenLearner模块的可视化图示。TokenLearner学习对张量像素的子集执行空间处理,并生成一组适应输入的标记向量。并行重复此操作多次,可以从原始输入生成n(约10)个标记。换句话说,TokenLearner也可以看作是根据权重值进行像素选择,然后进行全局平均。值得一提的是,计算注意力图的函数由不同的可学习参数控制,并以端到端的方式进行训练。这也允许在捕获不同输入中的空间信息时优化注意力功能。在实践中,该模型将学习多个空间注意力函数,将它们应用于输入,并并行产生不同的标记向量。TokenLearner模块学习为每个输出标记生成空间注??意力图,并使用它来抽象输入标记。因此,TokenLearner使模型能够处理与特定识别任务相关的少量标记,而不是处理固定的、统一的标记化输入。.也就是说,TokenLearner开启了自适应token,可以根据输入动态选择token,有效减少了token的总数,大大减少了Transformer网络的计算量。这些动态自适应生成的令牌也可以用于标准的Transformer架构,例如图像领域的ViT和视频领域的ViViT(VideoVisionTransformer)。TokenLearner放在哪里?构建TokenLearner模块后,下一步是决定放置它的位置。首先,研究人员尝试将其放置在标准ViT架构中的不同位置,使用224x224的输入图像大小。TokenLearner生成的token数量为8个和16个,远少于标准ViT使用的196个或576个token。下图显示了在ViTB/16中不同相对位置插入TokenLearner的模型的ImageNet5-shot分类精度和FLOPs,其中ViTB/16是具有12个注意力层的基础模型。它的运行时使用大小为16x16的补丁令牌。在JFT300M的预训练下,ImageNet的5-shot精度与TokenLearner在ViTB/16中的相对位置有关。位置0表示TokenLearner位于任何Transformer层之前。其中,baseline是标准的ViTB/16ImageNet5-shot分类精度和FLOPs。计算以数十亿次浮点运算(GFLOPS)衡量。我们发现在网络的初始四分之一(1/4)中插入TokenLearner可以实现与基线几乎相同的精度,同时将计算量减少到基线的三分之一以下。此外,将TokenLearner放在后面的层(在网络的3/4之后)比不使用TokenLearner获得更好的性能,同时由于其适应性更快。由于TokenLearner前后的token个数相差很大(比如前196个和后8个),TokenLearner模块后的相对计算量几乎可以忽略不计。TokenLearnerVSViT将ViT模型与TokenLearner和普通ViT模型进行比较,同时在ImageNet的few-shot上采用相同的设置。TokenLearner会被放置在每个ViT模型中间的不同位置,比如网络的1/2和3/4。其中,模型采用JFT300M预训练。从图中可以看出,TokenLearner模型在准确率和计算量上都优于ViT。不同版本的ViT模型在ImageNet分类上的表现将TokenLearner插入到更大的ViT模型中,例如L/10和L/8,具有24个注意力层和10x10(或8x8)的patches作为初始token。随后,将这两种模型与48层ViTG/14模型进行了比较。可以看出,TokenLearner在性能与G/14模型相当的情况下,只需要很少的参数和计算量。左图:大规模TokenLearner模型与ViTG/14分类精度在ImageNet数据集上的对比;右图:参数与FLOPS的对比高性能视频模型视频理解是计算机视觉的关键挑战之一,TokenLearner用于多个视频分类在数据集基准测试上实现了最先进的性能。其中在Kinetics-400和Kinetics-600上的表现超过了之??前的Transformer模型,在Charades和AViD上也超过了之前的CNN模型。通过与视频视觉转换器(VideoVisionTransformer,ViViT)相结合,TokenLearner将在每个时间段学习8(或16)个token。左:视频分类任务;右图:不同模型的比较。随着时间的推移,当一个人在场景中移动时,TokenLearner会注意到不同的空间位置变化来标记化。TokenLearner的空间注意力图的可视化结论虽然VisionTransformer是计算机视觉领域的强大模型,但是大量的token和巨大的计算量一直是ViT应用于更大图像和更长视频的瓶颈。在这篇论文中,作者表明没有必要保留如此大量的标记并在整个层集上完全处理它们。此外,作者还证明,通过学习一个基于输入图像自适应提取标记的模块,可以在节省计算量的同时获得更好的性能。最后,在多个公开数据集上的验证也表明,TokenLearner在视频表示学习任务中表现非常出色。
