[EAI-023] FAST,机器人动作专用的Tokenizer,提高VLA模型的能力和训练效率
Paper Card
论文标题:FAST: Efficient Action Tokenization for Vision-Language-Action Models
论文作者:Karl Pertsch, Kyle Stachowicz, Brian Ichter, Danny Driess, Suraj Nair, Quan Vuong, Oier Mees, Chelsea Finn, Sergey Levine
论文链接:https://arxiv.org/abs/2501.09747
论文出处:/
论文被引:/
项目主页:https://www.pi.website/research/fast
Abstract
基于Transformer的视觉-语言-动作(VLA)策略等自回归序列模型,可以非常有效地捕捉复杂且可泛化的机器人行为。 但是,此类模型对连续动作信号的进行 tokenization(离散标记化),这决定了模型预测的离散token (标记)如何映射到连续的机器人动作(action)。 当前基于简单逐维度、逐时间步长分箱方案的机器人动作离散标记化方法,在从高频机器人数据中学习灵巧技能时,通常表现不佳。 为了解决这一挑战,本文提出了一种基于离散余弦变换的基于压缩的机器人动作离散标记化方案——Frequency-space Action Sequence Tokenization (FAST),能够为高度灵巧和高频的任务训练自回归VLA,而标准离散化方法在此类任务中完全失效。 基于FAST,发布了一个通用的机器人动作离散标记化器 FAST+,它在100万个真实的机器人动作轨迹上训练。 它可以用作各种机器人动作序列(具有不同的动作空间和控制频率)的黑盒分词器(tokenizer)。 当与 VLA 模型 pi0 结合使用时,可以扩展到在1万小时的机器人数据上进行训练,并与扩散VLA模型的性能相当,但训练时间减少了5倍。
Summary
研究背景
性能好的tokenizer对序列模型的性能至关重要。当前机器人策略通常使用基于每个维度、每个时间步长分箱方案的简单 tokenization 方法,这类方法在学习具有高频控制的灵巧技能时的表现不好(本文中涉及的测试全部失败)。当预测未来动作序列时,简单的tokenizer难以捕获各个时间步之间的相关性,高度相关的action token降低了自回归VLA模型对 next token prediction 建模的有效性。
方法介绍
从第一性原理出发,开发新的 action tokenizer。关键想法:受到llama中使用的 BPE 编码方法的启发,在模型训练之前压缩机器人动作信号,减少连续token之间的相关性。考虑到机器人动作是连续信号,因此采用离散余弦变换编码,由此产生的 tokenization 方法称为 Frequency-space Action Sequence Tokenization (FAST)。在 DROID 数据集上高效训练 VLA 模型,在未见的真实环境通过自然语言提示进行零样本评测。
构建了 FAST+ 通用的机器人动作 tokenizer,在100万条真机数据上训练。可以对各种机器人动作序列进行分词,报错单臂机器人、双臂机器人和移动机器人。当pi0模型结合FAST进行训练时,比原来的结合扩散思想的模型训练时间缩短了 5 倍,但性能相当。
相关工作
基于VLM构建的VLA模型是构建通用机器人策略的有效方法。他在大规模的互联网图文对上训练,并使用机器人数据微调,用于机器人控制。VLA的优势是:1)数十亿参数的VLM骨干为策略提供了适应大型机器人数据集所需要的表达能力;2)重用VLM的权重可以提高VLA模型遵从多样化指令的能力和泛化能力,例如泛化到未见物体和未见场景背景。
当前VLA模型的控制频率基本都很低,自回归的VLA模型更甚,难以适应高频的灵巧操作任务。原因是 tokenizer 使用简单的每个维度、每个时间步长分箱方案。为此,本文提出了一种基于时间序列压缩技术的机器人动作分词器 FAST。
前置知识
问题描述:目标是训练策略 π ( a 1 : H ∣ o ) π(a_{1:H}|o) π(a1:H∣o),将观测结果 o o o 映射到未来机器人动作序列 a 1 : H a_{1:H} a1:H。假设策略输出动作块(Action Chunk),即序列长度为 H H H 动作,这使得更容易产生时间上一致的动作并减少复合误差。 动作分词(Action Tokenization)的目标是定义一个映射 T a : a 1 : H → [ T 1 , … , T n ] \mathcal{T}_{a}:a_{1:H} → [T_1,…,T_n] Ta:a1:H→[T1,…,Tn],从维度为 ∣ A ∣ |\mathcal{A}| ∣A∣ 的连续动作 a 1 : H a_{1:H} a1:H 序列映射到来自大小为 ∣ V ∣ |\mathcal{V}| ∣V∣ 的词汇表中的 n n n 个离散token序列 T ∈ ∣ V ∣ T∈|\mathcal{V}| T∈∣V∣。动作序列之间的token数量 n 可能不同,就像相同长度的句子可能被离散化为可变数量的文本token一样。
基于分箱的动作token化:动作token化最常用的方法是简单的分箱离散化。 对于给定的动作 a,这种方法独立地离散化每个维度,将训练数据集中值的范围划分为 N N N 个均匀的箱,最常用的是 N = 256 N=256 N=256。对于D维的动作序列 a 1 : H a_{1:H} a1:H,此token化方案将应用于每个时间步,从而产生最终的token序列 T a ( a 1 : H ) = [ T 1 , 1 , … , T 1 , D , … , T H , 1 , … , T H , D ] \mathcal{T}a(a1:H)=[T_{1,1},…,T_{1,D},…,T_{H,1},…,T_{H,D}] Ta(a1:H)=[T1,1,…,T1,D,…,TH,1,…,TH,D]。对于高频机器人数据,这种token化方案并非最优:很容易为每个动作片段生成数百个 token,使得难以训练并且推理速度慢。
Tokenization 对 VLA 模型训练的影响
创建了一个简单的合成时间序列数据集,其目标是预测一个插值四个随机生成点的三次曲线,如图3所示。这个问题反映了高频动作片段上训练的策略面临的挑战,即策略必须预测一系列连续的动作。训练一个小型自回归Transformer进行实验,序列时间步H从25到800,以模拟不同频率收集的动作数据。Navie方法表示将动作序列中的每一个元素进行256bins分箱操作。
实验结果表明,分箱方案的模型在低采样频率的条件下预测效果较好,但是随着采样频率增加,预测误差急剧增加。为什么呢?因为自回归模型的训练目标是下一个token预测,因此,他们的学习信号在给定 T 1 : i − 1 T_{1:i-1} T1:i−1 的情况下与 T i T_i Ti 的边际信息内容成正比。分箱方案随着采样频率的增加,边际信息接近于零:对于平滑信号,随着时间步长的缩短,每个时间步长的变化成比例地缩小。这极大地减慢了训练收敛速度,并且难以你和复杂的高频数据集。例如,OpenVLA在低频的 BridgeV2 和 RT-1 数据集上运行良好,但是对于高频的 DROID 数据集表现不佳。这说明为机器人动作设计更好的分词器的重要性。
通过时间序列压缩实现高效的动作分词器
为了解决前述提到的高频动作轨迹中的 冗余会导致每个action token的边际信息量低进而导致训练性能差的问题,需要一种能够将高度冗余的动作信号压缩减少成少量高信息量token的动作离散化方法。
本文使用基于离散余弦变换(DCT)的压缩算法构建FAST。DCT是一种频域变换,它将连续信号表示为各种频率的余弦元素之和。低频捕获信号的整体形状,而高频份量反映尖锐的跳变(sharp jumps)。
图4说明了FAST从原始机器人动作到action token的变换步骤。首先对输入动作进行归一化,然后对每个动作维度应用DCT,为了压缩信号,忽略不重要的系数,得到量化后的稀疏的矩阵。然后将矩阵展平为一个一维整数向量,然后训练一个BPE分词器将其无损压缩成稠密的token。
通用机器人动作分词器
FAST 中唯一需要学习的组件是 BPE 编码器的词汇表,这个词汇表需要针对分词器应用的每个新数据集进行循例那,虽然只需要几分钟,但也增加了使用FAST的难度。因此,使用100万个1s的动作块训练了一个通用的机器人动作分词器。已经开源并合入到Transformers库了。
训练所需要的数据集:数据集有多种动作空间:联合空间、末端执行器世界坐标系和末端执行器相机坐标系,以确保所得分词器的通用性。Open X-Embodiment、DROID和Bridge V2则以其原始形式包含在内。 在分词之前,所有动作都填充到32维,以适应不同维度的动作空间。
消融实验
模型基线:pi0、OpenVLA
实验目标:验证FAST分词器+自回归VLA模型的有效性
评估任务
如图5所示,包含7个评估任务(6个真实机器人任务,1个模拟任务),旨在测试VLA在高度灵巧的任务(例如折叠衣物)和泛化任务(例如在未见环境中进行0样本桌面操作)上的性能。
- Libero:在Libero [43]模拟基准套件上进行测试。测量了Libero-Spatial、Libero-Object、Libero-Goal和Libero-10的平均性能。
- 餐桌清理 [7] (20 Hz):一台UR5单臂机器人需要清理桌子,将12个物体分类到垃圾桶(用于垃圾)和塑料容器(用于盘子、碗、杯子和餐具)中。此任务需要精确抓取各种物体。
- 折叠T恤 [7] (50 Hz):一套双臂ARX机器人需要在一个静止的桌面上折叠各种衬衫。在任务开始时,衬衫平放在桌子上。 成功完成此任务需要精确的抓取和移动才能折叠衬衫。
- 杂货装袋 [7] (20 Hz):一台UR5单臂机器人需要将 7 个物体从桌子上装入杂货袋中,注意不要弄倒或撕破袋子。 此任务需要拾取各种各样的物体并小心地将它们放入袋中。
- 从烤面包机中取出吐司 [7] (50 Hz):一台双臂Trossen Viper-X机器人需要从烤面包机中取出两片面包并将它们放在盘子上。 此任务需要精确地抓取和放置面包片。
- 衣物折叠 [7] (50 Hz):一台双臂ARX机器人需要从篮子里取出衬衫和短裤,将它们平放在桌子上,然后折叠并堆叠起来。 这是我们测试中最灵巧的任务。 它需要精确的抓取,动态的动作来使衣物平整,在衣物缠结时进行重试和纠正,以及将折叠好的衣物精确地放置在现有的衣物堆上。报告了单个服装物品的成功率。
- 零样本DROID桌面操作 [38] (15 Hz):测试了一个在完整DROID数据集上训练的策略,该策略涵盖各种桌面操作任务,例如拾取和放置物体、擦拭、打开和关闭抽屉等。在未见的环境中测试该策略,该环境具有新的桌子设置、背景、新颖的物体、视角和桌子高度。这是第一次在完全未见的环境中对DROID策略进行“零样本”评估,无需协同训练或微调,只需使用自然语言提示预训练模型即可。
机器人动作分词器对比
使用1秒的动作片段。FAST分词器对所有数据集都实现了有效的压缩,高频动作上效果更显著,token为20-53。
先前工作中应用的naive分词方法难以在高频机器人数据上学习有效的策略。最高频的任务中尤为明显:餐桌整理 (20Hz) 和 T 恤折叠 (50Hz)。
FAST 分词技术实现了在 DROID 数据集上成功训练强大的通用策略,该策略可以通过自然语言提示,在未见过的环境中进行零样本评估,无需微调。所有先前的工作都没有显示零样本结果,而是完全专注于联合训练或微调评估。在三个大学的校园中对各种桌面操作任务进行测试,证明了策略的通用性(图 7)。 无需额外训练,该策略能够熟练地执行简单的操作任务,例如在各种场景和摄像机视角下拾取和放置物体、打开和关闭橱柜以及打开水龙头。即使是不成功的尝试也表现出合理的行为,例如靠近微波炉和洗碗机门的把手,即使最终未能打开它们。
消融研究
回答两个问题:
- FAST分词方法是否独立于底层VLA主干?
- BPE压缩步骤有多重要?
为了回答第一个问题,在高频T恤折叠数据集上训练了一个OpenVLA策略,修改了OpenVLA模型代码以接受多个输入图像并预测1秒的动作块。结果表明,FAST能够显著提高OpenVLA的性能,使其能够有效地训练高频机器人操作数据。这表明,分词方法独立于底层模型主干,并且可以轻松应用于各种预训练的自回归Transformer模型。
在桌面整理和T恤折叠任务上消融了BPE编码步骤。结果表明,没有BPE编码的策略获得了更差的性能(但仍然优于朴素分词)。 直观地说,DCT变换仍然将大部分信号信息集中在少数几个token中,从而改善了学习信号。 然而,如果没有BPE,就会出现大量重复的值为0的token,这会稀释学习信号,并显著减慢推理速度,因为模型需要自回归地预测数百个动作token,最终导致策略性能下降。
自回归VLA与扩散VLA对比
图 9 所示,在小型数据集(Libero,折叠T恤;<50小时)上,两种VLA的性能相当。 但是在像搬运桌子这样的大型数据集上,基于FAST的VLA收敛速度明显更快,在训练步骤比π0的扩散变体少3倍的情况下达到了高性能。使用FAST分词训练的自回归 π0 模型更严格地遵循语言指令:在DROID评估中,扩散π0模型经常忽略语言指令,导致分数较低。 未来会继续研究扩散和自回归VLA的语言遵循能力。
自回归VLA的一个当前局限性在于其推理速度:π0使用扩散模型通常可以在NVIDIA 4090 GPU上在100毫秒内预测一秒钟的动作片段,但π0模型使用FAST分词需要大约750毫秒的每个片段推理时间,因为它必须执行更多自回归解码步骤(通常需要解码30-60个动作token,而扩散模型π0需要10个扩散步骤)并使用完整的20亿参数语言模型主干进行自回归解码(而扩散模型π0使用3亿参数的“动作专家”)。 未来会继续研究离散token自回归Transformer模型的推理提速。
实验结论
本文介绍了 FAST,一种用于高频机器人控制数据的动作分词器。FAST使用离散余弦变换(DCT)和字节对编码(BPE)来压缩动作块,使得其具有更好的压缩效果。实验表明,与以前使用的简单动作离散化方法相比,FAST带来了显著的性能提升,并且优于基于矢量量化的更复杂的学习分词方法。
未来工作:
动作分词器。FAST是朝着通用机器人动作分词器迈出的重要一步,但仍有很多问题有待解决。在这项工作对静态机器人机械臂测试了 FAST。FAST+在其他机器人形态(如移动机器人、灵巧手和人形机器人)上具有良好的压缩能力。在这些平台上测试实际策略性能是未来工作的一个令人兴奋的方向。探索替代压缩方案,以及测试基于压缩的动作编码与非自回归解码方法(如扩散[7])的组合,是未来研究的有趣方向。
VLA 架构。本文初步探索了两种主要类型的 VLA 架构(自回归和扩散解码 VLA)之间的权衡,但最佳 VLA 架构仍未确定。未来工作应仔细研究训练速度、语言基础能力和任一方法的表达能力之间的权衡。
推理速度。 虽然π0-FAST 的整体性能与扩散π0匹配,但在推理时间上较慢。未来的工作应该探索加快自回归 VLA 模型推理速度的方法,以使它们能够解决高度动态的任务。
相关文章:
[EAI-023] FAST,机器人动作专用的Tokenizer,提高VLA模型的能力和训练效率
Paper Card 论文标题:FAST: Efficient Action Tokenization for Vision-Language-Action Models 论文作者:Karl Pertsch, Kyle Stachowicz, Brian Ichter, Danny Driess, Suraj Nair, Quan Vuong, Oier Mees, Chelsea Finn, Sergey Levine 论文链接&…...
Rust 条件语句
Rust 条件语句 在编程语言中,条件语句是进行决策和实现分支逻辑的关键。Rust 语言作为一门系统编程语言,其条件语句的使用同样至关重要。本文将详细介绍 Rust 中的条件语句,包括其基本用法、常见场景以及如何避免常见错误。 基本用法 Rust…...
Windows 上安装 PostgreSQL
Windows 上安装 PostgreSQL PostgreSQL 是一款功能强大的开源对象-关系型数据库系统,它具有出色的扩展性和稳定性。本文将详细介绍在 Windows 操作系统上安装 PostgreSQL 的步骤和注意事项。 1. 准备工作 在开始安装 PostgreSQL 之前,请确保您的计算机满足以下要求: 操作…...
UE 5.3 C++ 对垃圾回收的初步认识
一.UObject的创建 UObject 不支持构造参数。 所有的C UObject都会在引擎启动的时候初始化,然后引擎会调用其默认构造器。如果没有默认的构造器,那么 UObject 将不会编译。 有修改父类参数的需求,就使用指定带参构造 // Sets default value…...
解码,蓝桥杯2020G
a2b 解码后:aab #include<iostream> using namespace std; typedef struct Node {char data;int size;Node* next; }Node,*Linklist; char* scan(char str[],int size) {int i 0;Linklist head new Node;Linklist rear head;while (i<size-1) {Lin…...
【贪心算法篇】:“贪心”之旅--算法练习题中的智慧与策略(一)
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:贪心算法篇–CSDN博客 文章目录 一.贪心算法1.什么是贪心算法2.贪心算法的特点 二.例题1.柠…...
Python3 + Qt5:实现AJAX异步更新UI
使用 Python 和 Qt5 开发时异步加载数据的方法 在开发使用 Python 和 Qt5 的应用程序时,为了避免在加载数据时界面卡顿,可以采用异步加载的方式。以下是几种实现异步加载的方法: 1. 使用多线程(QThread) 通过将数据…...
Windows系统中Docker可视化工具对比分析,Docker Desktop,Portainer,Rancher
Docker可视化工具对比分析,Docker Desktop,Portainer,Rancher Windows系统中Docker可视化工具对比分析1. 工具概览2. Docker Desktop官网链接:主要优点:主要缺点:版本更新频率: 3. Portainer官网…...
从ai产品推荐到利用cursor快速掌握一个开源项目再到langchain手搓一个Text2Sql agent
目录 0. 经验分享:产品推荐 1. 经验分享:提示词优化 2. 经验分享:使用cursor 阅读一篇文章 3. 经验分享:使用cursor 阅读一个完全陌生的开源项目 4. 经验分享:手搓一个text2sql agent (使用langchain l…...
curope python安装
目录 curope安装 测试: 报错:libc10.so: cannot open shared object file: No such file or directory 解决方法: curope安装 git clone : GitHub - Junyi42/croco at bd6f4e07d5c4f13ae5388efc052dadf142aff754 cd models/curope/ python setup.py build_ext --inplac…...
低代码产品插件功能一览
下图是统计的目前市面上流行的低代码、零代码产品的插件功能。 产品名称 产品类型 官方插件数量 支持拓展 官方插件功能 宜搭 零代码 3 暂不支持 云打印、CAD看图、打印表单详情 微搭 低代码 1 暂不支持 小程序 明道云 低代码 2 支持 视图、工作流节点 简道…...
流浪 Linux: 外置 USB SSD 安装 ArchLinux
注: ArchLinux 系统为滚动更新, 变化很快, 所以本文中的安装方法可能很快就过时了, 仅供参考. 实际安装时建议去阅读官方文档. 最近, 突然 (也没有那么突然) 有了一大堆 PC: 4 个笔记本, 2 个台式主机 (M-ATX 主板), 1 个小主机 (迷你主机). 嗯, 多到用不过来. 但是, 窝又不能…...
开启 AI 学习之旅:从入门到精通
最近 AI 真的超火,不管是工作还是生活里,到处都能看到它的身影。好多小伙伴都跑来问我,到底该怎么学 AI 呢?今天我就把自己学习 AI 的经验和心得分享出来,希望能帮到想踏入 AI 领域的朋友们! 一、学习内容有哪些 (一)编程语言 Python 绝对是首选!它在 AI 领域的生态…...
笔记:使用ST-LINK烧录STM32程序怎么样最方便?
一般板子在插件上, 8脚 3.3V;9脚 CLK;10脚 DIO;4脚GND ST_Link 19脚 3.3V;9脚 CLK;7脚 DIO;20脚 GND 烧录软件:ST-LINK Utility,Keil_5; ST_Link 接口针脚定义: 按定义连接ST_Link与电路板; 打开STM32 ST-LINK Uti…...
开发环境搭建-4:WSL 配置 docker 运行环境
在 WSL 环境中构建:WSL2 (2.3.26.0) Oracle Linux 8.7 官方镜像 基本概念说明 容器技术 利用 Linux 系统的 文件系统(UnionFS)、命名空间(namespace)、权限管理(cgroup),虚拟出一…...
925.长按键入
目录 一、题目二、思路三、解法四、收获 一、题目 你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。 你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字&am…...
【数据采集】案例01:基于Scrapy采集豆瓣电影Top250的详细数据
基于Scrapy采集豆瓣电影Top250的详细数据 Scrapy 官方文档:https://docs.scrapy.org/en/latest/豆瓣电影Top250官网:https://movie.douban.com/top250写在前面 实验目的:基于Scrapy框架采集豆瓣电影Top250的详细数据。 电脑系统:Windows 使用软件:PyCharm、Navicat Python…...
doris:主键模型的导入更新
这篇文档主要介绍 Doris 主键模型基于导入的更新。 整行更新 使用 Doris 支持的 Stream Load、Broker Load、Routine Load、Insert Into 等导入方式,向主键模型(Unique 模型)导入数据时,如果没有相应主键的数据行,…...
日志2025.2.1
日志2025.2.1 1.做了敌人状态机 public class EnermyStateMachine { public EnermyState currentState { get; private set; } public void InitializeState(EnermyState startState) { currentState startState; currentState.Enter(); } public void Change…...
RK3568使用QT操作LED灯
文章目录 一、QT中操作硬件设备思路Linux 中的设备文件操作硬件设备的思路1. 打开设备文件2. 写入数据到设备3. 从设备读取数据4. 设备控制5. 异常处理在 Qt 中操作设备的典型步骤实际应用中的例子:控制 LED总结二、QT实战操作LED灯设备1. `mainwindow.h` 头文件2. `mainwindo…...
Rank-analysis-1.2——一款基于LCU API的排位分析工具,大四学生独立开发
LOL Rank Record Analysis:一款基于LCU API的排位分析工具,大四学生独立开发! 大家好!我是河南科技学院的大四学生,今天给大家分享一个我自己开发的软件——LOL Rank Record Analysis。这是一个基于 Riot 提供的 LCU …...
关于系统重构实践的一些思考与总结
文章目录 一、前言二、系统重构的范式1.明确目标和背景2.兼容屏蔽对上层的影响3.设计灰度迁移方案3.1 灰度策略3.2 灰度过程设计3.2.1 case1 业务逻辑变更3.2.2 case2 底层数据变更(数据平滑迁移)3.2.3 case3 在途新旧流程兼容3.2.4 case4 接口变更3.2.5…...
代码随想录-训练营-day17
235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode) /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/class S…...
C++,STL,【目录篇】
文章目录 一、简介二、内容提纲第一部分:STL 概述第二部分:STL 容器第三部分:STL 迭代器第四部分:STL 算法第五部分:STL 函数对象第六部分:STL 高级主题第七部分:STL 实战应用 三、写作风格四、…...
《数据可视化新高度:Graphy的AI协作变革》
在数据洪流奔涌的时代,企业面临的挑战不再仅仅是数据的收集,更在于如何高效地将数据转化为洞察,助力决策。Graphy作为一款前沿的数据可视化工具,凭借AI赋能的团队协作功能,为企业打开了数据协作新局面,重新…...
abc 390 D(暴搜 复杂度用 bell数 证明 n 的集合的划分方法的数目)
D题意: 将 长度为 N 的数组 划分为集合 有多少种不同的 异或和 这道题做出来和bell 数没什么关系,如果要证明复杂度那么就需要bell 数 #include <bits/stdc.h> using namespace std; typedef pair<int, int> PII; #define int long long i…...
AJAX综合案例——图书管理
黑马程序员视频地址: AJAX-Day02-10.案例_图书管理AJAX-Day02-10.案例_图书管理_总结_V1.0是黑马程序员前端AJAX入门到实战全套教程,包含学前端框架必会的(ajaxnode.jswebpackgit),一套全覆盖的第25集视频,…...
计算机网络 笔记 网络层 3
IPv6 IPv6 是互联网协议第 6 版(Internet Protocol Version 6)的缩写,它是下一代互联网协议,旨在解决 IPv4 面临的一些问题,以下是关于 IPv6 的详细介绍: 产生背景: 随着互联网的迅速发展&…...
Web服务器启动难题:Spring Boot框架下的异常处理解析
摘要 在尝试启动Web服务器时遇到了无法启动的问题,具体错误为org.springframework.boot.web.server.WebServerException。这一异常表明Spring Boot框架在初始化Web服务器过程中出现了故障。通常此类问题源于配置文件错误、端口冲突或依赖项缺失等。排查时应首先检查…...
在LINUX上安装英伟达CUDA Toolkit
下载安装包 wget https://developer.download.nvidia.com/compute/cuda/12.8.0/local_installers/cuda-repo-rhel8-12-8-local-12.8.0_570.86.10-1.x86_64.rpm 安装RPM包 sudo rpm -i cuda-repo-rhel8-12-8-local-12.8.0_570.86.10-1.x86_64.rpm sudo dnf clean all sudo dnf…...
计算机视觉和图像处理
计算机视觉与图像处理的最新进展 随着人工智能技术的飞速发展,计算机视觉和图像处理作为其中的重要分支,正逐步成为推动科技进步和产业升级的关键力量。 一、计算机视觉的最新进展 计算机视觉,作为人工智能的重要分支,主要研究如…...
Spring Boot 日志:项目的“行车记录仪”
一、什么是Spring Boot日志 (一)日志引入 在正式介绍日志之前,我们先来看看上篇文章中(Spring Boot 配置文件)中的验证码功能的一个代码片段: 这是一段校验用户输入的验证码是否正确的后端代码,…...
ComfyUI中For Loop的使用
研究了半天,终于弄明白了如何使用For Loop。 1、在For中节点,必须有输出连接到For Loop End的initial_value点,才能确保节点执行完毕后才 进入下一轮循环,否则,可能导致节点没执行完,就进入下一个循环了。…...
网站快速收录:利用网站导航优化用户体验
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/44.html 网站快速收录与用户体验的提升密切相关,而网站导航作为用户访问网站的“指南针”,其优化对于实现这一目标至关重要。以下是一些利用网站导航优化用户体验&am…...
FLTK - FLTK1.4.1 - 搭建模板,将FLTK自带的实现搬过来做实验
文章目录 FLTK - FLTK1.4.1 - 搭建模板,将FLTK自带的实现搬过来做实验概述笔记my_fltk_test.cppfltk_test.hfltk_test.cxx用adjuster工程试了一下,好使。END FLTK - FLTK1.4.1 - 搭建模板,将FLTK自带的实现搬过来做实验 概述 用fluid搭建UI…...
c#aot做跨平台动态库
c#aot技术,很多人都觉得是垃圾,没有用,其实还是很有用的。.net发展这么多年,有很多很好的功能,你可以把这些功能做成动态库供rust调用,供c/c调用。你还真别看不起这些功能,当你需要,…...
使用Pygame制作“打砖块”游戏
1. 前言 打砖块(Breakout / Arkanoid) 是一款经典街机游戏,玩家控制一个可左右移动的挡板,接住并反弹球,击碎屏幕上方的砖块。随着砖块被击碎,不仅能获得分数,还可以体验到不断加速或复杂的反弹…...
Autosar-以太网是怎么运行的?(原理部分)
写在前面: 入行一段时间了,基于个人理解整理一些东西,如有错误,欢迎各位大佬评论区指正!!! 1.TCP/IP协议详解 TCP/IP协议包含了一系列的协议,也叫TCP/IP协议族(TCP/IP P…...
小程序-基础加强-自定义组件
前言 这次讲自定义组件 1. 准备今天要用到的项目 2. 初步创建并使用自定义组件 这样就成功在home中引入了test组件 在json中引用了这个组件才能用这个组件 现在我们来实现全局引用组件 在app.json这样使用就可以了 3. 自定义组件的样式 发现页面里面的文本和组件里面的文…...
线程池以及在QT中的接口使用
文章目录 前言线程池架构组成**一、任务队列(Task Queue)****二、工作线程组(Worker Threads)****三、管理者线程(Manager Thread)** 系统协作流程图解 一、QRunnable二、QThreadPool三、线程池的应用场景W…...
Cubemx文件系统挂载多设备
cubumx版本:6.13.0 芯片:STM32F407VET6 在上一篇文章中介绍了Cubemx的FATFS和SD卡的配置,由于SD卡使用的是SDIO通讯,因此具体驱动不需要自己实现,Cubemx中就可以直接配置然后生成SDIO的驱动,并将SD卡驱动和…...
NeetCode刷题第19天(2025.1.31)
文章目录 099 Maximum Product Subarray 最大乘积子数组100 Word Break 断字101 Longest Increasing Subsequence 最长递增的子序列102 Maximum Product Subarray 最大乘积子数组103 Partition Equal Subset Sum 分区等于子集和104 Unique Paths 唯一路径105 Longest Common Su…...
网站快速收录:如何设置robots.txt文件?
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/34.html 为了网站快速收录而合理设置robots.txt文件,需要遵循一定的规则和最佳实践。robots.txt文件是一个纯文本文件,它告诉搜索引擎爬虫哪些页面可以访问ÿ…...
(超实用教程)利用MSF制作exe程序木马
msfvenom 是攻击载荷(payload)生成器 格式: msfvenom -p windows/meterpreter/reverse_tcp LHOST192.168.110.32 LPORT4456 -f exe -o payload1.exe -p:指定需要使用的payload -f:指定输出格式 -o:保…...
Spring Boot + Facade Pattern : 通过统一接口简化多模块业务
文章目录 Pre概述在编程中,外观模式是如何工作的?外观设计模式 UML 类图外观类和子系统的关系优点案例外观模式在复杂业务中的应用实战运用1. 项目搭建与基础配置2. 构建子系统组件航班服务酒店服务旅游套餐服务 3. 创建外观类4. 在 Controller 中使用外…...
4 [危机13小时追踪一场GitHub投毒事件]
事件概要 自北京时间 2024.12.4 晚间6点起, GitHub 上不断出现“幽灵仓库”,仓库中没有任何代码,只有诱导性的病毒文件。当天,他们成为了 GitHub 上 star 增速最快的仓库。超过 180 个虚假僵尸账户正在传播病毒,等待不…...
Java基础——分层解耦——IOC和DI入门
目录 三层架构 Controller Service Dao 编辑 调用过程 面向接口编程 分层解耦 耦合 内聚 软件设计原则 控制反转 依赖注入 Bean对象 如何将类产生的对象交给IOC容器管理? 容器怎样才能提供依赖的bean对象呢? 三层架构 Controller 控制…...
10 Flink CDC
10 Flink CDC 1. CDC是什么2. CDC 的种类3. 传统CDC与Flink CDC对比4. Flink-CDC 案例5. Flink SQL 方式的案例 1. CDC是什么 CDC 是 Change Data Capture(变更数据获取)的简称。核心思想是,监测并捕获数据库的变动(包括数据或数…...
F. Greetings
题目链接:Problem - F - Codeforces 题目大意:给你n个线段, 求有多少对(两个)线段满足完全覆盖, 例如: 设一个线段有a,b两点, 满足 ai < aj < bj < bi (i,j为每个线段的下…...
深度学习练手小例子——cifar10数据集分类问题
CIFAR-10 是一个经典的计算机视觉数据集,广泛用于图像分类任务。它包含 10 个类别的 60,000 张彩色图像,每张图像的大小是 32x32 像素。数据集被分为 50,000 张训练图像和 10,000 张测试图像。每个类别包含 6,000 张图像,具体类别包括&#x…...