【计算机图形学】Where2Act: From Pixels to Actions for Articulated 3D Objects

文章目录

  • 1.论文做了件什么事儿
  • 2. 论文为什么要做这件事
  • 3. 介绍Introduction
  • 4. 相关工作
    • 预测语义表达
    • 推理几何和物体属性
    • 从被动观察中学习Affordance
    • 从交互中学习感知
  • 5. 问题陈述
  • 6. 方法
    • 6.1 网络模块
      • 主干特征提取器
      • 可运动性评分模块
      • 运动建议模块
      • 运动评分模块
    • 6.2 训练数据收集
      • 离线随机数据采样
      • 在线适应性数据采样
    • 6.3 训练与损失
      • 运动评分损失
      • 运动策略模块
      • 可运动性损失
  • 7. 实验
    • 7.1 实验设定
    • 7.2 指标和基线
    • 7.3 结果和分析
  • 8. 总结与限制
  • 9. 补充
    • 召回率与F-score

1.论文做了件什么事儿

论文处理的任务是:预测给定的六种原子动作的affordances,这种affordances可以被用于更丰富的交互,同时学习能够引起期望改变的low-level的动作。具体地展开说,比如我指定向左拉的动作,对于一个推拉门,理想的affordance应该预测出最大的操作可能性在推拉门的把手上,抓住推拉门把手的某个点,把它向左拉开。

输入是image和depth data

输出

  1. image每个pixel上可能的动作集合

  2. 在力的驱动下那些可能移动的铰接物体部件

同时提出了从交互中学习的框架,搜集策略并训练网络

2. 论文为什么要做这件事

从人类的视角看来,当我们看到一个铰接物体时候,我们可以毫不费力地知道这个铰接对象可以做什么,我们需要在哪个位置完成交互,以及我们如何完成交互,例如,我们可以抓住把手拉开从而打开抽屉,推动门的任意一个位置使其观赏,旋转按钮来把灯打开,或者是按下按钮来启动烤箱。我们不仅知道怎样的动作可以完成一个任务,我们还可以知道什么事情是不应该做的,比如我们不应该把遥控器上的按钮拔出来。

在这篇工作中,目标就是建立一个感知系统,能够理解通用物体。当给定一个新的物体时,作者希望系统能够推理出在铰接物体上无数种可能的交互,

3. 介绍Introduction

预测物体可能的交互在机器人领域和计算机视觉领域方面是十分重要的。在机器人领域,预测可行的动作(如抽屉可以被拉开)有助于帮助动作规划、高效探索和交互学习(使得采样成功率更高)。在另一方面,计算机视觉领域主要聚焦于从视觉输入中推理语义标签(如部件分割和关键点估计),但是这种被动学习的表示仅能够提供有限的理解。被动学习受到智能体执行动作的能力、学习到的预测模型、很多案例下的语义(类别通常定义了功能本身)的限制。文章的目标是建立一个多物体适用的通用感知系统,同时对什么交互动作能够使得动作成功的问题进行自监督学习。

第一个问题是如何参数化动作预测空间。任何长时间的动作都可以被分解成原子动作。因此本文将问题限定于“在给定物体当前状态的情况下,能够执行哪些短期交互”。每个原子交互被进一步分解成“在哪里做”和“怎么做”两个部分,比如机器人可以与橱柜的哪个部分交互(如抽屉的把手或抽屉的表面)、机器人应该如何执行动作(如平移或垂直拉动把手)。这些观察将文章的任务定义为 “密集视觉预测”,给定物体的深度图和RGB图,尝试去推理,在每一个像素/点上是否能够执行原子动作,如果能够执行,又应该如何去执行。

我们学习一个预测网络,给定一个原子动作类型的条件,可以预测逐像素的如下信息:一个“运动能力”分数、动作策略、成功概率。

我们的方法让智能体和多个物体进行简单地交互来学习、记录动作的输出,并标记那些朝着理想状态改变的动作。我们意识到可以让智能体学习随机的交互采样,但这并不是一个高效率的探索策略,因此我们提出一个基于策略的数据采样方法来减轻这个问题——通过将采样偏置向那些智能体认为可能成功的动作来实现(就是通过让网络学习一些可能成功的动作,在这些成功率高的位置多做采样)。

