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

视觉-和-语言导航的综述:任务、方法和未来方向

22年6月来自UC Santa Cruz、澳大利亚的阿德莱德大学和 USC 的论文“Vision-and-Language Navigation: A Survey of Tasks, Methods, and Future Directions”。

人工智能研究的一个长期目标是构建能够用自然语言与人类交流、感知环境并执行现实世界任务的智体。视觉与语言导航 (VLN) 是实现这一目标的一个基础性跨学科研究课题,并日益受到自然语言处理、计算机视觉、机器人技术和机器学习领域的关注。本文回顾 VLN 这一新兴领域的当代研究,涵盖任务、评估指标、方法等。通过对当前进展和挑战进行结构化分析,重点介绍当前 VLN 的局限性以及未来研究的机遇。

视觉与语言导航 (VLN) (Anderson,2018b;Chen,2019;Thomason,2019b) 是一个新兴的研究领域,旨在构建一个能够用自然语言与人类交流并在真实 3D 环境中导航的具身智体 (embodied agent)。VLN 通过自然语言通信扩展了模拟环境 (Zhu,2017;Mirowski,2019) 和真实环境 (Mirowski,2018) 中的视觉导航。如图所示,VLN 是一项涉及预言机(通常是人类)、智体和环境的任务。智体和预言机使用自然语言进行交流。智体可以请求指引,预言机可以做出回应。智体根据接收的指令和观察的环境进行导航并与环境交互以完成任务。同时,预言机观察环境和智体的状态,并可能与环境进行交互以帮助智体。

请添加图片描述

VLN 任务面临诸多挑战。首先,VLN 面临复杂的环境,需要有效理解和协调来自不同模态的信息。其次,VLN 智体需要一种用于导航过程的推理策略。数据稀缺也是一个障碍。最后,将在见过环境中训练的模型泛化到可见环境也至关重要。根据各自的挑战对解决方案进行分类。(1)表征学习方法,有助于理解来自不同模态的信息。(2)行动策略学习,旨在根据收集的信息做出合理的决策。(3)以数据为中心的学习方法,有效地利用数据并解决数据稀缺等数据挑战。(4)事先探索有助于模型熟悉测试环境,从而提高其泛化能力。

智体能够解读自然语言指令(在某些情况下,在导航过程中请求反馈),这正是 VLN 与视觉导航 (Bonin-Font et al., 2008) 不同之处。在下表中,主要根据通信复杂性和任务目标这两个维度对当前 VLN 基准进行分类。
请添加图片描述

如下表是 VLN 数据集比较:
请添加图片描述

初始指令

在许多 VLN 基准测试中,智体会在整个导航过程中获得自然语言指令,例如“上楼,经过客厅的桌子。左转,穿过中间的门”。

细粒度导航。智体需要严格遵循自然语言指令才能到达目标。Anderson (2018b) 基于 Matterport3D 模拟器 (Chang,2017) 创建 R2R 数据集。R2R 中的实体智体在模拟器中穿过房屋,遍历导航图上的边,跳转到包含全景视图的相邻节点。R2R 经过扩展,创建了其他 VLN 基准测试。Room-for-Room 将 R2R 中的路径连接到更长的轨迹 (Jain,2019)。Yan (2020) 收集 XL-R2R 数据集,以使用中文指令扩展 R2R。 RxR(Ku et al., 2020)包含英语、印地语和泰卢固语指令。该数据集包含更多样本,且其中的指令与这些指令的虚拟姿势做到时间对齐。RxR 的英语拆分进一步扩展,通过融入地标信息构建 Landmark-RxR(He et al., 2021)。

在大多数当前数据集中,智体在预定义的视点处遍历导航图。为了便于将迁移学习应用到真实智体,VLN 任务应提供连续的动作空间和可自由导航的环境。为此,Krantz et al.(2020)在连续环境中重建基于导航图的 R2R 轨迹,并创建 VLNCE。Irshad et al.(2021)提出 Robo-VLN 任务,其中智体在连续的动作空间中以长视域轨迹进行操作。

室外环境通常比室内环境更复杂,包含的物体也更多。在 TOUCHDOWN (Chen et al., 2019) 中,智体按照指令在纽约市街景渲染的模拟环境中导航,以找到隐藏的物体。大多数照片级逼真的户外 VLN 数据集,包括 TOUCHDOWN (Chen et al., 2019)、StreetLearn (Mirowski et al., 2019; Mehta et al., 2020)、StreetNav (Hermann et al., 2020) 和 Talk2Nav (Vasudevan et al., 2021),都是基于谷歌街景提出的。

一些研究使用自然语言来引导无人机。LANI (Misra et al., 2018) 是一个 3D 合成导航环境,智能体按照自然语言指令在地标之间导航。当前无人机导航数据集通常位于 Unity3D 等合成环境中(Blukis,2018/2019)。

