当前位置: 首页 > news >正文

Vision Transformer (ViT) 原理及解读

ViT论文中提到,因为Transformer模型在NLP领域得到了广泛的应用,并被证明效果非常好,那自然而然的想法是将其应用到图像领域里来。
然而直接将2维的图片按像素拉成1维,序列长度太长,所以ViT的解决思路是把一张图片分为多个patch,每个patch作为一个token。
Transformer的Encoder的隐藏维度是D,并且每个块都会保持维度D不变,输入的token的维度也得是D。
所以先用一个线性层将patch(可能是16*16*3的大小)映射到D维。
中间就是标准的Transformer的Encoder。
输出是借鉴了BERT的[cls]token,经过多个块之后,希望它已经聚合到了整个图片的特征,然后用一个MLP Head,得到分类。
对于位置编码,则是使用了标准的1D的可学习的position embedding,也和BERT一样。
998e9f75-5835-421e-b208-3949c19b8b55

ViT论文中指出,用class token做分类,主要是为了和NLP中的Transformer分类惯例保持一致。在这里就是当作了整个图像的特征表示。
因为按照CV的习惯,比如ResNet,一般会对输出的feature map做全局平均池化(GAP)来得到特征向量,那为什么不直接对Transformer的输出序列也直接GAP得到特征向量呢?
按作者说法,这两种方法都可以。用cls主要是为了和原始的Transformer保持一致。

至于1D或者2D的position embedding,作者指出几乎没有区别,可能的原因是patch之间的位置信息本来也比较好学习,如果换成像素级,或许2D的会更好。

ViT相较于传统的CNN,少了很多图像上特有的Inductive bias(归纳偏置),CNN里面有locality(局部性)和translation equivariance(平移等变性),
但ViT只有MLP会存在局部性及平移等变性,而自注意力层是全局的。

http://www.zskr.cn/news/56822.html

相关文章:

  • 2025.11.21
  • 高中数学核心素养记忆口诀,从简到难,方便您记忆和理解
  • 【第8章 数据分析基础】让AI帮你可视化一个数据集
  • Python pyinstaller convert py file as *.exe file
  • Trick——树
  • 谁又不是一边破碎一边前行
  • 题解:qoj14419 Maximum Segment Sum
  • 46
  • html导出pdf
  • 实用指南:暖手宝方案开发,暖手宝MCU控制方案开发设计
  • 博客发文公示
  • 2025年【口碑好的/比较好的/靠谱的】水密门【公司/工厂/厂家】推荐/排行榜 哪家好/强/靠谱
  • Pycharm远程连接服务器项目 - 实践
  • TPAMI 2025 | 从分离到融合:新一代3D场景技术建立双重能力提升!
  • java面向对象知识补充
  • 卷积神经网络的引入3 —— MLP 与 CNN 在更大数据集上的性能对比实验
  • Docker命令入门
  • P7960 [NOIP2021] 报数__洛谷题解
  • 图床创建:github+Picgo+obsidian 带有同步删除的自动上传
  • 2055.11.21
  • 深入解析:windows显示驱动开发-CCD api的摘要及方案(一)
  • Gephi怎样优化MySQL数据的展示效果
  • 揭秘Java对象的内存占用量:从面试题到底层原理
  • nju实验六 移位寄存器及桶形移位器
  • 基于 Erlang 的英文数字验证码识别系统设计与实现
  • leetcode14. 最长公共前缀
  • 洛谷 B4409:[GESP202509 一级] 商店折扣 ← 模拟算法
  • nju实验三 加法器与ALU
  • 信息论(八):吉布斯不等式的证明
  • 题解:AT_agc028_e [AGC028E] High Elements