论文贡献如下:

  1. 论文作者将任务定义为通过推理逐像素的动作分数和动作建议来得到可操纵3D铰接物体的Affordance;

  2. 提出了从交互中学习的方法,同时使用适应性采样来获得更多有价值的采样;

  3. 我们的网络能够学习到动作的视觉表达,并能够泛化到新的shape甚至是未见过的物体类别上。

4. 相关工作

预测语义表达

为了成功与3D物体交互,智能体需要去“理解”给定的感知输入。计算机视觉领域的很多方法都追求以多种语义标签的形式来表达这种“理解”。如预测类别标签、或者更细力度的语义特征点或部件分割等任何能够更具有运动解释性的表达。考虑如何推理出“把手”或“按钮”的位置等。然而,仅获得这些语义标签是不足够的,智能体必须理解需要做些什么(如在把手上能够通过“拉”的动作打开门)、以及如何运动来完成这个动作(在特定物体上执行“拉开”这个动作需要怎样精确的运动)。

推理几何和物体属性

为了得到能够直接用于如何操纵相关的信息,一些方法利用经典的机器人技术实现。给定shape的表达,以及刚性物体姿态、铰接物体姿态,在机器人领域可以利用离线planner或预测系统来获得动作策略。另外,推理物理属性如材质,mass的能力可以进一步提升精确性。

然而,这种两个阶段的动作执行过程,包括预测物体状态的感知系统对于出现预测误差的情况并不鲁棒,同时也会让感知系统产生比我们所需更丰富的输出,例如我们不需要预测完整的物体状态来判断如何拉出抽屉。另外,当这一类方法让智能体更精确地产生一个动作时,这些方法首先回避了需要/可以执行什么动作的问题,如,智能体如何理解一个按钮可以被按下?

(第二段可能稍微有点绕,我理解的意思是传统的机器人planner方法是通过以物体初态为输入,预测物体的终态后再获得执行的动作,但是这就导致了冗余。同时这一类方法一开始就回避了在物体上哪些地方可以做一些动作/操作的问题,故并不理想)

从被动观察中学习Affordance

让智能体学习在给定上下文中可以执行什么动作的方法通常是利用一些被动的观察——比如看一个其他智能体和物体/场景交互的视频,并学习可能可以做一些什么。这种技术被用于成功地学习场景的affordance(坐下/站立),可能的触摸位置,交互热点,甚至是抓取方式。

但是从被动观察中学习是具有挑战性的,例如学习的智能体在解剖结构上有所不同,就需要适当的重新定位来解决这一点。一个更加常见的问题是在模仿学习中的分布转移问题,当智能体看到可以做一件事的例子时,它可能没有见过足够的负例或足够多的正例。

从交互中学习感知

与我们工作最相关的工作是通过他们生成的数据(与真实世界交互来尝试可能的动作)来预测affordances。大部分工作被应用与如物体分割,planar pushing,或者non-planar grasp,但这些系统都受限于他们建模动作的复杂性。大部分方法都执着于去学习一些复杂的affordances,而没有尝试去建模一些所需low-level的动作,而是去将任务定性为使用oracle manipulators进行的分类任务(我大概理解的是,就是哪些动作在当前条件下可以执行,哪些动作在当前操作下不能执行)。在本文的工作中,作者处理了affordances的预测任务,这种affordances可以被用于更夫妇的交互,同时学习哪些能够引起想要改变的low-level的动作。

5. 问题陈述

在这里插入图片描述

我们将问题定义为一个新的挑战性问题Where2Act——推理用于操纵3D铰接物体的逐像素的“可操纵性信息”。如图所示,给定一个具有铰接部件的3D shape S S S,我们对每一个像素进行预测,预测出(a)哪些位置可以进行交互,(b)如何进行交互,©在不同交互动作下的交互的输出是什么。

输入的shape可以以2D RGB图像或者3D部分点云扫描来表示。同时参数化了6种类型的短期原子动作,即gripper pose在SE(3)空间下的推和拉等动作。如果和预期接触点进行交互并使得交互的部件产生了较大的运动(即运动比较明显),则认为交互成功。

在3D shape的铰接部件的每一个像素/点 p p p上预测如下的信息:

  • (a) 运动性分数 a p a_p ap用于衡量 p p p有多大的可能是可操作的;

  • (b) 一组和点 p p p进行的交互建议 { R z ∣ p ∈ S O ( 3 ) } \{R_{z|p}∈SO(3)\} {RzpSO(3)},其中 z z z是从高斯分布中随机采样的;

  • (c) 每一个运动建议 R R R成功的概率 s R ∣ p s_{R|p} sRp