粗粒度导航。在现实生活中,由于人类指导者(预言者)可能不了解路线,因此可能无法获得关于路线的详细信息。通常,指令更简洁,仅包含目标信息。RoomNav(Wu,2018)要求智体根据“前往 X”的指令进行导航,其中 X 是预先定义的房间或物体。在 Embodied QA(Das,2018)中,智体在环境中导航以找到给定问题的答案。REVERIE(Qi,2020b)中的指令由人类注释,因此更加复杂和多样化。智体在房间中导航,并从多个竞争候选对象中区分出目标。在 SOON(Zhu,2021a)中,智体会收到一条长而复杂的、由粗到细的指令,该指令会逐渐缩小搜索范围。

导航+目标交互。对于某些任务,目标对象可能被隐藏(例如抽屉里的勺子),或者需要改变状态(例如请求一片苹果,但只有一整个苹果可用)。在这些情况下,需要与对象交互才能完成任务(例如打开抽屉或切苹果)。交互式问答 (IQA) 要求智体进行导航,有时还需要与对象交互来回答给定的问题。基于 AI2-THOR (Kolve et al., 2017) 中的室内场景,Shridhar et al. (2020) 提出 ALFRED 数据集,其中为智体提供了粗粒度和细粒度的指令,使其在交互式视觉环境中完成家务任务。CHAI (Misra et al., 2018) 要求智体进行导航并与环境进行简单的交互。

预言机导航

在导航 VLN 任务中,智体可以在导航过程中从预言机接收进一步的自然语言指导。例如,如果智体不确定下一步该做什么(例如,进入厨房),它可以发送[求助]信号,预言机就会响应“向左走”来提供帮助 (Nguyen et al., 2019)。

细粒度导航。初始的细粒度导航指令在复杂环境中可能仍然不明确。来自 Oracle 的指导可以澄清可能产生的混淆。Chi(2020 年)推出 Just Ask——一项智体可以在导航过程中向 Oracle 寻求帮助的任务。

粗粒度导航。如果一开始只给出粗粒度的指令,智体往往会更加困惑,并花费更多时间探索。进一步的指导可以解决这种歧义。VNLA(Nguyen,2019 年)和 HANNA(Nguyen & Daumé III,2019 年)都训练智体在室内导航寻找物体。智体可以向 Oracle 请求帮助,Oracle 会通过提供子任务来帮助智体取得进展。VNLA 中的 Oracle 使用预定义脚本进行响应,而 HANNA 中的 Oracle 使用神经网络生成自然语言响应。 CEREALBAR(Suhr,2019)是一项领导者和追随者之间的协作任务。两个智体在虚拟游戏环境中移动,以收集有效的卡组合。

导航+物体交互。VLN 尚处于起步阶段,目前尚无支持引导和物体交互的 VLN 数据集。

人机对话

使用自然语言请求帮助对人类来说非常友好 (Banerjee,2020;Thomason,2019b)。例如,当智体不确定人类想要什么水果时,它可以问:“你想要什么水果?冰箱里的香蕉还是桌子上的苹果?”,人类的回答将提供清晰的导航方向。

细粒度导航。没有数据集属于此类别。目前,带有可能指导的详细路线指示可以帮助智体在大多数模拟环境中实现相对较好的性能。期望为此类开发数据集,用于复杂环境中的超长距离导航任务,尤其是在动态丰富的环境中,对话对于消除困惑至关重要。

粗粒度导航。CVDN (Thomason et al., 2019b) 是一个人与人对话的数据集。除了解释自然语言指令并决定下一步行动外,VLN 智体还需要用自然语言提问以获得指导。了解最佳后续步骤的预言机需要理解并正确回答这些问题。

对话在复杂的户外环境中非常重要。de Vries et al. (2018) 推出 Talk the Walk 数据集,其中导游掌握地图知识并引导游客到达目的地,但不知道游客的具体位置;而游客则通过离散动作在二维网格中导航。

导航+对象交互。Minecraft 协作建筑(Narayan-Chen,2019)研究智体如何通过与预言机通信将块放入建筑物中。TEACh(Pad-makumar,2021)是一个研究目标交互和导航与自由形式对话的数据集。跟随者与指挥官交谈并与环境互动以完成各种家务,例如煮咖啡。Dial-FRED(Gao,2022)通过允许智体主动提问来扩展ALFRED(Shrid-har,2020)数据集。

如图所示,将现有方法分为表征学习、行动策略学习、数据中心学习和先验探索。表征学习方法帮助智体理解这些模态之间的关系,因为 VLN 涉及多种模态,包括视觉、语言和动作。此外,VLN 是一项复杂的推理任务,任务结果取决于累积的步骤,而更好的行动策略有助于决策过程。此外,VLN 任务在训练数据方面面临挑战。一个严重的问题是稀缺性。为 VLN 收集训练数据既昂贵又耗时,而且现有的 VLN 数据集相对于 VLN 任务的复杂性而言相对较小。因此,数据中心方法有助于利用现有数据并创建更多的训练数据。先验探索有助于智体适应以前未见过的环境,提高其泛化能力,缩小见过环境与未见过环境之间的性能差距。
请添加图片描述

