本文主要是介绍【TNT】Transformer in Transformer,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这是今年中科院计算机科学实验室、华为和澳门大学联合写的一篇文章,题目非常硬核,TNT,像是多么爆炸性的产出。话不多说,直接开始学习吧。
论文:https://arxiv.org/pdf/2103.00112.pdf
代码:https://github.com/huawei-noah/CV-Backbones
目录
1.背景
2.网络
2.1网络结构
2.2网络计算
2.3位置编码
3.实验
3.1TNT on ImageNet
3.2图像分类任务
3.3目标检测任务
3.4语义分割任务
1.背景
Transformer是基于自注意机制的一种神经网络,他能表示不同特征图之间的关系。Transformer 作为一种新型的神经网络架构,通过注意力机制将输入编码为强大的特征表征,通常,Transformer是将输入图像分成几个分块,然后计算每个分块之间的关系,自然影像由于具有丰富的细节和颜色信息,所以复杂性较高,但是分块的颗粒不够精细,无法挖掘不同尺度和位置的物体特征,因此,本文提出一种新的高性能Transformer结构-TNT(Transformer In Transformer )。
2.网络
2.1网络结构
为了增强特征表征能力,TNT首先将输入图像分成几个patch切片,类似于“视觉句子”,然后将每个“视觉句子”的patch切片再切分成几个切片,类似于“视觉单词”,TNT网络除了要提取传统transformer网络的“视觉句子”之间的注意力特征,还要挖掘“视觉单词”之间的参数。特别注意的是,计算“视觉单词”之间的注意力特征时采用共享网络参数机制,因此计算“视觉单词”之间的注意力特征的参数和FLOPS的增加量可以忽略不计。然后,这个“视觉单词”的特征会被合成到对应的“视觉句子”中,class token也会通过连接不同的head被用于各种视觉识别任务中,通过TNT模型,可以提取更细粒度的视觉信息,提供更多的特征细节。
2.2网络计算
假设输入影像为image,
1.第一步就是将image切片,切成n个P*P*3大小的切片,即:
其中为其中一个视觉句子,将其再切片,得到
,即视觉单词:
其中为第i个句子里的第j个单词.
2.第二步就是通过线性投影,将视觉单词转成单词序列,即:
3.通过正常的transformer操作计算每个视觉句子中视觉单词之间的特征,那么视觉单词之间的关系用下式来计算:
L代表第L个block,是堆叠block的总数。第一个block中的就是第二步中的
4.图像中所有的单词序列经过transformer之后被表示成:
它表示了所有视觉单词中任意两个单词之间的关系。
5.在视觉句子等级上,跟ViT一样,我们首先将视觉句子表示成句子序列:
其中为class token,这些均被初始化为0
6.将之前计算的视觉单词的transformer结果叠加到视觉句子上,得到:
7.重复之前的transformer步骤,对视觉句子计算句子之间的关系,即:
在此基础上,TNT的输入和输出可以被表示成:
2.3位置编码
空间信息对图像识别来说是非常重要的因素,因此对 sentence embeddings 和word embeddings都添加了位置编码。上面的网络图中可以看到。
3.实验
3.1TNT on ImageNet
可视化特征图的结果如下图所示:
3.2图像分类任务
3.3目标检测任务
3.4语义分割任务
整理不易,欢迎一键三连!!!
这篇关于【TNT】Transformer in Transformer的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!