6. 方法

整个pipeline首先通过encoder-decoder(2D-UNet/3D-PointNet++)主干来提取per-pixel/per-point的特征,然后设计三个解码分支来预测“可运动性信息”,包括一个运动性分数模块、一个运动建议模块、一个运动评估模块。

为每一种运动训练一个独立的网络。共六个原子动作

6.1 网络模块

在这里插入图片描述

主干特征提取器

在铰接部件上提取密集的逐像素/点特征 { f p } p \{f_p\}_p {fp}p

对于2D的情况,使用UNet架构,其中编码器使用在ImageNet上预训练的ResNet-18,以及从头开始训练的对称解码器,其中在encoder和decoder之间有密集的跳跃连接。

对于3D的情况,使用PointNet++,包括4个set abstraction layers和single-scale grouping来作为编码器,4个特征传播层作为解码器将特征传播回每个点。

以上两种情况,均能够产生逐像素特征 f p ∈ R 128 f_p∈\mathbb{R}^{128} fpR128

可运动性评分模块

对于每一个像素/点 p p p,预测一个用于指示当前像素/点能否运动的分数 a p ∈ [ 0 , 1 ] a_p∈[0,1] ap[0,1]。这里的多层感知机 D a D_a Da由一个具有128层隐藏单元的MLP组成该模块。网络的输出在应用Sigmoid函数后是一个标量值 a p a_p ap,更高的分数意味着更高的交互成功的概率。即

a p = D a ( f p ) a_p=D_a(f_p) ap=Da(fp)

运动建议模块

运动建议模块被作为一个条件生成模型,用于提出交互参数 { R z ∣ p } \{R_{z|p}\} {Rzp}。这里应用另一个具有128个隐藏单元的多层感知机 D r D_r Dr来实现这个模块。

输入是当前像素/点的特征 f p f_p fp和一个随机采样的高斯噪声 z ∈ R 10 z∈\mathbb{R}^{10} zR10,网络预测gripper在SO(3)空间中的的end-effector 3-DoF orientation R z ∣ p R_{z|p} Rzp

R z ∣ p = D r ( f p , z ) R_{z|p}=D_r(f_p,z) Rzp=Dr(fp,z)

3-DoF夹持器的方向follow 6D旋转表示法,使用3×3旋转矩阵的前两个轴来表示。

运动评分模块

对于每一个像素/点 p p p的运动建议 R R R,我们为每一个交互方式 ( p , R ) ∈ S E ( 3 ) (p,R)∈SE(3) (p,R)SE(3)最终评估一个成功概率 s R ∣ p ∈ [ 0 , 1 ] s_{R|p}∈[0,1] sRp[0,1]。可以通过预测的评分来过滤掉低概率的运动建议,或者根据这个预测的评分来排序所有运动建议。这里的这个分数类似于目标检测相关文献中边界框的置信分数。

网络模块 D s D_s Ds仍然是一个含有128个隐藏单元的单隐层来实现的MLP,给定输入的元组 ( f p , R ) (f_p,R) (fp,R),产生运动评分 s R ∣ p ∈ [ 0 , 1 ] s_{R|p}∈[0,1] sRp[0,1],即:

s R ∣ p = D s ( f p , R ) s_{R|p}=D_s(f_p,R) sRp=Ds(fp,R)

在测试的时候,认为 s R ∣ p > 0.5 s_{R|p}>0.5 sRp>0.5表示策略 R R R是可用的。

6.2 训练数据收集

因为人为标注数据是很困难的,所以取而代之地使用智能体在模拟环境中和物体交互以获得数据。

在模拟环境中奖随机的3D铰接物体放置在场景的中心,一个flying gripper可以在物体几何表面的指定位置 p ∈ R 3 p∈\mathbb{R}^3 pR3使用末端夹持器方向 R ∈ S O ( 3 ) R∈SO(3) RSO(3)的方式进行交互。仅考虑如图(b)中所示的6中预定义的简单的交互策略。每一种都是由一开始的抓手姿态 ( p , R ) ∈ S E ( 3 ) (p,R)∈SE(3) (p,R)SE(3)定义的。

