【视频目标分割-2024CVPR】Putting the Object Back into Video Object Segmentation

Cutie

  • 系列文章目录
  • 1 摘要
  • 2 引言
    • 2.1背景和难点
    • 2.2 解决方案
    • 2.3 成果
  • 3 相关方法
    • 3.1 基于记忆的VOS
    • 3.2对象级推理
    • 3.3 自动视频分割
  • 4 工作方法
    • 4.1 overview
    • 4.2 对象变换器
      • 4.2.1 overview
      • 4.2.2 Foreground-Background Masked Attention
      • 4.2.3 Positional Embeddings
    • 4.3 Object Memory

系列文章目录

  • 2024CVPR-Guided Slot Attention for Unsupervised Video Object Segmentation
  • 2024CVPR-RMem: Restricted Memory Banks Improve Video Object Segmentation
  • 2021NeurIPS-Associating Objects with Transformers for Video Object Segmentation
  • 数据集-Breaking the “Object” in Video Object Segmentation

1 摘要

  • 背景:我们提出了Cutie模型,它是一个结合了对象级记忆读取的视频对象分割网络,它将记忆中的对象表征重新返还给视频目标分割结果。
  • 难点、不足:最近的VOS工作都采用自下而上的像素级记忆读取,它们由于匹配了噪声,尤其是在有干扰物的情况下,导致其结果在具有挑战性的数据下表现不佳。
  • 解决方案:Cutie通过采取一个小型的对象查询集合实现了自上而下的对象级记忆读取。它通过query-based object transformer与自下而上的像素级特征进行交互迭代。这个object queries充当目标对象的高级总结,同时保留高分辨率特征图以实现高准确率分割。结合foreground-background masked attention,Cutie可以将前景图像从背景图中干净的分割出来。
  • 结果:在具有挑战的MOSE数据集中,在相似的运行时间下,Cutie相比XMem提升了8.7 J&F;Cutie相比DeAOT提升了4.2 J&F,速度还快了三倍。

在这里插入图片描述

图0:如图所示,图像从左到右依次为输入图像、目标对象mask、pixel attention和object querry attention。可以发现,在pixel attention中,当存在相似物体时,attention map会被干扰。而object querry attention则专注于目标对象。

2 引言

2.1背景和难点

视频对象分割(Video Object Segmentation, VOS),特别是“半监督”设置,要求从第一帧注释中指定的开放词汇表中跟踪和分割对象。VOS方法在机器人学[1]、视频编辑[2]、降低数据注释成本[3]中具有广泛的适用性,并且还可以与任何事物模型(Segment Anything Models, SAMs)[4]结合,用于通用视频分割(例如,跟踪任何事物[5–7])。

最近的VOS方法采用了基于记忆的范式[8–11]。从过去的分割帧(要么作为输入给出,要么由模型分割)计算出记忆表示,任何新的查询帧“读取”这个记忆以检索用于分割的特征。重要的是,这些方法主要使用像素级匹配进行记忆读取,使用一个[8]或多个匹配层[10],并从像素记忆读出生成自下而上的分割。像素级匹配是每个查询像素独立映射到记忆像素的线性组合(例如,使用注意力层)。因此,像素级匹配缺乏高层一致性,并且容易受到匹配噪声的影响,尤其是在有干扰物的情况下。这导致在具有遮挡和频繁干扰物的具有挑战性场景中性能降低。具体来说,最近的方法[9, 10]在评估最近提出的具有挑战性的MOSE[12]数据集时,与更简单的DAVIS-2017[13]数据集相比,J &F(交并比)降低了20多点。

像素级匹配是每个查询像素独立映射到记忆像素的线性组合,这句话如何理解呢?以AOT模型(Associating Objects with Transformers for Video Object Segmentation)为例:该模型以第一个包含mask 标记的帧为参考图像,其余视频帧依据该参考图像进行分割。在分割的过程中,被分割的帧作为Q(querry),包含了参考帧和对象编码的特征图作为K、V(key和value),被分割帧Q通过多头注意力机制得到Q映射到K的线性组合。详见可见AOT主体模型详解

在这里插入图片描述

