当前位置: 首页 > article >正文

AnyTouch:跨多个视觉触觉传感器学习统一的静态动态表征

25年3月来自人大、武汉科技大学和北邮的论文“AnyTouch: Learning Unified Static-dynamic Representation Across Multiple Visuo-tactile Sensors”。

视觉触觉传感器旨在模拟人类的触觉感知,使机器人能够精确地理解和操纵物体。随着时间的推移,许多精心设计的视觉触觉传感器已经集成到机器人系统中,帮助完成各种任务。然而,这些低标准化视觉触觉传感器的独特数据特性阻碍了强大的触觉感知系统的建立。解决这个问题的关键,在于学习统一的多传感器表示,从而整合传感器并促进它们之间的触觉知识迁移。为了实现这种性质的统一表示,引入 TacQuad,这是一个来自四个不同视觉触觉传感器的对齐多模态多传感器触觉数据集,它可以明确地集成各种传感器。认识到人类通过获取纹理和压力变化等各种触觉信息来感知物理环境,本文提出从静态和动态角度学习统一的多传感器表征。通过整合触觉图像和视频,提出 AnyTouch,这是一种具有多级结构的统一静态动态多传感器表征学习框架,旨在提高综合感知能力并实现有效的跨传感器迁移。这种多级架构通过掩码建模从触觉数据中捕获像素级细节,并通过多模态对齐和跨传感器匹配学习语义-级传感器-无关的特征来增强感知和可迁移性。其对多传感器可迁移性进行全面分析,并在各种离线数据集和现实世界的倾倒任务中验证方法。

触觉是人类感知物理世界的重要感觉。多年来,研究人员一直致力于通过各种触觉传感器赋予机器人类似人类的触觉感知能力(Liu,2022;Maiolino,2013;Yuan,2017)。其中,各种类型的视觉触觉传感器具有与人类触觉相当的高分辨率,引起了广泛关注(Yuan,2017;Donlon,2018;Lambeta,2020)。许多研究尝试使用配备视觉触觉传感器的机器人执行抓取(Xu,2024)和插入(Li,2014)等操作任务。

然而,由于视觉触觉传感器的标准化程度低,不同的传感器在感知相同的触觉信息时可能会表现出差异。这种多变性给构建精确的机器人触觉系统带来挑战,因为特定于传感器的数据收集(Yang et al.,2022;Gao et al.,2023)和模型训练限制单个传感器模型的数据规模和多样性,并导致感知能力不佳。为了解决这个问题,一些初步努力探索协作使用多传感器数据来增强跨传感器知识的可迁移性(Yang et al.,2024;Zhao et al.,2024)。

然而,缺乏一致的多传感器数据阻碍这些尝试有效地整合不同的传感器并构建统一的表征空间。考虑到这个数据问题,Rodriguez(2024)收集一个双传感器配对数据集以实现跨传感器生成。然而,他们对特定操作任务的关注限制传感器和收集目标的多样性。此外,他们忽视配对多模态数据对于增强传感器可迁移性和实现全面触觉感知的潜在好处。

多源学习。从具有更大数据规模和多样性的多源数据中学习有望提高模型的性能和泛化能力,但在集成数据表征空间方面面临挑战。研究人员发现,由于数据源之间的差异,多源模型往往难以捕捉统一的表征(Glorot,2011;Zhao,2019)。对比学习(Wang,2022b;Zhao,2023)被提出用于学习与语言无关的表征以进行多源语言训练,而循环一致性损失(Zhu,2017;Kim,2022)则在多源图像生成中对齐目标域分布。同样,为了整合来自不同传感器的多源触觉数据,出现多传感器联合训练(Zhao,2024;Higuera,2024;Gupta,2025)、多模态对齐(Yang,2024)和跨传感器生成(Rodriguez,2024)等技术。然而,这些方法忽视联合利用多模态数据和对齐的多传感器数据来弥补传感器差距的好处。

