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

news/2025/2/3 1:51:59 标签: 算法, 人工智能, 深度学习, 面试, 学习

手撕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.niftyadmin.cn/n/5840416.html

相关文章

【LeetCode 刷题】回溯算法-组合问题

此博客为《代码随想录》二叉树章节的学习笔记,主要内容为回溯算法组合问题相关的题目解析。 文章目录 77. 组合216.组合总和III17.电话号码的字母组合39. 组合总和40. 组合总和 II 77. 组合 题目链接 class Solution:def combinationSum3(self, k: int, n: int) …

todo记事本案例

此案例较为简单&#xff0c;功能需求也比较单一&#xff0c;后续会使用node.jsmysql来进行更加复杂的需求开发的。 主要分为5部分 1、列表渲染 设置好一个数组&#xff0c;使用v-for数组遍历即可 <template> <!-- 主体区域 --> <section id"app&quo…

python-leetcode-二叉搜索树迭代器

173. 二叉搜索树迭代器 - 力扣&#xff08;LeetCode&#xff09; # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class BST…

图书管理系统 Axios 源码 __删除图书功能

目录 代码实现&#xff08;index.js&#xff09; 代码解析 使用方法 下面是完整的删除图书功能代码&#xff0c;基于 HTML Bootstrap JavaScript Axios 开发。 代码实现&#xff08;index.js&#xff09; // 删除图书功能 document.querySelector(.list).addEventListen…

Qt常用控件 输入类控件

文章目录 1.QLineEdit1.1 常用属性1.2 常用信号1.3 例子1&#xff0c;录入用户信息1.4 例子2&#xff0c;正则验证手机号1.5 例子3&#xff0c;验证输入的密码1.6 例子4&#xff0c;显示密码 2. QTextEdit2.1 常用属性2.2 常用信号2.3 例子1&#xff0c;获取输入框的内容2.4 例…

CSS 样式化表格:从基础到高级技巧

CSS 样式化表格&#xff1a;从基础到高级技巧 1. 典型的 HTML 表格结构2. 为表格添加样式2.1 间距和布局2.2 简单的排版2.3 图形和颜色2.4 斑马条纹2.5 样式化标题 3. 完整的示例代码4. 总结 在网页设计中&#xff0c;表格是展示数据的常见方式。然而&#xff0c;默认的表格样式…

Python学习——函数参数详解

Python中的函数参数传递机制允许多种灵活的参数类型&#xff0c;可以根据需求灵活配置参数&#xff0c;这使得函数具有更强大的扩展性和适应性。以下是对各类参数类型的详细说明&#xff1a; 1. 定义函数的不同参数类型 1.1 位置参数 定义方式&#xff1a;def func(a, b2) 特…

41【文件名的编码规则】

我们在学习的过程中&#xff0c;写出数据或读取数据时需要考虑编码类型 火山采用&#xff1a;UTF-16 易语言采用&#xff1a;GBK php采用&#xff1a;UTF-8 那么我们写出的文件名应该是何种编码的&#xff1f;比如火山程序向本地写出一个“测试.txt”&#xff0c;理论上这个“测…