同时使用一种混合数据采样的方式。首先使用离线随机交互策略来提速学习,接着基于网络预测的数据点来进行交互以实现更高效的学习。

离线随机数据采样

通过在多CPU的环境下同步模拟可以采样很多训练数据。

对于数据点,在GT的铰接部件上随机采样一个位置 p p p进行交互。接着,从 p p p周围切平面的上半球随机抽取一个交互作用方向 R ∈ S O ( 3 ) R∈SO(3) RSO(3),方向始终朝向正法线方向,并尝试去查询参数化 ( p , R ) (p,R) (p,R)的交互结果。同时将来自另一个半球的方向 R s R_s Rs标记为负,因为抓手不能放在物体体积内部。

实验中,对于每一种原子运动类型,都采样足够的离线数据,给定粗略的一万个策略来提速训练。虽然可以实现大规模的数据收集,但这种随机的数据采样策略在查询兴趣交互区域以获得正数据点时候的效率非常低。实验统计证明,对于拉这个原子动作来说,只有1%的数据是正例。这也导致了训练过程中一个非常大的数据不平衡挑战,也暗示了可以拉动的区域可能仅占据一个非常小的部分,比如在拉动门把手或者拉动抽屉把手时候才能完成拉的动作。

在线适应性数据采样

为解决离线采样过程中数据采样不高效的问题,我们提出去构建一个在线适应性数据采样方法。对于我们正在学习的网络预测出极有可能成功的子区域做更多的采样。

在网络使用数据 ( p , R ) (p,R) (p,R)训练运动评分模块 D s D_s Ds时,能够推理出所有像素 { p i } i \{p_i\}_i {pi}i上的运动预测分数 { s R ∣ p i } i \{s_{R|p_i}\}_i {sRpi}i。接着,采样一个位置 p ∗ p* p来构建一个额外的交互尝试 ( p ∗ , R ) (p*,R) (p,R)。其中, p ∗ p* p是根据SoftMax所有可能的相互作用位置上归一化概率分布后确定的。(我的理解是,对一所有可能的相互作用位置,将所有位置的概率做一个归一化,然后取交互概率最大的位置进行采样)。

通过这种自适应的数据采样,正数据采样率得以提升,因为网络正在积极地在可能成功的子区域周围进行更多采样。此外,我们观察到在可能成功区域周围采样更多数据有利于网络更好地学习特征,以更好地区分小而关键的交互部分(如手柄、按钮和旋钮)。

虽然自适应在线数据采样是有益处的,但它也可能导致新区域中采样数据不够的问题。因此,在我们最后的在线数据采样过程中,我们有50%的数据来自随机数据采样,剩下50%来自基于预测的适应性数据采样。

6.3 训练与损失

经验性地发现最好的训练方式是首先训练运动评分模块 D s D_s Ds,接着联合训练三个解码器。在训练中维护一个单独的数据队列,在每个训练批中提供相同数量的正交互和负交互数据,以解决数据不平衡的问题,同时平等地从不同类别中采样shape。

运动评分损失

给定一个batch,其中含有 B B B个交互数据点 { ( S i , p i , R i , r i ) } i \{(S_i,p_i,R_i,r_i)\}_i {(Si,pi,Ri,ri)}i,其中 r i = 1 r_i=1 ri=1表示正例, r i = 0 r_i=0 ri=0表示负例,使用二分类交叉损失来训练运动评分模块:

L s = − 1 B ∑ i r i l o g ( D s ( f p i ∣ S i , R i ) ) + ( 1 − r i ) l o g ( 1 − D s ( f p i ∣ S i , R i ) ) L_s=-\frac{1}{B}\sum_ir_ilog(D_s(f_{p_i|S_i},R_i))+(1-r_i)log(1-D_s(f_{p_i|S_i},R_i)) Ls=B1irilog(Ds(fpiSi,Ri))+(1ri)log(1Ds(fpiSi,Ri))

运动策略模块

利用N个最小策略来训练运动策略模块 D r D_r Dr,本质上是一个条件生成模型,将像素 p p p map到交互策略分布 R z ∣ p R_{z|p} Rzp中。对于含有B个交互数据点的batch { ( S i , p i , R i , r i ) } i \{(S_i,p_i,R_i,r_i)\}_i {(Si,pi,Ri,ri)}i,其中 r i = 1 r_i=1 ri=1,Min-of-N损失被定义为:

