Exploiting Proximity-Aware Tasks for Embodied Social Navigation 论文阅读
论文信息
题目:Exploiting Proximity-Aware Tasks for Embodied Social Navigation
作者:Enrico Cancelli, Tommaso Campari
来源:arXiv
时间:2023
Abstract
学习如何在封闭且空间受限的室内环境中在人类之间导航,是体现主体融入我们社会所需的关键能力。
在本文中,我们提出了一种端到端架构,该架构利用邻近感知任务(称为风险和邻近指南针)将推断常识性社会行为的能力注入到强化学习导航策略中。
为此,我们的任务利用了当前和未来碰撞危险(immediate and future dangers of collision)的概念。
此外,我们提出了一种专门为模拟环境中的社交导航任务设计的评估协议。这样做是为了通过分析人机空间交互的最小单元(称为“相遇”)来捕获策略的细粒度特征和特征。
Introduction
如图 1 所示,代理应该能够通过避开静态物体和移动人员来动态地、交互式地导航环境。
在 PointGoal 导航任务中(需要代理到达环境中的特定位置),没有任何传感器/驱动噪声的代理经过数十亿步的训练可以获得几乎完美的性能 [42]。即使存在噪声,其他方法 [45, 27] 也获得了令人印象深刻的结果。
另一个相关任务是对象目标导航,其中代理需要在给定对象类别的情况下查找并导航到特定对象。这项任务需要语义和导航功能,并导致基于语义图 [9,6,32] 的模块化方法的开发,以及使用强化学习 (RL) 的端到端训练模型 [46, 33]
但前面提到的所有任务都在基本静态的环境中构建了导航。场景中有感知、移动的人类引入的动态元素迫使我们重新思考当前模型的设计方式。
场景中有感知、移动的人类引入的动态元素迫使我们重新思考当前模型的设计方式。良好的导航政策不仅必须有效(即能够实现其目标)和高效(即能够通过接近最优的路径实现目标),而且还必须安全(在不伤害他人的情况下到达目的地)。该社交元素包含在社交导航任务 (SocialNav) [44, 29] 中,其中代理必须在模拟室内环境中处理 PointGoal 导航。
为了解决这一任务,Yokoyama 等人 [47] 引入了一个简单但非常有效的模型,该模型在 iGibson 2021 SocialNav 挑战赛中获得第一名。然而,该方法并未在其导航策略中明确编码任何社会行为。
我们为 SocialNav 任务定义了细粒度的评估协议,以更好地分析代理在人与代理交互期间的表现。我们的评估协议受到机器人技术中类似尝试[30]的启发,其中包括收集有关人类和机器人之间特定类型交互的统计数据(通过问卷调查)。
我们提出通过识别和表征人类与代理之间的遭遇来进行自动评估。为此,我们提取了短子序列,其中与人类的交互成为影响导航的主要因素,并且我们建立了一组规则,用于根据时间上人类代理空间关系的类型对每次遭遇进行分类。最后,我们还引入了基于 HM3D [31] 的情节数据集,用于体现社交导航,以评估不同环境中的代理。
总之,这项工作的贡献有三个:
(1)基于邻近感知任务的体现社交导航的新颖架构;我们在两个公共数据集上展示了该模型的有效性。
(2)一种新的基于遭遇的评估协议,用于分析社交导航模型。
(3)基于 HM3D 数据集(称为 HM3D-S)的一组用于评估体现社交导航的情节。
Related Work
Embodied Navigation
人们对研究具体环境中的室内导航越来越感兴趣[14]。这主要归功于由 3D 室内环境 [8, 36, 31] 组成的大规模数据集,以及允许研究人员在这些 3D 环境中模拟导航的模拟器 [35, 36, 21]。
为了研究具身人工智能,提出了许多任务[1],包括:PointGoal 导航[42]、ObjectGoal 导航[4]、具身问答[41]以及视觉和语言导航(VLN)[2, 22]。
为了解决代理在静态、单代理环境中运行的这些问题,提出了模块化方法 [7,10,9,32],利用 SLAM、路径规划和探索策略以及端到端 RL 训练策略[40,27,45,6,46],没有利用任何显式地图。
Socially-Aware Navigation
无碰撞多智能体导航 [5, 39, 13, 23] 和动态环境中的导航 [3] 的工作已扩展到有人在场的情况下的导航 [19, 16, 12, 24, 11]。
Chen 等人 [12] 采用 CADRL [13] 等防撞算法,并引入常识性社会规则来减少不确定性,同时最大限度地降低发生冻结机器人问题 [38] 的风险。
其他工作 [16, 11] 尝试使用时空图 [24] 等技术来模拟人机交互。这些方法通常在极简模拟环境中进行了测试,这些模拟环境提供了具有简单障碍的完整知识,并且通常假设移动代理之间进行协作。
Egocentric Visual SocialNav
越来越多的工作开始研究以自我为中心的视觉数据的 SocialNav。
大规模以自我为中心的社交合规演示数据集 [20] 和智能体在社交环境中导航的轨迹 [34, 25] 使得能够通过模仿学习来训练社交导航智能体。
尽管如此大的数据集很有用,但在模拟中训练智能体仍然很有用,这样就可以观察现实世界中不易收集的极端情况。通过模拟,代理通常使用模仿学习 [37]、端到端强化学习 [47] 或规划器与 RL [29] 的组合进行训练。
Evaluation of SocialNav
SocialNav [17] 之前的工作通常使用总体成功率、路径效率、避免碰撞或与人类路径的相似性来评估。
成功率是有限的,因为代理正在与人类打交道,最好安全导航以避免碰撞,即使这意味着成功率较低。
在 iGibson 挑战中,SocialNav 还使用 STL(按时间长度加权的成功)和 PSC(个人空间合规性)进行评估,即代理与行人距离超过阈值距离 (0.5m) 的时间步百分比。
与这些指标相反,我们根据代理与行人的遭遇类型提出了细粒度的评估。
Background:the SocialNav Task
在 Embodied Social Navigation [44,29,47] 中,与 PointGoal Navigation 一样,智能体的目标是到达目标位置,但与人类主体的碰撞构成失败,并将终止该情节。
情节 e e e 由代理轨迹 α α α、人类轨迹元组 ( p i p^i pi) 和目标 g g g 来表征。智能体轨迹 α α α 是智能体从情节趋势开始到结束的一系列位置和旋转。形式上, α = { α t } t ∈ [ 0 , t e n d ] α = \{α_t\}_{t∈[0,t_{end}]} α={αt}t∈[0,tend],其中 α t ∈ S E ( 2 ) α_t ∈ SE(2) αt∈SE(2) 是智能体在时间 t t t 相对于原点的 2D 平移和旋转。
类似地,同一情节中人类的轨迹是与第 i 个人类相关的位置和旋转序列。形式上, p i = { p t i } t ∈ [ 0 , t e n d ] ∀ i ∈ P p^i = \{p^i_t\}_{t∈[0,tend]} ∀i ∈ P pi={pti}t∈[0,tend]∀i∈P 且 p t i ∈ S E ( 2 ) p^i_t ∈ SE(2) pti∈SE(2)。在我们的模拟中,每个人的移动都受到起点和终点的限制,人沿着最短路径在这两点之间来回移动。
目标 g ∈ G g ∈ G g∈G 由世界坐标中的 2D 位置指定。智能体必须在任意时间点提供一个动作 (lin vel, ang vel) ∈ [ − 1 , + 1 ] 2 \in [−1, +1]^2 ∈[−1,+1]2,表示归一化的线性前进速度和归一化的顺时针旋转角速度(其中 +1 是最大速度, -1 最大向后/逆时针速度)。当代理距离目标目标点 0.2 米以内时,将调用停止操作。代理有 500 个动作(或步骤)来到达目标位置。如果它与人类相撞,情节会立即终止。
Method
图 2 显示了我们的框架的轮廓。
它包括两个主要模块:(i)邻近特征提取,以及(ii)策略架构。邻近特征提取模块细化从模拟器获得的邻近信息,以提取描述社交交互某些方面的特征(地面真实邻近特征)。
策略架构从 RGB-D 和 GPS+Compass 传感器中提取嵌入,作为我们的邻近感知任务的输入。这些任务完善了这种嵌入并创建了 n 个任务嵌入(每个任务一个),然后通过状态注意力将其融合在一起。动作是从状态注意力输出中采样的。
Policy Architecture
我们的策略网络包含以下模块:
i)两个编码器(视觉主干和位置编码器),用于从 RGB-D 和 GPS+罗盘传感器创建嵌入;
ii) 循环状态编码器,通过一系列循环单元累积这种嵌入;
iii) 状态注意力模块,通过注意力机制融合这些单元的输出,以产生机器人必须执行的动作。
我们使用 CNN(视觉主干) f ( ⋅ ) f(·) f(⋅) 将每个 RGB-D 帧 x t x_t xt 编码为视觉嵌入 ϕ t v = f ( x t ) \phi ^v_t = f(x_t) ϕtv=f(xt)。使用线性层 g ( ⋅ ) g(·) g(⋅) 对主体 α t α_t αt 的位置和旋转进行编码,以获得嵌入 φ t p = g ( α t ) φ^p_t = g(α_t) φtp=g(αt)。然后将这两个编码器的输出连接成最终的嵌入 ϕ t f = ϕ t v ⊕ ϕ t p \phi ^f_t = \phi ^v_t ⊕ \phi ^p_t ϕtf=ϕtv⊕ϕtp 。
为了随着时间的推移积累嵌入,我们遵循 Y e 等人 [45] 的 PointNav 设计,并将我们的状态编码器实现为一堆并行循环单元。每个时间步的每个单元都会被输入 ϕ t f \phi ^f_t ϕtf ,并输出其内部状态,称为信念 b e l i e f belief belief。
拥有多个 b e l i e f belief belief 的关键思想是每个循环单元都可以专注于特定的导航方面。
关于机器人应该采取什么行动的最终决定是通过根据情况对每个信念进行加权来采样的。因此,所有信念 B B B 随后通过状态注意力模块融合,以计算我们对动作进行采样的正态分布的平均值 µ t ⃗ \vec {µ_t} µt 和标准差 σ t ⃗ \vec {σ_t} σt。
形式上,给定 { R U ( i ) } ∀ i ∈ B \{RU^{(i)}\}_{∀i∈B} {RU(i)}∀i∈B 一组循环单元,编码置信 h t h_t ht 定义为:
Proximity-Aware Tasks
有了多种信念,我们可以在嵌入中注入不同的信号,例如,某一集中发生的社会动态。
为此,在训练期间,我们用独特的辅助损失来调节每个信念,并在策略网络的优化步骤中与行动和价值损失联合优化。
这是通过回归器网络(见图 3)使用特定类型的邻近特征处理每个信念来完成的,该网络计算我们的邻近感知任务预测。每个辅助任务负责预测时间范围 [ t , t + k ] [t, t+k] [t,t+k] 内的邻近特征,以相应的信念 h(i) t 和执行动作的序列 { a j } j ∈ [ t , t + k ] \{a_j\}_{j∈[t,t+k]} {aj}j∈[t,t+k] 为条件,其中 k 是要预测的未来帧的数量。形式上,对于给定的邻近特征序列 { s j } j ∈ [ t , t + k ] \{s_j\}_{j∈[t,t+k]} {sj}j∈[t,t+k],该任务旨在优化以下辅助损失:
我们设计了两种类型的邻近任务,对应于两个社交特征:
(i)风险估计
(ii)邻近指南针
我们的设计的优点是可以轻松扩展其他可能更复杂的社交任务,并且还可以与 Y e 等人 [45] 中使用的通用自我监督任务兼容(例如,CPC|A [18]或 ID [28, 46])。为了利用不同的邻近特征,我们从模拟器中提取每个人的相对位置。中介。我们将此数据称为邻近信息:
Risk Estimation
风险估计是一项邻近感知任务,旨在处理短距离社交互动,以告知代理即将发生的碰撞危险。
给定 S I t SI_t SIt,我们将 Risk 值定义为一个标量,表示智能体与最近的人在最大距离 D r D_r Dr 内的距离有多近。该值的范围从 0(最近的邻居比 D r D_r Dr 远米远)到 1(智能体和最近的人距离 D r D_r Dr 还远)。人发生碰撞)。表示为:
Proximity Compass
邻近感知任务对社会动态的远距离部分进行建模。该特征不仅捕获了半径 D c > D r D_c > D_r Dc>Dr 的更大区域内的社交互动,而且还捕获了一个人可能来的方向的微弱指示。就像人类可以根据之前的观察、对环境的部分了解以及人的轨迹来猜测人的行踪一样;我们希望我们的代理在训练时获得类似的知识
此类信息通过邻近指南针来表示。在罗盘中,北代表代理所看的方向,并且象限被划分为有限数量的不重叠的扇区。给定每个人 i ∈ P , θ a → i i ∈ P,θ_{a→i} i∈P,θa→i 表示连接智能体与该人的线段的角度。指南针的北边。这些角度与特定扇区相关。我们计算同一象限人群中每个部门的风险值。整个罗盘通过从北向顺时针展开扇区序列来表示为矢量。形式上,如果我们有 k k k 个等效扇区,则向量 c o m p t ∈ R k comp_t ∈ R^k compt∈Rk 定义为:
Implementation details
我们实验中使用的视觉主干是针对 RGB-D 帧的 ResNet-18 的修改版本。我们使用[47]中使用的相同实现;这会产生大小为 512 的输出嵌入。对于代理的位置编码器,我们使用输出大小为 32 的线性层。我们的循环状态编码器被实现为单层 GRU 堆栈,每个隐藏维度为 512。两个邻近任务的回归器均实现为隐藏大小为 512 的单层 GRU。动作序列 { a i } i ∈ [ t , t + k ] \{a_i\}_{i∈[t,t+k]} {ai}i∈[t,t+k] 通过嵌入层,然后馈送到 GRU 的输入。初始隐藏状态初始化为 h t ( i ) h^{(i)}_t ht(i) ,k 设置为 4。完整方案请参见图 3。
每个模型都使用 DD-PPO [42] 算法在 3 个 GPU Nvidia A5000 上进行训练,每台机器有 8 个并行环境。我们的奖励函数如下
An evaluation protocol for SocialNav
我们引入了一种评估协议来分析导航代理在 SocialNav 任务上的性能。我们将代理与环境中其他行人之间的遭遇分为四类(正面、交叉口、盲角、跟随者),并提出一组指标来分析不同类型的遭遇。
Encounter
我们将在情节 e e e 中发生在智能体和特定行人之间的遭遇正式定义为给定时间范围 [ t 1 , t 2 ] ⊆ [ 0 , t e n d ] [t_1, t_2] ⊆ [0, t_{end}] [t1,t2]⊆[0,tend]内轨迹 α α α 和 p i p^i pi 的子序列,以满足以下约束:
• Time Constraint:时间范围 [ t 1 , t 2 ] [t_1,t_2] [t1,t2]大于阈值 T m i n T_{min} Tmin;
• Spatial Constraint:智能体与人之间的测地距离 i ∀ t ∈ [ t 1 , t 2 ] i ∀t ∈ [t_1, t_2] i∀t∈[t1,t2] 小于阈值 D m a x D_{max} Dmax;
• Haeding Constraint:在第一个 T f r o n t T_{front} Tfront 时间步中,人 i i i 位于代理前面。也就是说,给定智能体的航向角 θ t a θ^a_t θta , θ t a → i θ^{a→i}_t θta→i 连接智能体与人 i 的线段角度和阈值 θ m a x , ∣ θ t a − θ t a → i ∣ ≤ θ m a x θ_{max},|θ^a_t - θ^{a→i}_t | ≤ θ_{max} θmax,∣θta−θta→i∣≤θmax 满足 ∀ t ∈ [ t 1 , t 1 + T f r o n t ] ∀t ∈ [t_1, t_1 + T_{front}] ∀t∈[t1,t1+Tfront]。
Inclusion rule
为了描述智能体和人类之间的遭遇,我们设计了一种称为包含规则(inclusion rule, IR)的启发式方法。
每个 IR 由以下参数定义:
• Δ t i 、 Δ t a Δ^i_t、Δ^a_t Δti、Δta 分别表示在时间范围 [ t 1 , t ] [t_1, t] [t1,t] 内智能体和人 i 的轨迹大致方向的近似值,其中 t ∈ [ t 1 , t 2 ] t ∈ [t_1, t_2 ] t∈[t1,t2],其中 t 1 、 t 2 t_1、t_2 t1、t2 是遭遇的开始和结束时间步;
• i n t e r s e c t intersect intersect 是一个二进制值,如果机器人和行人路径相交,则为 1,否则为 0;
• b l i n d ( t ) blind(t) blind(t) 是一个时间条件的二进制值,指示智能体在时间步 t 是否可以看到该人;
• d _ d i f f ( t ) d\_diff(t) d_diff(t):代理与人之间的测地距离和欧氏距离之间的差异
Encounter classification
我们定义了四类遭遇(受到 Pirk 等人[30]的启发),以及它们各自的包含规则(见图 4):
• 正面接近(Frontal approach ):机器人和人类来自相反的方向,并且具有大致平行的轨迹。因此,代理应稍微偏离以避免正面碰撞。 I R : ( ¬ b l i n d ( t ) ∀ t ∈ [ t 1 , t 1 + T v i e w ] ) ∧ π − Δ s l a c k ≤ ∣ Δ t 2 i − Δ t 2 a ∣ ≤ π + Δ s l a c k IR: (\neg blind(t) ∀t ∈ [t_1, t_1 + T_{view}]) ∧ π − Δ_{slack} ≤ |Δ^i_{t2} − Δ^a_{t2}| ≤ π+Δ_{slack} IR:(¬blind(t)∀t∈[t1,t1+Tview])∧π−Δslack≤∣Δt2i−Δt2a∣≤π+Δslack,其中 Δ s l a c k Δ_{slack} Δslack 是角度 π 上的松弛值(以弧度为单位), T v i e w T_{view} Tview 是代理必须看到该人的初始时间步数。
• 相交(Intersection):机器人和人的轨迹相交约90°。在这种情况下,智能体可能想要停下来并让位于人类,或者降低其线速度并稍微偏离。 I R : ( ¬ b l i n d ( t ) ∀ t ∈ [ t 1 , t 1 + T v i e w ] ) ∧ π 2 − Δ s l a c k ≤ ∣ Δ t 2 i − Δ t 2 a ∣ ≤ π 2 + Δ s l a c k ∧ i n t e r s e c t IR: (\neg blind(t) ∀t ∈ [t_1, t_1 + T_{view}]) ∧ \frac{π}{2} − Δ_{slack} ≤ |Δ^i_{t2} − Δ^a_{t2}| ≤ \frac{π}{2} + Δ_{slack} ∧ intersect IR:(¬blind(t)∀t∈[t1,t1+Tview])∧2π−Δslack≤∣Δt2i−Δt2a∣≤2π+Δslack∧intersect 。
• 盲角(Blind Corner):特工从最初被遮挡的位置(例如角落或狭窄的门口)接近人员。在能见度如此有限的情况下,特工应谨慎行事,以避免发生碰撞。 I R : ( b l i n d ( t ) ∀ t ∈ [ t 1 , t 1 + T b l i n d ] ) ∧ d _ d i f f ( t 1 ) ≤ 0.5 IR: (blind(t) ∀t ∈ [t_1, t_1 + T_{blind}]) ∧ d\_ diff(t_1) ≤ 0.5 IR:(blind(t)∀t∈[t1,t1+Tblind])∧d_diff(t1)≤0.5 其中 T b l i n d T_{blind} Tblind 是代理不能看到该人的初始时间步数。
• 跟随人员(Person following):人和代理朝同一方向行驶。代理必须与人保持安全距离和相对较低的线速度。 I R : ( ¬ b l i n d ( t ) ∀ t ∈ [ t 1 , t 1 + T b l i n d ] ) ∧ ∣ Δ t 2 i − Δ t 2 a ∣ ≤ Δ s l a c k IR: (\neg blind(t) ∀t ∈ [t_1, t_1 + T_{blind}]) ∧ |Δ^i_{t2} − Δ^a_{t2}| ≤ Δ_{slack} IR:(¬blind(t)∀t∈[t1,t1+Tblind])∧∣Δt2i−Δt2a∣≤Δslack
Metrics
对于每个遭遇类别,我们评估:
• 遭遇生存率 (Encounter Survival Rate, ESR) 是没有人类碰撞的遭遇(在特定类别中)的百分比(例如,如果在盲角遭遇,代理在 20% 的时间内与人类发生碰撞的情况下,ESR将为80%);
• 平均线速度(Average Linear-Velocity, ALV)是智能体在一次遭遇中的平均线速度;
• 平均距离 (Average Distance, AD) 是代理相对于相遇中的人类的平均距离。
Experiment
Conclusion
我们引入了基于两个邻近感知任务的体现社交导航模型。
我们的实验表明,单独利用社交信号或与自我监督的辅助任务相结合,在复杂和拥挤的场景中是一种有效的策略。
我们的模型可以通过仅使用邻近感知任务来避免大多数遭遇。
此外,通过结合邻近感知和辅助任务[45],它可以在几乎所有遭遇类别中以高置信度防止人类碰撞,尽管碰撞类别的数量有所增加。
在我们未来的工作中,我们将专注于模拟更自然的人类行为,我们将在 sim2real 域传输上进行实验
相关文章:

Exploiting Proximity-Aware Tasks for Embodied Social Navigation 论文阅读
论文信息 题目:Exploiting Proximity-Aware Tasks for Embodied Social Navigation 作者:Enrico Cancelli, Tommaso Campari 来源:arXiv 时间:2023 Abstract 学习如何在封闭且空间受限的室内环境中在人类之间导航&a…...
【华为OD机试】统计射击比赛成绩【2023 B卷|100分】
【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 给定一个射击比赛成绩单,包含多个选手若干次射击的成绩分数, 请对每个选手按其最高3个分数之和进行降序排名,输出降序排名后的选手ID序列。 条件如下: 1、一个选手可以有多个射击成…...
git push之后的撤销操作
用的是idea。 pull了代码之后,想撤销pull: push代码到个人远程仓库之后,又从主仓pull了一下。 点击其中一条git记录,然后右键单击“reset current branch ti here”,然后再点击hard push了代码到个人仓库,想撤销&…...

CSS 的选择器有哪些种类?分别如何使用?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 元素选择器(Element Selector)⭐ 类选择器(Class Selector)⭐ ID 选择器(ID Selector)⭐ 后代选择器(Descendant Selector)⭐ 子元素选择器&a…...

【MongoDB】索引
目录 一、概述 二、索引的类型 1、单字段索引 2、复合索引 3、其他索引 三、索引的管理 1、索引的创建 2、索引的查看 3、索引的删除 四、索引的使用 1、执行计划 2、涵盖的查询 一、概述 索引支持在MongoDB中高效地执行查询。如果没有索引,MongoDB必须…...