视觉触觉感知。视觉触觉传感器因其高分辨率而受到广泛关注(Yuan,2017;Donlon,2018;Lambeta,2020;Zhang,2024;2025)。如今,许多工作利用视觉触觉传感器来捕捉接触变形,从而完成灵巧的操作,例如密集包装(Li,2022)、抓取(Xu,2024)和插入(Li,2014)。视觉触觉传感器还可以与其他传感器协作,以协助机器人执行更复杂的操作任务。例如,Feng(2024)将视觉触觉信号与视觉和音频数据动态集成,以协作完成细粒度的操作任务,例如倾倒和带键槽的销插入。除了这些需要动态触觉感知的任务外,视觉触觉传感器还用于静态任务,例如材料分类(Yang,2022)和形状重建(Gao,2022b)。然而,由于视觉触觉传感器的标准化程度低,这些方法无法利用来自其他传感器的更大、更多样化的数据,并且缺乏传感器可迁移性。

表征学习。表征学习在提高各个领域的模型泛化方面取得显著的成功。BERT(Devlin,2018)和掩码自动编码器(MAE)(He,2022)等技术增强模型在各种下游应用中的性能。随着多模态学习的兴起,表征学习已在各个领域扩大其影响。视觉语言预训练(Radford,2021)取得了巨大成功,并且正在集成更多模态,包括音频(Guzhov,2022)、触觉(Yang,2024)和 3D 点云(Xue,2023)。其中,来自视觉触觉传感器的触觉信息可以表示为图像,从而使视觉相关技术在触觉方面取得长足进步。应用 MAE(Cao,2023;Higuera,2024)或多模态对齐(Yang,2024;Cheng,2024)增强触觉模型能力。但是,这些努力尚未探索如何获得适用于各种任务的统一视觉触觉表征。

本文介绍的 TacQuad 是一个对齐的多模态多传感器触觉数据集,其目标种类更多,数据量更大,传感器类型更多。为了保证传感器的多样性,选择公开可用传感器中 GelSight Mini (Inc.) 和 DIGIT (Lambeta et al., 2020),自制传感器中 DuraGel (Zhang et al., 2024) 和力场传感器中 Tac3D (Zhang et al., 2022) 进行数据收集。前三个传感器用于收集触觉图像,而 Tac3D 用于捕捉变形力场。然而,考虑到收集细粒度对齐的触觉数据成本很高,为了在确保尽可能多数据配对的同时大规模收集数据,这里用粗细两种方法来收集对齐数据:
细粒度时空对齐数据。将四个传感器并排固定在一个矩形容器中,并将它们连接到标定平台的可移动端。使用程序控制四个传感器按顺序、以相同的速度和深度按压同一物体上的相同位置。从而获得一组连续的时空对齐接触帧。由于精度要求高,该过程非常耗时,因此尽力收集 25 个物体上的 30 组对齐数据。这部分数据总共包含 17,524 个接触帧,可用于跨传感器生成等细粒度任务。
粗粒度空间对齐数据。以手持方式收集数据,使用四个传感器按顺序按压同一物体上的相同位置。按压时,在手持传感器上引入一些扭转动作,以更好地模拟人类真实的动态触摸体验。这种方法能够在短时间内获得大量对齐数据。使用这种方法,从 99 个目标收集 151 组对齐数据,包括室内和室外场景。这部分数据总共包含 55,082 个接触帧。

数据集中的每个触觉帧都有配对的视觉图像和触觉属性描述,这些描述使用 GPT-4o 生成并手动校正。目标是通过与多模态数据对齐来弥合传感器之间的差距并实现更全面的触觉感知。因此,获得一个对齐的多传感器多模态触觉数据集,如图所示。

请添加图片描述

AnyTouch 是一个统一的多传感器触觉表征学习框架,从静态和动态感知的角度进行研究,如图所示。具体来说,整合触觉图像和视频的输入格式,并专注于学习精细任务的细粒度像素级细节和语义-级传感器-无关特征,以理解属性并通过多级结构构建统一空间。还提出通用传感器 token,以实现更好的知识迁移。

请添加图片描述

静态和动态触觉感知的统一输入格式

在日常生活中,人类的触觉感知包括静态和动态过程。短暂的触摸可以快速识别材料和纹理等属性,而解锁等任务需要持续的动态感知。这两种感知相辅相成,能够全面了解物理环境并参与各种交互。这就启发从结合静态和动态感知的角度学习统一的多传感器表征,分别使用触觉图像和视频。