表征学习

表征学习帮助智体理解指令中的单词与环境中感知到的特征之间的关系。

预训练

视觉或语言。使用预训练模型初始化视觉或文本编码器,可以为智体提供单模态知识。预训练视觉模型可以使用 ResNet (He et al., 2016) 或 Vision Transformers (Dosovitskiy et al., 2020)。其他导航任务 (Wijmans et al., 2019b) 也可以提供视觉初始化 (Krantz et al., 2020)。大型预训练语言模型,例如 BERT (Devlin et al., 2019) 和 GPT (Radford et al., 2019),可以对语言进行编码并提升指令理解能力 (Li et al., 2019),这些模型可以在 VLN 任务中进行微调之前,使用 VLN 指令 (Pashevich et al., 2021) 进行进一步预训练。

视觉与语言。视觉和语言预训练模型为文本和视觉提供了良好的联合表征。一种常见的做法是使用预训练模型(例如 ViLBERT (Lu et al., 2019))初始化 VLN 智体 (Kim et al., 2021)。该智体可以使用 VLN 特定的特征(例如物体和房间)进行进一步训练 (Qi et al., 2021)。
VLN。下游任务受益于与预训练任务的紧密关联。研究人员还探索了直接在 VLN 领域进行预训练。VLN-BERT(Majumdar,2020)预训练导航模型,以衡量路径和指令之间的兼容性,从而将 VLN 格式化为路径选择问题。PREVALENT(Hao,2020)基于图像-文本-动作三元组从头开始训练,以学习 VLN 任务中的文本表征。基于 BERT 的预训练模型中 [CLS] token 的输出嵌入可以循环方式利用来表示历史状态(Hong,2021;Moudgil,2021)。Airbert(Guhur,2021)在大规模领域数据集上进行预训练后,在小样本设置下取得了良好的性能。

语义理解

VLN 任务的语义理解融合了 VLN 中重要特征的知识。除了原始特征之外,高级语义表示也能提升在未见环境中的性能。
模态内特征。视觉或文本模态可以分解为许多特征,这些特征在 VLN 中的作用不同。神经模型提取的整体视觉特征可能并不重要,在某些情况下甚至可能损害性能 (Thomason et al., 2019a; Hu et al., 2019; Zhang et al., 2020b; Schumann and Riezler, 2022)。因此,找到最能提升性能的特征至关重要。诸如视觉外观、路线结构和检测的物体等高级特征的表现优于 CNN 提取的低级视觉特征 (Hu et al., 2019)。指令中不同类型的 tokens 也发挥着不同的作用 (Zhu et al., 2021c)。提取这些 tokens 并对对象 tokens 和方向 tokens 进行编码至关重要 (Qi et al., 2020a; Zhu et al., 2021c)。
跨模态:不同模态之间的语义联系:动作、场景、观察的对象、方向线索以及指令中提到的对象,可以被提取出来,然后利用注意机制进行软对齐 (Qi et al., 2020a; Gao et al., 2021)。软对齐还能突出显示指令中与当前步骤相关的部分 (Landi et al., 2019; Zhang et al., 2020a)。

图表征

构建图以整合来自指令和环境观察的结构化信息,可以提供明确的语义关系来指导导航。图神经网络可以编码文本和视觉之间的关系,以更好地解释上下文信息 (Hong et al., 2020a; Deng et al., 2020)。图可以记录导航过程中的位置信息,用于预测最可能的轨迹 (Anderson et al., 2019a) 或动作空间的概率分布 (Deng et al., 2020)。结合先前的探索,可以构建一个关于可导航环境的概览图 (Chen et al., 2021a),以改进导航解释。

记忆增强模型

信息在智体导航过程中不断积累,直接利用这些信息效率不高。记忆结构有助于智体有效地利用导航历史。一些解决方案利用诸如长短期记忆(LSTM)之类的记忆模块,或循环利用信息状态(Hong et al., 2021),这些方案相对容易实现,但随着路径长度的增加,可能难以记住路径起始处的特征。另一种解决方案是构建单独的记忆模型来存储相关信息(Zhu et al., 2020c;Lin et al., 2021;Nguyen and Daumé III, 2019)。值得注意的是,通过对单个视图、全景图以及历史记录中的所有全景图进行分层编码,HAMT(Chen et al., 2021b)成功地利用完整的导航历史记录进行决策。

辅助任务

辅助任务帮助智体在无需额外标签的情况下更好地理解环境及其自身状态。从机器学习的角度来看,辅助任务通常以附加损失函数的形式实现。例如,辅助任务可以解释其先前的操作,或预测未来决策的信息 (Zhu et al., 2020a)。辅助任务还可以涉及当前任务,例如当前任务的完成情况,以及视觉与指令的协调 (Ma et al., 2019a; Zhu et al., 2020a)。值得注意的是,辅助任务在调整用于 VLN 的预训练表示时非常有效 (Huang et al., 2019b)。