机器人CPP编程基础-02变量Variables
机器人CPP编程基础-01第一个程序Hello World 基础代码都可以借助人工智能工具进行学习。 C #include<iostream>using namespace std;main() {//Declaring an integer type variable A, allocates 4 bytes of memory.int A4;cout<<A <<endl;//Prints the a…...

【学会动态规划】买卖股票的最佳时机 IV(18)
目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 动态规划怎么学? 学习一个算法没有捷径,更何况是学习动态规划, 跟我…...

请解释一下CSS中的rem和em单位有什么不同,分别如何使用?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CSS中的rem和em单位的区别和使用⭐ em单位使用示例: ⭐ rem 单位使用示例: ⭐ 区别和适用场景⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何…...
docker 导入镜像 REPOSITORY和tag都是null怎么解决
当使用 docker import 命令导入镜像时,REPOSITORY 和 TAG 字段可能会为 null,因为 docker import 命令不会保留镜像的元数据,例如镜像名称和标签。这是因为 docker import 命令主要用于将本地文件系统中的文件或目录导入为 Docker 镜像&#…...

c语言操作符
目录 运算符 移位操作符 左移操作符 右移操作符 位操作符 按位与& 按位或| 按位异或^ 异或交换数字 计算二进制中1的个数 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 隐式类型转换 整形提升实例: 算术转换 操作…...