给定静态触觉图像 I 和动态触觉视频片段 V,将触觉图像视为单帧静态视频,以统一触觉图像和视频。具体而言,复制 I 沿时间轴 F次,并使用统一的 4-D 张量 X_T 来表示 I 和 V,如 Girdhar(2022;2023)所述,其中 F 表示帧数,H、W 表示图像形状。然后,通过共享 patch 投影层将 X_T 处理为时空 token z,其中 N 是 token 长度,d 表示特征维度。通过以这种方式统一图像和视频的处理,该方法将触觉图像和视频输入整合在一起,增强模型理解静态和动态信息的能力,并赋予模型完成各种任务的潜力。

掩码建模:学习像素级细节

视觉触觉图像是细粒度数据,具有细微触觉变形和动态过程中连续变化的像素级细节,尤其适用于精细感知任务。为了增强触觉表征模型的细粒度感知能力,采用掩码自动编码器(MAE)技术(He et al.,2022;Tong et al.,2022),迫使模型能够跨多个传感器捕获像素级细节。具体来说,以掩码率 ρ 随机掩码触觉图像和视频的tokens,并构建解码器以获得重建的静态图像 Iˆ 和动态视频 Vˆ。相应的损失函数 LS_rec 和 L^D_rec 是像素空间中原始掩码 token 和重建 token 之间的均方误差(MSE)损失。利用掩码建模来学习像素级的细粒度触觉变形特征,以及触觉变化的时间动态。

为了进一步增强模型对连续变形变化的理解,在重建动态视频 V 的同时引入预测下一帧 V_F+1 的额外任务。损失函数 L^D_pred 是原始帧 V_F+1 和预测帧 Vˆ_F+1 之间的 MSE 损失。

多模态对齐:理解语义级属性

通过掩码建模获得具有细粒度感知细节的触觉表示后,下一步旨在进一步理解语义级触觉属性,并使用成对的多模态数据作为缩小传感器之间差距的桥梁。因此,使用多模态对齐,将来自各种传感器的数据与成对的模态绑定在一起,以获得更全面的语义级感知并减少传感器之间的感知差异。然而,不同数据集之间数据收集场景的差异(例如,模拟与现实)使得简单的视觉-触觉对齐在弥合传感器差距方面效果较差。因此,选择文本模态作为对齐触觉、视觉和文本模态的锚点,该模态一致地描述跨数据集的触觉属性。由于三模态触觉数据集很少见,大多数仅包含视觉-触觉对,因此探索两种策略:自动扩展文本模态配对的数量,和设计与缺失模态兼容的对齐方法。首先为每个传感器选择代表性数据集,然后使用 GPT-4o 生成或扩展这些数据集中的文本模态。通过这种方法,为四个数据集中的 140 万个样本创建新的文本对。

基于这些广泛的触觉数据集,开发一种模态-缺失-觉察的触觉-视觉-语言对比学习方法,利用触觉和其他模态之间的配对数据进行对齐。为批次中的每种模态组合选择最大的子集进行多模态对齐,最大限度地利用配对数据。考虑一对从单模态编码器派生的单模态表征 (x_T, x_V, x_L),其中 x_T 是触觉表示,x_V 是视觉表示,x_L 是文本表示。然后,在批次内执行多模态对齐 (Radford et al., 2021),L_V→L 如下所示(以缺少模态的视觉语言对齐为例):

请添加图片描述

此方法通过对齐模态之间样本的交点,最大限度地利用缺失模态的配对数据。L_V→T、L_L→T 和 L_L→V 的计算类似,但方向相反。然后得到联合对齐损失:

请添加图片描述

跨传感器匹配:提取传感器-无关特征

为了充分利用多传感器对齐的数据,并通过对同一物体的多传感器触觉表征进行聚类,构建统一的空间,本文引入一个跨传感器匹配任务。在此任务中,模型需要确定两个触觉图像或视频是否从同一物体上的同一位置收集。目标是在执行多模态对齐的同时,对来自不同传感器相同触觉信息的表征进行聚类,从而增强对传感器-无关特征的学习并形成统一的多传感器表征空间,如图所示。

请添加图片描述