动作策略学习

面对众多可能的动作选择和复杂的环境,动作策略学习提供了多种方法来帮助智体确定最佳动作。

强化学习

VLN 是一个顺序决策问题,可以自然地建模为马尔可夫决策过程。因此,强化学习 (RL) 方法被提出来学习针对 VLN 任务的更优策略。RL 方法面临的一个关键挑战是 VLN 代理仅在场景结束时接收成功信号,因此很难知道哪些动作应该归因于成功,哪些动作应该受到惩罚。为了解决不适定反馈问题,Wang (2019, 2020c) 提出 RCM 模型,以目标导向的外部奖励和指令保真度的内部奖励,在局部和全局上强化跨模态基础。He (2021) 建议利用指令和关键地标之间的局部对齐作为奖励。诸如 CLS (Jain,2019) 或 nDTW (Ilharco,2019) 等评估指标也可以提供信息丰富的奖励信号 (Landi,2020),自然语言也可以提供奖励建议 (Fu,2019)。

为了对环境动态进行建模,Wang (2018) 利用基于模型的强化学习来预测下一个状态,并提升在未知环境中的泛化能力。Zhang(2020a) 发现,递归交替使用模仿学习和强化学习的学习方案可以提高性能。

导航过程中的探索

在导航过程中探索和收集环境信息有助于更好地理解状态空间。学生-强制是一种常用的策略,其中智体根据采样动作持续导航,并由最短路径动作进行监督 (Anderson et al., 2018b)。

探索与利用之间存在权衡:探索越多,智体的性能越好,但代价是路径更长、持续时间更长,因此模型需要确定何时以及探索的深度 (Wang et al., 2020a)。在收集到局部信息后,智体需要决定选择哪个步骤,或者是否回溯 (Ke et al., 2019)。值得注意的是,Koh et al. (2021) 设计 ​​Pathdreamer,这是一个视觉世界模型,用于合成视觉观察的未来视角,而无需实际展望未来。

规划未来的导航步骤可以制定更好的行动策略。从视觉方面来看,预测航点 (Krantz et al., 2021)、下一状态和奖励 (Wang et al., 2018)、生成未来观测 (Koh et al., 2021) 或整合邻近视图 (An et al., 2021) 已被证明是有效的。识别并在正确的位置停止也可以降低导航成本 (Xiang et al., 2020)。自然语言指令还包含地标和方向线索,以规划详细步骤。Anderson (2019b) 根据指令预测即将发生的事件,该指令用于通过语义空间图预测动作。(Kurita and Cho, 2020) 将 VLN 表述为一种生成方法,其中使用语言模型来计算所有可能指令的分布。该指令还可用于标记智能体需要逐步完成的导航和交互里程碑 (Raychaudhuri,2021;Song,2022)。

寻求帮助

智体在不确定下一步行动时会寻求帮助 (Nguyen,2021a)。可以利用行动概率或单独训练的模型 (Chi,2020;Zhu,2021e;Nguyen,2021a) 来决定是否寻求帮助。使用自然语言与预言机对话比发送信号涵盖的问题范围更广。目前,基于规则的方法(Padmakumar,2021)和基于神经网络的方法(Roman,2020;Nguyen,2021a)都已被开发用于构建具有对话能力的导航智体。同时,对于没有提供预言机的智体,来用自然语言回答问题的任务(Thomason,2019b;Padmakumar,2021),研究人员也需要构建基于规则的预言机(Padmakum,2021)或基于神经网络的预言机(Roman,2020)。DialFRED (Gao et al., 2022) 使用语言模型作为预言机来回答问题。

以数据为中心的学习

与之前讨论的专注于构建更佳 VLN 智体结构的研究相比,以数据为中心的方法能够最有效地利用现有数据或创建合成数据。

数据增强

轨迹-指令增强。增强后的路径-指令对可直接用于 VLN。目前,常见的做法是训练一个说话人模块,根据给定的导航路径生成指令 (Fried et al., 2018)。生成的数据质量参差不齐 (Zhao et al., 2021; Huang et al., 2019a)。因此,对齐评分器 (Huang et al., 2019b) 或对抗性鉴别器 (Fu et al., 2020) 可以选择高质量的对进行增强。风格迁移模块还可以通过调整源域中的指令来提升指令质量 (Zhu et al., 2021d)。

环境增强。生成更多环境数据不仅有助于生成更多轨迹,还能缓解已知环境中的过拟合问题。在不同视角下随机遮罩相同的视觉特征 (Tan et al., 2019)、分割房屋场景并重新混合 (Liu et al., 2021) 或更改风格和物体 (Li et al., 2022) 可以创建新的环境,并进一步用于生成更多轨迹-指令对 (Fried et al., 2018)。训练数据也可以通过将某些视觉特征替换为反事实特征 (Parvaneh et al., 2020) 来增强。

课程学习

