【arxiv‘24】Vision-Language Navigation with Continual Learning

论文信息

题目:Vision-Language Navigation with Continual Learning
视觉-语言导航与持续学习
作者:Zhiyuan Li, Yanfeng Lv, Ziqin Tu, Di Shang, Hong Qiao

论文创新点

  1. VLNCL范式:这是一个新颖的框架,它使得智能体能够在适应新环境的同时,保留从先前任务中获得的知识,这对于实际应用中的泛化能力至关重要。

  2. 双循环场景重放(DualSR):文章引入了一种新的双循环场景重放方法,该方法受大脑记忆重放机制的启发,并与VLN智能体集成,有助于巩固过去的经验并增强跨新任务的泛化能力。

  3. 多场景记忆缓冲区:设计了一个基于任务域的记忆缓冲区,允许智能体存储和重放来自不同场景的记忆,从而有效地保留多样化的环境知识。

  4. 持续学习评估指标:提出了两个新的评估指标——未见转移(UT)已见转移(ST),用于评估智能体的知识转移和持续学习能力。

摘要

视觉-语言导航(VLN)是嵌入式智能领域的关键领域,要求智能体根据自然语言指令在3D环境中进行导航。传统的VLN研究主要集中在提高环境理解和决策准确性上。然而,这些方法在智能体部署到新环境时通常表现出显著的性能差距,主要是由于训练数据的多样性有限。扩展数据集以覆盖更广泛的环境是不切实际且成本高昂的。我们提出了视觉-语言导航与持续学习(VLNCL)范式来解决这一挑战。在这一范式中,智能体在保留先前获得的知识的同时,逐步学习新环境。VLNCL使智能体能够维持环境记忆并提取相关知识,允许快速适应新环境的同时保留现有信息。我们引入了一种新颖的双循环场景重放方法(DualSR),该方法受大脑记忆重放机制的启发,并与VLN智能体集成。这种方法有助于巩固过去的经验,并增强跨新任务的泛化能力。通过使用多场景记忆缓冲区,智能体有效地组织和重放任务记忆,从而增强其快速适应新环境的能力,并减轻灾难性遗忘。我们的工作在VLN智能体中开创了持续学习,引入了新的实验设置和评估指标。我们通过广泛的评估展示了我们方法的有效性,并为VLNCL范式建立了基准。与现有的持续学习和VLN方法的比较实验显示了显著的改进,实现了在持续学习能力方面的最新性能,并突出了我们方法在保留先前知识的同时实现快速适应的潜力。

关键词

视觉-语言导航(VLN),持续学习(CL),灾难性遗忘,知识转移

引言

