AI 看图只懂"16×16 的方块"够不够?—— 2021 年的这篇论文说"不够",在 patch 里再开一层 Transformer

  • 关联论文:2103.00112

你有没有这种感觉?

你让 AI 看一张猫的照片。AI 告诉你"这是一只猫"。 但你想问:"AI 是怎么看到猫的胡须、爪垫、耳朵绒毛的?" 大部分 ViT 模型答不上来——它们把图片压成了 16×16 的方块阵列,每个方块就是一个 token,细节被压扁了

这就是 Han 等人(华为诺亚方舟实验室 + 北大 + 中山大学)2021 年 NeurIPS 这篇 TNT 想解决的问题:

在 ViT 的每个 patch 里再开一层 Transformer——把 16×16 的 patch 当成"视觉句子",再切成 4×4 的"视觉词",让 word 级别也跑一遍注意力。

结果:ImageNet top-1 比同代 DeiT-S 高 1.7 个百分点(81.5% vs 79.8%),参数量几乎不变(24M vs 22M),显存只多 0.6 GB——这是 2021 年视觉 Transformer 架构创新中最具代表性的工作之一,paper card 报告 S2 引用 2,273 次。


关键洞察:patch 粒度太粗,patch 内部结构被压扁了

2020 年 ViT 把图像切成固定大小(典型 16×16)的 patch,每个 patch 拉平成 token 再走 Transformer。这套抽象有两个隐忧:

  1. patch 粒度太粗:一块 16×16 的区域可能同时包含背景、纹理和物体局部,单一 token 表达力不够。
  2. patch 之间只能靠全局 Self-Attention 沟通,patch 内部结构被压平成一个向量,丢失了局部几何与纹理细节

作者把这些 16×16 patch 视作「visual sentence」,把每个 patch 再切成更小的「visual word」,让 word 级别也跑一遍注意力,从而保留局部结构信息

核心思路对比:

模型 patch 粒度 注意力范围 局部结构保留
ViT 16×16 全局 ❌(patch 内被压平)
DeiT 16×16 全局 ❌(同 ViT,靠数据+蒸馏)
Swin 7×7 窗口 局部 + 层次化 ✅(窗口 attention)
TNT 16×16 → 4×4 嵌套 patch 内 + 全局 ✅(双层 attention)

一句话讲明白:什么是 Transformer in Transformer(TNT)?

# 单个 TNT Block 的伪代码
for each stage_block:
    # 1) patch 内 word 注意力
    words_in = rearrange(words, (B, n_s, n_w, D) → (B*n_s, n_w, D))
    words_out = InnerTransformer(words_in)          # n_w 个 word 互相注意
    words = WordPosEmb(words_out)                  # 加 word 位置编码

    # 2) word 聚合到 sentence
    sentences = sentences + PixelAggregate(words)  # 把 word 特征加回 sentence

    # 3) sentence 级别全局注意力
    sentences = SentenceTransformer(sentences)      # patch 之间互注意
    sentences = SentencePosEmb(sentences)          # 加 sentence 位置编码

两个 Transformer 同时跑

  • 外层(Sentence Transformer):以 patch(visual sentence)为 token,做标准的全局 Self-Attention——负责"图的整体布局"。
  • 内层(Inner Transformer):以 patch 内的 sub-patch(visual word)为 token,做 patch 内局部 Self-Attention——负责"patch 的细节纹理"。

两个位置编码独立:Sentence Pos-Emb 标 patch 序列;Word Pos-Emb 标 patch 内 sub-patch 序列。

复杂度可控:内层只处理每个 patch 内部的 word(4×4 = 16 个),不会爆炸。


为什么这件事对(不搞 AI 的)你也重要

你今天用的「手机拍照 AI 修图」「相册自动分类」「AI 医生看 CT 片」「自动驾驶视觉感知」「AI 内容审核」——背后视觉骨干网络大部分都受到了"在 patch 内再开一层注意力"这个思路的影响。

