昇思25天打卡营-mindspore-ML- Day14-VisionTransformer图像分类
今天学习了Vision Transformer图像分类,这是一种基于Transformer模型的图像分类方法,它不依赖卷积操作,而是通过自注意力机制捕捉图像块之间的空间关系,从而实现图像分类。
基本原理:
- 图像分块: 将原始图像划分为多个patch(图像块),并将二维patch转换为一维向量。
- 位置编码: 为了让模型理解patch的空间位置信息,引入位置编码,将位置信息融入到patch向量中。
- Transformer编码器: 模型的主体结构是基于Transformer的Encoder部分,包含多个Transformer块。每个Transformer块包含自注意力机制和前馈网络,用于捕捉patch之间的空间关系并进行特征提取。
- 分类器: 最后一个Transformer块的输出连接一个全连接层,用于分类。
与其他图像分类算法的区别和特色:
- 不依赖卷积操作: Vision Transformer不使用卷积操作,而是通过自注意力机制捕捉图像块之间的空间关系,这使得模型更加灵活,能够更好地捕捉图像的全局特征。
- 可扩展性: Transformer模型具有良好的可扩展性,可以轻松扩展到更大的模型,从而提高模型的性能。
打个比方:
Vision Transformer就像一位棋手,它不是通过记住棋盘上的每个棋子的位置,而是通过分析棋子之间的相互关系来下棋。同样,Vision Transformer不是通过分析图像中的每个像素,而是通过分析图像块之间的空间关系来进行图像分类。
本文档所用的数据库:
本文档使用的是ImageNet数据集(包含了超过1400万个图像,涵盖了大约22000个类别。ImageNet数据集由Stanford大学计算机视觉实验室创建,旨在推动图像识别技术的发展。)的子集,包含训练集、验证集和测试集。
之前的学习中,涉及到多种图像分类算法如ResNet50, ShuffleNet,它们之间的区别和特点,总结下来感觉是这样:
ResNet50, ShuffleNet, 和 Vision Transformer (ViT) 是三种常用的图像分类算法,它们各自拥有不同的原理和特色。
1. ResNet50:
- 原理: ResNet50 是一种深度卷积神经网络,它使用残差学习来解决深度网络训练过程中的梯度消失问题。ResNet50 通过引入残差连接,将输入直接连接到后续层,从而使得梯度可以直接传播到前面的层,避免了梯度消失的问题。
- 特色: ResNet50 具有很强的特征提取能力,能够捕捉图像中的复杂特征,并且具有良好的泛化能力。此外,ResNet50 还可以通过修改网络深度和宽度来调整模型复杂度,从而适应不同的任务需求。
2. ShuffleNet:
- 原理: ShuffleNet 是一种轻量级卷积神经网络,它使用通道混洗和分组卷积来减少模型参数量和计算量,从而降低模型复杂度。ShuffleNet 通过将输入通道划分为多个组,并在组内进行卷积操作,从而减少参数量和计算量。
- 特色: ShuffleNet 具有轻量级的特性,能够在移动设备上高效运行。此外,ShuffleNet 还可以通过调整分组数来调整模型复杂度,从而适应不同的计算资源限制。
3. Vision Transformer (ViT):
- 原理: ViT 是一种基于Transformer的图像分类算法,它将图像分割成多个patch,并使用Transformer编码器来捕捉patch之间的空间关系。ViT 使用自注意力机制来学习图像的全局特征,从而实现图像分类。
- 特色: ViT 不依赖卷积操作,而是通过自注意力机制捕捉图像块之间的空间关系,这使得模型更加灵活,能够更好地捕捉图像的全局特征。此外,ViT 具有很强的可扩展性,可以轻松扩展到更大的模型,从而提高模型的性能。
讨论:
例子: 假设我们有一个包含猫和狗的图像数据集,我们需要使用图像分类算法来区分猫和狗。
- ResNet50: ResNet50 可以有效地提取图像中的特征,例如猫的耳朵、狗的鼻子等,从而区分猫和狗。
- ShuffleNet: ShuffleNet 可以在移动设备上高效运行,因此我们可以使用ShuffleNet在手机上进行猫狗分类。
- ViT: ViT 可以更好地捕捉图像的全局特征,例如猫和狗的整体形状和姿态,从而更准确地区分猫和狗。
代码实现过程:
- 环境准备: 安装MindSpore库,并下载ImageNet数据集子集。
- 数据读取: 使用ImageFolderDataset读取数据集,并进行数据增强。
- 模型构建: 构建ViT模型,包括patch嵌入层、位置编码层、Transformer编码器层和分类器层。
- 模型训练: 设置损失函数、优化器和回调函数,并进行模型训练。
- 模型验证: 使用ImageFolderDataset读取验证集数据,并进行模型验证,评估模型的性能。
- 模型推理: 使用ImageFolderDataset读取测试集数据,并进行模型推理,预测图像类别。
代码说明:
- PatchEmbedding: 将图像块转换为向量,并添加class embedding和位置编码。
- TransformerEncoder: 包含多个Transformer块,每个Transformer块包含自注意力机制和前馈网络。
- CrossEntropySmooth: 损失函数,用于计算预测结果和真实标签之间的差距。
- Model: 用于编译模型,设置损失函数、优化器和评价指标。
- ImageFolderDataset: 用于读取数据集,并进行数据增强。
- show_result: 将预测结果标记在图片上。
具体代码和训练过程如下:
【腾讯文档】VisionTransformer图像分类