将两个不同传感器从同一物体和位置收集的数据视为正对,将来自不同物体或位置的数据视为负对。该模型经过训练可以区分正对和负对。对于 TacQuad 中的每个图像和视频样本 X_T,随机选择一个来自另一个传感器捕获的同一位置同一目标样本作为正样本 X_T+,并从任何其他目标或位置的任何数据集中选择另一个样本作为负样本 X_T。逐元素地将触摸表征 x_T 与 x+_T 和 x_T 相乘,然后将每个结果输入到 MLP 中以计算匹配分数 m+ 和 m^−。

损失函数 L_match 即类似于 Lin et al. (2020) 的二元交叉熵损失。此任务要求模型区分来自不同传感器具有相同语义的特征,从而明确地将具有相同目标信息的表征聚类,形成统一的多传感器表征空间。如上图所示,AnyTouch 结合此任务,不同于现有的多模态对齐工作。这种统一的多传感器表征空间构建可以明确地减少传感器之间的差距,并有助于推广到未见过的传感器。

由于此任务和多模态对齐都侧重于语义级特征,将它们合并为第二阶段,将掩码建模作为第一阶段。这种多层次的训练方法,能够开发出适用于不同粒度任务、统一的多传感器表征。

通用传感器 token

除了构建多传感器表征空间外,还旨在提取和存储与每个传感器相关的信息,以帮助理解输入数据。更重要的是,希望在推广到新传感器时集成并有效地传输这些信息。使用特定传感器的token,是一种提取特定传感器信息的方法,但这种方法在推广到新传感器时无法完全迁移来自所有见过传感器的信息(Yang,2024)。

因此,使用通用传感器 token 来集成和存储与各种传感器相关的信息,从而在推广到新传感器时最大限度地利用多传感器数据。在训练期间,随机用通用传感器 token 替换特定传感器的 token,期望它们有助于理解来自各种传感器的输入数据。具体来说,引入一组可学习的传感器 token {s_k} ∪ s_u,K 是传感器类型的数量,s_k 是第 k 个传感器的特定传感器 token,s_u 是通用传感器 token,L 是每个传感器的传感器 token 数量。当将来自第 k 个传感器的触觉 token 序列 z 输入编码器 Φ_enc 以获得其表征 x_T 时,从 s_k 和 s_u 中随机选择一个与 z 连接。在推理过程中,始终使用通用传感器 token 来处理来自新传感器的数据。

训练范式

该框架具有多层次结构,两个阶段的训练按顺序进行。在第一阶段,同时进行静态触觉图像和动态触觉视频的重建,以及触觉视频特有的下一帧预测任务。在第二阶段,继续使用触觉图像和视频,同时执行多模态对齐和跨传感器匹配任务。

实现中,编码器基于 OpenCLIP-Large(Cherti,2023)。对于触觉解码器,用具有 8 层和 512 维的 Vision Transformer (ViT)(Dosovitskiy,2020)。用 AdamW(Loshchilov,2017 年)优化器,学习率为 2e-4。经过 1 个 epoch 的预热期后,实现线性学习率衰减。对于每个触觉视频片段,用 T = 3 帧。在 4 个 NVIDIA A800 GPU 上训练第一阶段 20 个 epoch,训练第二阶段 12 个 epoch。在整个训练过程中,交替使用触觉图像和视频片段进行训练。用掩码比 ρ = 0.75。在对齐过程中,用文本模态作为锚点,冻结文本编码器,同时对视觉编码器执行 LoRA 微调。设定对齐强度 α_TV = α_TL = 1.0 和 α_VL = 0.2,并设定跨传感器匹配的权重 λ = 0.1。按照(Yang et al.,2024),对每种类型的传感器使用 L = 5 个传感器 tokens。在两个阶段中,将使用通用传感器 token 的概率 p_u 设置为从 0 线性增加到 0.75。

在这项工作中,为 Touch and Go、Object-Folder Real 和 TacQuad 生成触觉属性的配对文本描述。将配对的视觉图像和预定义的文本提示输入 GPT-4o 以获得文本描述。借用 (Cheng et al., 2024) 的提示并进行适当的调整。Touch and Go 和 TacQuad 的提示如图所示。