L r = 1 B ∑ i min ⁡ j = 1 , . . . , 100 d i s t ( ( D r ( f p i ∣ S i ; z j ) ) , R i ) L_r=\frac1B\sum_i\min_{j=1,...,100}dist((D_r(f_{p_i|S_i};z_j)),R_i) Lr=B1iminj=1,...,100dist((Dr(fpiSi;zj)),Ri)

其中 z j z_j zj是随机采样的高斯向量, d i s t dist dist表示两个6D-rotation的距离。

可运动性损失

我们将“actionability”视作是一个像素/点上进行操纵预期成功率。

a ^ p i ∣ S i = 1 100 ∑ j = 1 , . . . , 100 D s ( f p i ∣ S i , D r ( f p i ∣ S i , z j ) ) \hat{a}_{p_i|S_i}=\frac{1}{100}\sum_{j=1,...,100}D_s(f_{p_i|S_i},D_r(f_{p_i|S_i},z_j)) a^piSi=1001j=1,...,100Ds(fpiSi,Dr(fpiSi,zj))

L a = 1 B ∑ i ( D a ( f p i ∣ S i ) − a ^ p i ∣ S i ) 2 L_a=\frac1B\sum_{i}(D_a(f_{p_i|S_i})-\hat{a}_{p_i|S_i})^2 La=B1i(Da(fpiSi)a^piSi)2

这个策略的计算是很高效的,因为我们使用了运动策略模块中的100个策略。由于 D r D_r Dr经过优化以后会覆盖所有成功的交互方向,因此当大多数建议成功时,估计的 a ^ p i ∣ S i \hat{a}_{p_i|S_i} a^piSi预计将接近1,而位置 p p p不可操作时, a ^ p i ∣ S i \hat{a}_{p_i|S_i} a^piSi将接近0(所有提案成功的可能性评分都非常低)

7. 实验

7.1 实验设定

这部分是一些训练集和测试集的划分,以及六个原子动作的定义、对交互成功的定义。

7.2 指标和基线

指标方面

  • 衡量 D s D_s Ds(运动策略评分模块)的指标是二分类精确性,主要评价召回率与F-score

  • 引入采样成功率指标ssr用于评价网络提出交互策略的成功概率

对于后面这个指标,评价过程如下:使用可运动性评分模块 D a D_a Da来采样交互的像素,接着应用运动策略提出模块 D r D_r Dr来生成多个交互策略,最后根据 D s D_s Ds对这些运动评分来采样出合适的交互策略。

关于交互策略的采样,是在所有像素的预测运动评分做一个归一化,然后采样那些绝对概率大于0.5的策略。对于策略采样步骤,是在每个像素上采样100个策略,这是通过从高斯分布中随机采样并输入到 D r D_r Dr中获得的。对于每一种交互策略,都应用模拟器来观察GT输出,故:

s s r = # s u c c e s s f u l _ p r o p o s a l s # t o t a l _ p r o p o s a l s ssr=\frac{\#successful\_proposals}{\#total\_proposals} ssr=#total_proposals#successful_proposals

基线方面

由于没有类似的任务,所以与三个相对简单的baseline比较,以及文章方法的消融版本比较。

  • B-Random:随机的智能体,总是给出随机的策略和分数

  • B-Normal:将2D-UNet和3D-PN++编码出的特征 f p f_p fp替换成3维的GT法线,使用相同的解码头、损失、训练框架

  • B-PCPNet:将上面提到的特征 f p f_p fp替换成使用PCPNet预测的法线和曲率,使用相同的解码头、损失和训练框架

  • Ours w/o OS:本文方法的消融实验,移除了适应性数据采样部分,仅使用随机探索来采样数据,为了保证公平,采样的数据量和文中离线+在线采样的数据量保持一致

其中,B-Random展示了测量指标的下界;B-Normal用于验证网络学习的特征提取器提取的特征是面向交互的特征,而不是如法线一样简单的几何特征;B-PCPNet进一步证明网络学习了比局部法线和曲率更多的几何特征;Ours w/o OS进一步证明在线适应性采样策略的改进。

7.3 结果和分析

定量实验:

在这里插入图片描述

上述表格展示了文中方法的优越性,优于其他所有基线,即使是使用2D版本,本文的方法也展示出了competitive的结果。

在这里插入图片描述

消融实验证明了在线采样策略的高效性。