相关文章:
昇思25天打卡营-mindspore-ML- Day14-VisionTransformer图像分类
今天学习了Vision Transformer图像分类,这是一种基于Transformer模型的图像分类方法,它不依赖卷积操作,而是通过自注意力机制捕捉图像块之间的空间关系,从而实现图像分类。 基本原理: 图像分块: 将原始图像划分为多个…...
微信环境内H5网页,用开放标签wx-open-launch-app打开app
一、微信公众号后台配置安全域名 准备一个认证通过的公众号,打开公众号后台 1、设置与开发 2、公众号设置 3、功能设置 4、配置js接口安全域名 二、微信开放平台,将公众号与APP关联 打开微信开放平台后台 1、管理中心 2、公众号 3、选择一个需要操作…...
【c++基础】高精度数不进位加法
高精度数不进位加法 谈及数字即可想到运算,那么高精度数怎么运算呢?今天来系统介绍一下高精度数的加法。 思考一下加法运算,我们可以简单将加法运算这样区分: 有无进位。位数是否相同。 这篇文章我们就来讨论一下无进位的高精度…...
UniApp 中 Web/H5 正确使用反向代理解决跨域问题
因为 Vue3 的构建工具是 Vite,所以配置 vue.config.js 是没用的(Vue2 因为使用 webpack 所以才用这个文件) 这里提供一份 vue.config.js 的示例: module.exports {devServer: {proxy: {/api: {target: http://example.com,chan…...
Redis Stream:实时数据流的处理与存储
Redis Stream:实时数据流的处理与存储 引言 在当今数据驱动的世界中,实时数据处理和存储成为了许多应用的核心需求。Redis Stream作为一种新兴的数据结构,为Redis带来了强大的流处理能力。本文将深入探讨Redis Stream的特点、使用场景以及如何高效地利用它来处理实时数据流…...
【论文阅读】-- Visual Traffic Jam Analysis Based on Trajectory Data
基于轨迹数据的可视化交通拥堵分析 摘要1 引言2 相关工作2.1 交通事件检测2.2 交通可视化2.3 传播图可视化 3 概述3.1 设计要求3.2 输入数据说明3.3 交通拥堵数据模型3.4 工作流程 4 预处理4.1 路网处理4.2 GPS数据清理4.3 地图匹配4.4 道路速度计算4.5 交通拥堵检测4.6 传播图…...
修改编译依赖openssl的libcrypto.so
由于centos7默认使用openssl1.0.2k的libcrypto.so.10共享库。即使openssl升级为3.0.11后,编译使用ldd命令查看共享库依旧会引用libcrypto.so.10。 现希望引用libcrypto.so.3,需要在生成动态链接库的CMakeLists.txt中增加如下配置,明确指定ope…...
����: �Ҳ��������������� javafx.fxml ԭ��: java.lang.ClassNotFoundException解决方法
如果你出现了这个问题,恭喜你,你应该会花很多时间去找解决方法。别问我怎么知道的... 解决方法: 出现乱码的原因:配置vm时 这些配置看似由有空格,换行,实则没有。所以解决办法就是,重新配置你…...
【C++】———— 继承
作者主页: 作者主页 本篇博客专栏:C 创作时间 :2024年7月5日 一、什么是继承? 继承的概念 定义: 继承机制就是面向对象设计中使代码可以复用的重要手段,它允许在程序员保持原有类特性的基础上进行扩展…...
Python人生重开器
Life reopens stimulator """ 作者:->yjy 所有的惊艳都曾历经平庸 """ import random import sys import time# 打印初始界面 print(------------------------------) print(| |) print(| >>人生重…...
python 高级技巧 0708
python 33个高级用法技巧 使用装饰器计时函数 装饰器是一种允许在一个函数或方法调用前后运行额外代码的结构。 import timedef timer(func):"""装饰器函数,用于计算函数执行时间并打印。参数:func (function): 被装饰的函数返回:function: 包装后…...
HOW - React Router v6.x Feature 实践(react-router-dom)
目录 基本特性ranked routes matchingactive linksNavLinkuseMatch relative links1. 相对路径的使用2. 嵌套路由的增强行为3. 优势和注意事项4. . 和 ..5. 总结 data loadingloading or changing data and redirectpending navigation uiskeleton ui with suspensedata mutati…...
`padding`、`border`、`width`、`height` 和 `display` 这些 CSS 属性的作用
盒模型中的属性 padding(内边距) padding 用于控制元素内容与边框之间的空间,可以为元素的每个边(上、右、下、左)分别设置内边距。内边距的单位可以是像素(px)、百分比(%…...
C++ QT 全局信号的实现
每次做全局信号都需要重新建立文件,太麻烦了,记录一下,以后直接复制。 头文件 globalSignalEmitter.h #pragma once //#ifndef GLOBALSIGNALEITTER_H //#define GLOBALSIGNALEITTER_H#include <QObject>class GlobalSignalEmitter : …...
十款绚丽的前端 CSS 菜单导航动画
CSS汉堡菜单是一种非常流行的PC端和移动端web菜单风格,特别是移动端,这种风格的菜单应用更为广泛。这款菜单便非常适合在手机App上使用,它的特点是当顶部菜单弹出时,页面内容将会配合菜单出现适当的联动,让整个页面变得…...
debain系统使用日志
账号 vboxuser changeme ssh远程登录vbox虚拟机 https://www.cnblogs.com/BuzzWeek/p/17557981.html Terminal su - root changeme sudo apt-get update sudo apt-get -y install openssh-server #启动sshd systemctl status sshd 设置允许ssh登录vbox虚拟机 参考…...
【Word】快速对齐目录
目录标题 1. 全选要操作的内容 → 右键 → 段落2. 选则制表位3. 配置制表符4. Tab键即可 1. 全选要操作的内容 → 右键 → 段落 2. 选则制表位 3. 配置制表符 4. Tab键即可...
MATLAB基础应用精讲-【数模应用】 岭回归(Ridge)(附MATLAB、python和R语言代码实现)
目录 前言 算法原理 数学模型 Ridge 回归的估计量 Ridge 回归与标准多元线性回归的比较 3. Ridge 参数的选择 算法步骤 SPSSPRO 1、作用 2、输入输出描述 3、案例示例 4、案例数据 5、案例操作 6、输出结果分析 7、注意事项 8、模型理论 SPSSAU 岭回归分析案…...
推荐6个开源博客项目源码,你会选哪个呢
搭建个人博客系统时,可以选择多种开源平台,以下是一些受欢迎的开源博客系统及其特点: 1. Plumemo Plumemo 是一个轻量、易用、前后端分离的博客系统,为了解除开发人员对后端的束缚,真正做到的一个面向接口开发的博客…...
OCR text detect
主干网络 VoVNet:实时目标检测的新backbone网络_vovnet pytorch-CSDN博客 DenseNet: arxiv.org/pdf/1608.06993 密集连接: DenseNet 的核心思想是将网络中的每一层与其前面的所有层直接连接。对于一个 L 层的网络,DenseNet 具有…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