更重要的是,2021 年的 TNT 引发了一整代"双层 / 嵌套 Transformer"架构创新:

  1. 细粒度图像分类:需要区分"秋田犬 vs 柴犬"这种靠纹理细节区分的任务,patch 内 attention 天然友好
  2. 医学影像:CT / MRI 病灶通常很小,patch 内结构信息(边缘、纹理)至关重要
  3. 遥感图像:建筑物边缘、农田纹理是小目标识别核心,TNT 思想启发了大量后续工作
  4. AI 内容审核:需要识别图片局部细节(暴力 / 色情 / 侵权),双层 attention 比单层 ViT 更鲁棒

如果你是 AI 产品经理:视觉模型的"局部细节建模能力"是 2021 年之后的核心竞争点——Swin / ConvNeXt / TNT 都从不同角度回应这个问题。


真实类比:为什么"两层 Transformer"比"一层"好?

想象你要让 AI 看一张有 100 个人的会议照片,任务是"找出穿红衣服的人":

  • 方案 A(单层 ViT):AI 把照片切成 100 个 16×16 的方块,每个方块是一个 token——但如果"红衣服的人"只占 1 个方块的一半,token 平均后红色信号被稀释
  • 方案 B(TNT 双层):AI 先把每个 16×16 方块切成 16 个 4×4 的小方块(visual word),让"红色信号"在小方块级别先被识别出来;让方块之间互相注意——两层 attention 让"红色"这个细节信号从不被平均掉

LLM 处理"长文本"也是同样的逻辑——不是简单地把段落压成一个 token,而是让 token 内(短语)和 token 间(段落)都保留结构信息


⚠️ 工程硬约束:5 个必须看清的边界

  1. 2021 年水平的 81.5% 在 2026 年已无竞争力:ImageNet SOTA 已到 90%+。TNT 是"思路奠基"工作,不是"出活工具"——2026 年用 TNT 当 backbone 不划算,Swin / ConvNeXt / EVA 系列已超越。
  2. FLOPs 比 ViT 多 13%:5.2G vs 4.6G——单卡推理会比同代 ViT 慢一点,边缘部署要算账。
  3. 代码在 CV-Backbones 合集仓库(非专用 TNT repo):clone 后要在 pytorchcv/backbone/tnt.py 找核心实现——别按"transformer-in-transformer"搜 GitHub,会找不到。
  4. DeiT 对比基准需注明:原文与 DeiT-S(无蒸馏版)对比——DeiT-S/384(蒸馏版)效果更好,引用时务必区分。
  5. 没引入层次化结构:Swin 的杀手锏是"局部窗口 + 层次化下采样",TNT 仍是纯 attention 路线 + 均匀 16×16 patch——在高分辨率(>224)下显存增长快,因为 patch 数翻 4 倍 sub-patch 数翻 16 倍。

适合谁读 / 不适合谁读

适合: - 想理解"为什么 ViT 之后还需要架构创新"的视觉工程师 - 做细粒度分类 / 医学影像 / 遥感图像的小样本团队 - 想给 AI 产品经理讲清楚"双层 attention 为什么 work"的科普作者 - 想看 Transformer 嵌套结构如何扩展到 NLP / 多模态的研究者

不适合: - 只想用 SOTA backbone 出活的人(直接用 ConvNeXt / EVA / Swin V2) - 边缘部署 / 移动端推理(TNT-S 5.2G FLOPs 在 <5W TDP 设备吃力) - 高分辨率(512+)输入(patch 数爆炸) - 想要训练资源友好的人(TNT 比 DeiT 慢,比 Swin 还慢)


一句话给老板

"ViT 把图片切成 16×16 的方块,每个方块压成一个向量,局部纹理被压扁了。TNT 的解法是在 patch 里再开一层 Transformer——把 patch 当'视觉句子'、sub-patch 当'视觉词',让两层 attention 同时跑。ImageNet 比 DeiT-S 高 1.7%,参数量几乎不变,这套'双层嵌套 attention'思想是 2021 年后视觉架构创新的母版之一。被引 2,273 次,今天 Swin / ConvNeXt / EVA 的局部细节建模能力都受其启发。"


三个标题变体

  1. 《AI 看图只懂"16×16 的方块"够不够?—— 2021 年的这篇论文说"不够",在 patch 里再开一层 Transformer》
  2. 《为什么 ViT 看不到猫的胡须?—— TNT 用"Transformer in Transformer"把 patch 内结构留住了》
  3. 《被引 2,273 次的视觉架构论文:把图像切成"视觉句子"再切成"视觉词",ImageNet 高 1.7%》