请添加图片描述

具体来说,由于 ObjectFolder Real 数据集有两个摄像头视图,并且某些触摸位置或细节可能不可见,同时输入两个视觉图像和一个触觉图像,并在提示中明确指示。由于 TVL 和 SSVTP 数据集仅包含简单的短语级触觉描述,还使用 GPT-4o 扩展这两个数据集中的文本模态。同时输入视觉图像和现有的文本描述。

使用 GPT-4o 生成注释后,进行简单粗略的抽样检查以确保正确性。只要模型能够正确识别物体,大模型中存储的物体相关物理属性知识就可以有效地提供准确的触觉注释。当物体的类别难以确定或存在遮挡时,生成的注释可能会出现错误。然而,这种情况相对少见。

为了测试方法在现实世界物体操作任务中的动态感知能力,对一个现实世界任务进行实验:细粒度倾倒,如图所示。将 AnyTouch 与最近的多传感器模型 T3 进行比较,并使用仅对触觉图像进行训练的静态 AnyTouch 模型作为基线。这两种模型都不包含专门为动态感知设计的模块。进行 10 次现实世界测试运行,并记录每次测试的倾倒质量和目标质量之间的误差。然后,在测试运行中对误差取平均值以获得“平均误差”并将其用作度量标准。当触觉编码器冻结并且仅对策略网络进行微调时,没有看到触觉图像的 CLIP 在完成任务时会遇到困难,这凸显细粒度动态感知的挑战。相比之下,静态 AnyTouch 的表现与在更多数据上训练的 T3 相当。融入动态感知能力后,AnyTouch 取得最佳表现,体现从静态和动态两个角度学习统一的多传感器表征对于完成包括现实任务在内的各类任务的重要性。

请添加图片描述

相关文章:

AnyTouch:跨多个视觉触觉传感器学习统一的静态动态表征

25年3月来自人大、武汉科技大学和北邮的论文“AnyTouch: Learning Unified Static-dynamic Representation Across Multiple Visuo-tactile Sensors”。 视觉触觉传感器旨在模拟人类的触觉感知,使机器人能够精确地理解和操纵物体。随着时间的推移,许多精…...

关于stm32mp157

目录 设备树: 内核移植: 编写一个驱动的过程: 编写i2c传感器驱动的过程: 从arm11后,命名改为cortex, 1.cortex A:高端应用型领域 2.cortex R:实时性要求 3.cortex M:…...

关于单项梯度冻结小记

单项权重冻结(Partial Weight Freezing)详解 单项权重冻结(Partial Weight Freezing) 是深度学习模型训练中的一种技巧,指的是在训练过程中,只冻结(固定)部分网络权重,而…...

Ubuntu20.04安装Nvidia显卡驱动

Ubuntu20.04安装Nvidia显卡驱动 安装环境为Dell R540服务器 官网下载Nvidia显卡驱动 https://www.nvidia.cn/geforce/drivers/ 安装显卡驱动 chmod x NVIDIA-Linux-x86_64-470.63.01.run sudo ./NVIDIA-Linux-x86_64-470.63.01.run 遇到nouveau报错 lsmod查看nouveau驱动…...

YOLOv11 目标检测

本文章不再赘述anaconda的下载以及虚拟环境的配置,博主使用的python版本为3.8 1.获取YOLOv11的源工程文件 链接:GitHub - ultralytics/ultralytics: Ultralytics YOLO11 🚀 直接下载解压 2.需要自己准备的文件 文件结构如下:红…...

VSCode C/C++ 环境搭建指南

一、前言 Visual Studio Code(简称 VSCode)是一款轻量级且功能强大的跨平台代码编辑器,凭借丰富的插件生态和高度的可定制性,深受开发者喜爱。对于 C/C 开发者而言,在 VSCode 中搭建开发环境,能够获得灵活…...

Python-docx库详解:轻松实现Word文档自动化生成与图片尺寸控制

Python-docx库详解:轻松实现Word文档自动化生成与图片尺寸控制 在现代办公自动化的浪潮中,文档处理是一项不可或缺的任务。Python作为一种强大的编程语言,提供了丰富的库来简化这些任务。其中,python-docx库是处理Word文档的有力…...