图1.像素级记忆读取与对象级记忆读取的比较。在每个框中,左侧是参考帧,右侧是要被分割的查询帧。红色箭头指示错误的匹配。在存在干扰物的情况下,低级像素匹配(例如,XMem [9])可能会有噪声。我们提出对象级记忆读取,以实现更稳健的视频对象分割。

2.2 解决方案

我们认为,在具有挑战性的场景中这种不满意的结果是由于缺乏对象级推理造成的。为了解决这个问题,我们提出了对象级记忆读取,有效地将对象从记忆中重新放回到查询帧中(见图1)。

受到最近基于查询的对象检测/分割[14–18]的启发,这些方法将对象表示为“对象查询”,我们使用对象变换器来实现我们的对象级记忆读取。这个对象变换器使用一组端到端训练的对象查询来1)迭代地探测和校准特征图(由像素级记忆读出实现初始化),以及2)编码对象级信息。这种方法同时保留了高层级但全局的对象查询表示和低层级但高分辨率的特征图,使得顶层/底层的双向通信成为可能。这种通信通过一系列注意力层进行参数化,包括我们提出的foreground-background masked attention。masked attention,从仅关注前景的masked attention[15]扩展而来,允许部分对象查询仅关注前景,而其余部分仅关注背景——允许全局特征交互和前景/背景语义的清晰分离。此外,我们引入了一个紧凑的对象记忆(除了像素记忆之外)来总结目标对象的特征,通过目标特定的特征增强端到端的对象查询。

2.3 成果

在实验中,我们提出的方法Cutie,在具有挑战性的场景中(例如,在MOSE数据集上比XMem高出8.7 J &F [12])比现有方法显著更加稳健,同时在标准数据集(即DAVIS [13]和YouTubeVOS [19])中在准确性和效率方面保持竞争力。总结如下:

  • 我们开发了Cutie,它使用高层自上而下的查询与像素级自下而上的特征,在具有挑战性的场景中实现稳健的视频对象分割。
  • 我们将遮蔽注意力扩展到前景和背景,既丰富了特征,又在目标对象和干扰物之间实现了清晰的语义分离。
  • 我们构建了一个紧凑的对象记忆来总结长期的对象特征,这些特征在查询期间被检索为目标特定的对象级表示。

3 相关方法

3.1 基于记忆的VOS

由于半监督视频对象分割(VOS)涉及信息的方向传播,许多现有方法采用特征记忆表示来存储过去特征以用于分割未来的帧。这包括在线学习,在推理期间对每个视频的第一帧分割进行微调[20-24]。然而,微调在测试期间速度慢。递归方法[25-31]速度更快,但在遮挡下跟踪时缺乏上下文。

最近的方法使用更多上下文[5, 8, 11, 32-64]通过像素级特征匹配和集成,一些方法探索了背景特征的建模——无论是显式地[36, 65]还是隐式地[51]。XMem[9]使用多种类型的记忆以获得更好的性能和效率,但仍然难以应对低级像素匹配中的噪声。虽然我们采用了XMem[9]的记忆读取,但我们开发了对象读取机制,以对象级整合像素特征,使Cutie在具有挑战性的场景中实现更好的性能。

在VOS中的变换器。基于变换器[66]的方法已经开发用于视频对象分割中的像素匹配与记忆[10, 50, 53, 67-70]。然而,它们计算空间特征图(作为交叉注意力、自注意力或两者兼有)之间的注意力,这在时间和空间复杂度上是昂贵的。SST[67]提出了稀疏注意力,但表现不如最先进的方法。AOT方法[10, 68]使用身份库在单次前向传递中处理多个对象以提高效率,但它们不针对对象ID进行排列等变,并且对于长视频不具有很好的扩展性。并行方法[69, 70]使用单个视觉变换器网络联合建模参考帧和查询帧,而不进行显式的记忆读取操作。它们实现了高精度,但需要大规模预训练(例如,MAE[71]),并且推理速度要低得多(每秒<4帧)。Cutie经过精心设计,在我们的对象变换器中不计算任何(昂贵的)空间特征图之间的注意力,同时通过一小组对象查询促进有效的全局通信——使Cutie能够实时处理。

3.2对象级推理

