【视频目标分割-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]实现。重要的是,
- 我们谨慎地避免了任何直接在高分辨率空间特征(例如R)之间的注意力,因为它们在内存和计算上都很密集。尽管如此,这些空间特征仍然可以通过对象查询进行全局交互,使每个变换器块既高效又富有表现力。
- 对象查询以残差贡献的方式重构像素特征,而不丢弃高分辨率的像素特征。这避免了不可逆的降维(将超过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 q≤2N 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个像素的正弦位置嵌入。
相关文章:

【视频目标分割-2024CVPR】Putting the Object Back into Video Object Segmentation
Cutie 系列文章目录1 摘要2 引言2.1背景和难点2.2 解决方案2.3 成果 3 相关方法3.1 基于记忆的VOS3.2对象级推理3.3 自动视频分割 4 工作方法4.1 overview4.2 对象变换器4.2.1 overview4.2.2 Foreground-Background Masked Attention4.2.3 Positional Embeddings 4.3 Object Me…...

掌握 C# 文件和输入输出操作
在任何编程语言中,文件和输入输出操作(I/O)都是非常重要的组成部分。C# 提供了一系列工具和类来帮助开发者处理文件的读取、写入、二进制文件的处理以及数据的序列化与反序列化。本文将介绍 C# 中的文件操作,包括 File 类、Stream…...

k8s 中的金丝雀发布(灰度发布)
目录 1 什么是金丝雀发布 2 Canary 发布方式 3 Canary 两种发布方式实操 3.1 准备工作 3.1.1 将 nginx 命名两个版本 v1 与 v2 3.1.2 暴露端口并指定微服务类型 3.1.3 进入 pod 修改默认发布文件 3.1.4 测试 service 是否正常 3.2 基于权重的灰度发布 3.2.1 创建 Igress 资源类…...

《IDEA:让编程效率翻倍的强大工具》
哪个编程工具让你的工作效率翻倍? 在众多编程工具中,IntelliJ IDEA 无疑是一款让我的工作效率得到显著提升的利器。 一、功能特点 智能代码补全 IDEA 的代码补全功能极其智能。它不仅能根据你输入的前缀快速列出可能的代码选项,还会根据上…...

Docker 部署 Prometheus+Grafana 监控系统快速指南
Docker 部署 PrometheusGrafana 监控系统快速指南 文章目录 Docker 部署 PrometheusGrafana 监控系统快速指南一 创建网络二 监控部署三 配置 prometheus.yml四 测试部署是否成功五 Grafana表盘下载 本文详细介绍了通过 Docker 和 Docker Compose 快速部署 Prometheus 和 Grafa…...

No.8 笔记 | SQL 查询语句:数据探索的钥匙
2024/10/7 心记 - 致在路上默默奋斗的你 在当今数字化的时代,网络安全已成为我们生活中不可或缺的一部分。它如同守护数字世界的隐形盾牌,保护着我们的隐私、数据和整个社会的稳定运行。 学习网络安全,是踏上一段充满挑战与机遇的征程。 每一…...

全局数据在Python包中模块间管理方法探讨
在开发大型 Python 应用程序时,有时需要多个模块共享和管理全局数据。如何优雅地在 Python 包内的不同模块间共享全局数据是一个常见的设计问题。我们希望避免全局变量的混乱和难以维护的代码,但同时能够安全、高效地管理这些共享数据。 下面我们将探讨…...

无人机在矿业领域的应用!
矿区测绘与建模 无人机可以快速、全面地获取矿区的地形地貌数据,生成高精度的二维或三维模型。 这些模型可用于矿区的规划、设计、监测和管理,提高矿山的生产效率。 库存量量化监测 无人机能够捕捉厘米级的地形数据,通过计算得出准确的库…...

基于JavaWeb开发的java springmvc+mybatis学生考试系统设计和实现
基于JavaWeb开发的java springmvcmybatis学生考试系统设计和实现 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各…...

【CKA】四、etcd的备份与恢复
4、etcd的备份与恢复 1. 考题内容: 2. 答题思路: 1、ssh到有etcdctl、etcdutl命令的节点 2、备份时注意添加证书并保证路径正确 3、备份完可以验证下 4、恢复备份时要停服务,恢复备份后重启kubelet 题型是一样的,我考的证书的路…...

基于Arduino的SG90舵机驱动
一.SG90舵机引脚说明 SG90舵机三根线的连接方法: 1.红色线:电源线(VCC),接入5v电源 2.棕色线:地线(GND),接地 3.黄色线:信号线(SIG)…...

大模型泡沫破了?| 转行建筑师混战大模型圈
最近秋招惨淡卷动,**地产天坑不敢进,科技大厂不可期。**阿里直裁应届生、腾讯拉长职级晋升时间,字节一家繁荣,但也在和美国政府大打官司。此前「大模型」风生水起,但近期融资、应用双双预冷。 GPT-5迟迟不出࿰…...

Windows开发工具使用技巧
Windows开发工具使用技巧 在Windows系统下进行软件开发时,掌握并熟练使用合适的开发工具可以极大地提高工作效率和代码质量。本篇文章将介绍几款常见的Windows开发工具及其使用技巧,涵盖集成开发环境(IDE)、命令行工具、版本控制…...

【PyTorch学习-1】张量操作|自动求导|神经网络模块|优化器|数据加载与处理|GPU 加速...
【PyTorch学习-1】张量操作|自动求导|神经网络模块|优化器|数据加载与处理|GPU 加速… 【PyTorch学习-1】张量操作|自动求导|神经网络模块|优化器|数据加载与处理|GPU 加速… 文章目录 【PyTorch学习-1】张量操作|自动求导|神经网络模块|优化器|数据加载与处理|GPU 加速...前言…...

Leecode热题100-560.和为k的子数组
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums [1,1,1], k 2 输出:2示例 2: 输入:nums [1,2,3], k…...

Mac 卸载 IDEA 流程
1、现在应用程序中删除Idea 2、进入Library目录 cd /Users/zhengzhaoxiang/Library 3、删除IntelliJIdea2023.3(根据自己的版本而定)记得进去看下是否删除干净了 rm -rf Logs/JetBrains/IntelliJIdea2023.3 rm -rf Preferences/com.jetbrains.intel…...

vue3 antdv3/4 Modal显示一个提示,内容换行显示。
1、官网地址: Ant Design Vue — An enterprise-class UI components based on Ant Design and Vue.js 2、显示个信息: Modal.info({title: This is a notification message,content: h(div, {}, [h(p, some messages...some messages...),h(p, some …...

Jgit的使用
Jgit的使用 文章目录 Jgit的使用一,git操作的对应代码1.1 查看操作1.1.1 打开仓库1.1.3 获取状态信息 1.2 添加操作1.2.1 初始化本地仓库1.2.2 创建一个新文件并写入内容1.2.3 添加指定(所有)文件到暂存区1.2.4 提交操作1.2.5 连接并推送到远…...

SQL Server—约束和主键外键详解
SQL Server—约束和主键外键详解 约束和主键外键 主键 和 外键 -- 主键: 关系型数据库中一条记录有若干个属性,若其中某一个属性能够位置标识这条记录,这个属性就可以设置为表的主键,主键是确定一条记录的唯一标识,有可能作为主键…...

信息学奥赛复赛复习14-CSP-J2021-03网络连接-字符串处理、数据类型溢出、数据结构Map、find函数、substr函数
PDF文档回复:20241007 1 P7911 [CSP-J 2021] 网络连接 [题目描述] TCP/IP 协议是网络通信领域的一项重要协议。今天你的任务,就是尝试利用这个协议,还原一个简化后的网络连接场景。 在本问题中,计算机分为两大类:服务机&#x…...

Allegro如何合并同名网络铜皮操作指导
Allegro如何合并同名网络铜皮操作指导 Allegro可以将同名网络的铜皮合并起来,如下图,需要把下面两块铜皮合并成一块铜皮 具体操作如下 选择Shape 选择merge shapes Find选择shapes 点击其中一块铜皮,会被亮起来 再点击另外一块铜皮 两块铜皮…...

【探测器】线阵相机中的 TDI 技术
【探测器】线阵相机中的 TDI 技术 1.背景2.TDI相机3.场景应用 1.背景 TDI 即Time Delay Integration时间延迟积分。 TDI相机是线阵相机的一种特殊类型,带有独特的时间延迟积分(TDI)技术。 换句话说,TDI相机是线阵相机的一个高级版…...

k8s 之安装metrics-server
作者:程序那点事儿 日期:2024/01/29 18:25 metrics-server可帮助我们查看pod的cpu和内存占用情况 kubectl top po nginx-deploy-56696fbb5-mzsgg # 报错,需要Metrics API 下载 Metrics 解决 wget https://github.com/kubernetes-sigs/metri…...

java学习-idea编辑器基础使用设置
首先打开电脑中的idea编辑器,点击头部:File按钮 → Settings… 打开设置界面; 设置idea的主题 设置idea代码注释的字体颜色 设置idea编辑器的字体和字体大小 设置idea通过提示回车自动导入包 设置idea输入忽略大小写进行提示...

PDSCH(物理下行共享信道)简介
文章目录 PDSCH(物理下行共享信道)简介1. Transport block CRC attachment2. LDPC base graph selection3. Code block segmentation And Code Block CRC Attachment4. Channel Coding5. Rate Matching6. Code Block Concatenation7. Scrambling8. Modul…...

hutool bug
Hutool参考文档 不用随便升级版本 版本5.8 1: 不要用 ReflectUtil.newInstance(cName); * 和spring 部分框架整合 ,子类转换为父类或者接口失败,报转换失败的错误 https://gitee.com/dromara/hutool/issues/I18NCR?skip_mobiletrue 改成使…...

69.x的平方根 367.完全有效的平方数
题目:69. x 的平方根 - 力扣(L69eetCode) 经典平方根问题,用二分法慢慢逼近找开方值,注意mid*mid要用long long值,不然会溢出 class Solution { public:int mySqrt(int x) {int left 0; int right x;int ans -1; w…...

Android Automotive(一)
目录 什么是Android Automotive Android Automotive & Android Android Automotive 与 Android Auto 什么是Android Automotive Android Automotive 是一个基础的 Android 平台,它能够运行预装的车载信息娱乐系统(IVI)应用程序,以及可选的二方和三方 Android 应用程…...

命令设计模式
简介 命令模式(Command Pattern)是对命令的封装,每一个命令都是一个操作:请求方发出请求要求执行一个操作;接收方收到请求,并执行操作。命令模式解耦了请求方和接收方,请求方只需请求执行命令&…...

探索智能新境界:最好用的AI工具盘点
你用过最好用的AI工具有哪些? 在人工智能技术飞速发展的今天,AI工具正逐渐成为我们工作和生活中不可或缺的助手。它们不仅提高了效率,还为我们提供了创新的解决方案。作为一名对AI充满热情的用户,我有幸体验了许多优秀的AI工具。…...