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

手撕Vision Transformer -- Day1 -- 基础原理

手撕Vision Transformer – Day1 – 基础原理

目录

  • 手撕Vision Transformer -- Day1 -- 基础原理
  • Vision Transformer (ViT) 模型原理
    • 1. Vit 网络结构图
    • 2. 背景
    • 3. 模型架构
      • 3.1 图像切块(Patch Embedding)
      • 3.2 添加位置编码(Positional Encoding)
      • 3.3 Transformer编码器(Transformer Encoder)
      • 3.4 分类头(Classification Head)
    • 4. ViT的优势
    • 5. ViT的缺点
    • 6. 总结
    • 参考

Vision Transformer (ViT) 模型原理

1. Vit 网络结构图

在这里插入图片描述

Vit 网络结构

2. 背景

ViT(Vision Transformer)是2020年由Google提出的一种新型图像分类模型,成功地将Transformer架构应用于计算机视觉任务,挑战了传统的卷积神经网络(CNN)。ViT的核心思想是将图像分割成小块(patch),并将这些patch视为一维的序列输入Transformer模型。

3. 模型架构

ViT模型主要包括以下几个步骤:

3.1 图像切块(Patch Embedding)

  • 图像分块:将输入图像分成固定大小的patches。假设输入图像大小为 ( H × W × C H \times W \times C H×W×C )(H为高度,W为宽度,C为通道数),将图像划分为 ( P × P P \times P P×P ) 大小的patches。
  • Flatten:每个patch的像素值被展平成一维向量,形状为 ( ( P × P × C P \times P \times C P×P×C) )。
  • 线性映射:这些一维向量通过一个线性层映射到一个固定的维度 ( D ),即生成一个 ( D ) 维的嵌入向量。

3.2 添加位置编码(Positional Encoding)

  • 由于Transformer模型没有像CNN那样的局部感知机制,因此必须为每个patch添加位置信息。
  • 位置编码:为每个patch的嵌入向量添加一个固定的、学习到的位置编码,使得模型能够区分不同位置的patch(我们采取的可学习的参数)。

3.3 Transformer编码器(Transformer Encoder)

  • ViT使用标准的Transformer编码器结构,包含多个自注意力层和前馈神经网络层。
    • 自注意力机制(Self-Attention):每个patch嵌入向量通过自注意力机制与其他patch的嵌入向量进行交互,以捕捉全局信息。
    • 前馈神经网络:自注意力层的输出经过前馈神经网络(Feed-Forward Network,FFN)进行非线性变换。
    • 层归一化和残差连接:每个Transformer层使用层归一化(Layer Normalization)和残差连接(Residual Connection)。

3.4 分类头(Classification Head)

  • 在经过多个Transformer编码器层后,取出[CLS] token(分类标记)对应的输出作为图像的表示。
  • 最后,经过一个全连接层(FC layer)进行分类。

4. ViT的优势

  • 全局感知:ViT能够通过自注意力机制捕捉图像中全局的依赖关系,而不是像CNN那样依赖局部感知。
  • Transformer的优势:Transformer架构在自然语言处理(NLP)中表现优异,ViT将其应用到计算机视觉任务中,能够显著提高性能。

5. ViT的缺点

  • 数据依赖性:ViT的性能依赖于大规模的训练数据集,通常需要预训练的模型和大量的计算资源。
  • 计算成本:Transformer模型的自注意力计算复杂度为 ( O(N^2) ),其中 ( N ) 是patch的数量,这使得ViT在处理大尺寸图像时的计算开销较大。

6. 总结

ViT通过将图像切分成小块并将其输入到Transformer中,成功地克服了传统CNN的局限,带来了较为显著的性能提升。尽管ViT在数据和计算资源上有较高要求,但它为视觉任务的研究提供了一个新的思路,展示了Transformer在图像处理上的巨大潜力。

参考

视频讲解:【Sora重要技术】复现ViT(Vision Transformer)模型_哔哩哔哩_bilibili


http://www.kler.cn/a/528498.html

相关文章:

  • 【数据结构】_以单链表为例分析各种方法实现的特殊情况考虑思路
  • Linux中 端口被占用如何解决
  • gentoo 中更改$PS1
  • 【Java异步编程】CompletableFuture基础(1):创建不同线程的子任务、子任务链式调用与异常处理
  • 简要介绍C++中的 max 和 min 函数以及返回值
  • 如何从客观角度批判性阅读分析博客
  • 【react-redux】react-redux中的 useDispatch和useSelector的使用与原理解析
  • 2 Flink 部署及启动
  • 基于Python的简单企业维修管理系统的设计与实现
  • TypeScript 运算符
  • 【毕业与课程大作业参考】基于 yolov8+pyqt5 界面自适应的表情识别检测系统 demo
  • Java中对消息序列化和反序列化并且加入到Spring消息容器中
  • 语音识别播报人工智能分类垃圾桶(论文+源码)
  • 使用HttpClient和HttpRequest发送HTTP请求
  • 软件工程中的需求工程
  • 电脑优化大师-解决电脑卡顿问题
  • FFmpeg(7.1版本)编译:Ubuntu18.04交叉编译到ARM
  • Scratch 《像素战场》系列综合游戏:像素战场游戏Ⅰ~Ⅲ 介绍
  • 深入理解linux中的文件(上)
  • C++——缺省参数、函数重载、引用、inline
  • 海外问卷调查之渠道查,对企业经营的重要价值有哪些表现
  • 3.5.5 基于横盘结构的分析体系——缠论(走势类型)
  • abc 390 D(暴搜 复杂度用 bell数 证明 n 的集合的划分方法的数目)
  • [EAI-027] RDT-1B,目前最大的用于机器人双臂操作的机器人基础模型
  • 牛客网 除2!(详解)c++
  • JavaScript 入门教程