Vision Transformer论文阅读笔记
目录
- An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale -- Vision Transformer
- 摘要
- Introduction—简介
- RELATED WORK—相关工作
- METHOD—方法
- VISION TRANSFORMER (VIT)—视觉Transformer(ViT)
- 分析与评估
- PRE-TRAINING DATA REQUIREMENTS—预训练数据要求
- INSPECTING VISION TRANSFORMER—检查vision transformer
- 总结与展望
- VIT详细网络结构
An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale – Vision Transformer
论文链接:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
摘要
(1)本文证明了图像对CNN的依赖不是必要的,将纯Transformer直接用于图像patch序列可以很好地执行图像分类任务。
(2)和最先进的CNN相比,vision transformer(ViT)可以获得出色的结果,同时训练所需的计算资源也相对较少(仍然需要很多资源,只是相对更耗资源的网络而言的)。
Introduction—简介
问题:如何将transformer应用到视觉问题上?
Bert序列长度也就500左右,如果要将图片的每个像素展开变成一个序列,就算224 × 224 = 50176 (≈ 500 × 100)图片输入计算量也十分大。
解决方向:
1、把原图的局部当作一个输入(类似卷积也是局部操作)
2、把处理过的特征图作为输入(下采样降低分辨率)
本文方法
(1)将图像拆分为patches(比如输入为224 × 224,每个patch就是 16 × 16,224 / 16 = 14,输入序列长度就是 14 × 14 = 196 ),并提供这些patches的线性embeddings序列作为 Transformer 的输入。(图像patches和在NLP应用中的token相似)
(2)采用了有监督的方式对图像分类模型进行训练。
不足:在不充足数据下训练,会导致模型泛化性不足。
注意:在中型大小数据集上,如果不加以其他比较强的约束Vit跟同等大小的残差网络相比是比较弱的。
原因:因为卷积神经网络中有归纳偏置,在VIT中没有。归纳偏置其实就是一种先验知识,或者说一种提前做好的假设。
最常见的两个归纳偏置(inductive bias):
locality:图片中相邻区域通常会有相邻的特征(比如桌子和椅子一般都挨在一起),靠的越近的东西相关性就越强。
translation equivariance(平移等变性):公式表达为g(f(x)) = f(g(x)),把g理解为卷积,f理解为平移,就是不管先做哪个操作,结果都是一样的,在卷积神经网络里面只要输入的图片不变,经过同一个卷积核的结果是一定的。
通过这两个归纳偏置,卷积神经网络就有了很多先验信息,可以通过相对少的数据,去学习到一个比较好的模型。
Vit没有这些先验知识,因此往往基于之前的大规模预训练来训练可以获得较好的结果。
Translation Equivariance (平移等变性)和Translation Invariance(平移不变性)
Translation Equivariance (平移等变性):
定义: 一个系统或算法在输入数据经历平移(或移动)时,保持输出相对于输入的相对位置的性质。
示例: 在图像处理中,一个具有平移等变性的算法可以在图像中检测或处理特征,而不受这些特征在图像中的位置变化的影响。它会产生相应的移动,但不会改变特征的识别或提取结果。Translation Invariance (平移不变性):
定义: 一个系统或算法在输入数据经历平移时,保持输出不变的性质。
示例: 在图像处理中,一个具有平移不变性的算法可以在图像中检测或识别特征,而不受这些特征在图像中的位置变化的影响。无论特征的位置如何变化,该算法都会产生相同的识别结果。简而言之,平移等变性表示系统对于输入数据的平移保持输出相对位置的相对性,而平移不变性表示系统对于输入数据的平移保持输出完全不变。
RELATED WORK—相关工作
(1)Transformer: 用于机器翻译的方法,被广泛用于NLP领域
(2)BERT: 使用去噪自我监督的训练前任务
(3)局部多头点积自我注意块: 只在每个查询像素的局部社区中应用自注意力,可以完全取代卷积
(4)稀疏Transformer: 采用了对全局自关注的可扩展近似,以便适用于图像
(5)在不同大小的块中应用: 在极端情况下,只沿着个别轴线应用
(6)iGPT: 无监督的方式,在降低图像分辨率和色彩空间后将Transformers应用于图像像素
无监督对比:BERT类似完型填空,GPT是预测后续的单词
METHOD—方法
VISION TRANSFORMER (VIT)—视觉Transformer(ViT)
(1)第1部分:将图形转化为序列化数据
-
首先输入为一张图片,将图片划分成9个patch,然后将每个patch重组成一个向量,得到所谓的flattened patch(上图红框内)。
-
如果图片是H×W×C维的,就用P×P大小的patch去分割图片可以得到N个patch(实际处理通过卷积操作实现,然后卷积核的尺寸个数根据[num_token,token_dim]设置),那么每个patch的大小就是P×P×C,将N个patch 重组后的向量concat在一起就得到了一个N×P×P×C的二维矩阵,相当于NLP中输入Transformer的词向量。
-
patch大小变化时,重组后的向量维度也会变化,作者对上述过程得到的flattened patches向量做了Linear Projection(线性投射层操作,其实就是一个全连接层),将不同长度的flattened patch向量转化为固定长度的向量(记作D维向量)。
综上,原本H×W×C 维的图片被转化为了N个D维的向量(或者一个N×D维的二维矩阵)。
(2)第2部分:Position embedding
图像是一个整体,因此patch之间是有位置信息的,打乱顺序后就不是原来的图片了。
但是在自注意力中两两计算不会涉及位置信息(即便打乱了结果也一样),因此需要加入位置信息。
由于Transformer模型本身是没有位置信息的,和NLP中一样,我们需要用position embedding将位置信息加到模型中去。
如上图所示,编号有0-9的紫色框表示各个位置的position embedding,而紫色框旁边的粉色框则是经过linear projection之后的flattened patch向量。
position embedding也是一个可训练的参数,它其实可以看作一个N(patch) × dimension (patch的维度也就是token_dim)的矩阵,然后是可以学习得到的。
原文采用相加(add)的方式将position embedding(即图中紫色框)和patch embedding(即图中粉色框)结合position信息,最终的宽、高、深度都不会改变。
对于position采用1D、2D还是相对位置编码表示,作者进行了消融实验(如下表),相比没有位置信息的效果要好3个百分点,至于用哪种方式表示位置信息,差别不大,只要用了就行。
举例:一张图片划分成九宫格
1D:1,2,3,4,…,8,9
2D:相当于xy轴,11,12,13,21,22,23,31,32,33
relative:比如1D中2和9相差7个单位距离,用7(offset)来表示
(3)第3部分:Learnable embedding
patch + position embedding = token,tokens包含position信息以及图像信息。
在一系列 token 的前面加上加上一个新的 token,叫做class token(上图带星号),它并不是某个patch产生的,增加class token是参考bert网络,它的位置信息永远是0,它的维度(dimension)需要和patch的维度一致。
Class token的作用是作为一个分类字符(也是一个可训练的参数),经过encoder后对应的结果这个token的输出当作整个transformer模型的输出,也就是当作整个图像的特征输出。(个人理解:这个token是附加的,对于全图中其他任何patch的关注都是公平的关注,因此相当于是个全局平均池化的过程,但是如果采用某个patch的token作为输出,受到自身位置信息和相对位置信息的影响,关注度肯定是不平均的,因此不能作为输出)
类比传统卷积神经网络,经过几个block之后得到一个feature map,在分类之前会先对这个feature map执行GAP(全局平均池化)得到一个向量(1 × n),然后这个向量代表全局对于这个图片的特征,就可以把向量拿去做分类。
在transformer(如下示意图)中,VIT是使用红色框内的输出(cls token的输出)作为分类的输入;
但其实也可以把每个patch对应token(绿色框内)的输出进行GAP,然后作为分类的输入。
本文也对两种方法进行了对比,可以从下图看出,学习率设置好,采用GAP的方式比采用cls token的方式准确率更高。
以上的操作其实就是对图像进行预处理得到token,对于位置信息的表示和输出分类的特征表示,为了和原来的transformer保持一致所以采取了1D和class token。
(4)第4部分:Transformer encoder
最后输入到 Transformer Encoder 中,对应着右边的图,将 block 重复堆叠 L 次,整个模型也就包括 L 个 Transformer。Transformer Encoder结构和NLP中Transformer结构基本上相同,我们只是需要对它进行一个分类,只提取针对class token所对应的输出,经过 MLP Head 进行类别判断,得到最终分类的结果。
下图是Encoder Block和 MLP Block的内部结构图
分析与评估
PRE-TRAINING DATA REQUIREMENTS—预训练数据要求
图3展示了模型在 ImageNet 数据集上的性能,图4展示了在 JFT300M 数据集的随机子集以及完整数据集上进行了模型训练的结果。
结论:卷积归纳偏置对于规模较小的数据集较为有用,但对于较大的数据集而言,学习相关模式就足够了,甚至更加有效。同时VIT在小样本的训练可能是一个不错的研究方向。
INSPECTING VISION TRANSFORMER—检查vision transformer
上图为ViT-L/32 的position embedding的相似性。
位置编码:相似性(余弦相似度),所以相似性越高接近1,越低越接近-1。
跟自己相似性最高,同行同列相似性也比较高,虽然是1D编码但是学习到了2D图像的概念(所以使用1D和2D表示位置准确率相差不大)。
上图按heads和网络深度划分的参与区域大小。
红框部分表示像素点相近的自注意力学习到的信息,黄色框部分表示像素点距离远的自注意力学习到的信息。
横坐标为网络层数,可以看出在浅层网络就能学习到全局(距离远)的信息了,但是在传统卷积网络中,浅层感受野小只能学习到局部信息。
在深层网络基本上就是高层语义信息(像素点之间距离远)。
下图中右边Attention列出来的图,就代表了高层的语义信息。
结论:
(1)模型使用了全局集成信息的能力。其他注意力head在低层中始终具有较小的注意力距离。
(2)该模型关注与分类语义相关的图像区域。
总结与展望
将图片处理成 patch 序列,然后使用 Transformer 去处理,取得了接近或超过卷积神经网络的结果,同时训练起来也更快。
在提取patch和进行位置编码时使用了一些图像特有的归纳偏置,其他和transformer一致。 ( 简单、扩展性好)
将ViT应用于其他计算机视觉任务,如检测和分割。
自监督也行,但是目前还没有监督效果好,继续探索自我监督的预训练方法。
可以进一步扩大ViT的规模,随着模型尺寸的增加,参数越多,性能似乎还没有饱和。(后续原作者的论文证实了这一点)
通过只用transformer实现多模态大一统。
VIT详细网络结构
相关文章:
Vision Transformer论文阅读笔记
目录 An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale -- Vision Transformer摘要Introduction—简介RELATED WORK—相关工作METHOD—方法VISION TRANSFORMER (VIT)—视觉Transformer(ViT) 分析与评估PRE-TRAINING DATA REQUIREMENTS—预训练数据…...
MapReduce的执行流程排序
MapReduce 是一种用于处理大规模数据集的分布式计算模型。它将作业分成多个阶段,以并行处理和分布式存储的方式来提高计算效率。以下是 MapReduce 的执行流程以及各个阶段的详细解释: 1. 作业提交(Job Submission) 用户通过客户端…...
雅思词汇及发音积累 2024.7.3
银行 check (美)支票 cheque /tʃek/ (英)支票 ATM 自动取款机 cashier 收银员 teller /ˈtelə(r)/ (银行)出纳员 loan 贷款 draw/withdraw money 提款 pin number/passsword/code …...
Vue2和Vue3的区别Vue3的组合式API
一、Vue2和Vue3的区别 1、创建方式的不同: (1)、vue2:是一个构造函数,通过该构造函数创建一个Vue实例 new Vue({})(2)、Vue3:是一个对象。并通过该对象的createApp()方法,创建一个vue实例。 Vue…...
ML307R OpenCPU HTTP使用
一、函数介绍 二、示例代码 三、代码下载地址 一、函数介绍 具体函数可以参考cm_http.h文件,这里给出几个我用到的函数 1、创建客户端实例 /*** @brief 创建客户端实例** @param [in] url 服务器地址(服务器地址url需要填写完整,例如(服务器url仅为格式示…...
【状态估计】线性高斯系统的状态估计——离散时间的递归滤波
前两篇文章介绍了离散时间的批量估计、离散时间的递归平滑,本文着重介绍离散时间的递归滤波。 前两篇位置:【状态估计】线性高斯系统的状态估计——离散时间的批量估计、【状态估计】线性高斯系统的状态估计——离散时间的递归平滑。 离散时间的递归滤波…...
架构设计上中的master三种架构,单节点,主从节点,多节点分析
文章目录 背景单节点优点缺点 主从节点优点缺点 多节点优点缺点 多节点,多backup设计优点缺点 总结 背景 在很多分布式系统里会有master,work这种结构。 master 节点负责管理资源,分发任务。下面着重讨论下master 数量不同带来的影响 单节点 优点 1.设…...
如何在 SQL 中删除一条记录?
如何在 SQL 中删除一条记录? 在 SQL 中,您可以使用DELETE查询和WHERE子句删除表中的一条记录。在本文中,我将向您介绍如何使用DELETE查询和WHERE子句删除记录。我还将向您展示如何一次从表中删除多条记录 如何在 SQL 中使用 DELETE 这是使…...
JavaSE (Java基础):面向对象(上)
8 面向对象 面向对象编程的本质就是:以类的方法组织代码,以对象的组织(封装)数据。 8.1 方法的回顾 package com.oop.demo01;// Demo01 类 public class Demo01 {// main方法public static void main(String[] args) {int c 10…...
flink使用StatementSet降低资源浪费
背景 项目中有很多ods层(mysql 通过cannal)kafka,需要对这些ods kakfa做一些etl操作后写入下一层的kafka(dwd层)。 一开始采用的是executeSql方式来执行每个ods→dwd层操作,即类似: def main(…...
FineDataLink4.1.9支持Kettle调用
FDL更新至4.1.9后,新增kettle调用功能,支持不增加额外负担的情况下,将现有的Kettle任务平滑迁移到FineDataLink。 一、更新版本前存在的问题与痛点 在此次功能更新前,用户可能会遇到以下问题: 1.对于仅使用kettle的…...
SwanLinkOS首批实现与HarmonyOS NEXT互联互通,软通动力子公司鸿湖万联助力鸿蒙生态统一互联
在刚刚落下帷幕的华为开发者大会2024上,伴随全场景智能操作系统HarmonyOS Next的盛大发布,作为基于OpenHarmony的同根同源系统生态,软通动力子公司鸿湖万联全域智能操作系统SwanLinkOS首批实现与HarmonyOS NEXT互联互通,率先攻克基…...
Win11禁止右键菜单折叠的方法
背景 在使用windows11的时候,会发现默认情况下,右键菜单折叠了。以至于在使用一些软件的右键菜单时总是要点击“显示更多选项”菜单展开所有菜单,然后再点击。而且每次在显示菜单时先是全部展示,再隐藏一下,看着着实难…...
Maven列出所有的依赖树
在 IntelliJ IDEA 中,你可以使用 Maven 插件来列出项目的依赖树。Maven 插件提供了一个名为dependency:tree的目标,可以帮助你获取项目的依赖树详细信息。 要列出项目的依赖树,可以执行以下步骤: 打开 IntelliJ IDEA,…...
测试开发面试题和答案
Python 请解释Python中的列表推导式(List Comprehension)是什么,并给出一个示例。 答案: 列表推导式是Python中一种简洁的构建列表的方法。它允许从一个已存在的列表创建新列表,同时应用一个表达式来修改或选择元素。…...
llm学习-3(向量数据库的使用)
1:数据读取和加载 接着上面的常规操作 加载环境变量---》获取所有路径---》加载文档---》切分文档 代码如下: import os from dotenv import load_dotenv, find_dotenvload_dotenv(find_dotenv()) # 获取folder_path下所有文件路径,储存在…...
【01-02】Mybatis的配置文件与基于XML的使用
1、引入日志 在这里我们引入SLF4J的日志门面,使用logback的具体日志实现;引入相关依赖: <!--日志的依赖--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version&g…...
Linux-进程间通信(IPC)
进程间通信(IPC)介绍 进程间通信(IPC,InterProcess Communication)是指在不同的进程之间传播或交换信息。IPC 的方式包括管道(无名管道和命名管道)、消息队列、信号量、共享内存、Socket、Stre…...
C++ STL: std::vector与std::array的深入对比
什么是 std::vector 和 std::array 首先,让我们简要介绍一下这两种容器: • std::vector:一个动态数组,可以根据需要动态调整其大小。 • std::array:一个固定大小的数组,其大小在编译时确定。 虽然…...
哈哈看到这条消息感觉就像是打开了窗户
在这个信息爆炸的时代,每一条动态可能成为我们情绪的小小触发器。今天,当我无意间滑过那条由杜海涛亲自发布的“自曝式”消息时,不禁心头一颤——如果这是我的另一半,哎呀,那画面,简直比烧烤摊还要“热辣”…...
10、matlab中字符、数字、矩阵、字符串和元胞合并为字符串并将字符串以不同格式写入读出excel
1、前言 在 MATLAB 中,可以使用不同的数据类型(字符、数字、矩阵、字符串和元胞)合并为字符串,然后将字符串以不同格式写入 Excel 文件。 以下是一个示例代码,展示如何将不同数据类型合并为字符串,并以不…...
如何正确面对GPT-5技术突破
随着人工智能技术的快速发展,预训练语言模型在自然语言处理领域取得了显著的成果。其中,GPT系列模型作为代表之一,受到了广泛关注。2023年,GPT-5模型的发布引起了业界的热烈讨论。本文将从以下几个方面分析GPT-5的发布及其对人工智…...
HarmonyOS ArkUi 官网踩坑:单独隐藏导航条无效
环境: 手机:Mate 60 Next版本: NEXT.0.0.26 导航条介绍 导航条官网设计指南 setSpecificSystemBarEnabled 设置实际效果: navigationIndicator:隐藏导航条无效status:会把导航条和状态栏都隐藏 官方…...
解决跨域问题(vite、axios/koa)
两种方法选其一即可 一、后端koa设置中间件 app.use(async (ctx, next)> {ctx.set(Access-Control-Allow-Origin, *);ctx.set(Access-Control-Allow-Headers, Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild);ctx.set(Access-C…...
echarts实现3D柱状图(视觉层面)
一、第一种效果 效果图 使用步骤 完整实例,copy就可直接使用 <template><div :class"className" :style"{height:height,width:width}" /> </template><script>import echarts from echartsrequire(echarts/theme/…...
K8S集群进行分布式负载测试
使用K8S集群执行分布式负载测试 本教程介绍如何使用Kubernetes部署分布式负载测试框架,该框架使用分布式部署的locust 产生压测流量,对一个部署到 K8S集群的 Web 应用执行负载测试,该 Web 应用公开了 REST 格式的端点,以响应传入…...
20.《C语言》——【移位操作符】
🌹开场语 亲爱的读者,大家好!我是一名正在学习编程的高校生。在这个博客里,我将和大家一起探讨编程技巧、分享实用工具,并交流学习心得。希望通过我的博客,你能学到有用的知识,提高自己的技能&a…...
你想活出怎样的人生?
hi~好久不见,距离上次发文隔了有段时间了,这段时间,我是裸辞去感受了一下前端市场的水深火热,那么这次咱们不聊技术,就说一说最近这段时间的经历和一些感触吧。 先说一下自己的个人情况,目前做前端四年&am…...
py黑帽子学习笔记_burp
配置burp kali虚机默认装好了社区版burp和java,其他os需要手动装 burp是用java,还得下载一个jython包,供burp用 配apt国内源,然后apt install jython --download-only,会只下载包而不安装,下载的目录搜一…...
selenium,在元素块下查找条件元素
def get_norms_ele_text(self):elementsself.get_norms_elements()locBy.CSS_SELECTOR,"div.sku-select-row-label"by loc[0] # 获取By类型,例如By.CSS_SELECTORvalue loc[1] # 获取具体的CSS选择器字符串,例如"div.sku-select-row-l…...
认识String类
文章目录 String类字符串的遍历字符串的比较字符串的替换字符串的转换字符串的切割字符串的切片字符串的查找 总结 String类 在C语言中已经涉及到字符串了,但是在C语言中要表示字符串只能使用字符数组或者字符指针,可以使用标准库提 供的字符串系列函数完…...
计算机图形学入门23:蒙特卡洛路径追踪
1.前言 前面几篇文章介绍了Whitted-style光线追踪,还介绍了基于物理渲染的基础知识,包括辐射度量学、BRDF以及渲染方程,但并没有给出解渲染方程的方法,或者说如何通过该渲染方程计算出屏幕上每一个坐标的像素值。 Whitted-style光…...
探索 TensorFlow 模型的秘密:TensorBoard 详解与实战
简介 TensorBoard 是 TensorFlow 提供的可视化工具,帮助开发者监控和调试机器学习模型。它提供了多种功能,包括查看损失和精度曲线、可视化计算图、检查数据分布等。下面将介绍如何使用 TensorBoard。 1. 安装 TensorBoard 如果尚未安装 TensorBoard&…...
yolov8obb角度预测原理解析
预测头 ultralytics/nn/modules/head.py class OBB(Detect):"""YOLOv8 OBB detection head for detection with rotation models."""def __init__(self, nc80, ne1, ch()):"""Initialize OBB with number of classes nc and la…...
CICD之Git版本管理及基本应用
CICD:持续集成,持续交付--让对应的资料,对应的项目流程更加规范--提高效率 CICD 有很多的工具 GIT就是其中之一 1.版本控制概念与环境搭建 GIT的概念: Git是一款分布式源代码管理工具(版本控制工具) ,一个协同的工具。 Git得其数据更像是一系列微型文件系统的快照。使用Git&am…...
Python作用域及其应用
Python的作用域规则决定了变量在代码中的可见性和访问性。全局作用域中定义的变量可以在整个程序中访问,而局部作用域中定义的变量则只能在其被创建的函数或代码块中访问。 全局作用域与局部作用域 全局作用域中的变量通常在程序的顶层定义,可以被整个…...
谷歌上架,应用被Google play下架之后,活跃用户会暴跌?这是为什么?
在Google play上架应用,开发者们最不想到看到就是应用被下架了。这意味着所有的努力都将付诸东流,因为有的应用一但被下架,活跃用户也随之嗖嗖地往下掉,这事儿可真不是闹着玩的,严重影响了收益! 为什么你的…...
web安全渗透测试十大常规项(一):web渗透测试之Fastjson反序列化
渗透测试之Java反序列化 1. Fastjson反序列化1.1 FastJson反序列化链知识点1.2 FastJson反序列化链分析1.3.1 FastJson 1.2.24 利用链分析1.3.2 FastJson 1.2.25-1.2.47 CC链分析1.3.2.1、开启autoTypeSupport:1.2.25-1.2.411.3.2.2 fastjson-1.2.42 版本绕过1.3.2.3 fastjson…...
Unity 3D软件下载安装;Unity 3D游戏制作软件资源包获取!
Unity3D,它凭借强大的功能和灵活的特性,在游戏开发和互动内容创作领域发挥着举足轻重的作用。 作为一款顶尖的游戏引擎,Unity3D内置了先进的物理引擎——PhysX。这一物理引擎堪称业界翘楚,能够为开发者提供全方位、高精度的物理模…...
PyTorch之nn.Module与nn.functional用法区别
文章目录 1. nn.Module2. nn.functional2.1 基本用法2.2 常用函数 3. nn.Module 与 nn.functional3.1 主要区别3.2 具体样例:nn.ReLU() 与 F.relu() 参考资料 1. nn.Module 在PyTorch中,nn.Module 类扮演着核心角色,它是构建任何自定义神经网…...
2024.06.24 校招 实习 内推 面经
绿*泡*泡VX: neituijunsir 交流*裙 ,内推/实习/校招汇总表格 1、校招 | 昂瑞微2025届校园招聘正式启动 校招 | 昂瑞微2025届校园招聘正式启动 2、实习 | 东风公司研发总院暑期实习生火爆招募中 实习 | 东风公司研发总院暑期实习生火爆招募中 3、实习…...
【C++】using namespace std 到底什么意思
📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文作为 JohnKi 的学习笔记,引用了部分大佬的案例 📢未来很长&a…...
基于ESP32 IDF的WebServer实现以及OTA固件升级实现记录(三)
经过前面两篇的前序铺垫,对webserver以及restful api架构有了大体了解后本篇描述下最终的ota实现的代码以及调试中遇到的诡异bug。 eps32的实际ota实现过程其实esp32官方都已经基本实现好了,我们要做到无非就是把要升级的固件搬运到对应ota flash分区里面…...
116-基于5VLX110T FPGA FMC接口功能验证6U CPCI平台
一、板卡概述 本板卡是Xilinx公司芯片V5系列芯片设计信号处理板卡。由一片Xilinx公司的XC5VLX110T-1FF1136 / XC5VSX95T-1FF1136 / XC5VFX70T-1FF1136芯片组成。FPGA接1片DDR2内存条 2GB,32MB Nor flash存储器,用于存储程序。外扩 SATA、PCI、PCI expres…...
Android - Json/Gson
Json数据解析 json对象:花括号开头和结尾,中间是键值对形式————”属性”:属性值”” json数组:中括号里放置 json 数组,里面是多个json对象或者数字等 JSONObject 利用 JSONObject 解析 1.创建 JSONObject 对象,传…...
盲信号处理的发展现状
盲源分离技术最早在上个世纪中期提出,在1991年Herault和Jutten提出基于反馈神经网络的盲源分离方法,但该方法缺乏理论基础,后来Tong和Liu分析了盲源分离问题的可辨识性和不确定性,Cardoso于1993年提出了基于高阶统计的联合对角化盲…...
二轴机器人装箱机:重塑物流效率,精准灵活,引领未来装箱新潮流
在现代化物流领域,高效、精准与灵活性无疑是各大企业追求的核心目标。而在这个日益追求自动化的时代,二轴机器人装箱机凭借其较佳的性能和出色的表现,正逐渐成为装箱作业的得力助手,引领着未来装箱新潮流。 一、高效:重…...
使用python做飞机大战
代码地址: 点击跳转...
Python面向对象编程:派生
本套课在线学习视频(网盘地址,保存到网盘即可免费观看): https://pan.quark.cn/s/69d1cc25d4ba 面向对象编程(OOP)是一种编程范式,它通过将数据和操作数据的方法封装在一起࿰…...
华为仓颉编程语言
目录 一、引言 二、仓颉编程语言概述 三、技术特征 四、应用场景 五、社区支持 六、结论与展望 一、引言 随着信息技术的快速发展,编程语言作为软件开发的核心工具,其重要性日益凸显。近年来,华为公司投入大量研发资源,成功…...
QStringListModel 绑定到QListView
1.QStringListModel 绑定到listView,从而实现MV模型视图 2.通过QStringListModel的新增、删除、插入、上下移动,listView来展示出来 3.下移动一行,传入curRow2 的个人理解 布局 .h声明 private:QStringList m_strList;QStringListModel *m_m…...
Excel多表格合并
我这里一共有25张表格: 所有表的表头和格式都一样,但是内容不一样: 现在我要做的是把所有表格的内容合并到一起,研究了一下发现WPS的这项功能要开会员的,本来想用代码撸出来的,但是后来想想还是找其他办法,后来找到"易用宝"这个插件,这个插件可以从如下地址下载:ht…...
vue3使用pinia中的actions,需要调用接口的话
actions,需要调用接口的话,假如页面想要调用actions中的方法获取数据, 必须使用try catch async await 进行包裹,详情看下面代码 import {defineStore} from pinia import {reqCode,reqUserLogin} from ../../api/hospital/i…...
奥比中光astra_pro相机使用记录
一、信息获取 1、官网 用于了解产品信息 http://www.orbbec.com.cn/sys/37.html 2、开发者社区 咨询问题下载开发部https://developer.orbbec.com.cn/ 二 、windowvs19 1、相机型号 orbbec_astro_pro 根据对应的型号找到需要的包工具 踩坑1,因为这个相机型号…...
SQLyog脚本无限试用重置脚本
文章目录 引言脚本(win)必要操作、说明 引言 SQLyog 需要po jie,但是网上的没看到很好使的,直接下的官方。能处理14天试用也是很ok的。 脚本(win) echo offREM SQLyog注册表key,可能跟你的不一样,如果不一样,请替换…...
golang 通过reflect反射方式调用对象方法 (动态方法调用) 详解
在go语言中有一个reflect反射包是非常强大的一个包, 通过反射我们几乎可以对对象干任何事情, 今天就给大家讲一下通过反射动态调用对象方法 的方法。 “ 对象方法 的方法” 这里怎么会有2个“方法” 是不是有点绕? 非也,这里的第…...
年轻化的新一代迈腾,颜值并不丑,三大屏高通8155
年轻化的新一代迈腾,颜值并不丑,三大屏高通8155,像新势力中国汽车市场的竞争是越来越激烈,要想脱颖而出,即便是合资品牌旗下的主力常青树车型,现在也要拥抱变化了。就拿大众迈腾这款车来说,长期以来已经形成了一套固定的印象标签,无非就是中规中矩的沉稳商务风格。但全…...
全局配置-案例:配置tabBar
一、需求:实现如图所示的tabBar效果 二、实现步骤: 1.拷贝图标资源 把image文件夹拷贝到小程序项目根目录中 图片中包含-active的是选中之后的图标 图片中不包含-active的是默认图标 2.新建3个对应的tab页面 3.配置tabBar选项 (1…...
JRT性能演示
演示视频 君生我未生,我生君已老,这里是java信创频道JRT,真信创-不糊弄。 基础架构决定上层建筑,和给有些品种的植物种植一样,品种不对,施肥浇水再多,也是不可能长成参天大树的。JRT吸收了各方…...
大模型“1元购”?AI公司加速奔向应用端“大航海时代”
自字节跳动发布豆包大模型,互联网大厂纷纷就位,击穿“地板价”的打法从C端向B端拓展。这也成为今年“618”最亮眼的价格战。 5月15日,字节跳动率先宣布豆包大模型已通过火山引擎开放给企业客户,大模型定价降至0.0008元/千Tokens&…...
内存函数<C语言>
前言 前面两篇文章介绍了字符串函数,不过它们都只能用来处理字符串,C语言中也内置了一些内存函数来对不同类型的数据进行处理,本文将介绍:memcpy()使用以及模拟实现,memmove()使用以及模拟实现,memset()使用…...
【Qt】Qt框架文件处理精要:API解析与应用实例:QFile
文章目录 前言:1. Qt 文件概述2. 输入输出设备类3. 文件读写类3.1. 打开open3.2. 读read / readline/ readAll3.3. 写write3.4. 关闭close 4. 读写文件示例5. 文件件和目录信息类总结: 前言: 在现代软件开发中,文件操作是应用程序…...