视觉-语言导航(VLN)对于嵌入式智能领域至关重要。智能体遵循自然语言指令,在3D环境中移动。通过整合自然语言处理、视觉感知和决策制定,智能体能够导航至目的地。大多数VLN研究集中在提高环境理解能力(Hong et al. 2020)和目标决策策略的准确性(Hao et al. 2020)。尽管这些进步显著提高了VLN性能,但仍存在一个关键问题:智能体对多样化未见场景的泛化能力,这对于实际应用至关重要。在实际场景中,智能体必须不断适应新环境,同时保留从先前任务中获得的知识。在已见和未见(Anderson et al. 2018)环境之间的显著性能差距突显了这一挑战。这一问题的主要原因是多样化环境数据的可用性有限,这限制了智能体有效泛化的能力(Zhang, Tan, 和 Bansal 2020)。然而,大规模扩展包含各种环境的数据集是不现实的且昂贵的(Shah et al. 2023)。因此,我们考虑了一种替代方法,引入了持续学习(CL)框架。该框架使智能体能够逐步学习和适应新环境,同时保留从先前任务中获得的知识(Srinivasan et al. 2022)。通过使用这一策略,我们旨在增强VLN智能体的泛化能力,使它们在必须导航不断变化的环境阵列的实际应用中更加健壮和有效。为了使VLN智能体能够从任务中积累知识,处理被称为灾难性遗忘(French 1999)的挑战至关重要。我们将视觉-语言导航任务与之结合,引入了视觉-语言导航与持续学习(VLNCL)范式。智能体必须不断地积累信息并保持以前的知识,通过用新任务激励智能体来实现。这意味着在稳定性和可塑性(Kim et al. 2023)之间保持平衡。此外,考虑到实际任务通常在同一环境中同时发生,我们按场景划分任务以将其提升至智能体。这样,任务被划分为不同的域。基于此,我们提出了双循环场景重放视觉-语言导航智能体(Dual-SR)作为VLNCL的新方法。受休息大脑中记忆重放机制(Zhong, Yan, 和 Xie 2024)的启发,我们设计了一个双循环记忆重放框架,使模型能够在平衡新任务学习的同时巩固早期场景记忆。智能体从记忆缓冲区中随机重放场景记忆,带来以前任务记忆的偏见,而内循环则重视学习新任务(Rolnick et al. 2019)。然后,智能体应用基于元学习的外循环权重更新来平衡新旧权重,同时减轻由单一场景任务数据引起的过拟合问题(Javed 和 White 2019)。此外,为了有效保留多样化的环境知识,我们设计了一个基于任务域的记忆缓冲区,允许智能体存储和重放来自不同场景的记忆。为了评估VLNCL智能体,我们提出了两个指标:未见转移(UT)用于评估知识转移,已见转移(ST)用于评估持续学习。UT通过在新场景中测试智能体来衡量泛化能力,使用未见任务。ST通过在训练后将智能体应用于所有已见任务域来评估持续学习。使VLN智能体能够在新任务中进行持续学习,带来了提高任务性能和增加任务泛化的优势。还进行了广泛的比较实验,与在其他领域使用的几种CL方法和先前的VLN智能体进行了验证,以验证我们方法的进步。实验显示了在持续学习能力方面的最新性能。

总结这项工作的贡献:

  • 我们引入了视觉-语言导航与持续学习(VLNCL)范式和指标,使VLN智能体能够适应新未见环境,同时保留先前知识以提高泛化能力。
  • 我们提出了双循环场景重放(Dual-SR),这是一种受大脑记忆系统启发的新方法,它使VLN智能体能够进行持续学习。实验结果显示,与基础模型相比,成功率提高了16%。
  • 我们设计了一个多场景记忆缓冲区,按环境类型组织任务记忆,促进快速适应和跨场景任务的平衡。
  • 我们的工作专注于VLN智能体中的持续学习,减少了灾难性遗忘,并提高了知识转移,为该领域设定了基准。比较实验也证实了其鲁棒性和有效性。

方法

视觉-语言导航设置

视觉-语言导航(VLN)涉及智能体根据视觉输入V和语言指令I导航真实感室内环境。这个问题可以被建模为一个马尔可夫决策过程,其中智能体在每个时间步的状态st代表其在环境中的视觉观察和位置。智能体的策略π将这些状态映射到动作,引导智能体朝向期望的目标。学习过程涉及最小化由智能体策略π生成的轨迹τ上的预期损失:
E τ ∼ π [ ∑ t = 0 T L ( s t , a t ) ] \mathbb{E}_{\tau \sim \pi} \left[ \sum_{t=0}^{T} L(st, at) \right] Eτπ[t=0TL(st,at)]
其中L(st, at)是每个时间步的损失。通过将I和V投影到一个共同的特征空间中,实现视觉和语言的整合,创建一个联合嵌入空间。这个嵌入允许智能体将视觉线索与语言参考对齐,实现准确导航。

视觉-语言导航与持续学习的公式化