课程学习 (Bengio et al., 2009) 在训练过程中逐渐增加任务难度。指令长度可以作为任务难度的指标。BabyWalk (Zhu et al., 2020b) 在训练过程中不断增加训练样本的指令长度。轨迹中的属性也可用于对任务难度进行排序。Zhang et al. (2021) 使用每条路径经过的房间数量重新排列 R2R 数据集。他们发现课程学习有助于平滑损失图景并找到更好的局部最优解。

多任务学习

不同的 VLN 任务可以通过跨任务知识迁移相互受益。Wang et al. (2020d) 提出一种与环境无关的多任务导航模型,适用于 VLN 和基于对话历史导航任务 (Thomason et al., 2019b)。 Chaplot (2020) 提出一个注意模块来训练多任务导航智体遵循指令并回答问题 (Wijmans,2019a)。

指令解释

以不同方式多次解释的轨迹指令可能有助于智体更好地理解其目标。LEO (Xia,2020) 利用一组共享参数对所有指令进行编码,以增强文本理解。LWIT (Nguyen,2021b) 解释指令,使其明确与哪一类目标进行交互。与较长且语义纠缠的指令相比,更短、更简洁的指令可以为智体提供更清晰的指导,因此 Hong (2020b) 将长指令分解为更短的指令,使智体能够跟踪进度并分别关注每个原子指令。

先验探索

在已见过环境中的良好表现通常无法泛化到未知环境 (Hu,2019;Parvaneh,2020;Tan,2019)。先验探索方法允许代理观察并适应未知环境,从而弥合已经过环境与未知环境之间的性能差距。Wang (2019) 引入一种自监督模仿学习,用于学习智体自身过去的良好行为。匹配评判者确定的与指令最匹配的最佳导航路径将用于更新智体。Tan 等人 (2019) 利用测试环境对路径进行采样和扩充,以实现自适应。Fu (2020) 提出基于环境的先验探索,其中智体只能探索其部署的特定环境。当利用图时,先前的探索可以构建关于未见环境的图或概览,从而为导航提供明确的指导 (Chen et al., 2021a; Zhou et al., 2021)。

相关文章:

视觉-和-语言导航的综述:任务、方法和未来方向

22年6月来自UC Santa Cruz、澳大利亚的阿德莱德大学和 USC 的论文“Vision-and-Language Navigation: A Survey of Tasks, Methods, and Future Directions”。 人工智能研究的一个长期目标是构建能够用自然语言与人类交流、感知环境并执行现实世界任务的智体。视觉与语言导航…...

JUC入门(四)

