Vision-TTT: Efficient and Expressive Visual Representation Learning with Test-Time Training¶
会议: ECCV 2026
论文: ECCV 2026
代码: https://github.com/imKQv/Vision-TTT
领域: 自监督/表示学习
关键词: 测试时训练; 线性复杂度视觉主干; 视觉序列建模; 隐状态梯度更新; 高分辨率效率
一句话总结¶
本文把 NLP 里的测试时训练(Test-Time Training, TTT)搬进视觉,把一张图的 token 序列当成一个数据集、用自监督重建的梯度下降在线更新每个 head 的隐状态,并用「双数据集策略 + Conv2d 数据集预处理」把只会单向建模的 TTT 改造成有 2D 感受野的视觉主干,ImageNet 上 Vittt-T/S/B 达 77.7/81.8/82.7 Top-1,1280×1280 分辨率下比 DeiT-T 省 79.4% FLOPs、快 4.72×、省 88.9% 显存。
研究背景与动机¶
视觉表示学习长期在「表达力」和「效率」之间做取舍。CNN 能高效地堆出空间层级,但卷积核是静态的,学完就固定,性能很难随规模继续往上走;Vision Transformer 用小方块自注意力做视觉序列建模,在大规模实验上证明了更好的可扩展性,如今已是学术和工业的默认骨干。代价是自注意力的复杂度随 token 数平方增长——224×224 输入只有 196 个 token 时还能接受,一旦进入高分辨率(1280×1280 就是 6400 个 token)推理,算力和显存会同时爆炸。于是社区转向 RNN 式的线性复杂度序列模型:Vision Mamba 系用选择性扫描的状态空间模型(SSM)配合二维扫描路径,Vision-RWKV 引入时间衰减,ViG 用门控线性注意力。它们都把复杂度压回了线性,但隐状态的更新规则是预设的——SSM 靠一个结构化(通常是对角稀疏)的衰减矩阵做乘性遗忘,线性注意力靠固定的核函数把历史累加成矩阵乘积。也就是说,这些模型的"记忆"在训练前就被公式定死了,无法针对当前这张图的内容自适应。
TTT 提供了另一条路:它把一条 token 序列 X=[x₁,…,x_T] 直接当成一个数据集,维护一个隐状态 W,每读入一个 token 就用一个自监督任务算梯度、对 W 做一步梯度下降,再把 W 作用到当前 token 上产生输出。这样隐状态不是被预设规则改写的,而是被梯度改写——学到什么、忘掉什么,由当前数据自己决定;作者也正是用这个梯度幅值画出梯度幅值图(Gradient Magnitude Map),把它当作类似注意力图那样的一种"视觉解释工具"。但 vanilla TTT 是为语言设计的:它是单向的因果序列模型,隐含了时间上的先后依赖,直接搬到图像上会丢掉二维空间局部性——相邻 patch 的关系被硬拉成一条一维链,全局建模能力反而退化。
本文的核心 idea 是把 TTT 从"一维语言序列模型"改造成"二维视觉学习器":保留"隐状态由自监督梯度在线更新"这一能提供强表达力的机制,同时通过双数据集策略恢复双向性、用深度可分离卷积对数据集本身做 2D 增广,并借助多头 + 小批量梯度下降把顺序计算变成 GPU 友好的小矩阵乘法,最终在同一个骨干里同时拿到线性复杂度与全局感受野。
方法详解¶
整体框架¶
Vision-TTT 是一个非层级(plain)的视觉主干,整体走三段:① Patchification——图像切成 16×16 的 patch,线性投影成 token 序列并加位置编码;② Vision-TTT Encoder——L 个混合 block 串联,每个 block 是一个 Vittt block(残差)接一个 SwiGLU MLP(残差),都采用 pre-LN;③ Task Adapters——分类时对最后一层输出做 LayerNorm + 均值池化 + 线性分类头,下游检测/分割时冻结主干、只训练特征适配器与任务头。真正新颖的全在 Vittt block 内部:它不再像自注意力那样用"query 与所有 key 做相似度加权"来聚合信息,而是把这一层的 token 序列看成一个小数据集,用一个自监督重建任务在上面做若干步小批量梯度下降,把序列语义压进一个 per-head 的小矩阵隐状态 W,再用更新后的 W 去"查询"当前 token 得到输出。换句话说,TTT 层是一个权重随输入在线改变的线性层,训练和推理时都在改(这正是 "test-time training" 的字面含义)。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["输入图像"] --> B["Patchification<br/>切块 + 位置编码"]
B --> C["把 token 序列当数据集<br/>自监督重建驱动梯度更新"]
C --> D["双数据集策略<br/>前向 / 后向两路并行"]
D --> E["Conv2d 数据集预处理<br/>深度可分离卷积注入 2D 局部性"]
E --> F["多头隐状态 + 小批量梯度下降<br/>小矩阵乘法对齐 Tensor Core"]
F --> G["SwiGLU MLP + 任务适配头"]
G --> H["分类 / 检测 / 分割"]
关键设计¶
1. 把 token 序列当成数据集:让隐状态被自监督重建的梯度在线更新
这是全文的地基。给定视觉序列 X=[x₁,…,x_T],先像注意力那样线性投影出 key / query / value 三份视图:X^K=θ_K X、X^Q=θ_Q X、X^V=θ_V X。接着设一个刻意保持简单的自监督任务——用 key 视图重建 value 视图,损失就是 L2 重建误差:
于是 (X^K, X^V) 的 token 对被当作"训练集",X^V 是标签视图、X^K 是输入视图,而 X^Q 是"测试集":输出 token 由更新后的隐状态查询 query 视图得到,\(z_t=\mathrm{W}_t x_t^{Q}\)。这里被训练的东西不是整个网络,而是每个 head 一个 d×d 的隐状态矩阵 W——它扮演一个联想记忆的角色:把序列里已经见过的 (key, value) 关系在线写进去,再用更新过的记忆去读取当前 token。和 SSM / 线性注意力最本质的区别藏在这个重建任务里:SSM 的隐状态演化是 h_t=Ā_{t:s}B̄s x_s 这样的乘性衰减,线性注意力的因果形式是 s_t=Σφ(K_s)V_sᵀ 的外积累加,而 TTT 的更新里显式出现了减法式差异项 (V_s − WK_s 相当于一串相对位置锚点,天然保留局部性,因此 TTT 不只是"换了个梯度视角",而是一个位置感知的视觉学习器。}K_s)——模型只把"当前 token 与全局记忆之间还差多少"写进状态。作者在文中的解释是:这一串 W_{s−1
把重建损失对 W_{t−1} 求导就得到该时刻的梯度 \(G_t = 2(\mathrm{W}_{t-1}x_t^{K}-x_t^{V})(x_t^{K})^{\mathsf T}\),它的大小直接反映这个 token 里有多少"新信息"没被记忆解释掉。作者把 G_t 按 patch 位置可视化出来(原文 Fig. 3、Fig. 9),发现语义显著的区域梯度更大、训练后分布更清晰,于是宣称 Gradient Magnitude Map 是 Vision-TTT 自带的、patch 级别的可解释性工具——和 ViT 的注意力图、Vision Mamba 的激活图对标。
2. 双数据集策略:用前向 / 后向两路数据集补上 2D 双向性
上面的更新是严格因果的:第 t 个 token 只能看到它前面的 token。对文本这是合理的归纳偏置,对图像则意味着信息流被强行压成一条链,右侧和下方的 patch 无法影响左上的 patch。作者的做法很直接——既然 TTT 的"数据集"是由 token 对构成的,那就再构造一份反方向的数据集 (X'^K, X'^V)={(x'^K_t, x'^V_t)}, t=T,…,1,让同一个自监督任务在正向(Z_forth)和反向(Z_back)两条路上同时跑,各自维护自己的隐状态,最后把反向路的输出翻转回来、与正向路门控融合:
这里的门控沿用 vanilla TTT block 的写法(用输入自己算一个 sigmoid 门去调制输出),因此换成双向后仍然是逐通道的软选择,而不是简单的相加。这一步是从双向 RNN 借鉴来的思路,但放在 TTT 语境下它有额外的好处:负向路相当于把二维图像的两条扫描方向都覆盖了,消融里它带来 +1.9% 分类精度、+1.1% APb、+1.0% APm、+1.5% mIoU,是设计路线上单点增益最大的一环——代价是 FPS 掉 38.2%,所以要靠下面的小批量设计把效率找回来。
3. Conv2d 数据集预处理:把 2D 局部性注入数据集本身
光有两个方向还不够。原始 TTT block 在把 token 送进自监督任务之前只做了一次 Conv1d 预处理(X_Conv1d),这等于承认输入是一条一维序列,patch 之间没有邻域概念,相邻但不在扫描顺序上挨着的像素(比如上一行末尾和下一行开头)根本碰不到。本文把这一步换成深度可分离卷积(depth-wise Conv2d):X_Conv2d = DWConv(X),先把 patch 序列按二维网格重排、做一次局部卷积再展开,于是送进数据集的不再是"孤立的 token",而是"带邻域上下文的 token"。选择深度可分离卷积而不是普通卷积是为了控制参数:整个改动只引入 0.02M / 0.04M / 0.08M 参数(对应 T/S/B),而性能在各项指标上再涨 0.1%~0.2%。单看数字不大,但 ERF(有效感受野)图说明了它的结构性作用:vanilla TTT 的中心像素感受野是条带状 / 扇形的,"+ Dual" 版本变成了覆盖整图但有方向偏差的样子,只有再加上 Conv2d 预处理,中心像素的 ERF 才变成全局且径向对称的圆斑,和 DeiT、Vim 的全局覆盖形态对齐。也就是说,前两个设计决定"能看多远",这一步决定"看得是否各向同性"。
4. 多头隐状态 + 小批量梯度下降:把小矩阵乘法压到 Tensor Core 上
vanilla TTT 有一个工程上的硬伤:每个 token 一步梯度下降,第 t 步必须等第 t−1 步算完,纯串行,GPU 的并行度根本用不上。作者做了两处改造。其一是多头化:把原本 D×D 的隐状态拆成 nh 个 d×d(D=nh×d),每个 head 独立维护自己的记忆,既减少单块矩阵的规模也让并行度上来。其二是把梯度下降的粒度从 1 改成 16:不再逐 token 更新,而是把序列切成大小 b=16 的小批量,批内仍然保持因果形式(批内第 t 步是 W₀ 减去前 t 个梯度之和,\(\mathrm{W}_t=\mathrm{W}_0-\eta\sum_{s=1}^{t}G_s\)),批间则一次性并行。b=16 不是随便挑的:16×16 正好是 Tensor Core 做小矩阵乘法的原生粒度,作者用 Triton 手写了前向 / 反向 kernel,并沿用 Mamba 那套 kernel fusion + 重计算,把显存占用从理论上的多项和压到 O(BTD)。这一步直接决定了"efficient"能不能兑现——把理论上的线性复杂度变成实测的线性吞吐。原文给出的复杂度对比是 Ω(ViT)=4TD²+2T²D、Ω(Vim)=6TD²+18T(2D)N、Ω(Vittt)=6TD²+6TDd+4bTD(b=16、d=64、N=16 为 Mamba 的状态扩张因子):ViT 对序列长度是平方项,Vim 和 Vittt 都是线性项。代价是 Vittt 的常数系数里多了与 embedding 维度 D 相关的一项,这解释了为什么 Vittt-S/B 的理论 FLOPs 会略高于 Vim-S/B;但实测速度上 Vittt 全面领先,原因是 Vim 的选择性扫描跑在 CUDA Core 上,而 Vittt 的小矩阵乘法直接吃 Tensor Core。
一个完整示例¶
以 Vittt-T 处理一张 224×224 图像为例。切成 16×16 的 patch 得到 196 个 token,经过嵌入与位置编码后进入第一个 Vittt block。这个 block 内部,196 个 token 先被深度可分离卷积做一次 2D 增广,然后投影成 K/Q/V 三份;数据集被复制成两份——正向的 (X^K,X^V) 和反向的 (X'^K,X'^V),两条路各自带着自己的初值 W₀ 开始更新。由于 b=16,每条路要走 ⌈196/16⌉=13 步小批量梯度下降,整张图在这一层一共发生约 26 次记忆写入。每个 head 的记忆只有 64×64 大小,读完这 196 个 token 后,隐状态里装的就是这张图"压缩后的语义"。最后两路输出翻转、门控融合,过 SwiGLU MLP,交给下一个 block。对比之下,同期基线 ViT3 在整条序列上只做一步梯度下降(在数学上等价于门控线性注意力),而 Vittt 做的是 T/b 步——这正是它在检测、分割这类需要长序列适应性的任务上拉开差距的来源。
损失函数 / 训练策略¶
模型内部的自监督损失是前面那个 L2 重建项,它不需要额外标注,在训练和推理时都持续作用。外层的监督训练沿用 DeiT 与 Swin 的训练配方(原文附录 D 给出完整超参):ImageNet-1K 预训练时接均值池化 + 线性分类头,用交叉熵监督。下游适配遵循前作的做法——COCO2017 检测 / 实例分割上,用 ViT-Adapter + Mask R-CNN 头,输入分辨率放大到 1333×800;ADE20K 语义分割上用 UperNet 头,图像裁到 512×512;两者都冻结编码器骨干,只训练特征提取器与任务头。此外,隐状态的初值 W₀ 有两种处理方式(训练前一次性初始化,或设为可学习参数参与监督训练),这个选择在消融里被单独考察,见下文。
实验关键数据¶
主实验¶
ImageNet-1K 分类(224² 输入,与线性复杂度 / TTT 类基线对比):
| 方法 | #Param. | FLOPs | Top-1 (%) |
|---|---|---|---|
| DeiT-T | 6M | 1.3G | 72.2 |
| VRWKV-T | 6M | 1.2G | 75.1 |
| Vim-T | 7M | 1.5G | 76.1 |
| ViT3-T | 6M | 1.2G | 76.5 |
| Vittt-T | 7M | 1.4G | 77.7 |
| DeiT-S | 22M | 4.6G | 79.8 |
| Vim-S | 26M | 5.2G | 80.3 |
| ViT3-S | 24M | 4.8G | 81.6 |
| Vittt-S | 26M | 5.3G | 81.8 |
| DeiT-B | 86M | 17.6G | 81.8 |
| VRWKV-B | 94M | 18.2G | 82.0 |
| Vim-B | 98M | 18.8G | 81.9 |
| ViT3-B | 90M | 18.0G | 82.6 |
| Vittt-B | 102M | 20.3G | 82.7 |
同规模下 Vittt-T/S 比 Vim-T/S 高 +1.6% / +1.5%,Vittt-B 比 DeiT-B、VRWKV-B、Vim-B 高 +0.7%~+0.9%,并且三个尺寸都压过同为 TTT 路线的 ViT3。注意 ViT3 的参数与 FLOPs 普遍更低,Vittt-B 的 20.3G 也是这一档里最高的,因此这是"同规模但不同开销"的对比,不是等 FLOPs 对比。(与 RegNet / ConvNeXt / Swin / VMamba 等层级式方法的完整对比见原文 Tab. 2。)
下游密集预测(COCO2017 检测报告 APb / APm,FLOPs 按 1333×800;ADE20K 分割报告 mIoU,FLOPs 按 512×512):
| 方法 | #Param. | 检测 FLOPs | APb | APm | 分割 FLOPs | mIoU |
|---|---|---|---|---|---|---|
| ViT-T | 8M | 147.1G | 41.6 | 37.9 | 20.9G | 42.6 |
| Vim-T | 9M | 76.7G | 41.8 | 38.2 | 18.4G | 43.4 |
| ViT3-T | 8M | 69.2G | 42.0 | 38.3 | 16.7G | 43.6 |
| Vittt-T | 9M | 74.3G | 42.9 | 38.7 | 17.8G | 44.3 |
| Vim-S | 32M | 203.6G | 44.9 | 40.2 | 49.7G | 47.0 |
| ViT3-S | 30M | 195.6G | 45.4 | 40.7 | 47.7G | 47.6 |
| Vittt-S | 32M | 206.3G | 46.3 | 41.4 | 50.3G | 48.4 |
| Vim-B | 111M | 611.5G | 46.6 | 41.6 | 149.2G | 48.9 |
| VRWKV-B | 107M | 599.0G | 46.8 | 41.7 | 146.0G | 49.2 |
| ViT3-B | 103M | 597.1G | 47.4 | 42.1 | 145.7G | 49.4 |
| Vittt-B | 115M | 646.7G | 48.6 | 43.0 | 157.7G | 50.3 |
Vittt-T 比 Vim-T 高 +1.1 APb / +0.5 APm / +0.9 mIoU,Vittt-S 对 Vim-S 的优势扩大到 +1.4 / +1.2 / +1.4,Vittt-B 对 VRWKV-B 仍有 +2.0 / +1.3 / +1.1。值得注意的是 ViT3 在分类上已经追平 Vittt,到了密集预测却明显掉队,作者把原因归到它的梯度下降步数太少——任务序列从 512×512(1024 token)拉长到 1333×800(4200 token)时 Vittt 的优势不减,说明多步自适应在长序列上更值钱。
效率(1280×1280 分辨率,batch 64,L40S):Vittt-T/S/B 相对 DeiT-T/S/B 分别省 79.4% / 66.3% / 48.9% FLOPs,吞吐高 4.72× / 4.23× / 3.88×,显存省约 89.0%。FLOPs 随分辨率线性增长的曲线与理论复杂度分析吻合;而对 Vim 来说,Vittt-T 的 FLOPs 更低、Vittt-S/B 略高(常数系数更大),但三者实测 FPS 全部反超。
消融实验¶
设计路线(Vittt-T,逐项叠加;FPS 为 batch 64 下实测):
| 配置 | #Param. | FLOPs | FPS | Top-1 | APb | APm | mIoU |
|---|---|---|---|---|---|---|---|
| TTT layer | 5.87M | 1.14G | 3607 | 74.2 | 40.4 | 36.8 | 41.5 |
| + 共享 Q/K | 5.43M | 1.07G | 3892 | 74.0 | 40.1 | 36.5 | 41.2 |
| + Gating | 5.89M | 1.15G | 3565 | 75.2 | 41.2 | 37.1 | 42.0 |
| + Conv1d(vanilla TTT) | 5.90M | 1.16G | 3346 | 75.6 | 41.6 | 37.6 | 42.6 |
| + 双数据集策略 | 6.96M | 1.42G | 2068 | 77.5 | 42.7 | 38.6 | 44.1 |
| + Conv2d 数据集预处理(完整) | 6.98M | 1.44G | 2029 | 77.7 | 42.9 | 38.7 | 44.3 |
分类特征提取方式(Vittt-T):
| 策略 | #Param. | FLOPs | Top-1 | APb | APm | mIoU |
|---|---|---|---|---|---|---|
| HeadClassTok | 6.98M | 1.44G | 76.6 | 41.6 | 37.8 | 43.0 |
| MidClassTok | 6.98M | 1.44G | 76.8 | 41.7 | 37.9 | 43.0 |
| DoubleClassTok | 6.98M | 1.45G | 75.4 | 41.2 | 37.2 | 42.5 |
| MaxPool | 6.98M | 1.44G | 77.2 | 42.2 | 38.4 | 43.8 |
| MeanPool | 6.98M | 1.44G | 77.7 | 42.9 | 38.7 | 44.3 |
超参:小批量 b 从 4(49 步梯度下降)增到 196(只做一次批梯度下降)时,Top-1 先急降后微升,最差点出现在中间的 b=64(既没有足够的更新步数、也拿不到足够全局的梯度视角);b=16 所在的 4~16 区间是精度与效率的甜点区。隐状态初值方面,完全不可学习的 Vittt-W0⁰ 最差,给前向 / 后向两路共享一份可学习初值的 Vittt-W1⁰ 较好,给两路各配一份的 Vittt-W2⁰ 最好,说明让两路数据集各有一套初值能减少相互干扰。
关键发现¶
- 单项增益最大的是双数据集策略(+1.9% Top-1、+1.5 mIoU),代价也最大(FPS 从 3346 掉到 2068,-38.2%);Conv2d 预处理的增益只有 +0.1~0.2,但它负责把 ERF 从有方向偏差变得全局径向对称,是"形态"而非"点数"上的贡献。
- 共享 Q/K 投影基本不掉点(74.2 → 74.0)却省下 0.44M 参数,是个几乎免费的设计;Gating 与 Conv1d 一起把 vanilla TTT 的精度抬了 1.6%,同时牺牲 14.1% 吞吐。
- 分类头用池化显著优于 class token 方案,均值池化最好——作者认为这与 TTT 的"梯度驱动的表示"更契合(表示是整条序列的压缩记忆,而不是某一个位置的特征)。
- 密集预测上多步梯度下降的价值被放大:分类上 ViT3 与 Vittt 平手,检测 / 分割上 Vittt 明显领先,且序列越长优势越稳。
亮点与洞察¶
- 把"隐状态由梯度而非固定规则更新"当成视觉归纳偏置来卖,是这篇最"啊哈"的地方:SSM 的记忆衰减矩阵、线性注意力的核函数都是训练前定死的,而 TTT 每读一个 token 就问一句"我预测错了多少",把残差写进记忆。这个思路在视觉里近乎空白,本文是第一篇把它做成通用视觉主干的。
- 用 b=16 这样一个超参同时解决三件事——增加梯度步数、保持 GPU 并行度、对齐 Tensor Core 的 16×16 粒度——是很工程化但很关键的设计;它把"线性复杂度"从理论推导变成实测吞吐,也是相对 vanilla TTT 的实打实改进。
- 梯度幅值图(GMM)作为可解释性工具可以迁移:任何以自监督损失梯度更新状态的模型(TTT 系、记忆网络、部分元学习模型)都能画出类似的 token 重要性图,用来做弱监督定位或数据筛选。
- 双数据集策略是一个通用的"把单向序列模型双向化"的套路:只要有构造第二份数据集的能力,就能给一维因果模型补上双向性,且不必改动内部更新规则。迁移到视频 / 点云 / 长文档时可以直接复用。
局限与展望¶
- 主干仍是监督式 ImageNet 预训练,没有回答"在大规模自监督预训练(MAE / DINOv2 那一档)下是否还成立"。而 ViT 的统治力很大程度上来自这个范式,这是本文规模论证上最大的缺口。
- 模型只做到 T/S/B 三档,没有更大规模的点,也没有与 ViT-L/H 的对照;表里的 "ViT-L/16 76.5" 是低分辨率下的旧配方,不足以说明可扩展性。
- 效率与精度的取舍被设计路线强绑定:双数据集带来的 38.2% FPS 损失是用精度换的,论文没有给出更精细的折中方案(比如只在一部分层用后向路)。
- 对 b=64 这个"最差区间"的解释(既缺步数又缺全局视角)偏定性,没有理论刻画,也没有解释为什么 b 增大到 196 后精度又回升——这块的实验证据比结论弱。
- 下游只做了 COCO 检测与 ADE20K 分割,且都是冻结主干 + 轻量适配器,没有验证在需要端到端微调的任务(如视频、3D)上的表现;GMM 与 ERF 也都停留在可视化,缺量化指标和下游任务验证。
相关工作与启发¶
- vs ViT / DeiT:它们用 softmax 自注意力在全序列上做相似度加权,复杂度 O(T²),高分辨率下算力和显存同时爆炸;本文用"梯度更新隐状态"替代注意力,复杂度线性,1280×1280 下对 DeiT-T 省 79.4% FLOPs、省约 89% 显存。代价是 224² 小分辨率下 DeiT 的吞吐略高,Vittt 的优势要等到分辨率上去才显现。
- vs Vim / VMamba(SSM 系):同为线性复杂度的 RNN 式模型,但 SSM 靠结构化衰减矩阵做乘性遗忘、隐状态演化规则预设;TTT 用减法式差异项 (V_t − W_{t−1}K_t) 把"预测残差"写成相对位置锚点,且隐状态容量是完整的 d×d 矩阵而非对角结构。工程上 Vittt 吃 Tensor Core 而 Vim 的选择性扫描跑 CUDA Core,所以 FLOPs 相近时 Vittt 更快。
- vs ViT3:最直接的对手,同样把 TTT 引入视觉,但只做一步梯度下降,数学上等价于门控线性注意力。本文观察到"序列感知的多步(T/b 步)更新"才是表达力的来源——分类上两者接近,一旦进入长序列的密集预测,多步自适应的优势就显现出来,Vittt-B 领先 ViT3-B +1.2 APb 与 +0.9 mIoU。
- vs vanilla TTT [Sun et al., 2024]:本文保留了它的核心形式(自监督 L2 重建 + 输出规则 z_t=W_t x_t^Q),但指出它的一维因果设计不适配二维视觉;双数据集 + Conv2d 预处理正是为了把数据集本身"二维化",ERF 从条带 / 扇形变成全局径向是最直观的证据。
评分¶
- 新颖性: ⭐⭐⭐⭐☆ 把 TTT 首次做成通用视觉主干,并用双数据集 + Conv2d 预处理补上 2D 归纳偏置,方向清晰;但"把序列模型搬进视觉"本身是常见范式迁移,核心更新式仍沿用 NLP 的 TTT。
- 实验充分度: ⭐⭐⭐⭐☆ ImageNet + COCO + ADE20K + 多分辨率效率分析 + 四组消融覆盖完整,FPS/FLOPs/显存都给了实测;缺大规模自监督预训练与更大模型两档。
- 写作质量: ⭐⭐⭐⭐☆ 设计路线(Tab. 4 + ERF 图)讲得很清楚,"从 TTT layer 到 Vittt block"逐步加法的叙事有说服力;复杂度与内核细节推到附录,正文部分关键实现说明略简。
- 价值: ⭐⭐⭐⭐☆ 为"线性复杂度视觉主干"提供了一条新的技术路线,工程实现(Triton 内核 + Tensor Core 对齐)可直接复用;若能在自监督大规模预训练下验证,价值会更高。