在实际应用中,智能体必须适应未见环境,同时保留先前场景的知识。为此,我们采用了视觉-语言导航(VLN)的持续学习方法,其中验证数据集被分割成多个数据流,模拟不同的任务域。每个数据流由特定场景的任务组成,允许智能体在不忘记先前学习的任务的情况下跨不同环境学习。我们将数据集分割成d个任务域,表示为TD = {td1, td2, …, tdd},其中每个tdi代表一个不同的场景,任务域被认为是独立的。在这个设置中,每个任务域tdi被建模为一个分布Dtdi。我们将VLN设置中的损失函数重新制定为VLNCL设置如下:
E τ ∼ π [ ∑ i = 1 d ∑ t = 0 T i L ( ( s i ) t , ( a i ) t ) ] \mathbb{E}_{\tau \sim \pi} \left[ \sum_{i=1}^{d} \sum_{t=0}^{T_i} L((s^{i})_t, (a^{i})_t) \right] Eτπ[i=1dt=0TiL((si)t,(ai)t)]
其中Ti是任务域tdi的时间范围,(s{i})_t和(a{i})_t分别是智能体在域tdi的时间t的状态和动作。持续学习框架将其推广到多个任务域,允许智能体逐步适应新环境。该框架通过平衡保留知识和促进泛化之间的权衡,提高在未见环境中的性能。

双循环场景重放

在VLNCL设置中,智能体必须最小化遗忘,并通过利用先前知识来提高当前和先前任务的性能。然而,大多数现有的VLN智能体在持续学习方面存在困难,与人类不同,人类通过将感官输入与长期记忆相结合,从少数示例中高效学习(Goelet et al. 1986)。人脑不断地提取和存储知识,通过休息期间的重放加强长期记忆(Dewar et al. 2012)。受此启发,我们为VLN智能体提出了双循环场景重放持续学习(Dual-SR)算法。该算法模拟工作记忆作为内循环,长期记忆作为外循环,创建两个权重更新循环,以平衡先前和当前任务信息,同时增强泛化。