ReadWriteLock 代码示例: package com.yw.rw;import java.util.HashMap; import java.util.Map; import java.util.concurrent.locks.ReentrantReadWriteLock;public class ReadWriteDemo {public static void main(String[] args) {MyCache myCache new MyCache…...

day 21 常见降维算法

一、无监督降维 定义:这类算法在降维过程中不使用任何关于数据样本的标签信息(比如类别标签、目标值等)。它们仅仅根据数据点本身的分布、方差、相关性、局部结构等特性来寻找低维表示。 输入:只有特征矩阵 X。 目标&#xff1a…...

代理IP高可用性与稳定性方案:负载均衡、节点健康监测与智能切换策略

一、负载均衡策略:动态分配与场景适配 多算法协同调度 轮询与加权轮询:适用于定时数据采集等低频任务,通过静态IP池按顺序分配请求,避免单一节点过载。例如,静态IP池可支持电商商品价格监控,按固定周期切换…...

C语言:在操作系统中,链表有什么应用?

在操作系统中,链表是一种重要的数据结构,凭借其灵活的内存管理和高效的插入/删除特性,被广泛应用于多个核心模块。以下是其主要应用场景及详细说明: 1. 内存管理:空闲内存块管理 应用场景:操作系统需要管…...

RocketMQ

一、引言 Message Queue(消息 队列),从字⾯上理解:⾸先它是⼀个队列。FIFO先进先出的数据结构——队列。消息队列就是所谓的存放消息的队列。 消息队列解决的不是存放消息的队列的⽬的,解决的是通信问题。 …...

学习BI---QuickBI介绍

BI是什么 BI 数据仓库(存数据) OLAP(多维分析) 数据挖掘(找规律) 可视化(图表/看板) 人话解释就是把企业里乱七八糟的数据变成老板能看懂的报告,帮他们做更聪明的决…...

【数据结构】AVL树的实现

文章目录 1. AVL 的概念2. AVL 树的实现2.1 AVL 树的结构2.2 AVL 树的插入2.2.1 AVL 树插入一个值的大致过程2.2.2 平衡因子更新 2.3 旋转2.3.1 旋转的原则2.3.2 右单旋2.3.3 左单旋2.3.4 左右双旋2.3.5 右左双选 2.4 AVL 树的查找2.5 AVL 树平衡检测 1. AVL 的概念 AVL树是最…...

基于Zynq SDK的LWIP UDP组播开发实战指南

一、为什么选择LWIP组播? 在工业控制、智能安防、物联网等领域,一对多的高效数据传输需求日益增长。Zynq-7000系列SoC凭借其ARM+FPGA的独特架构,结合LWIP轻量级网络协议栈,成为嵌入式网络开发的理想选择。本文将带您实现: LWIP组播配置全流程动态组播组切换技术零拷贝数据…...

【esp32 控制台】-命令

文章目录 1 esp32控制台简介2 控制台命令编程2.1 控制台配置交互设备初始化控制台初始化等待命令输入 2.2 命令实现2.2.1 命令注册 踩坑记录 1 esp32控制台简介 可以通过idf.py monitor调出idf的控制台,结束控制台用ctrl ]。 esp32的控制台就像linux中的shell一样…...

DApp开发全流程解析:模式设计、功能参考与合约管理实践

DApp开发全流程解析:模式设计、功能参考与合约管理实践 引言:Web3.0时代的DApp开发范式 随着区块链技术的成熟,DApp(去中心化应用)已成为Web3.0生态的核心载体。截至2025年,全球DApp数量突破10万&#xf…...

I/O多路复用:poll与epoll

一、select/poll与epoll对比 核心区别 特性select/pollepoll内核数据结构数组(线性结构)红黑树(存储监听的fd)内存拷贝每次调用需将fd列表从用户态拷贝到内核态仅在注册fd时拷贝一次(epoll_ctl)内核事件检…...

【调制识别】PGD攻击中参数的含义

在PGD(Projected Gradient Descent)对抗攻击中,代码如下: # 定义PGD对抗样本生成类 class AttackPGD(nn.Module): def __init__(self, model, config):super(AttackPGD, self).__init__()self.model model …...

设备数据看板助力自动化工厂实现生产智能精细化管理

工厂数字化转型需要实现自动化设备生产现场可视化、设备系统间的互联互通,以及数据的智能决策。然而,当前许多制造企业仍面临着传统单机设备同质化严重、数字化服务能力不足、售后成本高企、系统集成效率低下等挑战。企业如何通过自动化装备看板和实时数…...

单点登录是是什么?具体流程是什么?

SSO⼀般都需要⼀个独⽴的认证中⼼(passport),⼦系统的登录均得通过passport,⼦系统本⾝将不参与登录操作,当⼀个系统成功登录以后,passport将会颁发⼀个令牌给各个⼦系统,⼦系统可以拿着令牌会获…...

什么业务需要用到waf

Web应用防火墙(Web Application Firewall,简称WAF)主要用于保护Web应用程序免受各种网络攻击,以下是需要用到WAF的业务类型及具体场景: 一、电子商务业务 业务特点:涉及用户注册、登录、支付等敏感操作&a…...

java中的Servlet4.x详解

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 Servlet 4.x 是 Java EE 8(现 Jakarta EE)规范的一部分,于 2017 年正式发布。作为 Servlet 技术的重大更…...

## Docker 中 Elasticsearch 启动失败:日志文件权限问题排查与解决

好的,这是一份关于你遇到的 Docker Elasticsearch 启动报错问题的笔记,包含问题描述、我的分析判断以及最终的解决方案,适合用于整理成文章。 Docker 中 Elasticsearch 启动失败:日志文件权限问题排查与解决 在使用 Docker部署 E…...

JavaScript:PC端特效--缓动动画

一、缓动效果原理 缓动动画就是让元素运动速度有所变化,最常见的就是让元素慢慢停下来 思路: 让盒子每次移动的距离慢慢变小,速度就会慢慢降下来核心算法:(目标值-现在位置)/10作为每次移动距离的步长停…...

【深度学习新浪潮】什么是多模态大模型?

多模态大模型是人工智能领域的前沿技术方向,它融合了多种数据模态(如文本、图像、语音、视频、传感器数据等),并通过大规模参数模型实现跨模态的联合理解与生成。简单来说,这类模型就像人类一样,能同时“看”“听”“读”“说”,并将不同信息关联起来,完成复杂任务。 …...

C++23 std::mdspan:多维数组处理新利器

文章目录 引言C23简介std::mdspan的定义与特点定义特点 std::mdspan的优势零成本抽象的多维数据访问减少内存开销提高代码灵活性 std::mdspan的应用场景科学计算图形学 相关提案示例代码使用动态扩展使用静态和动态扩展 总结 引言 在C的发展历程中,每一个新版本都带…...

09、底层注解-@Import导入组件

09、底层注解-Import导入组件 Import是Spring框架中的一个注解,用于将组件导入到Spring的应用上下文中。以下是Import注解的详细介绍: #### 基本用法 - **导入配置类** java Configuration public class MainConfig { // 配置内容 } Configuration Impo…...

码蹄集——N是什么、棋盘

MT1223 N是什么 给定一系列数字3、10、21、36…,输入正整数N,输出上述序列的第N个值。从N1开始计数。 格式 输入格式:输入正整数N 输出格式:输出整型 样例 1 输入:5 输出:55 备注:N小于…...

C++中聚合类(Aggregate Class)知识详解和注意事项

一、聚合类(Aggregate Class)概念 聚合(Aggregate) 是 C 中一类特殊的类类型,无用户自定义构造函数、无私有或受保护非静态数据成员、无虚函数、无基类(C11 起基类必须也是聚合且无私有/受保护成员&#x…...

python打卡day30

模块和库的导入 知识点回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 作业:自己新建几个不同路径文件尝试下如何导入 python的学习就像…...

PostGIS实现栅格数据导出图片标准格式【ST_AsGDALRaster】

ST_AsGDALRaster 函数应用详解:将栅格数据导出为标准图片格式 [文章目录] 一、函数概述 二、函数参数详解 三、关键功能示例 四、GDAL 选项配置指南 五、性能优化建议 六、注意事项与限制 七、应用场景 八、总结 一、函数概述 ST_AsGDALRaster是PostGIS中…...

4.6 sys模块

sys --- 仅作了解 面试之前冲击一下 python的垃圾回收机制 import sys # 1. api_version : 获取python的内部版本号 print(sys.api_version) #1013 # 2. copyright: 获取cpython的版本 print(sys.copyright) #3.getfilesystemencoding() getdefaultencoding():获…...

「HHT(希尔伯特黄变换)——ECG信号处理-第十三课」2025年5月19日

一、引言 心电信号(ECG)是反映心脏电活动的重要生理信号,其特征提取对于心脏疾病的诊断和监测具有关键意义。Hilbert - Huang Transform(HHT)作为一种强大的信号处理工具,在心电信号特征提取领域得到了广泛…...

枪机定焦系统的自动控制装置

枪机定焦系统,作为一种监控设备,通常被广泛应用于各种需要高清、远距离监控的场合。该系统的主要特点是其镜头焦距固定,不能手动或自动调节,从而确保了监控画面的稳定性和清晰度。当提到枪机定焦系统采用自动功能时,可…...

【Unity】Unity中将字典序列化

Unity中将字典序列化,在预制体上能够看到字典的内容,也可以直接在预制体上拖拽给字典赋值 直接上代码 using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine;public class SerializableD…...

VTK|箱体切割器

文章目录 效果实现类头文件实现类源文件如何调用项目git链接 效果 实现类头文件 /*** file BoxClipperController.h* brief 该头文件定义了 BoxClipperController 类,用于管理基于盒子的网格数据裁剪操作。* details 该类提供了使用 vtkBoxWidget 对网格数据进行裁…...

CS50x 01 c

1 getchar() 在 C 语言里&#xff0c;getchar()是一个十分常用的函数&#xff0c;其功能是从标准输入&#xff08;一般指键盘&#xff09;读取单个字符。下面为你详细介绍它的用法。 基本语法 getchar()函数的原型定义在<stdio.h>头文件中&#xff0c;语法形式如下&am…...

确保高质量的音视频通话,如何最大化利用视频带宽

在当今数字时代&#xff0c;音视频内容随处可见&#xff0c;对于开发者来说&#xff0c;理解互联网带宽变得至关重要。我们的在线体验质量&#xff0c;无论是观看高清电影还是演唱会直播&#xff0c;都严重依赖于互联网带宽的概念。在本文中&#xff0c;我们将揭示视频带宽的复…...

@RequestParam 和 @RequestBody、HttpServletrequest 与HttpServletResponse

在Java Web开发中&#xff0c;RequestParam、RequestBody、HttpServletRequest 和 HttpServletResponse 是常用的组件&#xff0c;它们用于处理HTTP请求和响应。下面分别介绍它们的使用场景和使用方法&#xff1a; 1. RequestParam RequestParam 是Spring MVC框架中的注解&am…...

HashMap 的特点及应用场景

一、HashMap 核心特点 1. 基本特性 键值对存储&#xff1a;基于 Map 接口实现&#xff0c;存储 Key-Value 对 允许 null 键/值&#xff1a;可以有一个 null 键和多个 null 值 非线程安全&#xff1a;多线程环境下需要额外的同步措施 无序存储&#xff1a;不保证元素的插入顺…...

day30 python 模块、包与库的高效使用指南

目录 一、Python库的分类与适用场景 表格 1.1 基础工具库 1.2 科学计算库 1.3 数据分析库 1.4 Web开发库 1.5 机器学习库 1.6 自动化脚本库 1.7 网络爬虫库 二、模块与包的导入方式 2.1 标准导入 2.2 从模块中导入特定项 2.3 非标准导入&#xff08;不推荐&#x…...

JVM核心配置参数详解与调优指南

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 引言 Java虚拟机&#xff08;JVM&#xff09;的配置参数直接影响应用程序的性能、稳定性和资源利用率。合理配置参数能够显著提升吞吐量、降低延迟并避免内存…...

python打卡第30天

知识点回顾&#xff1a; 一&#xff0c;导入官方库的三种手段。 使用 import 直接导入整个模块 import module_name 使用 from ... import ... 导入特定功能 from module_name import function_name 使用 as 关键字重命名模块或功能 import module_name as alias # 或 from mod…...

数据要素及征信公司数据要素实践

数据要素及征信公司数据要素实践 1.数据要素的定义与核心特征2.征信公司应用数据要素的实践路径3.总结1.数据要素的定义与核心特征 数据要素是数字经济时代的新型生产要素,指以电子形式存在、通过计算方式参与生产经营活动并创造价值的数据资源。 其核心特征包括: 新型生产…...

耗时十分钟,做了一个 uniapp 灵感泡泡机

最近&#xff0c;我用 UniApp 搭配 CodeBuddy 实现了一个充满童话感的小应用&#xff0c;名叫 IdeaBubbles&#xff08;灵感泡泡机&#xff09;。它是一个单页 WebApp&#xff0c;用来记录那些转瞬即逝的灵感时刻。整个界面以梦幻气泡和彩虹玻璃拟态为主题&#xff0c;视觉效果…...

《Head First 设计模式》第二章 - 笔记

本书是本人写的设计模式的笔记&#xff0c;写下核心要点&#xff0c;如果你掌握过设计模式&#xff0c;想快速阅读本书内容&#xff0c;这个笔记适合你阅读。如果你是新手&#xff0c;有 java 基础和 oo 设计原则基础&#xff0c;你适合跟我一样从零阅读本书。 第一章 观察者模…...

matlab绘制光学传递函数mtf曲线

在 MATLAB 中绘制光学系统的光学传递函数&#xff08;Modulation Transfer Function&#xff0c;MTF&#xff09;曲线可以通过以下步骤实现。MTF 是描述光学系统对物体细节的传递能力的函数&#xff0c;通常用于分析成像系统的性能。 假设我们有一个理想的光学系统&#xff0c…...

贵州某建筑物挡墙自动化监测

1. 项目简介 某建筑物位于贵州省某县城区内&#xff0c;靠近县城主干道&#xff0c;周边配套学校、医院、商贸城。建筑物临近凤凰湖、芙蓉江等水系&#xff0c;主打“湖景生态宜居”。改建筑物总占地面积&#xff1a;约5.3万平方米&#xff1b;总建筑面积&#xff1a;约15万平…...

自定义协议与序列化

前言 书接上回&#xff0c;我们上一篇提到了协议并且我们草率的写了一个协议&#xff0c;然后又对TCP的R和W留了一个伏笔&#xff0c;我们今天彻底做个了断。 UDP是面向数据报的&#xff0c;它要么不读&#xff0c;要么就是一次读完的&#xff0c;所以不存在数据断断续续的问…...

MySQL中的Change Buffer是什么,它有什么作用?

MySQL 中的 Change Buffer&#xff08;更改缓冲区&#xff09;是 InnoDB 存储引擎使用的一种特殊数据结构&#xff0c;主要用于优化对二级索引&#xff08;secondary indexes&#xff09;的写操作性能。 它的核心作用是&#xff1a; 当对表进行 INSERT、UPDATE 或 DELETE 操作…...

Ubuntu 20.04之Docker安装ES7.17.14和Kibana7.17.14

你需要已经安装如下运行环境: Ubuntu 20.04 docker 28 docker-compose 1.25 一、手动拉取镜像 docker pull docker.elastic.co/kibana/kibana:7.17.14docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.14 或者手动导入镜像 docker load -i es7.17.14.ta…...

ThreadLocal作一个缓存工具类

1、工具类 import java.util.HashMap; import java.util.Map;public class ThreadLocalUtil {// 使用Map存储多类型数据private static final ThreadLocal<Map<String, Object>> CONTEXT_HOLDER new ThreadLocal<>();// 存储数据public static void set(Str…...

DeepSeek在旅游行业的智能化革命

2025年,从贵州全域智慧旅游平台的行程规划革命,到黄山景区"AI旅行助手"的实时服务升级,再到宁夏"游宁AI"的全域智能导览,DeepSeek通过技术创新与行业场景的深度融合,正在重新定义"智慧旅游"的内涵。这场变革不仅体现在效率提升层面,更通过…...

说一下响应状态码有哪些?

HTTP响应状态码分类(RFC 7231标准) 1. 1xx(信息类) 临时响应,表示请求已被接收,需要继续处理 100 Continue:客户端应继续发送请求体 101 Switching Protocols:服务器同意升级协议(如WebSocket) 102 Processing(WebDAV):服务器正在处理但未完成 2. 2xx(成功类)…...

ABAP实战案例--获取当前数据由哪个用户锁住

1、业务场景&#xff1a; A用户正在打开订单&#xff0c;订单已上锁&#xff1b;B用户打开时只允许查看并提醒由哪个用户正在操作该笔订单。 2、函数使用&#xff1a;ENQUEUE_READ 代码示例&#xff1a; DATA:LV_MESSAGE TYPE SY-MSGV1,LV_UNAME TYPE UNAME.DATA:LV_GARG …...