定性实验:
在这里插入图片描述

其余见论文

8. 总结与限制

文章完成了一个挑战性任务:预测操纵3D物体的逐像素运动信息。对于一个物体铰接部件上的每一个像素,预测每个像素关于6个原子动作的运动概率,并提出候选交互参数。

限制:

  1. 网络使用单帧视角作为输入,如果铰接部件运动信息无法从单帧中进行确定,则容易引起解空间的二义性;

  2. 实验限制在6个类型的原子动作,每个动作策略都是硬编码的;

则可探索的方向就是实现free-form的交互。同时文章没有显式建模部件分割和部件的motion axis,这些信息在未来可以被进一步结合。

9. 补充

召回率与F-score

一种评价二分类任务的指标,详见:【机器学习笔记15】多分类混淆矩阵、F1-score指标详解与代码实现(含数据)-CSDN博客

将二分类分为TP(预测正确,为正类),FP(预测错误,为正类),FN(预测错误,为负类),TN(预测正确, 为负类);即TP为真阳性,FP为假阳性,FN为真阴性,FN为假阴性。

召回率是基于这些分类进行计算的。召回率 R c = T P T P + F N R_c=\frac{TP}{TP+FN} Rc=TP+FNTP,也就是真实类别为正类的所有结果中,模型预测正确的比重。

F-score用于综合考虑精确度和召回度指标,其公式在上面的文章中有写明

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编曲学习:高叠和弦 挂留和弦 和弦实战应用

高叠和弦 挂留和弦 和弦实战应用小鹅通-专注内容付费的技术服务商https://app8epdhy0u9502.pc.xiaoe-tech.com/live_pc/l_65d4826fe4b04c10a1310517?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 七和弦 以三和弦举例,三和弦上面叠一个三度的音,就变成了七和弦。 从下到…

消息中间件篇之Kafka-高可用机制

一、 集群模式 1. Kafka的服务器端由被称为Broker的服务进程构成,即一个Kafka集群由多个Broker组成。 2. 这样如果集群中某一台机器宕机,其他机器上的 Broker 也依然能够对外提供服务。这其实就是 Kafka 提供高可用的手段之一。 二、分区备份机制 1. 一个…

英语四级,求职的必备项?【文章底部添加可得内推码汇总表】

目录 英语四级:求职的砝码 提升职业竞争力 国内外机会双丰收 系统备考英语四级 实际运用英语 强调英语四级证书 在当今全球化的职场中,英语四级证书愈发成为求职的必备项。它不仅仅是一张证书,更是通向更广阔职业世界的关键通行证。本文…

【自然语言处理四-从矩阵操作角度看 自注意self attention】

自然语言处理四-从矩阵操作角度看 自注意self attention 从矩阵角度看self attention获取Q K V矩阵注意力分数softmax注意力的输出再来分析整体的attention的矩阵操作过程从矩阵操作角度看,self attention如何解决问题的?W^q^ W^k^ W^v^这三个矩阵怎么获…

前后端分离nodejs+vue高校教材征订系统47nia

本教材管理网站是为了提高用户查阅信息的效率和管理人员管理信息的工作效率,可以快速存储大量数据,还有信息检索功能,这大大的满足了学生、教师和管理员这三者的需求。操作简单易懂,合理分析各个模块的功能,尽可能优化…

Window系统本地搭建LightPicture网站并实现远程上传下载本地图片

文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 现在的手机越来越先进,功能也越来越多,而手机…

leetcode 2867. 统计树中的合法路径数目【筛质数+贡献法】

原题链接:2867. 统计树中的合法路径数目 题目描述: 给你一棵 n 个节点的无向树,节点编号为 1 到 n 。给你一个整数 n 和一个长度为 n - 1 的二维整数数组 edges ,其中 edges[i] [ui, vi] 表示节点 ui 和 vi 在树中有一条边。 …

【服务器数据恢复】ext3文件系统下硬盘坏道掉线的数据恢复案例

服务器数据恢复环境: 一台IBM某型号服务器上有16块FC硬盘组建RAID阵列。上层linux操作系统,ext3文件系统,部署有oracle数据库。 服务器故障&检测: 服务器上跑的业务突然崩溃,管理员发现服务器上有2块磁盘的指示灯…

PyQt6的开发流程(密码生成小程序为例)