早期尝试在对象级别进行推理的VOS算法[59, 72, 73]使用重新识别或k-means聚类来获取对象特征,并且在标准基准测试中的性能较低。HODOR[18]及其后续工作TarViS[17],采用对象级描述符来处理VOS,这允许更大的灵活性(例如,仅在静态图像上训练[18]或扩展到不同的视频分割任务[17, 74, 75]),但由于未充分利用高分辨率特征而在VOS分割精度方面表现不佳(例如,[74]在DAVIS 2017[13]中比最先进的方法落后6.9 J &F)。ISVOS[76]提议将预训练的实例分割网络(即,Mask2Former[15])的特征注入到基于记忆的VOS方法[51]中。

Cutie的动机相似,但在以下三个方面至关重要的不同:1)Cutie端到端学习对象级信息,而不需要在实例分割任务/数据集上进行预训练,2)Cutie允许像素级特征和对象级特征之间的双向通信,以实现集成框架,3)Cutie是一个单级方法,不会执行单独的实例分割,而ISVOS会——这使得Cutie运行速度大约快六倍。此外,ISVOS没有发布代码,而我们为社区开放了代码,促进后续工作。

3.3 自动视频分割

最近,视频对象分割方法已经被用作自动视频分割流程的一个组成部分,例如开放词汇表/通用视频分割(例如,跟踪任何事物[5, 6],DEVA[7])和无监督视频分割[77]。我们认为Cutie的鲁棒性和效率对这些应用是有益的。

4 工作方法

在这里插入图片描述

图2.Cutie的核心架构和工作流程如下:1)存储像素记忆和对象记忆:我们从之前分割过的帧中存储像素记忆和对象记忆的表征。2)检索像素记忆:对于查询帧,我们将像素记忆检索出来作为像素读出R0.3)双向交互:像素读出R0与对象查询X和对象记忆S在对象变换器中进行双向交互。4)L个对象变换器块将像素特征用对象级语义丰富化,并产生最终的对象读出RL,以便解码成输出掩模。5)简化架构:为了易于理解,省略了标准的残差连接、层归一化以及从查询编码器到解码器的跳跃连接。

4.1 overview

我们在图2中提供了Cutie的概览。为了可读性,遵循先前的工作[8, 9],我们考虑单个目标对象,因为扩展到多个对象是直接的(见补充材料)。按照标准的半监督视频对象分割(VOS)设置,Cutie将目标对象的第一帧分割作为输入,并顺序地以流式方式分割后续帧。首先,Cutie将分割的帧(作为输入给出或由模型分割)编码成高分辨率的像素记忆F(第3.4.1节)和高层对象记忆S(第3.3节),并将它们存储起来用于分割未来的帧。为了分割一个新的查询帧,Cutie使用编码的查询特征从像素记忆中检索初始像素读出R0。这个初始读出R0是通过低级像素匹配计算的,因此通常很嘈杂。我们通过对象变换器中的L变换器块,用对象记忆S和一组对象查询X的信息来丰富R0,从而增强其对象级语义(第3.2节)。对象变换器的丰富输出RL,或对象读出,被传递到解码器以生成最终的输出掩模。在接下来的部分,我们将首先描述Cutie的三个主要贡献:对象变换器、遮蔽注意力和对象记忆。注意,我们从现有作品[9]中衍生出像素记忆,我们只在第3.4.1节中将其描述为实施细节,而不声称有任何贡献。

4.2 对象变换器

4.2.1 overview

图2的底部展示了对象变换器。对象变换器接收一个初始读出R0 ∈ RHW×C,一组N个端到端训练的对象查询X ∈ RN×C,以及对象记忆S ∈ RN×C作为输入,并将它们与L个变换器块集成。注意H和W是在步长为16的编码后的图像尺寸。在第一个块之前,我们将静态对象查询与动态对象记忆相加,以更好地适应,即X0 = X + S。每个变换器块允许对象查询Xl−1双向地关注读出Rl−1,反之亦然,产生更新后的查询Xl和读出Rl作为第l个块的输出。最后一个块的读出RL是对象变换器的最终输出。

