传统Transformer的做法
-
patch划分: 将图像划分为多个patch,每个patch包含多个像素点
-
序列构建: 将patch作为序列中的token进行处理
-
粒度选择: patch越小(如
4×44×44×4
),序列长度越长;patch越大(如
8×88×88×8
),序列长度越短
序列长度与效率问题
- 效率问题: 序列越长,计算注意力时每个token需要与其他所有token进行计算,效率显著降低
- 计算复杂度: 传统Transformer需要对长序列进行多次计算(如8次、12次),进一步加剧效率问题
Swin Transformer的解决方案
-
核心思想: 采用窗口和分层的形式替代长序列方法
-
分层处理:
- 第一层: 使用细粒度划分(如400个token),提取详细特征
- 第二层: 进行合并(如两两合并为200个token)
- 第三层: 继续合并(如再合并为100个token)
-
类比CNN: 这种分层结构与CNN中的感受野层级结构类似,随着层数增加,感受野逐渐增大
-
效率优势: 通过分层处理,计算量逐层减少,解决了传统Transformer的效率问题
-
关键创新: 引入分层结构,使Transformer能够像CNN一样具有层级特征提取能力
-
与传统Transformer区别:
- 传统方法每层处理相同长度的序列
- Swin Transformer通过分层合并逐步减少token数量
-
效果类比: 在特征提取效果和方式上都与CNN更加接近,解决了传统Transformer缺乏层级结构的问题