【视频目标分割-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.mfbz.cn/a/886961.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CSS实现服务卡片

CSS实现服务卡片 效果展示 CSS 知识点 回顾整体CSS知识点灵活运用CSS知识点 页面整体布局 <div class"container"><div class"card"><div class"box"><div class"icon"><ion-icon name"color-pal…

Mac 卸载 IDEA 流程

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

蘑菇分类检测数据集 21类蘑菇 8800张 带标注 voc yolo

蘑菇分类检测数据集 21类蘑菇 8800张 带标注 v 蘑菇分类检测数据集 21类蘑菇 8800张 带标注 voc yolo 蘑菇分类检测数据集介绍 数据集名称 蘑菇分类检测数据集 (Mushroom Classification and Detection Dataset) 数据集概述 该数据集专为训练和评估基于YOLO系列目标检测模型…

python爬虫 - 初识爬虫

&#x1f308;个人主页&#xff1a;https://blog.csdn.net/2401_86688088?typeblog &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、爬虫的关键概念 &#xff08;一&#xff09;HTTP请求与响应 &#xff0…

uni-app在线预览pdf

这里推荐下载pdf.js 插件 PDF.js - Browse Files at SourceForge.net 特此注意 如果报 Promise.withResolvers is not a function 请去查看版本兼容问题 降低pdf.js版本提高node版本 下载完成后 在 static 文件夹下新建 pdf 文件夹&#xff0c;将解压文件放进 pdf 文件…

基于SpringBoot+Vue的摄影社团管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

API接口开发系列文章:构建高效、安全与可扩展的API服务

前言 在当今的数字化时代&#xff0c;API&#xff08;应用程序编程接口&#xff09;已成为连接不同系统、服务和应用的核心桥梁。无论是企业内部的数据交互&#xff0c;还是面向第三方的服务开放&#xff0c;API都扮演着至关重要的角色。本系列文章将深入探讨API接口开发的各个…

【nlp自然语言】知识图谱,全文检索,自然语言nlp,数据资产标签,集成管理平台

一、项目介绍 一款全源码&#xff0c;可二开&#xff0c;可基于云部署、私有部署的企业级知识库云平台&#xff0c;一款让企业知识变为实打实的数字财富的系统&#xff0c;应用在需要进行文档整理、分类、归集、检索、分析的场景。 为什么建立知识库平台&#xff1f; 助力企业…

雷池 WAF 如何配置才能正确获取到源 IP

经常有大哥反馈说雷池攻击日志里显示的 IP 有问题。 这里我来讲一下为什么一些情况下雷池显示的攻击 IP 会有问题。 问题说明 默认情况下&#xff0c;雷池会通过 HTTP 连接的 Socket 套接字读取客户端 IP。在雷池作为最外层网管设备的时候这没有问题&#xff0c;雷池获取到的…

【Linux】进程地址空间(初步了解)

文章目录 1. 奇怪的现象2. 虚拟地址空间3. 关于页表4. 为什么要有虚拟地址 1. 奇怪的现象 我们先看一个现象&#xff1a; 为什么父子进程从“同一块地址中”读取到的值不一样呢&#xff1f; 因为这个地址不是物理内存的地址 &#xff0c;如果是物理内存的地址是绝对不可能出…

Android Context是什么?有很多的context他们之间有什么区别?什么时候该使用哪个?

目录 一、Context是什么&#xff1f; 在Android中&#xff0c;Context是一个抽象类 &#xff0c;它代表了应用程序的当前状态&#xff0c;包括资源和类加载器等&#xff0c;它提供了一个应用运行所需的信息&#xff0c;比如我们要获取资源 &#xff0c;那么需要她&#xff0c;…

自动驾驶-轨迹拼接

自动驾驶在进行规划之前&#xff0c;要确定当前帧轨迹规划的起点&#xff0c;这个起点常被误认为是当前车辆的位置&#xff0c;即每次以车辆的当前位置进行轨迹规划&#xff1b;其实不是这样的&#xff0c;直观上&#xff0c;这会导致本次次规划的轨迹同上次规划的轨迹之间是不…

Hadoop之WordCount测试

1、Hadoop简介&#xff1a; Hadoop是Apache旗下的一个用Java语言实现的开源软件框架&#xff0c;是一个开发和运行处理大规模数据的软件平台。 Hadoop的核心组件包括Hadoop分布式文件系统&#xff08;HDFS&#xff09;和MapReduce编程模型。HDFS是一个高度容错的系统&#xf…

Python | Leetcode Python题解之第456题132模式

题目&#xff1a; 题解&#xff1a; class Solution:def find132pattern(self, nums: List[int]) -> bool:candidate_i, candidate_j [-nums[0]], [-nums[0]]for v in nums[1:]:idx_i bisect.bisect_right(candidate_i, -v)idx_j bisect.bisect_left(candidate_j, -v)if…

MFC有三个选项:MFC ActiveX控件、MFC应用程序、MFC DLL,如何选择?

深耕AI&#xff1a;互联网行业 算法研发工程师 ​ 目录 MFC ActiveX 控件 控件的类型 标准控件 自定义控件 ActiveX控件 MFC ActiveX控件 标准/自定义控件 MFC ActiveX控件分类 3种MFC如何选择&#xff1f; MFC ActiveX控件 MFC 应用程序 MFC DLL 总结 举例说明…

不只是前端,后端、产品和测试也需要了解的浏览器知识(二)

目录标题 一、业务系统呈现给用户的节点1. 输入 URL 并解析1.1 用户输入 URL 并按下回车键1.2 浏览器解析 URL1.3 DNS 解析 2. 建立连接、发送请求并接收响应2.1 建立 TCP 连接2.2 发送 HTTP 请求2.3 服务器处理请求2.4 发送 HTTP 响应2.5 浏览器接收响应 3. 解析和加载资源、渲…

模拟算法(4)_外观数列

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 模拟算法(4)_外观数列 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. 题目链…

golang学习笔记27-反射【重要】

本节也是GO核心部分&#xff0c;很重要。包括基本类型的反射&#xff0c;结构体类型的反射&#xff0c;类别方法Kind()&#xff0c;修改变量的值。 目录 一、概念&#xff0c;基本类型的反射二、结构体类型的反射三、类别方法Kind()四、修改变量的值 一、概念&#xff0c;基本…

有些硬盘录像机接入视频汇聚平台EasyCVR后通道不显示/显示不全,该如何处理?

EasyCVR视频监控汇聚管理平台是一款针对大中型项目设计的跨区域网络化视频监控集中管理平台。该平台不仅具备视频资源管理、设备管理、用户管理、运维管理和安全管理等功能&#xff0c;还支持多种主流标准协议&#xff0c;如GB28181、RTSP/Onvif、RTMP、部标JT808、GA/T 1400协…

Linux忘记root用户密码怎么重设密码

直接说步骤&#xff1a; 1.重启客户机 2.在选择内核页面快速按e键&#xff0c;进入编辑模式 进入后应该是这个样子 在这里只能按上下键切换行 找到Linux16这里 3.按右方向键切换到行尾&#xff0c;也就是UTF-8处&#xff0c;在后面添加一个空格&#xff0c;然后加上这段话 …