python爬虫5:requests库-案例3
python爬虫5:requests库-案例3 前言 python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。 申明 本系列所涉及的代码仅用于个人研究与讨论,并不会对网…...

uni-app:实现点击按钮,进行数据累加展示(解决数据过多,导致出错)
效果 代码 核心代码 一、标签显示 <!-- 加载更多 --> <view class"load_more" v-if"info.length > pageNum * pageSize" tap"loadMore">加载更多 </view> v-if"info.length > pageNum * pageSize"…...

群晖6.X便捷的安装cpolar内网穿透
群晖6.X便捷的安装cpolar内网穿透 文章目录 群晖6.X便捷的安装cpolar内网穿透前言1. 下载cpolar的群晖套件1.1 打开群晖套件中心1.2 选择“手动安装”1.3 选择下载cpolar套件位置 2. 打开cpolar的Web-UI界面3. 注册会员 前言 随着硬件设备和软件技术的发展,以及数据…...

ffmpeg 4.4版本对MP4文件进行AES-CTR加密,和流式加密
对于ffmpeg的AES-CTR加密有两种方式,一个是普通的整个视频做加密,另一个是对视频做切片处理,然后进行加密。 一、对于普通的加密方式 直接使用下面的命令就行 ffmpeg -i animal.mp4 -vcodec copy -acodec copy -encryption_scheme cenc-aes…...