Python大疆导出csv文件转化大地2000的dxf文件

大疆导出三维模型里面有个models\pc\0\terra_grid\csv\terra_grid.csv文件,里面记录所有点的坐标和高程,但坐标是经纬度坐标,需要转化为大地2000坐标。 我参照了:经纬度坐标转换为CGCS2000大地坐标系对应XY值(PYTHON实…...

Python 中下划线 “_” 的多面性:从变量到约定

# Python中下划线“_”的多面性:从变量到约定 在Python的语法体系里,下划线“_”看似毫不起眼,实则扮演着极为重要且多样化的角色。它不仅能作为普通变量参与编程,更在多个特殊场景下有着独特的用途与约定。深入理解下划线的各种…...

Vue3项目开发:状态管理实践指南

# Vue3项目开发:状态管理实践指南 一、引言 背景介绍 在Vue项目中,状态管理是一个非常重要的话题。合理的状态管理能够帮助我们更好地组织和管理数据,提升项目的可维护性和可扩展性。本文将深入探讨Vue3项目中状态管理的最佳实践,…...

JVM-JAVA编译到执行全过程

源码文件(.java)到代码执行的全过程: 该过程主要分为四个阶段,“编译-》加载-》解释-》执行”。 在编译阶段需要将源码文件(.java)通过语法分析、语义分析、注解处理后得到class文件; 在加载…...

数据结构-------栈

顺序栈: 一、数据结构定义 数据元素 DATATYPE typedef struct person {char name[32];char sex;int age;int score; } DATATYPE;顺序栈结构 SeqStack typedef struct list {DATATYPE *head; // 栈空间首地址int tlen; // 栈总容量(total leng…...

机器学习概要

文章目录 一、什么是机器学习 二、机器学习的种类 1. 有监督学习 2. 无监督学习 3.强化学习 三、机器学习的应用 四、机器学习的步骤 1. 数据的重要性 2. 数据和学习的种类 3. 可视化 一、什么是机器学习 机器学习指的是计算机根据给定的问题、课题或环境进行学习&a…...

python:music21 与 AI 结合应用探讨

Python 的 music21 库与人工智能(AI)技术结合应用具有广泛的可能性,尤其是在音乐生成、分析和风格模拟等领域。以下是具体的结合方向与示例: 1. 音乐生成与 AI AI 模型驱动音乐生成: 使用深度学习模型(如 …...

【LangChain入门 2 Model组件】开始!LLM Models简单对话

文章目录 一、使用langchain_ollama二、采用DeepSeek的API三、Model 介绍3.1 OllamaLLM 预训练模型3.2 ChatOllama 聊天预训练模型3.3 OllamaEmbeddings 实现一个helloworld,跑通一个简单的对话。 后面章节会正式介绍LangChain的各个功能。 后台llm的端口可以任意选…...

7种寻址方式

1. 立即寻址 立即寻址也叫立即数寻址,操作数本身就在指令中给出,只要取出指令也就取到了操作数,这个操作数被称为立即数。立即数要求以 “#” 为前缀。 #0x1100:表示十六进制数#0b1100:表示二进制数#0d1100&#xff…...

C语言中,#define和typedef 定义int* 一个容易混淆的点

前言 首先来看一个代码&#xff1a; #include <stdio.h> #include <string.h>#define int_ptr int *int main() {int c 100;int_ptr a , b; // 等效于int * a,b; 那么b就是int类型&#xff0c;不是int*类型a &c;b &c; //报错return 0; } 原意&#x…...

C++20 中线程管理与取消机制的深度剖析

文章目录 std::jthread&#xff1a;更智能的线程管理背景与优势构造函数与 std::stop_token 的集成 std::stop_token、std::stop_source 和 std::stop_callback&#xff1a;灵活的取消机制std::stop_token&#xff1a;取消请求的指示器std::stop_source&#xff1a;取消请求的发…...

Vue3 核心特性解析:Suspense 与 Teleport 原理深度剖析

Vue3 核心特性解析&#xff1a;Suspense 与 Teleport 原理深度剖析 一、Teleport&#xff1a;突破组件层级的时空传送 1.1 实现原理图解 #mermaid-svg-75dTmiektg1XNS13 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-s…...

FPGA——实现LED流水灯

文章目录 一、Quartusll_18.1和VS Code软件的关联二、DE2-115的时钟电路三、流水灯的分层次设计四、总结 一、Quartusll_18.1和VS Code软件的关联 1.先打开Quartus II 软件&#xff0c;然后选择菜单栏“Tools”下的“Options…”。 2.点击“Options…”&#xff0c;在弹出的对…...

Excel 小黑第12套

对应大猫13 涉及金额修改 -数字组 -修改会计专用 VLOOKUP函数使用&#xff08;查找目标&#xff0c;查找范围&#xff08;F4 绝对引用&#xff09;&#xff0c;返回值的所在列数&#xff0c;精确查找或模糊查找&#xff09;双击填充柄就会显示所有值 这个逗号要中文的不能英…...

6、说一下索引失效的场景?【中高频】

索引失效意味着 查询操作 不能利用索引进行数据检索&#xff0c;而是使用 全表扫描&#xff08;也就是 数据库需要从磁盘上读取表的所有数据行&#xff09;&#xff0c;从而导致性能下降&#xff0c;下面一些场景会发生索引失效 对索引使用左或者左右模糊匹配&#xff08;where…...

Noe.js 原生 http 模块 vs Express 框架对比

Noe.js 原生 http 模块 vs Express 框架对比 Noe.js 原生 http 模块 vs Express 框架对比 以下从多个维度对比两种方法&#xff0c;并提供详细示例&#xff0c;帮助初学者理解差异。 1. 基础架构对比 特性原生 http 模块Express 框架核心依赖Node.js 内置模块 (require(htt…...

滚动元素的新api

点击的时候需要双重视图滚动 itemClick(id) {// 滚动到对应位置this.$nextTick(() > {// 找到对应 id 在 initList2 中的索引const index this.initList2.findIndex((item) > item.id Number(id));if (index ! -1) {// 获取所有菜单项const menuItems document.queryS…...

多机调度问题(C语言)

代码如下&#xff1a; #include<stdio.h> #include<stdlib.h>int compare(void* a, void* b)//比较函数&#xff0c;用于qsort按处理时间从大到小排序 {return *(int*)a - *(int*)b; }int LPT(int jobs[], int n, int m)//多机调度问题的LPT算法 {qsort(jobs, n, …...

JS做贪吃蛇小游戏(源码)

一、HTML代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><link rel…...

烽火HG680-KB_海思HI3798MV310_安卓9.0_U盘强刷固件包及注意点说明

之前发布过这个固件包&#xff0c;关于烽火HG680-KA&#xff0f;HG680-KB_海思HI3798MV310_安卓9.0_U盘强刷固件包详细说明一下&#xff0c;汇总总结一些常遇到的情况&#xff0c;这次固件会分开发布&#xff0c;以免混淆。 上一个帖子地址&#xff1a;烽火HG680-KA&#xff0…...

Java数据结构相关知识

文章目录 1. 自动装箱和自动拆箱2. Object的equals方法3. Comparable和Comparator接口 1. 自动装箱和自动拆箱 自动装箱&#xff1a;将基本数据类型自动转换为对应的包装类。自动拆箱&#xff1a;将包装类自动转换为对应的基本数据类型。 显示装箱 int primitiveInt 10; //…...

996引擎 - 红点系统

996引擎 - 红点系统 总结NPC 红点(TXT红点)Lua 红点1. Red_Point.lua2. UI_Ex.lua参考资料以下内容是在三端 lua 环境下测试的 总结 红点系统分几个部分组成。 M2中设置变量推送。 配置红点表。 Envir\Data\cfg_redpoint.xls 2.1. UI元素中找到ID填写 ids 列。 主界面挂载…...

7种数据结构

7种数据结构 顺序表sqlite.hseqlite.c 单链表linklist.clinklist.h 双链表doulinklist.cdoulinklist.h 链式栈linkstack.clinkstack.h 队列SeqQueue.cSeqQueue.h 树tree.c 哈希表hash.c 顺序表 sqlite.h #ifndef __SEQLIST_H__ #define __SEQLIST_H__ typedef struct person…...