基于视觉语言模型的机器人实时探索系统!ClipRover:移动机器人零样本视觉语言探索和目标发现
- 作者:Yuxuan Zhang 1 ^{1} 1, Adnan Abdullah 2 ^{2} 2, Sanjeev J. Koppal 3 ^{3} 3, and Md Jahidul Islam 4 ^{4} 4
- 单位: 2 , 4 ^{2,4} 2,4佛罗里达大学电气与计算机工程系RoboPI实验室, 1 , 3 ^{1,3} 1,3佛罗里达大学电气与计算机工程系FOCUS实验室, 3 ^{3} 3Amazon Robotics
- 论文标题:ClipRover: Zero-shot Vision-Language Exploration and Target Discovery by Mobile Robots
- 论文链接:https://arxiv.org/pdf/2502.08791
- 项目主页:https://robopi.ece.ufl.edu/cliprover.html
主要贡献
- 提出了新的导航管道流程ClipRover,用于无人地面车辆(UGV)在未知环境中的同时探索和目标发现。该系统利用视觉语言模型(VLM)的空间上下文感知能力,通过模块化架构实现。
- 设计了新的UGV平台Rover Master,支持VLM导航系统的机动性和计算需求,旨在为通用机器人研究提供强大且可配置的支持,并计划开源供学术使用。
- 开发了功能齐全的系统,将提出的导航管道与UGV平台集成在一起,并通过全面基准测试进行优化,以实现实时性能。
- 通过广泛的实验评估,证明了ClipRover在效率和成功率方面优于传统的地图遍历算法,并且在轨迹效率或成功率方面达到了与依赖先验知识的路径规划方法相当的性能。
研究背景
研究问题
- 传统的系统通常将地图探索和路径规划分开进行,导致探索效率低下。
- 论文主要解决的问题是如何在未知环境中实现移动机器人的零样本视觉语言导航和目标发现。
研究难点
该问题的研究难点包括:
- 在没有预先构建的地图或目标知识的情况下,如何利用视觉语言模型(VLM)进行实时主动导航;
- 如何在动态和部分可观测的环境中适应路径规划。
相关工作
- 路径规划:讨论了用于移动机器人路径规划的多种方法,包括树搜索算法(如BFS、DFS、Dijkstra、A*)和采样算法(如PRM、RRT)。这些方法在静态环境中表现良好,但在复杂和动态环境中可能需要频繁调整。
- 局部策略算法:介绍了Bug算法(如Bug0、Bug1、Bug2),这些算法采用局部最优策略,通过跟随视线和避开障碍物边界来实现导航。这些方法在有限的环境信息下表现良好。
- 零样本学习:讨论了零样本学习的概念,使机器人能够在不熟悉的环境中识别物体并做出导航决策。研究人员使用视觉特征、知识图、语义嵌入等技术来编码对象信息。
- 视觉语言导航:介绍了结合视觉和语言信息的导航方法,特别是基于CLIP模型的系统。这些系统通过生成语义标签来支持在线导航,实现零样本语义任务。然而,这些系统通常依赖于预先构建的地图和目标位置信息。
Rover Master
系统设计
平台概述
- Rover Master是一个便携且可扩展的平台,专为2D导航任务设计。它的主要传感器和执行器组件包括一个单目RGB摄像头和一个2D激光雷达,用于外部感知。
- 四个独立的轮子组件负责执行动作,每个轮子组件都是模块化的,自包含的,包括变速箱、无刷直流电机和悬挂系统。
轮子组件
- 每个轮子组件由一个无刷直流电机通过行星齿轮箱连接,齿轮比为16:1。这种设计允许机器人在较高速度下行驶,并轻松克服中等障碍物。
- 为了确保操作安全,设置了20%的油门限制,将机器人的最大速度限制在约2米/秒。
计算能力
- Rover Master的计算管道由Nvidia Jetson Orin模块提供动力。
- 这个模块提供了足够的计算能力来处理通用视觉语言模型和其他计算密集型任务。
摄像头和LiDAR
- 使用FLIR全局快门RGB摄像头进行视觉感知,摄像头被提升到离地面大约30厘米的高度。这种设计确保了镜头的光学中心与机器人的几何中心对齐。
- 此外,飞行控制器的IMU提供的航向值支持360度扫描能力。2D激光雷达安装在上层甲板的前部,主要用于安全和可视化目的,不影响视觉语言导航(VLN)的决策。
悬挂系统
- 四轮独立悬挂系统扩展了平台在不平坦表面的应用。
- 使用Discovery Wheel(TPU)时,它在草地、岩石路面甚至沙地上表现良好,但机动性有所降低。
配置灵活性
- Rover Master平台可以配置为不同的驱动类型(全向或差动)、底盘尺寸(参数化CAD设计)以及特定任务的执行器和传感器的附加组件(如摄像头、LiDAR、室内和野外机器人应用的机械手)。
- 底盘板设计用于根据任务容纳各种附加传感器和执行器。
特点和能力
紧凑性
- Rover Master系统的独特优势在于其轮子和电机组件的紧凑性。
- 四轮独立悬挂系统使其能够适应不平坦的表面。
配置灵活性
- 平台可以配置为不同的驱动类型、底盘尺寸和任务特定的执行器和传感器附加组件。
- 底盘板设计用于根据任务容纳各种附加传感器和执行器。
成本效益
- Rover Master平台的成本效益高,与其他标准UGV平台相比具有竞争力。
- 具体来说,Rover Master的估计成本在650到850美元之间,而TurtleBot3(Waffle Pi)的成本约为1500美元,TurtleBot4(标准版)的成本约为2100美元。
ClipRover导航流程
视觉感知前端
- 在前端,原始相机帧被分割成多个小块(tiles),这些小块代表机器人的视场(FOV)中的空间位置。
- 每个tile经过缩放和处理后,通过CLIP的视觉编码器进行编码。具体来说,每个帧被分割成六个tile,并重新排列成一个张量,形状为 N × 3 × H × W N \times 3 \times H \times W N×3×H×W,其中 H H H 和 W W W 是tile的高度和宽度。
- 编码器处理这些输入并生成一个 N × D N \times D N×D 的嵌入向量,其中 D D D 是每个预测向量的维度(在CLIP模型中为512)。
- 此外,每个tile的标准差也被计算并结合到模型的预测中,作为每个tile信息量的指标。这有助于在机器人遇到特征贫乏、颜色均匀的对象时,如墙壁、门或家具,识别视觉编码器的输出可能缺乏可靠性。
通行性:视觉-语言相关性
- 为了区分可行空间和非可行空间,设计了一组正面提示(positive prompts)来描述干净和可行的环境,例如:“一张(平坦|开阔|宽阔|清晰)的(地板|地面|走廊)照片”。
- 同时,也设计了一组负面提示(negative prompts)来描述被障碍物遮挡的空间,例如:“一张(裁剪的|糟糕的|不完整的)(阻塞|杂乱|拥挤)的(场景|空间)照片”。
- 对于目标发现,使用类似的文本提示来定义任务的目标。例如,实验中使用玩具熊作为目标,因为其在场景中具有独特性。
- 通过比较每个tile的嵌入与提示数据库的内积,计算出通行性和目标置信度的分数。这些分数的范围从-1.0到1.0,由最高绝对匹配得分决定。
熟悉度:视觉-视觉相关性
- 除了通行性分数外,实时积累熟悉度数据库以跟踪已探索的空间。数据库由表示已知空间的视觉嵌入(512维向量)构建,而不存储或使用实际图像。
- 当新嵌入与现有向量的相关性超过预定义阈值时,将其视为“已知”。新嵌入向量通过两种策略之一逐步合并到熟悉度数据库中:
- 平均法:在所有属于已知点的向量之间取平均值,保持跟踪已合并向量的计数:
v next = s s + 1 ⋅ v prev + 1 s + 1 ⋅ v new v_{\text{next}} = \frac{s}{s+1} \cdot v_{\text{prev}} + \frac{1}{s+1} \cdot v_{\text{new}} vnext=s+1s⋅vprev+s+11⋅vnew - 滚动平均法:在合并新向量时执行滚动平均操作,不需要跟踪已合并向量的总数。这种方法使向量倾向于新插入的向量,并逐渐“忘记”较旧的向量。遗忘率由因子 λ \lambda λ 控制(即衰减因子):
v next = ( 1 − λ ) ⋅ v prev + λ ⋅ v new v_{\text{next}} = (1 - \lambda) \cdot v_{\text{prev}} + \lambda \cdot v_{\text{new}} vnext=(1−λ)⋅vprev+λ⋅vnew
- 平均法:在所有属于已知点的向量之间取平均值,保持跟踪已合并向量的计数:
导航决策后端
- 决策模块根据感知和关联系统提供的信息生成运动命令。
- 引入了一个“运动混合器”作为基线的相关性到运动的转换器。它考虑每个tile的所有分数(即通行性、熟悉度和标准差),并做出智能决策。
- 运动混合器通常优先选择高度可行但较不熟悉的区域,同时避免纹理少的区域。
此外,决策模块还包括两个附加功能:
- 陷阱检测:使机器人能够识别并逃离潜在的死胡同。
- 环顾四周:允许机器人在复杂环境中重新定位自己。通过执行 36 0 ∘ 360^\circ 360∘ 旋转并收集不同方向的导航分数,应用高斯卷积来识别最可行的方向。
实现细节
切片策略
-
为了增强管道中位置信息的嵌入,原始相机帧在输入视觉语言模型之前被分割成更小的tiles。
-
这种策略旨在优化机器人基于其视觉感知做出明智导航决策的能力。具体来说,每个帧被分割成六个tiles(2行x3列),以适应机器人的控制能力。
-
使用较小的tiles代替整个相机帧可以减少视觉干扰,从而提高相关结果的准确性。
-
切片的尺寸在整个管道的所有阶段保持一致。例如,在2x3切片策略下,分割后的帧产生一个相应的 2 × 3 × 512 2 \times 3 \times 512 2×3×512 的视觉嵌入矩阵。
-
这些嵌入随后被传递给关联系统,生成一个 2 × 3 2 \times 3 2×3 的相关分数矩阵,每个元素对应一个特定的tile。关联系统的逻辑决定了单个tiles之间的相互影响。
-
为了保留每个tile中的空间上下文,分割的区域略微扩展到其原始边界之外。
-
这种重叠引入了大约20%的共享区域,减少了相邻tiles之间上下文信息的丢失。
-
这种调整在相机遇到无纹理表面(如墙壁、纸盒或门板)时特别有益,否则可能会损害机器人的感知和导航性能。
提示生成
设计了一个提示系统来组合文本提示,采用层次模板。该设计受到WinCLIP的启发,一个异常检测框架。提示系统包括以下模板和符号:
- 顶层prompts,如:“一张[描述]的(状态){对象}的照片”。
- 描述,如清晰、模糊、裁剪、空、损坏等。
- 状态,如清洁、清晰、宽阔、狭窄、杂乱、堵塞等。
- 对象,如地板、墙、门、物体等。
使用YAML语法定义提示数据库的结构,提供了选择性集成和就地扩展两个关键特性:
- 选择性集成:允许提示绕过模板的某些层级,以实现精确定制。例如,提示“A(无意义)的照片”不应跟随任何{对象},通过提前终止提示来实现。
- 就地扩展:通过使用垂直条语法(即|)分隔术语,便于集体定义相似的短提示。例如,提示“A照片没有{上下文|纹理|信息}”被扩展为三个不同的提示。
性能优化
- 导航决策是实时自主机器人系统的关键组件,需要快速执行以确保安全和操作效率。
- 然而,大多数视觉语言模型(VLMs)被设计为大型语言模型(LLMs)的扩展,对处理延迟和数据吞吐量的要求较低。
- 为了评估VLMs在机器人导航中的适用性,识别了两个关键性能指标:
- 决策延迟:测量从机器人相机捕获帧到向电机发出相应运动命令的时间。这个指标反映了系统对环境变化的反应能力,如避开障碍物和维护安全导航。
- 吞吐量:量化每秒处理的帧数,直接影响机器人运动的平滑度。有限的计算资源需要丢弃未处理的帧,只保留最新的帧进行决策。更高的吞吐量最小化帧间差异,减少运动的突然变化,确保更平滑的过渡。数学上,吞吐量是决策延迟的倒数。
- 为了减少决策延迟和提高数据吞吐量,提出的框架将导航管道分为四个主要节点:预处理、推理、相关性和决策。
- 计算密集型任务被卸载到GPU上,以利用并行处理能力。这些优化在功率受限的嵌入式系统上实现,平衡了效率和性能。通过这些优化,实现了:
- 决策延迟:252.10毫秒,提高了900%。
- 吞吐量:5.01帧每秒(FPS),相比顺序CPU实现提高了400%。
2D LiDAR的使用
尽管ClipRover管道仅使用单目RGB数据进行VLN导航决策,但在机器人上安装了一个2D 360°扫描LiDAR用于实验安全、地图生成和比较分析。LiDAR的具体功能包括:
- 模拟接近开关:
- LiDAR作为虚拟关闭开关,在操作期间检测机器人路径上的障碍物。
- 它监控发送到车轮的运动命令,推断机器人的计划轨迹,并检查该方向上是否存在潜在障碍物。
- 检测到潜在碰撞时,发出停止信号,严格用于安全目的,不影响导航算法。
- 地图和机器人轨迹的可视化:
- 离线使用记录的LiDAR和里程计数据进行地图生成,随后进行轨迹分析以评估导航效率和整体性能。
- 使用SLAM Toolbox生成地图和轨迹,实施两遍过程以提高结果质量。
- 与传统算法的比较:使用LiDAR数据生成的2D地图用于模拟和评估传统范围传感器基于的地图遍历和路径规划算法,以进行性能比较。
波前模拟
-
设计了“波前”模拟包作为不同方法之间比较的一般基线指标。它利用经典波动方程的概念并将其解释为概率分布,允许同时探索无限多的方向。
-
模拟实现了一个离散时间的二维拉普拉斯方程:
∂ 2 ∂ t 2 ψ ( x , y , t ) = c 2 ∇ 2 ψ ( x , y , t ) \frac{\partial^2}{\partial t^2} \psi(x,y,t) = c^2 \nabla^2 \psi(x,y,t) ∂t2∂2ψ(x,y,t)=c2∇2ψ(x,y,t)
离散化后的波动方程为:
ψ ( x , y , t n + 1 ) = 2 ⋅ ψ ( x , y , t n ) − ψ ( x , y , t n − 1 ) + c 2 Δ t 2 Δ x 2 ∇ 2 ψ ( x , y , t ) s.t. t n + 1 − t n = Δ t \begin{align*} \psi(x, y, t_{n+1}) &= 2 \cdot \psi(x, y, t_n) - \psi(x, y, t_{n-1}) \\ &+ \frac{c^2 \Delta t^2}{\Delta x^2} \nabla^2 \psi(x, y, t) \\ \text{s.t.} &\quad t_{n+1} - t_n = \Delta t \end{align*} ψ(x,y,tn+1)s.t.=2⋅ψ(x,y,tn)−ψ(x,y,tn−1)+Δx2c2Δt2∇2ψ(x,y,t)tn+1−tn=Δt
离散化的拉普拉斯算子 ∇ 2 \nabla^2 ∇2 定义为:
∇ 2 ψ ( x , y ) = ψ ( x i + 1 , y j ) + ψ ( x i − 1 , y j ) + ψ ( x i , y j + 1 ) + ψ ( x i , y j − 1 ) − 4 ⋅ ψ ( x , y ) s.t. x i + 1 − x i = y j + 1 − y j = Δ x \begin{align*} \nabla^2 \psi(x,y) &= \psi(x_{i+1}, y_j) + \psi(x_{i-1}, y_j) \\ &+ \psi(x_i, y_{j+1}) + \psi(x_i, y_{j-1}) \\ &- 4 \cdot \psi(x,y) \\ \text{s.t.} &\quad x_{i+1} - x_i = y_{j+1} - y_j = \Delta x \end{align*} ∇2ψ(x,y)s.t.=ψ(xi+1,yj)+ψ(xi−1,yj)+ψ(xi,yj+1)+ψ(xi,yj−1)−4⋅ψ(x,y)xi+1−xi=yj+1−yj=Δx -
此外,地图边界和障碍物通过反射条件模拟。在时间 T = 0 T=0 T=0 时,初始化一个以机器人起始位置为中心的高斯概率分布,标准差设置为机器人大小的一半;总概率归一化为1。
-
每次迭代,波函数乘以一个以目标位置为中心的反高斯函数,有效地减少地图上的总概率,模拟一个排水效应。
-
模拟终止时,剩余概率低于定义的阈值(实验中为 1 e − 4 1e^{-4} 1e−4)。输出是一个二维概率分布 p ( t ) p(t) p(t),指示机器人在每个时间步到达目标的概率。平均值和标准差用于与其他轨迹算法比较。
实验分析
实验设置
- 实验在室内工作空间进行,选择了一个布局复杂且包含多个障碍物、潜在陷阱和循环的环境。
- 实验的目标是让机器人探索实验室空间并寻找一个指定的目标——一个大约20厘米高、10厘米宽的玩具熊。
- 实验中,机器人的起始位置(源)和目标位置(目的地)从五个预定义的区域(如SW、C、NW、NE、SE)中选择。
性能评估
- 实验旨在评估在无先验地图或目标知识的情况下,探索区域和找到目标的效率。主要使用总行进距离(轨迹长度)作为核心指标来量化这些性能。
- 这种方法对CPU/GPU性能和机械驱动系统的能力不敏感,因为这些被认为是可以独立改进的外部因素。
比较算法
-
为了公平比较,实验将提出的ClipRover系统与六种广泛使用的地图遍历和路径规划算法进行了比较。
-
为了确保一致性,开发了一个新的2D模拟框架RoboSim2D,利用相同的2D LiDAR地图进行模拟,这些地图是从实际实验中记录的扫描生成的。
-
随机行走(Random Walk):从一个给定的方向开始,遇到障碍物时随机选择新方向。
-
墙反弹(Wall Bounce):从一个给定方向开始,根据碰撞点的法向量反弹。
-
波前(Wave Front):从一个高斯概率分布开始,向外扩散并反弹障碍物。
-
Bug算法:
- Bug0:一直朝目标移动,直到遇到障碍物,然后沿着障碍物边界移动。
- Bug1:尽可能朝目标移动,否则绕过障碍物。绕过障碍物后,移动到环上距离最小的点。
- Bug2:绕过障碍物,直到越过从起点到目标的直线(m线),然后恢复朝目标直行。
失败标准
- 由于实际限制,如果行进距离超过预设上限,则任务被视为失败。对于在测试区域进行的实际实验,这个上限设定为100米。
- 在模拟中,随机行走、墙反弹和波前算法的上限设定为1000米。对于Bug算法,通过检测循环来识别无尽循环,并将其分类为任务失败。
评估指标
实验使用了路径长度加权成功率(SPL)作为性能指标,定义为:
SPL = 1 N ∑ i = 1 N S i l i max ( p i , l i ) \text{SPL} = \frac{1}{N} \sum_{i=1}^{N} S_{i} \frac{l_{i}}{\max(p_{i}, l_{i})} SPL=N1i=1∑NSimax(pi,li)li
其中, S i S_{i} Si 是成功次数, l i l_{i} li 是实际路径长度, p i p_{i} pi 是基线路径长度。SPL指标结合了成功率和路径效率。
定性和定量分析
- 进行了超过60次实验,基于不同的起始和目标位置组合。对于ClipRover系统,每个起始-目标对进行了三次试验。
- 相比之下,随机行走实验记录了200次试验,而墙反弹实验记录了180个均匀分布的方向。
结果展示
- 实验结果显示,ClipRover在正常导航模式下表现出类似人类的运动策略,通过在开阔空间中心导航来提高探索效率并减少被困的可能性。
- 相比之下,路径规划算法通常沿着障碍物轮廓移动,因为它们缺乏对场景的语义理解。
定量结果
- 定量结果显示,ClipRover在达到目标前的平均行进距离为基线距离的2.66倍,而Wall Bounce算法在同一成功率下的平均行进距离为9.58倍。
- 尽管ClipRover没有额外的环境信息,但它在成功率和轨迹效率上优于传统的地图遍历算法,并且在许多情况下超越了依赖路径规划算法的性能。
SOTA VLNs比较
- 论文还比较了ClipRover与其他最先进的视觉-语言导航(VLN)系统。
- 与其他系统相比,ClipRover独特地不需要任务空间的先验知识,仅使用单目RGB感知。
- 此外,ClipRover直接输出低级运动命令,而不需要其他传统定位和导航管道,这使得它在低成本机器人上快速部署特别适用。
局限与改进
- 纹理缺失或透明表面:ClipRover在处理无纹理或透明表面时遇到困难,容易将这些表面误判为可通行区域。
- 开放空间和人工迷宫:在缺乏视觉线索的大型开放空间或人工迷宫中,系统的导航效率降低,因为它依赖于环境中的语义信息。
- 熟悉度饱和:随着时间的推移,熟悉度数据库可能会饱和,导致系统难以有效探索新区域。
- 自适应切片策略:当前系统使用固定切片策略,可能在狭窄空间中表现不佳。未来改进可以引入自适应切片策略以更好地处理这些情况。
- 高级推理和任务叙述:未来的改进可以包括集成大型语言模型(LLM)以实现更高层次的推理和任务叙述,从而提高系统的智能水平。
总结
- 论文提出了ClipRover,一种用于未知环境中自主地面机器人同时探索和目标发现的新型导航管道。
- ClipRover利用VLMs的能力,实现了零样本推断和高效导航,仅需单目视觉,无需预先地图或目标特定信息。
- 通过在Rover Master平台上进行广泛的评估,证明了ClipRover在效率和成功率上均优于现有方法。
- ClipRover的模块化框架为未来在复杂动态环境中应用VLMs的研究奠定了基础。
相关文章:
基于视觉语言模型的机器人实时探索系统!ClipRover:移动机器人零样本视觉语言探索和目标发现
作者:Yuxuan Zhang 1 ^{1} 1, Adnan Abdullah 2 ^{2} 2, Sanjeev J. Koppal 3 ^{3} 3, and Md Jahidul Islam 4 ^{4} 4单位: 2 , 4 ^{2,4} 2,4佛罗里达大学电气与计算机工程系RoboPI实验室, 1 , 3 ^{1,3} 1,3佛罗里达大学电气与计算机工程系F…...
Java常用工具算法-6--秘钥托管云服务AWS KMS
前言: 之前我们介绍了一些常用的加密算法(如:对称加密AES,非对称加密RSA,ECC等),不论是哪一种都需要涉及到秘钥的管理。通常的做法都是把秘钥放到配置文件中进行配置,但是对于一些高…...
Shell脚本的学习
编写脚本文件 定义以开头:#!/bin/bash #!用来声明脚本由什么shell解释,否则使用默认shel 第一步:编写脚本文件 #!/bin/bash #注释 echo "这是输出" 第二步:加上执行权限:chmod x 脚本文件名.sh 第三步&…...
Java——pdf增加水印
文章目录 前言方式一 itextpdf项目依赖引入编写PDF添加水印工具类测试效果展示 方式二 pdfbox依赖引入编写实现类效果展示 扩展1、将inputstream流信息添加水印并导出zip2、部署出现找不到指定字体文件 资料参考 前言 近期为了知识库文件导出,文件数据安全处理&…...
Redis过期key处理、内存淘汰策略与缓存一致性策略实践方案
在现代的高性能应用开发中,Redis作为一款极为热门的内存数据库,其快速的读写性能和丰富的数据结构使其在缓存、消息队列等诸多领域得到了广泛应用。然而,在实际使用过程中,处理好Redis过期key、选择合适的内存淘汰策略以及确保缓存…...
深入 C++ 线程库:从创建到同步的探索之旅
C在<thread>中定义了C线程库. 创建多线程 #include <iostream> #include <thread> using namespace std; void show(int id, int count) { //线程函数for (int i 0; i < count; i) {cout << "id:" << id << ",值:&qu…...
LangChain使用大语言模型构建强大的应用程序
LangChain简介 LangChain是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互ÿ…...
程序化广告行业(72/89):Tag Manager系统代码操作与行业发展剖析
程序化广告行业(72/89):Tag Manager系统代码操作与行业发展剖析 大家好!在技术领域不断探索的过程中,我深刻体会到知识共享的重要性。写这篇博客,就是希望能和大家一起深入了解程序化广告行业,…...
数据结构实验3.3:求解迷宫路径问题
文章目录 一,问题描述二,基本要求三,算法分析(一)整体思路(二)详细步骤1. 输入迷宫大小并生成迷宫2. 定义走步规则3. 深度优先搜索(DFS)4. 输出结果 (三&…...
基于SpringBoot的线上历史馆藏系统【附源码】
基于SpringBoot的线上历史馆藏系统(源码L文说明文档) 4 系统设计 系统在设计的过程中,必然要遵循一定的原则才可以,胡乱设计是不可取的。首先用户在使用过程中,能够直观感受到功能操作的便利性,符合…...
Mybatis的springboot项目使用
删除数据 & 占位符 一般常用占位符进行数据库操作,也就是预编译sql。 在UserMapper中定义删除接口 /** 根据id删除用户*/ Delete("delete from user where id #{id}") void deleteById(Integer id);若想要获取返回值,声明为Integer (s…...
网站集群批量管理-Ansible剧本与变量
复盘内容:链接指北 查看ansible命令文档 ansible-doc -s systemd一、剧本 何为剧本: playbook 文件,用于长久保存并且实现批量管理,维护,部署的文件. 类似于脚本存放命令和变量 剧本yaml格式,yaml格式的文件:空格,冒号. 剧本未来我们批量管理,运维必会的内容. …...
HOW - React Developer Tools 调试器
目录 React Developer Tools使用Components 功能特性1. 查看和编辑 props/state/hooks2. 查找组件3. 检查组件树4. 打印组件信息5. 检查子组件 Profiler 功能特性Commit ChartFlame Chart 火焰图Ranked Chart 排名图 why-did-you-render 参考文档: React调试利器&a…...
Spring Cloud Alibaba微服务治理实战:Nacos+Sentinel深度解析
一、引言 在微服务架构中,服务发现、配置管理、流量控制是保障系统稳定性的核心问题。Spring Cloud Netflix 生态曾主导微服务解决方案,但其部分组件(如 Eureka、Hystrix)已进入维护模式。 Spring Cloud Alibaba 凭借 高性能、轻…...
《AI换脸时代的攻防暗战:从技术滥用走向可信未来》
技术迭代图谱 过去五年里,Deepfake技术经历了飞速迭代,从最初的萌芽到如今的广泛应用和对抗措施形成。2017年前后,利用深度学习进行人脸换装的技术首次在社区中出现。一位Reddit网友昵称“deepfakes”,将名人面孔替换到色情影片上…...
25/4/9 算法笔记 DBGAN+强化学习+迁移学习实现青光眼图像去模糊1
整体实验介绍 实验主要是结合DBGAN对抗网络强化学习增强迁移学习增强实现青光眼图像去模糊。今天则是先完成了DBGAN板块模型的训练。 实验背景介绍 青光眼的主要特征有: 视盘形态与杯盘比CDR:青光眼患者主要表现为视杯扩大,盘沿变窄。 视…...
【Claude AI大语言模型连接Blender生成资产】Windows安装Blender MCP教程
前言 最近在学习资产制作,了解到了个好玩的东西,利用AI一步一步搭建资产: 上面这副图就是利用Claude AI调用Blender的Python接口一步一步实现的,挺丑但好玩。 安装教程 进入Github: Blender-MCP 网站,下载该项目&a…...
JSP运行环境安装及常用HTML标记使用
制作一个静态网站的基本页面index.html 实验代码:<form> <label for"username">用户名:</label> <input type"text" id"username" name"username"><br> <label for"password&…...
Git 的进阶功能和技巧
1、分支的概念和使用 1.1、什么是分支? 分支(Branch)是在版本控制中非常重要的概念。几乎所有版本控制系统都支持某种形式的分支。在 Git 中,分支是 Git 强大功能之一,它允许我们从主开发线分离出来,在不…...
WSL1升级到WSL2注意事项
今天要在WSL上安装docker,因为机器上安装了wsl1,docker安装后启动不了,通过询问deepseek发现docker只能在wsl2上安装,因此就想着将本机的wsl1升级到wsl2。 确保你的 Windows 系统是 Windows 10(版本 1903 及以上&…...
392. 判断子序列
https://leetcode.cn/problems/is-subsequence/?envTypestudy-plan-v2&envIdtop-interview-150因为是子序列我们只要关心后一个字符在前一个字符后面出现过就行,至于在哪出现出现几次我们不关心,所以我们可以用HashMap<Character, ArrayList<…...
在 VMware 中为 Ubuntu 24.04 虚拟机设置共享文件夹后,在虚拟机中未能看到共享的内容
在 VMware 中为 Ubuntu 24.04 虚拟机设置共享文件夹后,如果在虚拟机中未能看到共享的内容,可能是由于以下原因: VMware Tools 未正确安装:共享文件夹功能依赖于 VMware Tools 或 Open VM Tools。如果未安装或安装不完整࿰…...
台式电脑插入耳机没有声音或麦克风不管用
目录 一、如何确定插孔对应功能1.常见音频插孔颜色及功能2.如何确认电脑插孔?3.常见问题二、 解决方案1. 检查耳机连接和设备选择2. 检查音量设置和静音状态3. 更新或重新安装声卡驱动4. 检查默认音频格式5. 禁用音频增强功能6. 排查硬件问题7. 检查系统服务8. BIOS设置(可选…...
Windchill开发-WTContainer相关API整理
Windchill开发-WTContainer相关API整理 概述各容器对象相关方法站点容器组织容器产品容器/存储库容器上下文团队角色组 文件夹 方法汇总 概述 Windchill 的环境由一组容器组成,容器分为三级:第一级为站点容器,第二级为组织容器,第…...
理解JSON-RPC 2.0 协议
JSON-RPC 2.0是指一种基于 JSON 的远程过程调用协议,用于在网络上进行跨平台和跨语言的通信。它提供了一种简单、轻量级的方式来实现客户端和服务器之间的方法调用和数据交换。在原文中,JSON-RPC 2.0被用来描述 STDIO 传输机制中消息的格式,即…...
【 C# 使用 MiniExcel 库的典型场景】
以下是 C# 使用 MiniExcel 库的典型场景及代码示例: 一、基础读取操作 强类型读取(需定义数据模型类) 定义与 Excel 列名匹配的类后直接映射为对象集合: csharp Copy Code public class UserAccount { public int Id { get; …...
创建 Pod 失败,运行时报错 no space left on device?
遇到创建Pod失败并报错“no space left on device”时,请按照以下步骤排查和解决问题: 1. 定位问题来源 查看Pod事件: kubectl describe pod <pod-name> -n <namespace> 在输出中查找 Events 部分,确认错误是否与…...
[leetcode]查询区间内的所有素数
一.暴力求解 #include<iostream> #include<vector> using namespace std; vector<int> result; bool isPrime(int i) { if (i < 2) return false; for (int j 2;j * j < i;j) { if (i % j 0) { …...
【Web安全】如何在 CDN 干扰下精准检测 SSRF?Nuclei + Interactsh 实战
❤️博客主页: iknow181 🔥系列专栏: 网络安全、 Python、JavaSE、JavaWeb、CCNP 🎉欢迎大家点赞👍收藏⭐评论✍ 背景 在日常漏洞复核中,我们常用 DNSLog 平台判断目标是否存在 SSRF 漏洞:只要请…...
输入框只能输入非中文字符
在 Qt 中,可以通过设置输入法过滤器(QInputContext)或使用正则表达式来限制输入框(QLineEdit 或 QTextEdit)只能输入非中文字符。以下是两种实现方法: ### 方法 1:使用正则表达式 可以通过 QLi…...
LeeCode 136. 只出现一次的数字
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 示例 1 : 输入࿱…...
Traefik应用:配置容器多个网络时无法访问问题
Traefik应用:配置容器多个网络时无法访问问题 介绍解决方法问题原因: **容器多网络归属导致 Traefik 无法正确发现路由规则**。解决方案方法 1:将应用容器 **仅连接** 到 traefik-public 网络方法 2:显式指定 Traefik 监听的网络 …...
超便捷超实用的文档处理工具,PDF排序,功能强大,应用广泛,无需下载,在线使用,简单易用快捷!
小白工具https://www.xiaobaitool.net/files/pdf-sort/ 中的 PDF 排序功能是一项便捷实用的文档处理服务,以下是其具体介绍: 操作便捷直观:用户上传 PDF 文件后,可通过直接拖动页面缩略图来调整顺序,就像在纸质文档中…...
zsh: command not found - 鸿蒙 HarmonyOS Next
终端中执行 hdc 命令抛出如下错误; zsh: command not found 解决办法 首先,查找到 DevEco-Studio 的 toolchains 目录路径; 其次,按照类似如下的文件夹层级结果推理到 toolchains 子级路径下,其中 sdk 后一级的路径可能会存在差异,以实际本地路径结构为主,直至找到 openharm…...
【动态规划】 深入动态规划—两个数组的dp问题
文章目录 前言例题一、最长公共子序列二、不相交的线三、不同的子序列四、通配符匹配五、交错字符串六、两个字符串的最小ASCII删除和七、最长重复子数组 结语 前言 问题本质 它主要围绕着给定的两个数组展开,旨在通过对这两个数组元素间关系的分析,找出…...
金融数据分析(Python)个人学习笔记(7):网络数据采集以及FNN分类
一、网络数据采集 证券宝是一个免费、开源的证券数据平台(无需注册),提供大盘准确、完整的证券历史行情数据、上市公司财务数据等,通过python API获取证券数据信息。 1. 安装并导入第三方依赖库 baostock 在命令提示符中运行&…...
指定运行级别
linux系统下有7种运行级别,我们需要来了解一下常用的运行级别,方便我们熟悉以后的部署环境,话不多说,来看. 开机流程: 指定数级别 基本介绍 运行级别说明: 0:关机 相当于shutdown -h now ⭐️默认参数不能设置为0,否则系统无法正常启动 1:单用户(用于找回丢…...
7.第二阶段x64游戏实战-string类
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:7.第二阶段x64游戏实战-分析人物属性 string类是字符串类,在计算机中…...
【MySQL基础】左右连接实战:掌握数据关联的完整视图
1 左右连接基础概念 左连接(left join)和右连接(right join)是MySQL中两种重要的表连接方式,它们与内连接不同,能够保留不匹配的记录,为我们提供更完整的数据视图。 核心区别: left join:保留左表所有记录,…...
建筑工程行业如何选OA系统?4大主流产品分析
工程行业项目的复杂性与业务流程的繁琐性对办公效率提出了极高要求。而OA 系统(办公自动化系统)的出现,为工程企业提供了一种全新的、高效的管理模式。 工程行业OA系统选型关键指标 功能深度:项目管理模块完整度、文档版本控制能…...
动态科技感html导航网站源码
源码介绍 动态科技感html导航网站源码,这个设计完美呈现了科幻电影中的未来科技界面效果,适合展示技术类项目或作为个人作品集的入口页面,自适应手机。 修改卡片中的链接指向你实际的HTML文件可以根据需要调整卡片内容、图标和颜色要添加更…...
CLIPGaze: Zero-Shot Goal-Directed ScanpathPrediction Using CLIP
摘要 目标导向的扫描路径预测旨在预测人们在搜索视觉场景中的目标时的视线移动路径。大多数现有的目标导向扫描路径预测方法在面对训练过程中未出现的目标类别时,泛化能力较差。此外,它们通常采用不同的预训练模型分别提取目标提示和图像的特征,导致两者之间存在较大的特征…...
wsl-docker环境下启动ES报错vm.max_map_count [65530] is too low
问题描述 在windows环境下用Docker Desktop(wsl docker)启动 elasticsearch时报错 max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]解决方案 方案一 默认的vm.max_map_count值是65530,而es需要至少262…...
js chrome 插件,下载微博视频
起因, 目的: 最初是想下载微博上的NBA视频,因为在看网页上看视频很不方便,快进一次是10秒,而本地 VLC 播放器,快进一次是5秒。另外我还想做点视频剪辑。 对比 原来手动下载的话,右键检查,复制…...
游戏引擎学习第212天
"我们将同步…"α 之前我们有一些内容是暂时搁置的,因为在调整代码的过程中,我们做了一些变动以使代码更加简洁,这样可以把数据放入调试缓冲区并显示出来,这一切现在看起来已经好多了。尽管现在看起来更好,…...
PXE远程安装服务器
目录 搭建PXE远程安装服务器 1、准备Linux安装源: 2、安装并启用TFTP服务: 3、准备Linux内核、初始化镜像文件 4、准备PXE引导程序 5、安装并启用DHCP服务 6、(1)配置启动菜单文件(有人应答) 6、(2)…...
软件测试之功能测试详解
一、测试项目启动与研读需求文档 (一) 组建测试团队 1、测试团队中的角色 2、测试团队的基本责任 尽早地发现软件程序、系统或产品中所有的问题。 督促和协助开发人员尽快地解决程序中的缺陷。 帮助项目管理人员制定合理的开发和测试计划。 对缺陷进行…...
Python深度学习基础——卷积神经网络(CNN)(PyTorch)
CNN原理 从DNN到CNN 卷积层与汇聚 深度神经网络DNN中,相邻层的所有神经元之间都有连接,这叫全连接;卷积神经网络 CNN 中,新增了卷积层(Convolution)与汇聚(Pooling)。DNN 的全连接…...
pytorch 反向传播
文章目录 概念计算图自动求导的两种模式 自动求导-代码标量的反向传播非标量变量的反向传播将某些计算移动到计算图之外 概念 核心:链式法则 深度学习框架通过自动计算导数(自动微分)来加快求导。 实践中,根据涉及号的模型,系统会构建一个计…...
VSCode解决中文乱码方法
目录 一、底层原因 二、解决方法原理 三、解决方式: 1.预设更改cmd临时编码法 2.安装插件法: 一、底层原因 当在VSCode中遇到中文显示乱码的问题时,这通常是由于文件编码与VSCode的默认或设置编码不匹配,或…...