软件测试基础篇——Docker
1、docker技术概述 docker描述:docker是一项虚拟化的容器技术(类似于虚拟机),docker技术给使用者提供一个平台,在该平台上可以利用提供的容器,对每一个应用程序进行单独的封装隔离,每一个应用程…...

MySQL刷题遇到的盲点(五)窗口函数
窗口函数 语法: <窗口函数> over (partition by <用于分组的列名>order by <用于排序的列名>) partition by:用来对表分组( partition 子句可以省略,省略就是不指定分组) order by:是…...

【java】基础——多态
多态基本知识思维导图 多态的代码实现,注意父类对象引用指向子类对象引用(向上转型)的方法,父类就可以调用子类重写的方法和派生的方法,但不能调用子类特有的方法: class Animal {public void makeSound()…...
Go语言使用cron/v3实现定时任务
一、获取cron/v3包 go get github.com/robfig/cron/v3v3.0.0安装v3版本的cron包。 二、创建cron调度器 使用cron.New()创建一个新的Cron调度器: c : cron.New()三、添加定时任务 使用AddFunc方法添加定时任务,参数是cron表达式和任务函数: c.AddFunc("* * * * *&quo…...

photoshop PS 查看像素坐标、像素颜色、像素HSB颜色
方法一 photoshop 菜单栏 窗口菜单->信息菜单项(F8), 在信息窗口里会有当前的 x,y坐标 方法二 photoshop 菜单栏 视图菜单->标尺菜单项(ctrlR) 宽度和高度边上都有标尺,默认的是厘米,右键单机宽度和高度边上…...

SpringCloud实用篇3----Docker
1.初识Docker 1.1 什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署,环境不一定一致…...

debian12拒绝海外ip连接
确保 nftables 已安装: Debian 12 默认使用 nftables 作为防火墙框架。检查是否安装: sudo apt update sudo apt install nftables启用并启动 nftables 服务 sudo systemctl enable nftables sudo systemctl start nftables下载maxmind数据库 将文件解…...

MATLAB遍历生成20到1000个节点的无线通信网络拓扑推理数据
功能: 遍历生成20到1000个节点的无线通信网络拓扑推理数据,包括网络拓扑和每个节点发射的电磁信号,采样率1MHz/3000,信号时长5.7s,单帧数据波形为实采 数据生成效果: 拓扑及空间位置: 节点电磁…...

建造者模式深度解析与实战应用
作者简介 我是摘星,一名全栈开发者,专注 Java后端开发、AI工程化 与 云计算架构 领域,擅长Python技术栈。热衷于探索前沿技术,包括大模型应用、云原生解决方案及自动化工具开发。日常深耕技术实践,乐于分享实战经验与…...
零基础在实践中学习网络安全-皮卡丘靶场(第十四期-XXE模块)
本期内容涉及到很多前面的内容,因此复习后可以更好的了解本期内容 介绍 XXE -"xml external entity injection"即"xml外部实体注入漏洞"。 概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导…...

【ArcGIS技巧】—村庄规划规划用地规划状态字段生成工具
"国土空间规划后续也是走向数据治理,数据建库已经是涉及到城市规划、建筑、市政、农业、地理信息、测绘等等方方面面。不得不说以后数据库建设跟维护,是很多专业的必修课。小编就湖南省的村庄规划建库过程中规划用地用海中规划状态字段写了个小工具…...

GeoBoundaries下载行政区划边界数据(提供中国资源shapefile)
要下载山东省济南市各个区的行政区划边界数据,你可以通过 geoBoundaries 提供的数据来实现。下面是详细步骤,包括网页操作和可选的 Python 自动化方式。 目录 ✅ 一、通过 geoBoundaries 官网手动下载1. 打开官网:2. 查找中国数据:…...

STM标准库-TIM旋转编码器
文章目录 一、编码器接口1.1简介1.2正交编码器1.3编码器接口基本结构**1. 模块与 STM32 配置的映射关系****2. 设计实现步骤(核心流程)****① 硬件规划****② 时钟使能****③ GPIO 配置(对应架构图 “GPIO” 模块)****④ 时基单元…...

学习笔记(23): 机器学习之数据预处理Pandas和转换成张量格式[1]
学习笔记(23): 机器学习之数据预处理Pandas和转换成张量格式[1] 学习机器学习,需要学习如何预处理原始数据,这里用到pandas,将原始数据转换为张量格式的数据。 1、安装pandas pip install pandas 2、写入和读取数据 >>创建一个人工…...

pytorch 与 张量的处理
系列文章目录 文章目录 系列文章目录一、Tensor 的裁剪二、Tensor 的索引与数据筛选torch.wheretorch.indicestorch.gathertorch.masked_selecttorch.taketorch.nonzero(省略) 三、Tensor 的组合与拼接torch.cattorch.stack 四、Tensor的切片chunksplit …...
求解插值多项式及其余项表达式
例 求满足 P ( x j ) f ( x j ) P(x_j) f(x_j) P(xj)f(xj) ( j 0 , 1 , 2 j0,1,2 j0,1,2) 及 P ′ ( x 1 ) f ′ ( x 1 ) P(x_1) f(x_1) P′(x1)f′(x1) 的插值多项式及其余项表达式。 解: 由给定条件,可确定次数不超过3的插值多项式。…...