PyQt6的开发流程(密码生成小程序为例) 文章目录 PyQt6的开发流程(密码生成小程序为例)一、流程介绍与概览1. 界面与逻辑分离的开发流程2. PyQt6的开发流程 二、打开 designer.exe 创建文件三、用QT设计师绘制界面保存成ui1. QT常用…

Android之UI Automator框架源码分析(第九篇:UiDevice获取UiAutomation对象的过程分析)

前言 通过UiDevice的构造方法,UiDevice对象持有的几个对象一部分是在构造方法中创建的(初始化),它持有的每个对象都是分析的重点 备注:当前对象持有的对象,它的位置一般在实例变量创建时或者构造方法中&…

遇见您的私人法律顾问:智能法律大模型,智能解答您的法律困惑

遇见您的私人法律顾问:智能法律大模型,智能解答您的法律困惑 为了让法律服务深入到每个人的身边,让更多的人能够得到法律帮助,开启了【律知】这个项目, 致力于打造一系列引领法律智能化的大模型。AI 法律模型是一位虚拟法律顾问&…

探索比特币现货 ETF 对加密货币价格的潜在影响

撰文:Sean,Techub News 文章来源Techub News,搜Tehub News下载查看更多Web3资讯。 自美国比特币现货交易所交易基金(ETF)上市以来,比特币现货 ETF 的相关信息无疑成为了影响比特币价格及加密货币市场走向…

使用向量数据库pinecone构建应用03:推荐系统 Recommender Systems

Building Applications with Vector Databases 下面是这门课的学习笔记:https://www.deeplearning.ai/short-courses/building-applications-vector-databases/ Learn to create six exciting applications of vector databases and implement them using Pinecon…

pycharm安装Amazon CodeWhisperer 免费AI辅助编程插件教程

一、github copilot 和 Amazon CodeWhisperer区别 Copilot非常易于使用,并与所有主要的代码编辑器进行了简化集成。GitHub Copilot针对七种主要的编程语言进行了优化(详见下表),但也可以生成其他语言和各种框架的建议。 Copilot…

抖音视频批量下载工具|视频评论数据挖掘软件

这款基于C#开发的抖音视频批量下载工具,为用户提供了便捷的视频搜索和下载功能,让您可以轻松获取抖音平台上的热门视频内容。无论是通过关键词搜索抓取还是通过分享链接下载单个视频,都能满足用户快速获取视频资源的需求。 主要功能模块&…

LCR 173. 点名

解题思路&#xff1a;二分法 class Solution {public int takeAttendance(int[] records) {int i 0, j records.length - 1;while(i < j) {int m (i j) / 2;if(records[m] m) i m 1;else j m - 1;}return i;} }

TCPIP协议存在的安全隐患以及对应的防范措施

TCP/IP协议&#xff0c;作为网络通信的标准协议&#xff0c;是一组不同层次上的多个协议的组合。由于在其设计初期过分强调其开放性和便利性&#xff0c;却没有认真仔细考虑到它的安全性问题&#xff0c;因此协议中存在有诸多的安全漏洞。协议缺陷造成的安全漏洞&#xff0c;很…

二叉树的链式结构实现

二叉树的链式结构实现 1. 链式存储2. 二叉树的遍历前序遍历中序遍历后序遍历 3. 二叉树遍历的代码实现前序遍历中序遍历后序遍历 4. 二叉树各种相关函数的实现二叉树节点个数二叉树叶子节点个数二叉树的高度二叉树第k层节点个数二叉树查找值为x的节点 5. 代码验证 1. 链式存储 …

东莞IBM服务器维修之IBM x3630 M4阵列恢复

记录东莞某抖音电商公司送修一台IBM SYSTEM X3630 M4文档服务器RAID6故障导致数据丢失的恢复案例 时间&#xff1a;2024年02月20日&#xff0c; 服务器品牌&#xff1a;IBM System x3630 M4&#xff0c;阵列卡用的是DELL PERC H730P 服务器用途和用户位置&#xff1a;某抖音电…

Fastapi进阶用法,路径参数,路由分发,查询参数等详解

文章目录 1、路径操作1.路径操作装饰器1.tags 标签2.summary 接口描述的总结信息3.describe: 接口信息的详细描述4.response_description&#xff1a;响应描述5.deprecated&#xff1a;接口是否废弃&#xff0c;默认是False 2.fastapi路由分发include_router 2、请求与响应2.1、…