前言:
零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学业升学和工作就业的先行者!
【优惠信息】 • 新专栏订阅前500名享9.9元优惠 • 订阅量破500后价格上涨至19.9元 • 订阅本专栏可免费加入粉丝福利群,享受:
- 所有问题解答
-专属福利领取欢迎大家订阅专栏:零基础学Python:Python从0到100最新最全教程!
VisionTransformer(ViT) 是一种基于Transformer架构的创新模型,近年来在计算机视觉领域掀起了不小的波澜。它通过引入多头自注意力机制(Multi Self-Attention),抛弃了传统卷积神经网络(CNN)的局部特征提取方式,转而以全局视角处理图像数据。
一、VisionTransformer的基础原理
1. 传统卷积的瓶颈与挑战
传统卷积神经网络(CNN)在图像处理中长期占据主导地位,但随着任务复杂度和数据规模的增加,它的局限性逐渐显现:
- 计算效率低下:卷积操作需要对每个通道进行全局交互,参数量和计算量随着通道数的增加呈爆炸式增长,特别是在深层网络中,这会导致训练和推理耗时严重,GPU显存占用高。
- 局部感知限制:CNN通过局部感受野提取特征,虽然高效,但难以直接捕捉图像中的长距离依赖关系或全局信息。
- 灵活性不足:CNN的结构设计通常针对特定任务优化,迁移到其他任务或数据类型时,往往需要大幅调整。
这些问题促使研究者寻找新的解决方案,而VisionTransformer正是这一背景下诞生的产物。
2. VisionTransformer的核心机制
VisionTransformer的核心在于将Transformer架构从自然语言处理领域迁移到计算机视觉。它通过多头自注意力机制(Multi Self-Attention)处理图像数据,具体流程可以概括为以下几个步骤:
- 图像分块(Patch分割):将输入图像分割成多个固定大小的小块(patches),类似于把一张大图剪成小拼图。
- 嵌入转换:将每个patch展平成一维向量,并通过线性变换映射到高维空间,形成特征嵌入(embedding)。
- 位置编码:为每个patch的嵌入添加位置信息,以保留图像的空间结构。
- 多头自注意力处理:利用Transformer的编码器,通过多头自注意力机制捕捉patches之间的全局依赖关系。
- 分类预测:将处理后的特征输入分类头,完成任务(如图像分类)。
这种机制完全跳过了传统卷积的局部操作,直接从全局角度理解图像内容,为视觉任务提供了一种全新的思路。
3. VisionTransformer的技术优势
VisionTransformer相较于传统CNN展现出了显著的优势:
- 全局感知能力:通过自注意力机制,模型可以在处理图像时关注到所有patches之间的关系,轻松捕捉全局信息。
- 轻量化潜力:尽管初始参数量可能较大,但通过合理的patches分割和降采样设计,ViT可以在计算效率上媲美甚至超越CNN。
- 特征多样性:多头自注意力允许模型从不同角度提取特征,增强了特征表达的丰富性。
- 任务适应性强:ViT的架构灵活,可以轻松调整以适应图像分类、目标检测、图像分割等多种任务。
二、VisionTransformer架构设计
1. 架构总览
VisionTransformer的整体架构清晰而模块化,主要由以下几个部分组成:
- Patch嵌入层:将输入图像分割成patches并映射到高维空间。
- 位置编码:为每个patch的嵌入添加空间位置信息。
- 多头自注意力层(MSA Layer):核心特征提取模块,通过多层Transformer块处理patches。
- 分类头:将提取的特征映射到最终的分类结果。
这种设计充分利用了Transformer的强大能力,同时针对视觉任务进行了优化。
2. 核心模块
2.1 Patch嵌入层
Patch嵌入层是VisionTransformer的起点,负责将输入图像转化为适合Transformer处理的格式:
- 分块操作:假设输入是一个形状为 [batch, channels, series, modal] 的张量(例如传感器数据或图像),模型通过卷积操作将 series 维度分割成多个patch。每个patch的大小由 patch_size 决定。
- 嵌入映射:使用二维卷积层(nn.Conv2d)将每个patch展平并映射到指定的嵌入维度(embedding_dim),生成形状为 [batch, embedding_dim, patch_num, modal_leng] 的特征张量。
在代码中,这部分由 patch_conv 实现:
self.patch_conv = nn.Conv2d(
in_channels=1,
out_channels=embedding_dim,
kernel_size=(patch_size, 1),
stride=(patch_size, 1),
padding=0
)
这里,卷积核的步长与patch大小一致,确保每个patch独立提取特征,输出的通道数即为嵌入维度。
2.2 位置编码
由于Transformer本身不具备空间感知能力,位置编码是必不可少的补充。它为每个patch的嵌入添加一个可学习的位置向量,帮助模型理解patches在原始图像中的相对位置。位置编码的形状为 [1, modal_leng, patch_num, embedding_dim],直接与嵌入特征相加。
在代码中,位置编码由 position_embedding 实现:
self.position_embedding = nn.Parameter(torch.zeros(1, self.modal_leng, self.patch_num, embedding_dim))
2.3 多头自注意力层(MSA Layer)
多头自注意力层是VisionTransformer的核心,由多个 VisionTransformerBlock 组成。每个块负责:
- 多头自注意力计算:通过生成查询(Query)、键(Key)和值(Value)矩阵,计算patches之间的注意力分数,实现全局特征交互。
- 降采样操作:通过 patch_merge 函数将相邻的patches合并,逐步减少patch数量,提升计算效率。
在代码中,这部分由 msa_layer 实现,包含三层Transformer块:
self.msa_layer = nn.Sequential(
VisionTransformerBlock(embedding_dim, head_num, att_size),
VisionTransformerBlock(embedding_dim, head_num, att_size),
VisionTransformerBlock(embedding_dim, head_num, att_size)
)
经过三层处理,patch数量从初始的 patch_num 逐步减少为原来的1/8(每次降采样减半,三次后为1/8)。
2.4 分类头
分类头将多头自注意力层的输出转化为最终的分类结果:
- 展平操作:将特征张量展平成一维向量。
- 全连接映射:通过两层全连接网络,先映射到1024维的中间表示,再映射到类别数。
在代码中,分类头由 dense_tower 实现:
self.dense_tower = nn.Sequential(
nn.Linear(self.modal_leng * math.ceil(self.patch_num / 8) * embedding_dim, 1024),
nn.LayerNorm(1024),
nn.ReLU(),
nn.Linear(1024, category)
)
3. 网络层级结构
以输入形状为 [batch, 1, series, modal] 的数据为例,VisionTransformer的层级结构如下:
阶段 | 输入形状 | 操作类型 |
---|---|---|
输入层 | [batch, 1, series, modal] | Patch嵌入 + 位置编码 |
MSA Layer (第1层) | [batch, modal_leng, patch_num, embedding_dim] | 多头自注意力 + 降采样 |
MSA Layer (第2层) | [batch, modal_leng, patch_num/2, embedding_dim] | 多头自注意力 + 降采样 |
MSA Layer (第3层) | [batch, modal_leng, patch_num/4, embedding_dim] | 多头自注意力 + 降采样 |
输出层 | [batch, modal_leng * ceil(patch_num/8) * embedding_dim] | 展平 + 分类头 |
关键设计原则:
- Patch嵌入:通过卷积实现高效的分块和特征提取。
- 降采样策略:通过patch合并逐步减少计算量,保留关键信息。
- 多头自注意力:增强特征提取的多样性和全局性。
三、代码实现深度解析
1. VisionTransformerBlock的实现
VisionTransformerBlock 是模型的核心模块,实现了多头自注意力机制和降采样功能。以下是其详细解析:
class VisionTransformerBlock(nn.Module):
def __init__(self, input_dim=256, head_num=4, att_size=64):
super().__init__()
self.head_num = head_num # 多头注意力头的数量
self.att_size = att_size # 每个头的维度
self.input_dim = input_dim # 输入嵌入维度
self.query = nn.Linear(input_dim, head_num * att_size) # 查询矩阵
self.key = nn.Linear(input_dim, head_num * att_size) # 键矩阵
self.value = nn.Linear(input_dim, head_num * att_size) # 值矩阵
self.att_mlp = nn.Sequential( # 注意力输出映射
nn.Linear(head_num * att_size, input_dim),
nn.LayerNorm(input_dim)
)
self.downsample_mlp = nn.Sequential( # 降采样后维度恢复
nn.Linear(input_dim * 2, input_dim),
nn.LayerNorm(input_dim)
)
def patch_merge(self, x):
batch, modal_leng, patch_num, input_dim = x.shape
if patch_num % 2: # 补齐为偶数
x = nn.ZeroPad2d((0, 0, 0, 1))(x)
x0 = x[:, :, 0::2, :] # 偶数位置的patches
x1 = x[:, :, 1::2, :] # 奇数位置的patches
x = torch.cat([x0, x1], dim=-1) # 合并成双倍维度
x = nn.ReLU()(self.downsample_mlp(x)) # 恢复原始维度
return x
def forward(self, x):
batch, modal_leng, patch_num, input_dim = x.shape
# 计算Q、K、V
query = self.query(x).reshape(batch, modal_leng, patch_num, self.head_num, self.att_size).permute(0, 1, 3, 2, 4)
key = self.key(x).reshape(batch, modal_leng, patch_num, self.head_num, self.att_size).permute(0, 1, 3, 4, 2)
value = self.value(x).reshape(batch, modal_leng, patch_num, self.head_num, self.att_size).permute(0, 1, 3, 2, 4)
# 多头自注意力
z = torch.matmul(nn.Softmax(dim=-1)(torch.matmul(query, key) / (self.att_size ** 0.5)), value)
z = z.permute(0, 1, 3, 2, 4).reshape(batch, modal_leng, patch_num, -1)
z = nn.ReLU()(x + self.att_mlp(z)) # 残差连接
out = self.patch_merge(z) # 降采样
return out
- 多头自注意力:通过线性层生成Q、K、V矩阵,计算注意力分数后加权融合,恢复到原始维度并与输入残差相加。
- Patch合并:将相邻的patches成对拼接并通过全连接层降维,实现1/2降采样。
2. VisionTransformer的实现
VisionTransformer 类整合了所有模块,形成了完整的模型:
class VisionTransformer(nn.Module):
def __init__(self, train_shape, category, embedding_dim=256, patch_size=4, head_num=4, att_size=64):
super().__init__()
self.series_leng = train_shape[-2] # 时序维度
self.modal_leng = train_shape[-1] # 模态维度
self.patch_num = self.series_leng // patch_size # patch数量
self.patch_conv = nn.Conv2d( # Patch嵌入
in_channels=1,
out_channels=embedding_dim,
kernel_size=(patch_size, 1),
stride=(patch_size, 1),
padding=0
)
self.position_embedding = nn.Parameter(torch.zeros(1, self.modal_leng, self.patch_num, embedding_dim)) # 位置编码
self.msa_layer = nn.Sequential( # 多头自注意力层
VisionTransformerBlock(embedding_dim, head_num, att_size),
VisionTransformerBlock(embedding_dim, head_num, att_size),
VisionTransformerBlock(embedding_dim, head_num, att_size)
)
self.dense_tower = nn.Sequential( # 分类头
nn.Linear(self.modal_leng * math.ceil(self.patch_num / 8) * embedding_dim, 1024),
nn.LayerNorm(1024),
nn.ReLU(),
nn.Linear(1024, category)
)
def forward(self, x):
x = self.patch_conv(x) # Patch嵌入
x = self.position_embedding + x.permute(0, 3, 2, 1) # 添加位置编码
x = self.msa_layer(x) # 多头自注意力处理
x = nn.Flatten()(x) # 展平
x = self.dense_tower(x) # 分类
return x
- 前向传播:从Patch嵌入到位置编码,再经过多层自注意力处理,最后通过分类头输出结果。
- 灵活性:通过调整 patch_size 和 embedding_dim,模型可以适配不同规模的输入数据。
3.VisionTransformer与传统方法的对比
指标 | VisionTransformer | 传统CNN |
---|---|---|
特征提取方式 | 多头自注意力 | 局部卷积 |
感知范围 | 全局 | 局部 |
参数量 | 依赖patch数和层数,可控 | 随通道数增加 |
计算复杂度 | 与patch数平方相关 | 与卷积核相关 |
任务适应性 | 高 | 中 |
典型应用 | 图像分类、时间序列分析 | 图像分类、分割 |
VisionTransformer通过全局自注意力机制突破了CNN的局部限制,尤其在需要捕捉长距离依赖的任务中表现出色。
四、WISDM数据集实战结果
VisionTransformer(ViT)是一种基于Transformer架构的创新模型,通过多头自注意力机制(Multi-Head Self-Attention)在计算机视觉和时间序列分析领域展现出卓越的性能。与传统的卷积神经网络(CNN)不同,ViT从全局视角处理数据,擅长捕捉长距离依赖关系,这在行为识别任务中尤为关键。本节以WISDM数据集为例,展示ViT的实际应用及其实验结果。
WISDM(Wireless Sensor Data Mining)数据集是行为识别领域的经典基准数据集,数据来源于智能手机内置的加速度计和陀螺仪传感器,采样频率为20Hz。数据集记录了受试者执行六种日常活动:Walking(步行)、Jogging(慢跑)、Walking_upstairs(上楼)、Walking_downstairs(下楼)、Sitting(坐着)和Standing(站立)。本研究采用滑动窗口技术对原始数据进行预处理,设置窗口长度为128个采样点,滑动步长为64个采样点(即50%的窗口重叠率),生成大量样本单元用于模型训练和评估。
1.训练结果
基于空洞卷积的模型在PAMAP2数据集上的性能如下表所示:
| Metric | Value |
| Parameters | 4,367,366 |
| FLOPs | 58.56 M |
| Inference Time | 2.90 ms |
| Val Accuracy | 0.9840 |
| Test Accuracy | 0.9781 |
| Accuracy | 0.9781 |
| Precision | 0.9781 |
| Recall | 0.9781 |
| F1-score | 0.9780 |
2.每个类别的准确率
Walking: 0.9863
Jogging: 0.9962
Walking_upstairs: 0.9945
Walking_downstairs: 1.0000
Sitting: 0.9118
Standing: 0.9408
模型在简单动作(如 Walking、Downstairs)上表现优异,准确率接近 1;对静态或相似动作(如 Sitting、Standing)的区分准确率超过 0.98,体现了分组卷积对结构化特征的高效提取能力。对于空间动作幅度较大的 Upstairs,准确率稍低,可能与时间序列维度的特征对齐精度有关。
3.混淆矩阵图及准确率和损失曲线图
ResNext 在 UCI数据集上的分类性能通过标准化混淆矩阵可视化,矩阵行代表真实标签,列代表预测标签:
深蓝色块表示高准确率,例如Walking_downstairs(1.0000)和Jogging(0.9962),显示出模型的优异性能。动态活动(如Walking、Jogging、Walking_upstairs和Walking_downstairs)之间几乎无混淆,反映了模型对运动模式的精准识别能力。
训练过程中,ResNext 的训练集与验证集指标表现如下:
训练损失在 50 个 epoch 内降至 0.05 以下,验证损失同步下降,最终稳定在 0.06 左右,训练和验证指标的接近表明ViT模型具有良好的泛化能力,训练过程收敛充分。
总结
VisionTransformer(ViT)通过其多头自注意力机制,在WISDM数据集的行为识别任务中展现了卓越的性能。相比传统卷积架构,ViT在全局特征提取和长距离依赖建模方面具有显著优势,尤其在处理动态活动的时间序列数据时表现出色。
未来可通过优化注意力机制、增加数据增强或调整模型结构,进一步提升对静态活动的区分能力,推动其在更广泛场景中的应用。
文末送书
参与方式
免费包邮送三本! Dream送书活动——第六十二期:《DeepSeek实战技巧精粹》、《巧用DeepSeek快速搞定数据分析》
参与方式:
1.点赞收藏文章
2.在评论区留言:人生苦短,我用Python!(多可评论三条)
3.随机抽取3位免费送出!
4.截止时间: 2025-05-14
上期中奖名单:珊瑚海儿、m0_weixin0982、有一只柴犬
本期推荐1:
《巧用DeepSeek快速搞定数据分析》《巧用DeepSeek快速搞定数据分析》
数据分析重构指南:覆盖数据采集→清洗→建模→可视化等8大核心环节全流程解析,50多种高效方法+200多行业级代码片段即改即用+15种数据难题秒级解决方案,助你在AI驱动的数据科学中攀登巅峰。
京东:https://item.jd.com/14995198.html
1.全栈:覆盖数据采集→清洗→建模→可视化8大核心环节全流程解析。
2.极速:解锁15种数据难题秒级解决方案,效率提升300%。
3.智能:深度集成20+前沿AI算法,实现数据分析自动化跃迁。
4.实战:200+行业级代码片段即改即用,涵盖金融、电商、社交等6大领域。
5.突破:首度公开DeepSeek在时序预测、图像分析、文本挖掘等5大创新应用。
内容简介
本书是一本关于数据分析与DeepSeek应用的实用指南,旨在帮助读者了解数据分析的基础知识及如何利用DeepSeek进行高效的数据处理和分析。随着大数据时代的到来,数据分析已经成为现代企业和行业发展的关键驱动力,本书正是为了满足这一市场需求而诞生。
本书共分为8章,涵盖了从数据分析基础知识、常见的统计学方法,到使用DeepSeek进行数据准备、数据清洗、特征提取、数据可视化、回归分析与预测建模、分类与聚类分析及深度学习和大数据分析等全面的内容。各章节详细介绍了如何运用DeepSeek在数据分析过程中解决实际问题,并提供了丰富的实例以帮助读者快速掌握相关技能。
本书适合数据分析师、数据科学家、研究人员、企业管理者、学生及对数据分析和人工智能技术感兴趣的广大读者阅读。通过阅读本书,读者将掌握数据分析的核心概念和方法,并学会如何运用DeepSeek为数据分析工作带来更高的效率和价值。
本期推荐2:
《DeepSeek实战技巧精粹》《DeepSeek实战技巧精粹》
中国人工智能学会副理事长、Datawhale主编力荐的AI通识课(含视频教程+AI有效提问500例)
京东:https://item.jd.com/14427039.html
【多场景AI实战指南】深度解析DeepSeek,100+智能解决方案覆盖办公制表、合同风控、短视频创作、家庭教育、健康管理等应用场景,职场效率100倍提升。
【智能生产力革命手册】AI与办公软件深度联动,Excel数据自动分析技巧、WPS灵犀一键生成PPT、通义万相迅速生成视频,更附赠提示词模板让,精准理解用户需求。
【三维能力进阶宝典】从注册到API调用,从思维导图构建到各行业应用解读,100+真实案例手把手教学,助力工作生活效率双提升。
【未来竞争力构建指南】聚焦“提示词工程+多模态创作”双核能力,涵盖多领域创新应用,一书赋能,全面提升竞争力。
内容简介
中国的 AI 技术逆势崛起,催生了 DeepSeek 这样革命性的大模型。本书通过 100 多个实例,详细介绍了 DeepSeek 的最新功能及在职场办公方方面面的应用。全书以“技术赋能”为主线,围绕6大核心领域展开:DeepSeek基础知识、DeepSeek赋能智能办公、使用 DeepSeek 进行短视频与营销内容创作、DeepSeek 辅助家庭教育与学习力提升、使用 DeepSeek进行健康管理与出行规划、国产 AI 大模型应用介绍。本书适合职场人士、内容创作者、教育工作者及IT技术人员阅读。