📱 小红书风格卡片文案

📌 AI 看图为什么总漏掉细节?

你有没有这种感觉——

让 AI 看一张猫的照片。AI 告诉你"这是猫"。 你问"AI 是怎么看到胡须、爪垫、耳朵绒毛的?" ViT 答不上来——它把图片压成了 16×16 的方块阵列,细节被压扁了。

2021 年 Han 等人(华为诺亚 + 北大)做了一件事:

在 ViT 的每个 patch 里再开一层 Transformer——把 16×16 patch 当"视觉句子",切成 4×4 的"视觉词",让 word 级也跑注意力。

🔸 核心洞察: patch 粒度太粗 + patch 内结构被压平—— - 一块 16×16 区域可能同时含背景、纹理、物体局部 - 单一 token 表达力不够,纹理细节丢失

🔸 TNT 解法(双层 Transformer)

每个 TNT Block:
├── Inner Transformer(patch 内)
│   ├── 输入:16 个 4×4 sub-patch(visual word)
│   ├── 跑 word 级别 Self-Attention
│   └── 加 Word Pos-Emb
├── Pixel Aggregate
│   └── 把 word 特征聚合回 sentence
└── Sentence Transformer(patch 间)
    ├── 跑 patch 级别全局 Self-Attention
    └── 加 Sentence Pos-Emb

🔸 关键数据: | 模型 | 参数量 | FLOPs | Top-1 | |---|---|---|---| | ViT-S/16 | 22M | 4.6G | 79.9% | | DeiT-S | 22M | 4.6G | 79.8% | | TNT-S | 24M | 5.2G | 81.5% ⭐ | | Swin-S | 50M | 8.7G | 83.0% |

比 DeiT-S 高 1.7%,参数量几乎不变,显存只多 0.6 GB

🔸 为何重要: TNT 引发了一整代"双层 / 嵌套 Transformer"架构创新——

应用场景: - 手机拍照 AI 修图 - 相册自动分类 - AI 医生看 CT / MRI - 自动驾驶视觉感知 - AI 内容审核 - 细粒度图像分类(秋田犬 vs 柴犬) - 医学影像(病灶小,纹理关键) - 遥感图像(建筑物边缘)

🔸 架构对比: - ViT:单层全局 attention,patch 内被压平 ❌ - DeiT:单层全局 attention + 数据增强 + 蒸馏 - Swin:层次化局部窗口 attention ✅ - TNT:双层嵌套 attention(patch 内 + 全局)✅

⚠️ 2026 年警示: - ⚠️ 2021 年 81.5% 在 2026 已无竞争力(SOTA 90%+) - ⚠️ FLOPs 比 ViT 多 13%(5.2G vs 4.6G),边缘部署算账 - ⚠️ 代码在 CV-Backbones 合集仓库,clone 后找 pytorchcv/backbone/tnt.py - ⚠️ DeiT-S 对比是无蒸馏版,DeiT-S/384(蒸馏版)效果更好 - ⚠️ 高分辨率(512+)输入下 patch 数翻 4 倍、sub-patch 翻 16 倍

💡 何时该读 / 不该读: ✅ 想理解 ViT 之后为什么还需要架构创新 ✅ 做细粒度 / 医学 / 遥感的小样本团队 ✅ 想给 AI 产品经理讲"双层 attention 为什么 work" ❌ 想直接用 SOTA backbone 出活(用 ConvNeXt / EVA / Swin V2) ❌ 边缘部署 / 移动端推理 ❌ 高分辨率(512+)输入

📎 arXiv 2103.00112 · 被引 2,273 次(Semantic Scholar 2026) 📅 2021 年 NeurIPS,华为诺亚方舟实验室 + 北大 + 中山大学

💬 评论区聊聊:你用过哪些"AI 看图漏掉细节"的产品?最想要哪种"局部纹理也能看清"的视觉 AI 能力

AI #计算机视觉 #Transformer #ViT #TNT #深度学习 #视觉骨干 #图像分类 #注意力机制 #AI科普 #论文分享 #技术分享 #人工智能 #机器学习 #图像识别 #Swin #ConvNeXt