在每个块内,我们首先计算遮蔽交叉注意力,让对象查询Xl−1从像素特征Rl−1中读取。遮蔽注意力将一半的对象查询集中在前景区域,而另一半则针对背景(细节见第3.2.2节)。然后,我们将对象查询输入到标准的自注意力和前馈层[66]中,进行对象级推理。接下来,我们用一个反向交叉注意力层更新像素特征,将来自对象查询Xl的对象语义重新放入像素特征Rl−1中。然后我们将像素特征输入到前馈网络中,同时跳过标准变换器[66]中的计算成本较高的自注意力。在整个过程中,我们遵循[14, 15](第3.2.3节)向查询和键添加位置嵌入。在每个注意力和前馈层中都使用残差连接和层归一化[78]。所有注意力层都使用多头缩放点积注意力[66]实现。重要的是,

  1. 我们谨慎地避免了任何直接在高分辨率空间特征(例如R)之间的注意力,因为它们在内存和计算上都很密集。尽管如此,这些空间特征仍然可以通过对象查询进行全局交互,使每个变换器块既高效又富有表现力。
  2. 对象查询以残差贡献的方式重构像素特征,而不丢弃高分辨率的像素特征。这避免了不可逆的降维(将超过100倍),并保留了那些用于准确分割的高分辨率特征。

接下来,我们将描述我们的对象变换器块中的核心组件:前景/背景遮蔽注意力和位置嵌入的构建。

4.2.2 Foreground-Background Masked Attention

在我们的(像素到查询)交叉注意力中,我们的目标是通过关注像素特征Rl ∈ RHW×C来更新对象查询Xl ∈ RN×C。标准的交叉注意力带有残差路径,可以找到:
X l ′ = A l V l + X l = softmax ( Q l K l T ) V l + X l X'_l = A_l V_l + X_l = \text{softmax}(Q_l K_l^T) V_l + X_l Xl=AlVl+Xl=softmax(QlKlT)Vl+Xl

其中 Ql 是 Xl 的学习线性变换,Kl 和 Vl 是 Rl 的学习线性变换。亲和力矩阵 Al ∈ RN×HW 的行描述了每个对象查询在整个特征图上的关注点。我们注意到不同的对象查询有不同的关注模式——有些关注不同的前景部分,有些关注背景,有些关注干扰物(见图3顶部)。这些对象查询从不同的感兴趣区域收集信息,并将它们整合到后续的自注意力/前馈层中。然而,注意力的软性质使得这个过程嘈杂且不太可靠——主要关注前景的查询可能在背景中有小的权重分布,反之亦然。

在这里插入图片描述

图3。在对象变换器中可视化交叉注意力权重(AL的行)。中间的猫是目标对象。顶部:没有前景-背景遮蔽——一些查询混合了前景和背景的语义(用红色框出)。底部:有前景-背景遮蔽。最左边的三个是前景查询,最右边的三个是背景查询。语义因此被清晰地区分开。前景/背景查询可以在随后的自注意力层中进行通信。注意查询关注不同的前景区域、干扰物和背景区域。

受到 [15] 的启发,我们部署了遮蔽注意力来帮助清晰地区分前景和背景的语义。与 [15] 不同的是,我们发现除了关注前景外,还关注背景也是很有帮助的,特别是在有干扰物的具有挑战性的跟踪场景中。在实践中,我们让对象查询的前一半(即前景查询)始终关注前景,而后一半(即背景查询)关注背景。这种遮蔽在所有注意力头上是共享的。

形式上,我们的前景-背景遮蔽交叉注意力找到:

X l ′ = softmax ( M l + Q l K l T ) V l + X l X'_l = \text{softmax}(M_l + Q_l K_l^T) V_l + X_l Xl=softmax(Ml+QlKlT)Vl+Xl

其中 Ml ∈ {0, −∞}N×HW 控制注意力遮蔽——具体来说,Ml(q, i) 决定第 q 个查询是否被允许(= 0)或不被允许(= −∞)关注第 i 个像素。为了计算 Ml,我们首先找到当前层的遮蔽预测 Ml,它是从上一个像素特征 Rl−1 线性投影出来的,并用 sigmoid 函数激活。然后,Ml 被计算为:

M l ( q , i ) = { 0 , if  q ≤ N 2 and  M l ( i ) ≥ 0.5 0 , if  q > N 2 and  M l ( i ) < 0.5 − ∞ , otherwise Ml(q, i) = \begin{cases} 0, & \text{if } q \leq \frac{N}{2} \text{ and } Ml(i) \geq 0.5 \\ 0, & \text{if } q > \frac{N}{2} \text{ and } Ml(i) < 0.5 \\ -\infty, & \text{otherwise} \end{cases} Ml(q,i)= 0,0,,if q2N and Ml(i)0.5if q>2N and Ml(i)<0.5otherwise

其中第一种情况用于前景注意力,第二种情况用于背景注意力。图3(底部)可视化了前景-背景遮蔽后的注意力图。注意,尽管前景和背景被硬性分离,对象查询在随后的自注意力层中进行通信,以实现潜在的全局特征交互。
接下来,我们讨论在对象查询和像素特征中使用的位置嵌入,它们允许基于位置的注意力。

4.2.3 Positional Embeddings

由于标准的注意力操作是排列不变的,因此使用位置嵌入来提供每个标记的位置的额外特征[66]。按照之前的基于变换器的视觉网络[14, 15],我们在每个注意力层向查询和键特征添加位置嵌入(见图2),而不添加到值中。

对于对象查询,我们使用一个位置嵌入PX ∈ RN×C,它通过以下方式结合了一个端到端可学习嵌入EX ∈ RN×C和动态对象记忆S ∈ RN×C:

P X = E X + f O b j E m b e d ( S ) P_X=E_X+f_{ObjEmbed}(S) PX=EX+fObjEmbed(S)

其中f_ObjEmbed是可训练的线性投影。这样,位置嵌入为模型提供了关于每个对象查询在图像中位置的重要信息,有助于改善注意力机制对空间关系的敏感性。
对于像素特征,位置嵌入PR ∈ RHW×C结合了一个固定的2D正弦位置嵌入Rsin [14],它编码了绝对像素坐标,以及初始读出R0 ∈ RHW×C,通过以下方式:

P R = R s i n + f P i x E m b e d ( R 0 ) PR = Rsin + f_{PixEmbed}(R0) PR=Rsin+fPixEmbed(R0)

其中 f_{PixEmbed是另一个可训练的线性投影。注意,正弦嵌入Rsin在归一化的坐标上操作,并在测试时根据图像大小进行相应的缩放。

4.3 Object Memory

在对象记忆S ∈ RN×C中,我们存储一组紧凑的N个向量,这些向量构成了目标对象的高级摘要。这个对象记忆在对象变换器(第3.2节)中使用,以提供针对目标的特征。

从高层次来看,我们通过使用N个不同的遮蔽(mask)对所有编码后的对象特征进行遮蔽池化(mask-pooling)来计算S。具体来说,给定对象特征U ∈ RTHW×C和N个池化遮蔽{Wq ∈ [0, 1]THW, 0 < q ≤ N},其中T是记忆帧的数量,第q个对象记忆Sq ∈ RC通过以下方式计算:
S q = ∑ i = 1 T × H × W U ( i ) W q ( i ) ∑ i = 1 T × H × W W q ( i ) S_q = \frac{\sum_{i=1}^{T \times H \times W} U(i) W_q(i)}{\sum_{i=1}^{T \times H \times W} W_q(i)} Sq=i=1T×H×WWq(i)i=1T×H×WU(i)Wq(i)
在推理过程中,我们使用经典的流式平均算法,使得这个操作在时间上和内存上都与视频长度无关。有关详细信息,请参阅补充材料。注意,如果相应的池化权重为零,即 ∑ i = 1 H × W W q t ( i ) = 0 \sum_{i=1}^{H \times W} W_{qt}(i) = 0 i=1H×WWqt(i)=0,则对象记忆向量Sq不会被修改,这可以防止在相应对象区域不可见时(例如,被遮挡)出现特征漂移。

对于记忆帧,我们首先使用遮罩编码器对相应的图像I和分割遮罩M进行编码,以获得记忆特征F ∈ RTHW×C。我们使用一个2层的C维MLP(多层感知机)(f_{ObjFeat})来获得对象特征U。

U = f ObjFeat ( F ) U = f_{\text{ObjFeat}}(F) U=fObjFeat(F)
对于N个池化遮蔽{Wq ∈ [0, 1]^(T×H×W), 0 < q ≤ N},我们按照第3.2.2节中详细描述的那样,额外应用前景-背景分离,并将其与固定的2D正弦位置嵌入Rsin(如第3.2.3节所述)相结合。这种分离允许在池化过程中聚合干净的语义,而位置嵌入则实现了位置感知的池化。形式上,我们通过以下方式计算第q个池化遮蔽的第i个像素:

W q ( i ) = σ ( f PoolWeight ( F ( i ) + R sin ( i ) ) ) W_q(i) = \sigma(f_{\text{PoolWeight}}(F(i) + R_{\text{sin}}(i))) Wq(i)=σ(fPoolWeight(F(i)+Rsin(i)))

其中 σ \sigma σ 是sigmoid函数, f PoolWeight f_{\text{PoolWeight}} fPoolWeight是一个2层的N维MLP(多层感知机),F(i)是特征图在第i个像素的值, R sin ( i ) R_{\text{sin}}(i) Rsin(i) 是第i个像素的正弦位置嵌入。

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

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

相关文章

RabbitMQ的高级特性-死信队列

死信(dead message) 简单理解就是因为种种原因, ⽆法被消费的信息, 就是死信. 有死信, ⾃然就有死信队列. 当消息在⼀个队列中变成死信之后&#xff0c;它能被重新被发送到另⼀个交换器 中&#xff0c;这个交换器就是DLX( Dead Letter Exchange ), 绑定DLX的队列, 就称为死信队…

EasyX与少儿编程:轻松上手的编程启蒙工具

EasyX&#xff1a;开启少儿编程的图形化启蒙之路 随着科技发展&#xff0c;编程逐渐成为孩子们教育中重要的一部分。如何让孩子在编程启蒙阶段更容易接受并激发他们的兴趣&#xff0c;成为许多家长和老师关心的问题。相比起传统的编程语言&#xff0c;图形化编程工具显得更直观…

【ehr】人事招聘薪资绩效考勤一体化管理系统(源码)

一、项目介绍 一款全源码可二开&#xff0c;可基于云部署、私有部署的企业级数字化人力资源管理系统&#xff0c;涵盖了招聘、人事、考勤、绩效、社保、酬薪六大模块&#xff0c;解决了从人事招聘到酬薪计算的全周期人力资源管理&#xff0c;符合当下大中小型企业组织架构管理运…

2k1000LA loongnix 安装java

问题&#xff1a; 客户 需要在 loongnix 上 使用 java 的程序。 情况说明&#xff1a; 使用 apt get 是无法 安装java 的。 按照的资料就行。 首先是 下载 loongarch64 的 java 的压缩包。这个我已经下载下来了。 社区下载地址&#xff1a; http://www.loongnix.cn/zh/api/…

书生大模型实战训练营 第三期 入门岛

1.Linux 任务一 完成SSH连接与端口映射并运行hello_world.py vscode自带的端口设置功能很方便 2.Python 任务一 实现wordcount函数 任务二 vscode 单步调试

【递归】9. leetcode 104 二叉树的最大深度

1 题目描述 题目链接&#xff1a;二叉树的最大深度 2 解答思路 递归分为三步&#xff0c;接下来就按照这三步来思考问题 第一步&#xff1a;挖掘出相同的子问题 &#xff08;关系到具体函数头的设计&#xff09; 第二步&#xff1a;只关心具体子问题做了什么 &#xff0…

物联网智能设备:未来生活的变革者

文章目录 引言什么是物联网智能设备&#xff1f;技术架构应用场景挑战与解决方案未来发展趋势结论 引言 随着科技的迅猛发展&#xff0c;物联网&#xff08;IoT&#xff09;正在改变我们生活的方方面面。从智能家居到工业自动化&#xff0c;物联网智能设备正在逐步融入我们的日…

四款视频剪辑工具使用感受与推荐:

大家好&#xff01;今天咱们来聊聊视频剪辑工具。随着短视频的火热&#xff0c;越来越多的小伙伴开始涉足视频剪辑领域&#xff0c;那到底哪款工具更适合你呢&#xff1f;接下来&#xff0c;就让我为大家分享一下我使用过的几款视频剪辑工具的体验和感受吧&#xff01; 一、福昕…

[linux 驱动]input输入子系统详解与实战

目录 1 描述 2 结构体 2.1 input_class 2.2 input_dev 2.4 input_event 2.4 input_dev_type 3 input接口 3.1 input_allocate_device 3.2 input_free_device 3.3 input_register_device 3.4 input_unregister_device 3.5 input_event 3.6 input_sync 3.7 input_se…

如何做好接口测试?||关于京东平台商品API接口测试

探讨主题&#xff1a;如何做好接口测试&#xff1f; 一、接口测试简介 1、什么是接口测试&#xff1f; 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制…

Clocking System

文章目录 1. 介绍2. 时钟源2.1 scillator Circuit (OSC)2.1.1 外部时钟输入模式2.1.2 外部晶体/陶瓷谐振器模式2.1.3 振荡器的配置2.1.4 Oscillator Watchdog 2.2 Back-up Clock 3. 锁相环&#xff08;PLL&#xff09;3.1 系统锁相环3.1.1 Features3.1.2 框图 3.2.外设锁相环3.…

普中51单片机

参考&#xff1a;51单片机快速入门教程2022&#xff08;普中51开发板A2新版&#xff09;--绍兴文理学院元培学院《单片机原理与应用》课程建设_哔哩哔哩_bilibili 1.以管理员启动&#xff0c;破解

python-pptx 中 placeholder 和 shape 有什么区别?

在 python-pptx 库中&#xff0c;placeholder 和 shape 是两个核心概念。虽然它们看起来相似&#xff0c;但在功能和作用上存在显著的区别。为了更好地理解这两个概念&#xff0c;我们可以通过它们的定义、使用场景以及实际代码示例来剖析其差异。 Python-pptx 的官网链接&…

KA客户关系管理策略全解析

在当今商业竞争日益激烈的环境中&#xff0c;如何有效管理和维护关键客户关系成为企业制胜的关键。无论是初创企业还是跨国公司&#xff0c;都面临着同样的挑战&#xff0c;那就是如何通过精准的客户关系管理策略&#xff0c;不仅保留现有客户&#xff0c;还能不断拓展新的商业…

成都网页制作中小企业网站建设的成本与预算指南

成都网页制作中小企业网站建设的成本与预算指南 在数字化时代&#xff0c;中小企业越来越重视网络宣传和线上业务的拓展&#xff0c;网站成为了企业形象的重要展示窗口。然而&#xff0c;对于许多中小企业而言&#xff0c;如何合理规划网站建设的成本与预算&#xff0c;往往是一…

java将word转pdf

poi工具转换 <!-- 处理PDF --><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.poi.xwpf.converter.pdf-gae</artifactId><version>2.0.3</version></dependency>这个工具使用了poi…

Thinkphp/Laravel小型超市进销存管理系统的设计与实现

目录 技术栈和环境说明具体实现截图设计思路关键技术课题的重点和难点&#xff1a;框架介绍数据访问方式PHP核心代码部分展示代码目录结构解析系统测试详细视频演示源码获取 技术栈和环境说明 采用PHP语言开发&#xff0c;开发环境为phpstudy 开发工具notepad并使用MYSQL数据库…

即插即用篇 | DenseNet卷土重来! YOLOv10 引入全新密集连接卷积网络 | ECCV 2024

本改进已同步到YOLO-Magic框架! 本文重新审视了密集连接卷积网络(DenseNets),并揭示了其在主流的ResNet风格架构中被低估的有效性。我们认为,由于未触及的训练方法和传统设计元素没有完全展现其能力,DenseNets的潜力被忽视了。我们的初步研究表明,通过连接实现的密集连接…

墙绘艺术在线交易:SpringBoot技术解析

2 相关技术 2.1 SSM框架介绍 本课题程序开发使用到的框架技术&#xff0c;英文名称缩写是SSM&#xff0c;在JavaWeb开发中使用的流行框架有SSH、SSM、SpringMVC等&#xff0c;作为一个课题程序采用SSH框架也可以&#xff0c;SSM框架也可以&#xff0c;SpringMVC也可以。SSH框架…

使用激光定高需要注意的问题以及效果测试与读取

使用激光定高需要注意的问题 飞控参数要修改EKF2_HGT_REF 需要改成 range sensor 此时&#xff0c;PX4会选择融合来自激光定高模块传输的高度数据&#xff0c;而不再使用其他数据来源如动捕的z数据 (如果用vision的话手动向vision_pose里面发数据也不是不行【狗头】) 效果测…