这篇论文是北深信工 袁粒老师2021年的工作, 收录在ICCV, 看到的时候已经有421份引用了, 非常厉害.
论文摘要部分:
论文核心工作主要分为两个部分:
1. Tokens 2 token模块(T2T) 用于将被vit硬性割裂的tokens之间的信息进行汇集
2. 参考CNN的架构学, 经验发现深并且窄的架构效果好代价小(MACs)
论文细节
其中T2T主要分为图片还原和软划分, 图片还原没什么细节就是将token从一维拉到二维, 软划分则类似卷积窗口滑动, 不过stride会偏大一些, 保证相邻patch有重叠但是不会太多, 划分完后再拉成一维token. 所以从输入输出看是从多个tokens到少量tokens的一个映射(tokens 2 token).
整个模型设计主要分两个部分: 一个是包含两层T2T模块的 T2T module, 另一个是正常transformer构成的T2T-ViT backbone
注意到T2T-ViT backbone 输入的地方添加了fixed tokens 和 position embedding. 这里是沿用ViT的设计.
实验部分:
主实验部分主要有三组: 一组直接在ImageNet上不做预训练地与ViT进行对比; 一组和参数相仅ResNet对比; 一组和轻量级MobileNet对比. 实验设计上比较全面地证明了模型的适应性和性能. 后面考察不同CNN架构到ViT的效果的部分更侧重说明选择的deep-narrow架构的合理性, 但是感觉这部分工作量很大, 所以作者将其也放在主要实验内(作为主要贡献).
消融实验部分则分两组:
一组是比较T2T module和CNN, 因为图片还原和软划分思路上类似卷积的滑动窗口, 两者都具备共享领域信息的能力. 只不过卷积层的新embedding是用固定kernel做局部乘积求和(卷积)操作, 而T2T是用transformer层做全局汇总(attention)操作, 最后T2T要比卷积好1个点左右, 作者归因于transformer能考虑全局信息. 但是换个角度这也说明CNN+transformer比纯transformer性能要好. 并且看到这里我不禁设想如果全局都采用T2T module 会不会效果比用T2T module 和 ViT backbone 混合会更好呢? 或者如果CNN和transformer做更深层次的混合呢?
另一组则是上面提到的研究T2T-ViT backbone 采用不同CNN架构时的效果好坏. 最终结论是deep-narrow架构又能减少参数效果又好, 对比的shallow-wide架构会让性能下降2.7%.