在VLNCL设置中,智能体可能会遇到由于样本有限而导致的过拟合问题。因此,我们利用Reptile算法(Nichol, Achiam, 和 Schulman 2018)中的元更新机制来模仿长期记忆的形成。Reptile算法在效果上等同于MAML(Genzel et al. 2015),为模型提供了一种从当前任务域获得标准结构的手段,使它们能够快速适应其他类似的新任务。因此,我们可以最大化泛化能力而不是数据拟合。通过这种方式,外循环可以提高智能体的泛化能力。在外循环中,权重的更新可以定义为:
θ = θ + β ⋅ ( θ ′ − θ ) \theta = \theta + \beta \cdot (\theta' - \theta) θ=θ+β(θθ)
其中θ, θ’, 和β分别表示模型在内循环前后的权重和元学习率。为了模仿大脑对长期记忆的抽象和巩固(Goelet et al. 1986),我们通过模拟工作记忆中的记忆检索来设计内循环。智能体可以通过维护缓冲区并在内循环中重放旧样本,使用从先前任务域中稳定选择的数据进行训练。应用记忆缓冲区可以确保每个先前任务都同样可能在缓冲区中被选中。新接收的样本与从缓冲区中随机选择的旧样本结合,形成一个小批量,然后用于元学习。在内循环中,模型的更新可以定义为:
U k ( θ ) = θ − α ⊙ ∇ L ( a t ∣ V , I ) ( θ ) U_k(\theta) = \theta - \alpha \odot \nabla L(a_t|V,I)(\theta) Uk(θ)=θαL(atV,I)(θ)
其中Uk(θ)是由学习(at | V, I)和α定义的更新,α是元学习器要学习的参数,⊗表示逐元素乘积。具体来说,α是一个与θ大小相同的向量,决定了更新方向和学习率。元更新可以提取跨任务学习到的共同结构,从而增强智能体的知识转移能力。VLNCL设置使智能体面临动态和不可预测的数据流。这个过程要求智能体适应并在不断演变的任务阵列中有效执行。这种方法与传统方法截然不同,传统方法要求将固定数据集划分为多个批次,用于固定数量的任务。为了解决这个问题,我们在内循环中实现了经验重放。通过存储任务索引,智能体可以在面对新任务时重新访问和利用先前学习的任务。这种方法与传统的重放方法不同,后者不加选择地在所有任务中使用记忆。我们的方法在每个任务域内随机重放场景,以确保平衡。此外,我们引入了记忆缓冲区大小Z。当任务属于先前的任务域,并且任务ID t是Z的倍数时,智能体通过用当前任务替换相应域中的一个任务来更新记忆缓冲区M。智能体通过在任务域之间更新场景记忆,有效地管理记忆大小,即使在处理许多任务时也是如此。这种策略还鼓励模型根据工作记忆原则优先考虑任务。

结构化变换器VLN智能体与持续学习

在Dual-SR算法的基础上,我们采用了跨模态结构化变换器(Zhao et al. 2022; Chen et al. 2021; Lu et al. 2019)作为规划器,以增强VLN智能体在持续学习设置中的性能。Dual-SR算法为此方法提供了基础,通过平衡整合新信息和保留先前知识。在每个导航步骤t,模型处理五种形式的标记,全局标记gt-1,候选目标标记C = {c1 t-1, c2 t-1, …, cq t-1},历史标记H = {h1 t-1, h2 t-1, …, ht-1 t-1},编码指令标记I = {i0, i1, …, im},和编码视觉标记V = {v1 t, v2 t, …, vn t}。指令标记在时间上保持不变以减少计算,其他标记根据先前的时间步骤更新。系统将全局标记初始化为句子嵌入g0 = i0。为了编码候选目标标记,我们应用网格编码形式来解决在未见场景中可能的长期目标挑战。每个单元格中心可以通过将环境离散化为d × d网格来表示潜在的导航目标标记,覆盖导航区域。最初,使用目标的位置嵌入创建候选目标标记c1 0, c2 0, …, cq 0,公式如下:
c i 0 = f ϕ P ( s j ) ⋅ i 0 , j ∈ { 1 , 2 , . . . , q } c_i 0 = f_\phi^P (s_j) \cdot i0, \quad j \in \{1, 2, ..., q\} ci0=fϕP(sj)i0,j{1,2,...,q}
其中fP是位置编码器,si是位置坐标表示的空间位置,ϕP是编码器的参数,x0是句子嵌入。在导航过程中,这些候选目标标记会根据新的视觉线索和指令标记进行细化,以预测更精确的长期目标。使用基于多层感知器(MLP)的目标预测器计算每个目标作为导航目的地的概率:
P ( c i t ∣ θ ) = softmax { M L P ( c i t ⋅ g t ) } , i ∈ { 1 , 2 , … , q } P(c_i t | \theta) = \text{softmax}\{MLP(c_i t \cdot g_t)\}, \quad i \in \{1, 2, \ldots, q\} P(citθ)=softmax{MLP(citgt)},i{1,2,,q}
其中gt是全局标记。智能体使用变换器架构构建和维护已探索区域的结构化表示,以捕获结构化的环境布局。在时间步骤t,模型构建一个图St,其中节点代表先前访问过的位置,边代表这些位置的可导航性。我们使用全景视图嵌入、动作嵌入、时间嵌入和位置嵌入构建历史标记ht t,如下:
h t t = f V ( v 1 t , … , v n t ) + f A ( r t ) + f T ( t ) + f P ( s t ) h_t t = f_V (v_{1t}, \ldots, v_{n t}) + f_A(r_t) + f_T(t) + f_P(s_t) htt=fV(v1t,,vnt)+fA(rt)+fT(t)+fP(st)
其中fV是全景视觉特征提取器,r_t = (sin θ, cos θ, sin φ, cos φ)是移动方向,fA是动作编码器,fT是时间编码器,fP是位置编码器。历史标记在时间步骤t的邻接矩阵E定义为,如果导航视点nj可以从ni导航,则Eij = 1;否则,Eij = 0。注意力掩码矩阵M控制标记之间的信息流,其中子矩阵MH用于历史标记:
M H ← M H ∗ E M_H \leftarrow M_H * E MHMHE
其中*表示逐元素乘法。结构化变换器使智能体能够访问过去的结构化信息,允许从相邻和先前访问过的位置做出决策。在时间步骤t的局部动作空间是:
A L t = { τ ( v ^ 1 t ) , τ ( v ^ 2 t ) , … , τ ( v ^ k t ) } A_{Lt} = \{\tau(\hat{v}_{1t}), \tau(\hat{v}_{2t}), \ldots, \tau(\hat{v}_{kt})\} ALt={τ(v^1t),τ(v^2t),,τ(v^kt)}
全局动作空间是:
A G t = { τ ( v ^ 1 t ) , … , τ ( v ^ k t ) , τ ( h 1 t ) , … , τ ( h t − 1 t ) } A_{Gt} = \{\tau(\hat{v}_{1t}), \ldots, \tau(\hat{v}_{kt}), \tau(h_{1t}), \ldots, \tau(h_{t-1t})\} AGt={τ(v^1t),,τ(v^kt),τ(h1t),,τ(ht1t)}
其中τ将标记映射到其对应的位置。每个可能动作的概率是:
π ( a t ∣ θ ) = softmax { M L P ( τ − 1 ( a t ) ⋅ g t ) } , a t ∈ A G t \pi(a_t | \theta) = \text{softmax}\{MLP(\tau^{-1}(a_t) \cdot g_t)\}, \quad a_t \in A_{Gt} π(atθ)=softmax{MLP(τ1(at)gt)},atAGt
模型的优化涉及模仿学习(IL)损失LIL和强化学习(RL)损失LRL,交替使用教师强制(使用真实动作)和学生强制(使用从策略中采样的动作)。为了进一步考虑选择的动作和目标,还加入了历史教师损失LHT和目标预测损失LT。历史教师损失定义为:
L H T = − ∑ t = 1 T log ⁡ π ( a t ∣ θ ) L_{HT} = -\sum_{t=1}^{T} \log \pi(a_t | \theta) LHT=t=1Tlogπ(atθ)
目标预测损失是:
L T = − ∑ t = 1 T log ⁡ P ( c i t ∣ θ ) L_T = -\sum_{t=1}^{T} \log P(c_i t | \theta) LT=t=1TlogP(citθ)
其中第i个目标标记最接近导航目的地。总损失函数由下式给出:
L = α 1 L I L + α 2 L R L + α 3 L H T + α 4 L T L = \alpha_1 LIL + \alpha_2 LRL + \alpha_3 LHT + \alpha_4 LT L=α1LIL+α2LRL+α3LHT+α4LT
其中αi是损失系数。在训练基础模型后,智能体在验证环境中提示持续学习推理。智能体顺序处理基于任务域的数据流,用于Val-Seen和Val-Unseen分割。智能体执行内循环,根据方程4中指定的损失函数迭代更新参数θ,通过持续更新记忆缓冲区和场景重放来实现。完成当前任务域的学习后,智能体执行方程3中描述的外循环。持续学习方法使VLN智能体能够在复杂环境中学习和适应,保持和增强跨多个任务的知识。结构化变换器中的Dual-SR算法允许在不断变化的场景中进行有效的导航和适应能力。

实验

实验设置

实验采用VLNCL框架,并将R2R数据集(Anderson et al. 2018)划分为不同的任务域,以评估对遗忘的抵抗力和知识转移能力。通过顺序输入每个任务域到智能体,我们分别评估每个数据集分割中的平均已见转移(ST)和未见转移(UT)。

比较实验

为了评估我们智能体的任务性能,我们将其在测试未见分割上的结果与其他VLN智能体在R2R数据集上的单次运行性能进行了比较。包括的方法有Seq2Seq (Anderson et al. 2018), SSM (Wang et al. 2021), EnvDrop (Tan, Yu, 和 Bansal 2019), AuxRN (Zhu et al. 2020), CCC (Wang et al. 2022), PREVALENT (Hao et al. 2020), AirBERT (Guhur et al. 2021), VLN⟳BERT (Hong et al. 2021)(初始化OSCAR)。

基线使用了应用持续学习之前的基础智能体性能。我们还比较了持续学习前后的性能,以展示CL方法的潜力。

比较结果表明,我们的方法显著提高了智能体的任务性能。成功率比基础智能体提高了16%,预言成功率比基础智能体提高了8%,突出了持续学习方法在VLN智能体中的潜力。此外,我们的结果在持续学习能力方面达到了最新性能。与依赖复杂环境理解机制或精细微调的智能体不同,具备CL能力的智能体可以在新场景中持续提高性能。然而,将更先进的推理架构与CL方法相结合可以显著提高智能体的性能。

抵抗遗忘和转移评估

通过持续学习,我们为VLN智能体引入了已见转移和未见转移的概念,以评估其对遗忘的抵抗力和知识转移能力。为了评估遗忘抵抗力,我们在验证训练分割和验证已见分割上应用平均已见转移。我们使用平均未见转移在验证未见分割上评估智能体将知识从先前任务转移到当前任务的能力。作为基线,我们使用每个任务域微调的结果。已见转移衡量智能体在当前分割中的已见任务域集ST seen中的性能,确定智能体是否保留了其先前知识。相比之下,未见转移评估智能体在当前分割中的未见任务域集ST unseen中的性能,评估知识从先前任务转移到当前任务的能力。实验结果表明,我们的方法在遗忘抵抗力和知识转移方面具有优势。为了进一步阐明这些能力,我们在图3中展示了不同分割中的成功率变化。

在Val Unseen分割中,我们评估未见部分的成功率以评估知识转移能力。相反,在Val Seen和Train Seen分割中,我们考虑已见部分的成功率以评估智能体的遗忘抵抗力。

此外,我们还可以在表4中跟踪所有数据集分割中的最高和最低成功率(SR)和预言成功率(OSR)。评估性能也遵循VLNCL设置。这个结果使我们能够更清晰地观察性能的变化。分析性能变化表明,我们的方法在抵抗遗忘和知识转移方面表现出色。我们的方法在Val Unseen分割中持续提高未见任务的性能,突出了持续学习在VLN智能体中引入的显著泛化能力。在Val Seen和Train Seen分割中,我们的方法也显示出对已见任务的显著性能保留,处理一系列50个不同场景任务后,成功率仅下降了20%。这些结果表明,智能体有效地减轻了长期任务域的遗忘。因此,我们为视觉-语言导航与持续学习范式提出了一个基准。通过在VLN智能体中实施持续学习方法,我们增强了它们有效地泛化到未见环境的能力,为VLN智能体在更广泛的实际应用中铺平了道路。

结论

本文提出了视觉-语言导航与持续学习(VLNCL)范式,智能体在保留先前场景知识的同时学习未见任务,密切反映了实际应用需求。为了实现这一点,我们引入了双循环场景重放(Dual-SR)算法,提高了智能体的泛化和任务性能。我们还使用R2R数据集为VLNCL建立了基准。实验表明,我们的方法在类似条件下超过了现有的持续学习方法,推进了VLN智能体性能,并为进一步研究实际应用就绪的智能体奠定了基础。我们的未来工作将集中在开发更复杂的推理机制和推进持续学习策略,以提高泛化能力。

声明

本文内容为论文学习收获分享,受限于知识能力,本文对原文的理解可能存在偏差,最终内容以原论文为准。本文信息旨在传播和学术交流,其内容由作者负责,不代表本号观点。文中作品文字、图片等如涉及内容、版权和其他问题,请及时与我们联系,我们将在第一时间回复并处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/16894.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

数字化建设:指标如何驱动的企业KPI设计?

我们以KPI设定为例,简单说明在一套科学的经营分析体系的加持下,企业的经营KPI应该如何设定,如图所示。 指标驱动的企业KPI设计 每年年初企业做战略规划的同时,会启动年度业务KPI的设定。这个时候经营分析团队会主导整个过程。首先…

初级数据结构——栈题库(c++)

目录 前言1.杭电oj——Bitset2.杭电oj——进制转换[3.力扣——LCR 123. 图书整理 I](https://leetcode.cn/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/description/)[4.力扣——LCR 027. 回文链表](https://leetcode.cn/problems/aMhZSa/)[5.力扣——1614. 括号的最大嵌…

数字化转型企业架构设计手册(交付版),企业数字化转型建设思路、本质、数字化架构、数字化规划蓝图(PPT原件获取)

1、企业架构现状分析 2、企业架构内容框架 3、企业架构设计方法 3.1 、业务架构设计方法 3.2 、数据架构设计方法 3.3 、应用架构设计方法 3.4 、技术架构设计方法 软件全套资料部分文档清单: 工作安排任务书,可行性分析报告,立项申请审批表&…

⾃动化运维利器Ansible-基础

Ansible基础 一、工作原理二、快速入门2.1 测试所有资产的网络连通性2.2 发布文件到被管理节点(资产) 三、资产(被管理节点)3.1 静态资产3.1.1 自定义资产3.1.2 自定义资产的使用3.1.3 资产选择器 四、Ansible Ad-Hoc 命令4.1 模块类型4.1.1 command & shell 模块4.1.2 cop…

鸿蒙NEXT自定义组件:太极Loading

【引言】(完整代码在最后面) 本文将介绍如何在鸿蒙NEXT中创建一个自定义的“太极Loading”组件,为你的应用增添独特的视觉效果。 【环境准备】 电脑系统:windows 10 开发工具:DevEco Studio NEXT Beta1 Build Vers…

AVL树了解并简单实现

这篇文章默认知道二叉搜索树,如果了解并不多可以先看看二叉搜索树了解和实现-CSDN博客 目录 1.AVL树概念 2.AVL树节点定义 3.AVL树的插入(重点) 3.1AVL树 3.2AVL树的旋转 3.3AVL树插入代码 4.AVL树的验证 5.AVL树的删除 6.AVL树的性能…

【MySQL】索引原理及操作

目录 索引原理 初识索引 磁盘原理 磁盘与系统之间的关系 MySQL、系统、磁盘之间的关系 理解索引 页目录 页目录设计的数据结构问题 聚簇索引与非聚簇索引 遗留问题 索引操作 创建索引 查询索引 删除索引 其他索引概念与操作 索引原理 索引(I…

代码随想录算法训练营第三十一天| 56. 合并区间 、738.单调递增的数字 。c++转java

56. 合并区间 class Solution {public int[][] merge(int[][] intervals) {//对区间按照右边界排序Arrays.sort(intervals,(a,b) -> Integer.compare(a[0],b[0]));List<int[]> p new LinkedList<>();int l intervals[0][0],r intervals[0][1];for(int i 1;i…

厦大南洋理工最新开源,一种面向户外场景的特征-几何一致性无监督点云配准方法

导读 本文提出了INTEGER&#xff0c;一种面向户外点云数据的无监督配准方法&#xff0c;通过整合高层上下文和低层几何特征信息来生成更可靠的伪标签。该方法基于教师-学生框架&#xff0c;创新性地引入特征-几何一致性挖掘&#xff08;FGCM&#xff09;模块以提高伪标签的准确…

模型运行速度笔记: s/epoch VS s/iter

1 概念介绍 在模型训练中&#xff1a; s/epoch 表示每个epoch所需的秒数&#xff0c;即完成一轮完整数据集训练的时间。s/iter 表示每个iteration&#xff08;迭代&#xff09;所需的秒数&#xff0c;即处理一个batch的时间。 它们的关系是&#xff1a; 2 举例 比如我tra…

k8s 中传递参数给docker容器

文章目录 docker启动时传递参数使用k8s env传递完全覆盖 ENTRYPOINT 和 CMD 在 Kubernetes 中&#xff0c;可以通过多种方式将参数传递给 Dockerfile 或其运行的容器&#xff0c;常见的方式包括使用环境变量、命令行参数、配置文件等。以下是一些常用的方法&#xff1a; docker…

Map Set

在学习TreeMap和TreeSet之前需要先学习有关搜索树的相关知识以及接口Map和Set。 1. 搜索树 1.1 概念 二叉搜索树又称二叉排序树&#xff0c;其特点是&#xff0c;该节点的左边都比其小&#xff0c;右边都比其大&#xff0c;每一棵子树都必须满足这个条件。如下图所示例子。2…

Android OpenGLES2.0开发(八):Camera预览

严以律己&#xff0c;宽以待人 引言 终于到该章节了&#xff0c;还记得Android OpenGLES2.0开发&#xff08;一&#xff09;&#xff1a;艰难的开始章节说的吗&#xff1f;写这个系列的初衷就是因为每次用到GLSurfaceViewCamera预览时&#xff0c;总是CtrlC、CtrlV从来没有研究…

基础 IO

目录 一、基本共识 二、复习C语言中的文件操作 三、与文件操作有关的系统调用接口 1. open 与 close 1.1 umask 2. write 3. read 四、如何理解文件 1. 文件描述符 fd 2. 文件fd分配规则 3. 重定向的引入 4. 重定向的本质 5. dup2 6. 理解 >、>>、…

ThriveX 博客管理系统前后端项目部署教程

前端 前端项目地址&#xff1a;https://github.com/LiuYuYang01/ThriveX-Blog 控制端项目地址&#xff1a;https://github.com/LiuYuYang01/ThriveX-Admin Vercel 首先以 Vercel 进行部署&#xff0c;两种方式部署都是一样的&#xff0c;我们以前端项目进行演示 首先我们先…

[含文档+PPT+源码等]精品基于springboot实现的原生Andriod手机使用管理软件

软件开发环境及开发工具&#xff1a; 数据库管理工具&#xff1a;phpstudy/Navicat或者phpstudy/sqlyog 开发工具&#xff1a;Android Studio 后台管理系统涉及技术&#xff1a; 后台使用框架&#xff1a;Springboot 前端使用技术&#xff1a;Vue,HTML5,CSS3、JavaScript等…

华为三层交换机禁止VLAN间通讯(两种解决方案)

在日常办公中&#xff0c;有时会禁止内网中各个部门间的访问&#xff0c;例如&#xff1a; ①访客不能访问内网任何终端及服务器 ②财务部门不能被其他部门访问 实验环境&#xff1a;华为Ensp模拟器 内网架构&#xff1a;三层网络 环境说明&#xff1a;三层交换机承载着网…

为以人工智能为中心的工作负载重新设计的全局控制台

MinIO 控制台多年来一直是一个不断发展的产品。每次学习时&#xff0c;我们都会思考如何改进交互框架中这个非常重要的部分。首先是控制台&#xff0c;它在推出后的一年内就被广泛采用。更具体地说&#xff0c;超过 10K 个组织。接下来是企业控制台。这从对象存储与其 GUI 之间…

stm32在linux环境下的开发与调试

环境安装 注&#xff1a;文末提供一键脚本 下载安装stm32cubeclt 下载地址为&#xff1a;https://www.st.com/en/development-tools/stm32cubeclt.html 选择 linux版本下载安装 安装好后默认在家目录st下 > $ ls ~/st/stm32cubeclt_1.16.0 …

【leetcode】N皇后 回溯法c++

目录 51.N皇后 52.N皇后II 51.N皇后 51. N 皇后 - 力扣&#xff08;LeetCode&#xff09; 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间…