论文阅读笔记 | Transformer系列——Transformer in Transformer

简介: 论文阅读笔记 | Transformer系列——Transformer in Transformer

paper:Transformer in Transformer

code:https://github.com/huawei-noah/CV-Backbones/tree/master/tnt_pytorch

image.png


摘要:


Vit模型中,会将图像划分为几个patch,然后计算这些patch之间的表示以及关系。而自然图像的复杂性高,细节和颜色信息丰富,patch划分的粒度不够细,无法挖掘不同尺度和位置的物体特征。然而,这些被忽视的局部patch中的注意力对于构建高性能的Vit结构至关重要。


为此,作者提出了一个新结构——Transformer in Transformer(TNT),其将原本Vit结构中送入Encoder的patch(16x16)称为“visual sentences”,然后将其进一步划分为更小的patch(4x4),称为“visual words”。


这些一个sentences中的每一个words的注意力将于sentences中的其他words一起计算,计算成本可以忽略不计。随后会将sentences中的每个words,以及每一个sentences的特征集合起来,提高网络的表征能力。


Transformer in Transformer的性能:achieve an 81.5% top-1 accuracy on the

ImageNet(不过RepVGG也到达了80%以上)


1. Introduction


现有的大多数研究使用的视觉transformers都是遵循着Vit中使用的传统表现方案,也就是将一幅完整的图像切分成多个patch构成成一个序列信息。这样操作可以有些的捕获各个patch之间的序列视觉序列信息(visual sequential information)。然而现在的自然图像的多样性非常高,将给定的图像表示为一个个局部的patch可以找到patch之间的关系和相似性,但是一个patch的内部同样存在着一些相识度很高的sub-patch。为此,可以进一步的探索出一种更加精细的视觉图像分割方法来生成视觉序列并提高其性能。


基于这个更加精细化的想法,作者提出了Transformer in Transformer,结构如图1所示:

image.png

为了增强Vit结构的特征表示能力,首先将图像切分成若干个patch作为“visual sentences”(如上图所示将图像切分为9个patch作为“visual sentences”),然后再将这些patch切分为若干个sub-patch作为“visual words”(如上图中一个pacth再次被切分为了9个sub-patch)。对于传统的transformer块用于提取patch的特征与注意力,作者还在架构汇总嵌入了一个sub-transformer,用来提取sub-patch的特征细节。其中,每个patch中高端sub-patch之间的特征和注意点使用共享网络独立计算,从而可以忽略增加的参数和FLOPs(浮点运算)数量。然后,将“visual words”的特征聚合成相应的“visual sentences”,分类token也通过MLP头用于后续的视觉识别任务。


TNT模型可以提取出粒度较细的视觉信息,并提供更详细的特征。结果表明,在SOTA的transformer网络上,TNT可以实现更好的精度和FLOPs权衡。


2. TNT Approach


2.1 Preliminaries

transformer的三个基本的部分为:MSA (Multi-head Self-Attention)、MLP (Multi-Layer Perceptron) 、LN (Layer Normalization)


  • MSA

在self-attention模块中,输入会被线性转换为三个部分:Q,K,V,计算公式为:

image.png

最后,一个线性层被用来产生输出。Multi-head self-attention将查询、键和值拆分为各部分并并行执行注意功能,然后将每个头的输出值串联并线性投影形成最终输出。


  • MLP

MLP应用于自注意层之间进行特征变换和非线性

image.png


  • LN

层归一化是实现稳定训练和快速收敛的关键部分

image.png


2.2 Transformer in Transformer

image.pngimage.png


在 TNT block 中,inner transformer block 用于捕捉局部区域之间的特征关系,而 outer transformer block 则用于捕捉区域之间的联系。通过把TNT block叠上几次,就建立了Transformer in Transformer网络。


2.3 Position encoding

空间信息是图像识别中的一个重要因素。对于patch和sub-patch的嵌入,作者都添加了相应的位置编码来保留空间信息。这里使用的是标准的可学习的一维位置编码。具体来说,每个patch都有一个位置编码:

image.png

同样的,sub-patch也有位置编码:

image.png

3. Result


  • 考虑sub-patch与patch的效果:

image.png


  • 与其他backbone的对比:

image.png


总结:


在保留了Vit考虑区域之间特征信息时,还考虑了区域内部的特征信息,将特征的细粒化信息抽取了出来,进一步划分了细粒度


目录
相关文章
|
2月前
|
Linux iOS开发 MacOS
Anaconda下载安装保姆级教程(附安装包,非常详细)
Anaconda 是一套把 Python 解释器、常用科学计算库和包管理工具打包在一起的“全家桶”发行版,对个人用户免费,Windows、macOS、Linux 都能装,装一次就等于把 Python、conda、numpy、pandas、Jupyter 等 180 多个组件一次性配好,不用再到处找安装包 。
3533 7
|
8月前
|
机器学习/深度学习 存储 人工智能
数据结构与算法
算法与数据结构是计算世界的基石,从搜索引擎到人工智能,无处不在。它们不仅是编程核心,更蕴含高效思维与哲学智慧,塑造数字文明的未来。
|
10月前
|
存储 消息中间件 搜索推荐
京东零售基于Flink的推荐系统智能数据体系
摘要:本文整理自京东零售技术专家张颖老师,在 Flink Forward Asia 2024 生产实践(二)专场中的分享,介绍了基于Flink构建的推荐系统数据,以及Flink智能体系带来的智能服务功能。内容分为以下六个部分: 推荐系统架构 索引 样本 特征 可解释 指标 Tips:关注「公众号」回复 FFA 2024 查看会后资料~
617 1
京东零售基于Flink的推荐系统智能数据体系
|
机器学习/深度学习 人工智能 编解码
【AI系统】MobileNet 系列
本文详细介绍 MobileNet 系列模型,重点探讨其轻量化设计原则。从 MobileNetV1 开始,通过深度可分离卷积和宽度乘数减少参数量,实现低延迟、低功耗。后续版本 V2、V3、V4 逐步引入线性瓶颈、逆残差、Squeeze-and-Excitation 模块、新型激活函数 h-swish、NAS 搜索等技术,持续优化性能。特别是 MobileNetV4,通过通用倒瓶颈(UIB)和 Mobile MQA 技术,大幅提升模型效率,达到硬件无关的 Pareto 最优。文章结合最新深度学习技术,全面解析各版本的改进与设计思路。
5143 8
|
XML JSON 数据可视化
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
本文详细介绍了不同数据集格式之间的转换方法,包括YOLO、VOC、COCO、JSON、TXT和PNG等格式,以及如何可视化验证数据集。
4972 1
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
|
IDE 搜索推荐 Java
Pycharm的好用设置和插件
PyCharm 是一款强大的 Python IDE,支持多种实用设置和插件,如个性化字体设置、自动换行、汉化、代码优化插件 Sourcery、翻译工具、Material Theme UI、彩虹括号、彩虹缩进、代码概览 CodeGlance 和 GitToolBox 等,极大提升了开发效率和体验。
2950 10
|
机器学习/深度学习 编解码 自然语言处理
Swin-Unet: Unet-like Pure Transformer for Medical Image Segmentation论文解读
在过去的几年中,卷积神经网络(CNN)在医学图像分析方面取得了里程碑式的进展。特别是基于U型结构和跳跃连接的深度神经网络在各种医学图像任务中得到了广泛的应用。
1525 0
|
JavaScript 前端开发 数据可视化
Jupyter Notebook如何调试?JupyterLab作为DeBug调试工具及调试教程
文章提供了JupyterLab debugger工具的安装和使用教程,包括如何在没有conda环境或已有conda环境下安装所需的软件包,如jupyterlab、Node.js、ptvsd和jupyterlab的debugger插件,以及如何使用debugger进行程序调试。同时,文章还列出了一些常见的安装问题及其解决办法。
4641 1
|
算法
算法题每日一练---第24天:海盗分金币
5 个海盗,相约进行一次帆船比赛。比赛中天气发生突变,他们被冲散了。
559 0
算法题每日一练---第24天:海盗分金币

热门文章

最新文章