Frozen CLIP: A Strong Backbone for Weakly Supervised Semantic Segmentation

news2024/11/16 19:04:19

摘要

弱监督语义分割在图像级标签方面取得了巨大的成就。最近的几种方法使用CLIP模型生成伪标签来训练单个分割模型,而没有尝试将CLIP模型作为主干,直接分割具有图像级标签的对象。在本文中,我们提出了 WeCLIP,一个基于 CLIP 的单阶段管道,用于弱监督语义分割。具体来说,冻结的 CLIP 模型被用作语义特征提取的主干,设计了一种新的解码器来解释提取的语义特征以进行最终预测。同时,我们利用上述冻结的主干生成伪标签来训练解码器。这些标签在训练期间无法优化。然后,我们提出了一个细化模块(RFM)来动态纠正它们。我们的架构强制所提出的解码器和 RFM 相互受益,以提高最终性能。大量实验表明,我们的方法在训练成本较低的情况下明显优于其他方法。此外,我们的 WeCLIP 在完全监督的设置中也取得了可喜的结果。

The code is available at https://github.com/zbf1991/WeCLIP.

图一:我们的方法与其他单级或基于clip的方法之间的比较。(a) 以前的单阶段方法,它使用可训练的 ImageNet [11] 预训练主干,具有可训练的分类和分割过程。(b) 以前基于 CLIP 的方法,这是一种多阶段方法,它使用 Frozen CLIP 模型生成伪标签并训练单个 ImageNet 预训练的分割模型。(c) 我们的方法。我们的方法是一种单阶段方法,它使用冻结的CLIP模型作为骨干,具有可训练的分割过程,显著降低了训练成本

我们的贡献总结如下:

  • 我们发现 CLIP 主干可以直接用于弱监督语义分割,而无需进行微调。使用我们设计的解码器,冻结的 CLIP 特征直接解释为分割对象的语义信息,构建强大的单阶段解决方案。
  • 为了克服冻结主干仅提供静态伪标签的缺点,我们设计了一个 Frozen CLIP CAM 细化模块 (RFM) 来动态更新初始 CAM 以提供更好的伪标签来训练我们的模型。
  • 以较少的训练成本,我们的方法明显优于以前的方法,在弱监督语义分割(mIoU:VOC 2012 测试集上为 77.2%,COCO val 集上为 47.1%)。此外,我们的方法在完全监督的语义分割方面也显示出巨大的潜力。

3. Method

3.1. Overview

图二:我们的 WeCLIP 框架。图像被输入到 Frozen CLIP 图像编码器以生成图像特征,类标签用于构建文本提示,然后输入到 Frozen CLIP 文本编码器以生成文本特征。分类分数是根据池化图像和文本特征之间的距离生成的。使用 GradCAM,我们可以生成初始 CAMMinit。然后,每个变压器块最后一层的冻结图像特征输入到我们的解码器中,生成最终的语义分割预测。同时,来自解码器的亲和映射Af和多头注意映射As从CLIP输入到我们的RFM中,建立细化映射R,将Minit细化为Mf。在后处理之后,它将用作训练解码器的监督。

图 2 显示了我们方法的整个框架,包括四个主要模块:一个冻结的 CLIP 主干(图像编码器和文本编码器)来编码图像和文本,一个用于生成初始 CAM 的分类过程,一个用于生成分割预测的解码器,一个 RFM 来细化初始 CAM 以提供用于训练的伪标签。

训练管道分为以下步骤:

  1. 首先,将图像输入到CLIP图像编码器中进行图像特征。此外,前景和背景类标签用于构建文本提示,然后输入到 CLIP 文本编码器以生成相应的文本特征。请注意,这里图像和文本编码器在训练期间都被冻结。
  2. 然后,通过计算图像特征(池化后)和文本特征之间的距离来生成分类分数。基于分类分数,GradCAM [41] 用于生成初始 CAM。
  3. 此外,冻结CLIP图像编码器中每个变压器块最后一层的图像特征被输入到我们提出的解码器中进行最终的分割预测。
  4. 同时,来自解码器的中间特征图用于生成亲和图。然后,将亲和映射输入到我们提出的RFM中,该RFM具有冻结CLIP图像编码器每个块的多头注意映射。
  5. 最后,RFM 输出一个细化图来细化初始 CAM。在后处理之后,来自细化 CAM 的最终转换伪标签用于监督训练。

3.2. Frozen CLIP Feature Decoder

我们使用以ViT-B为骨干的冷冻CLIP编码器,在训练中没有进行优化。因此,如何设计一个将CLIP特征解释为语义特征的解码器成为一个核心挑战。我们提出了一种基于transformer架构的轻型解码器,以CLIP特征作为输入进行语义分割。、

具体来说,假设输入图像为 I ∈ R^3×H×W ,H 和 W 分别表示图像的高度和宽度。在通过CLIP图像编码器后,我们从编码器中每个transformer块的输出生成初始特征映射\left \{ F_{init}^{l} \right \}_{l=1}^{N},其中l表示块的索引。然后,对于每个特征图F_{init}^{l},使用单个 MLP 模块生成新的对应特征图 F_{new}^{l}

其中 W 1fc 和 W 2fc 是两个不同的全连接层。ReLU(·) 是 ReLU 激活函数。

之后,所有新的特征图 \left \{ F_{new}^{l} \right \}_{l=1}^{N}连接在一起,然后由卷积层处理以生成融合的特征图 Fu:

其中 Fu ∈ R^d×h×w,其中 d、h 和 w 表示特征图的通道维度、高度和宽度。Conv(·) 是一个卷积层,Concat[·] 是连接操作。最后,我们设计了几个顺序多头transformer层来生成最终预测 P:

式中P∈R^C×H×W, C为包含背景的类号。φ表示顺序多头变压器块[12],每个块包含一个多头自注意模块、一个前馈网络和两个归一化层,如图2右上角所示。↑是一个上样本操作,用于将预测地图的大小与原始图像对齐。

3.3. Frozen CLIP CAM Refinement

为了对Eq.(3)中的预测P进行监督,我们从冻结主干的初始CAM生成像素级伪标签。冻结的主干只能提供静态 CAM,这意味着在训练期间无法改进用作监督的伪标签。伪标签中的相同错误导致错误方向上无法纠正的优化。因此,我们设计了Frozen CLIP CAM细化模块(RFM)来动态更新CAM以提高伪标签的质量。

我们首先遵循[29]来生成初始CAM。对于给定的带有类标签的图像 I,I 被输入到 CLIP 图像编码器。类标签用于构建文本提示并输入到 CLIP 文本编码器。然后,利用提取的图像特征(池化后)和文本特征计算距离,进一步激活softmax函数得到分类分数。之后,我们使用 GradCAM [41] 生成初始 CAM Minit ∈ R^(|CI |+1)×h×w,其中 (|CI | + 1) 表示图像 I 中的所有类标签,包括背景。更多细节可以在我们的补充材料或[29]中找到。

为了充分利用CLIP的先验知识,对CLIP模型进行了固定。如图3(a)所示,尽管我们发现这种冻结的主干可以为只有图像级标签的初始CAM提供强大的语义特征,但由于Minit是由冻结的主干生成的,因此无法优化,限制了伪标签的质量。因此,如何在培训中对Minit进行整改成为一个关键问题。我们的直觉是使用特征关系来纠正初始CAM。但是,我们不能直接使用CLIP图像编码器中的注意图作为特征关系,因为这样的注意图也是固定的。然而,解码器是不断优化的,我们试图利用它的特征来建立特征关系,以指导从CLIP图像编码器中选择注意值,保留有用的先验CLIP知识并去除噪声关系。通过更可靠的特征关系,可以动态地提高CAM的质量。具体来说,我们首先基于Eq.(2)中的特征映射Fu从解码器生成一个亲和映射:

其中Fu∈R^d×h×w首先被展平为R^d×hw。Sigmoid(·)是Sigmoid函数,保证输出范围在0到1之间。Af∈R^hw×hw为生成的亲和图。T表示矩阵的转置。

然后我们从冻结的CLIP图像编码器中提取所有的多头注意图,记为\left \{ A_{s}^{l} \right \}_{l=1}^{N},每个A_{s}^{l}∈R^hw×hw。对于每个A_{s}^{l},我们使用Af作为标准映射来评估其质量:

我们使用上面的S^l来计算每个注意图的过滤器:

其中G^l∈R^1×1,展开为G_{e}^{l}∈R^hw×hw进行进一步计算。我们使用所有S^l的平均值作为阈值。如果当前S^l小于阈值,则更可靠,我们将其滤波值设为1。否则,我们将过滤器值设置为0。基于这一规则,我们保留高质量的注意图,删除弱的注意图。然后我们结合Af和上面的操作来构建精炼映射:

其中Nm为有效A_{s}^{l}的个数,即Nm =\sum _{l=N_{0}}^{N}G^{l}

然后,按照前面的方法[29],我们生成了精细化的CAM:

其中 c 是特定类别的,M_{f}^{c} 是 c 类的细化 CAM,Rnor 是从 R 获得的,使用行和列归一化(Sinkhorn 归一化 [42])。α 是一个超参数。这部分通过一个框掩码指示器[29]来限制细化区域。M_{init}^{c} 是 c 类的 CAM,重塑到 R^hw×1。最后,Mf 被输入到在线后处理模块,即 [39] 中提出的像素自适应细化模块,生成最终的在线伪标签 Mp ∈ R^h×w。通过这种方式,我们的 RFM 在我们的解码器中使用更新的特征关系来评估冻结主干中的特征关系以选择可靠的关系。然后,借助每个图像的更可靠的特征关系,可以生成更高质量的 CAM。图 3 显示了使用不同细化方法生成的 CAM 的详细比较。我们的方法比[29]和初始CAM中提出的静态细化方法产生更准确的响应。

图三:CAM 的定性比较。(a) 初始 CAM。(b) [29] 中提出的注意力图细化 CAM。(c) 我们改进的 CAM。我们的方法产生了更准确的响应。

3.4. Loss Function

在我们的 RFM 中,我们使用亲和图 Af 来选择注意力图并构建最终的细化图。因此,Af 的有效性直接决定了在线伪标签的质量。考虑到 Af 是在我们的解码器中使用特征图 Fu 生成的,是一个可学习的模块,我们提出了一个 Af 的学习过程,它使用 Mp 中转换后的在线伪标签作为监督。具体来说,Mp 首先被转换为每对像素的像素级亲和力标签:

其中 Oh(·) 是 one-hot 编码,Oh(Mp) ∈ R^C×hw,^A ∈ R^hw×hw 是亲和力标签。^A(i, j) = 1 表示 pixeli 和 j 具有相同的标签,否则 ^A(i, j) = 0。基于上述标签 ^A 和在线标签 Mp,我们的 WeCLIP 的整个损失函数为:

其中 Lce 是交叉熵损失,Mp ↑∈ R^H×W ,λ 是权重参数。P 是方程式 (3)中的预测。使用方程式 (10),为更高质量的伪标签建立了更准确的特征关系。反过来,有了更好的伪标签,建立了更精确的特征关系。因此,我们的解码器和 RFM 可以相互受益以促进训练。

4. Experiment

4.1. Datasets

按照之前大多数弱监督语义分割方法[14,19,23]中的设置,两个数据集用于评估我们的方法:PASCAL VOC 2012[15]和MS COCO-2014[28]。PASCAL VOC 2012 附加 SBD [17] 以扩展数据集,整个数据集包含 10,582 个训练图像、1,446 个验证图像和 1,456 个测试图像,具有 20 个前景类。MS COCO-2014 数据集包含大约 82,000 个训练图像和 40,504 个具有 80 个前景类的验证图像。Mean Intersection-over-Union (mIoU) 作为评估标准。

4.2. Implementation Details

我们使用冻结的CLIP主干和vit16基础架构[13],N是一个等于12的固定数量的。对于PASCAL VOC 2012数据集进行训练,批大小设置为4,最大迭代设置为3000。对于MS COCO-2014数据集进行训练,我们设置batchsize为8,最大迭代次数为80,000。所有其他设置在训练过程中对两个数据集采用相同的参数:我们使用AdamW[32]作为优化器,学习率为2e−3,权值衰减为1e−3,在训练过程中将所有图像裁剪为320 × 320。λ在方程式 (10) 设置为 0.1,我们解码器中 MLP 模块(等式(1))的维度设置为 256。在公式3等式的 φ 中,级联三个transformer编码器(多头数为 8)层以生成最终的特征图,每一层的输出维度为 256。方程式6中的 N0设置为 6。公式8中 α 设置为 2。

在推理过程中,我们使用 {0.75, 1.0} 的多尺度。按照之前的方法[39,40,53],DenseCRF[21]被用作后处理方法来细化预测。

4.3. Comparison with State-of-the-art Methods

在表1,我们将我们的方法与 PASCAL VOC 2012 数据集上的其他最先进方法进行比较。可以看出,我们的 WeCLIP 在 val 和测试集上达到了 76.4% 和 77.2% mIoU,它们都大大优于其他单阶段方法。具体来说,与之前最先进的单阶段方法相比,我们的 WeCLIP 在 val 和测试集上分别提高了 5.3% 和 5.0% mIoU。此外,CLIP-ES [29] 是之前最先进的多阶段方法,也是基于 CLIP 的解决方案。我们的方法比它表现得更好,mIoU 增加了 3.6% 和 3.3%。

表 2 显示了我们的方法与 MS COCO-2014 val 集上先前最先进方法之间的比较。我们的方法实现了新的最先进的性能,达到了 47.1% mIoU。与其他单阶段方法相比,我们的 WeCLIP 带来了超过 4.8% 的 mIoU 增加,这是一个显着的改进。更重要的是,我们的 WeCLIP 在训练步骤较少的情况下也明显优于其他多阶段方法。考虑到我们的 WeCLIP 使用冻结的主干,它对这项任务显示出很大的优势。

在表3,我们比较了我们的方法与 PASCAL VOC 2012 上其他最先进的方法之间的训练成本,可以看出,我们的方法只需要 6.2G GPU 内存,而其他方法至少需要 12G GPU 内存。ToCo [40] 的训练时间比我们少,但它的 GPU 内存远高于我们的 WeCLIP。更重要的是,ToCo [40] 使用 20,000 次训练迭代花费了 4 小时,而我们的 WeCLIP 使用 30,000 次迭代花费了 4.5 小时,这也显示了我们方法的高训练效率。

在图 4 中,我们展示了我们的方法在 PASCAL VOC 2012 和 MS COCO-2014 val 集上与其他方法之间的一些定性比较。视觉结果表明,对于这两个数据集,我们的 WeCLIP 生成比 ToCo [40] 更准确的对象细节。

表一:PASCAL VOC 2012 val 和测试数据集上最先进方法的比较。mIoU (%) 作为评估指标。I:图像级标签; S:显着图; L:语言。mIoU 作为评估指标。如果没有特定的描述,在推理过程中使用多尺度和 DenseCRF 报告结果。

表二:与 MS COCO-2014 val 集上其他最先进方法的比较。

表三:PASCAL VOC 2012 数据集的训练成本比较。所有方法都在 NVIDIA RTX 3090 GPU 上运行。

表四:我们在 PASCAL VOC 2012 val 集上对 WeCLIP 中每个组件的消融研究。

表五:方程3φ中transformer层数的消融研究,在PASCAL VOC 2012 val集上

图五:使用 T-SNE [44] 进行特征可视化,以展示为什么冻结的 CLIP 可用于语义分割。每个颜色表示一个特定的类别。(a) ViT-B 的 Frozen ImageNet 预训练特征可视化。(b) VIT-B 的 Frozen CLIP 预训练特征可视化。可以看出,在没有任何再训练的情况下,与 (a) 中的特征相比,从冻结的 CLIP 中属于同一类的特征更紧凑。最好以彩色观看

在这篇文章中,冻结的CLIP(Contrastive Language-Image Pre-training)主干是提前训练好的。CLIP模型在大量的图像-文本对上进行预训练,学习了丰富的视觉特征和语言特征之间的关联。在这篇文章提出的WeCLIP(Frozen CLIP: A Strong Backbone for Weakly Supervised Semantic Segmentation)方法中,作者使用了预训练的CLIP模型作为特征提取的骨干网络。

具体来说,CLIP模型在训练过程中不被更新(即参数不被调整),它的权重是冻结的。这样做的原因包括:

  1. 利用预训练特征:预训练的CLIP模型已经学习到了从图像中提取丰富语义信息的能力,这些特征对于语义分割任务非常有用。

  2. 减少训练成本:由于不需要对CLIP模型的参数进行优化,可以显著减少训练时间和计算资源的需求。

  3. 提高训练效率:冻结的CLIP主干可以作为一个强大的固定特征提取器,使得训练过程更加高效,并且可以更快地适应特定的下游任务,如弱监督语义分割。

  4. 保持预训练信息:通过不更新CLIP的权重,可以确保模型在预训练阶段学到的知识不会被破坏,这些知识对于理解图像内容至关重要。

在WeCLIP方法中,作者设计了一个轻量级的解码器来解释从冻结的CLIP主干提取的语义特征,并用于最终的语义分割预测。同时,利用冻结的CLIP主干生成的类激活图(CAM)来提供像素级的伪标签,用于训练解码器。此外,还提出了一个细化模块(Frozen CLIP CAM Refinement module, RFM)来动态改进这些伪标签,进一步提高分割性能。

总的来说,冻结的CLIP主干是提前训练好的,并且在WeCLIP方法中作为固定的特征提取器使用,以提高弱监督语义分割任务的性能和训练效率。

4.4. Ablation Studies

我们对 PASCAL VOC 2012 valset 进行了消融研究,以评估我们方法的有效性。CRF 不用于细化最终预测。表4 显示了我们提出的解码器和 RFM 的影响。作为单阶段方法,解码器是必要的。我们无法在没有它的情况下生成预测。此外,引入 RFM 带来了明显的改进,mIoU 增加了 6.2%。由于 RFM 旨在改进在线伪标签,这种增加还评估了它在生成更高质量的伪标签方面的有效性。表5 报告了我们解码器中transformer层数量的影响,即方程式3中的 φ。当层数增加到 3 时,性能会提高。这是因为解码器的有限大小无法捕获足够的特征信息,并且很容易欠拟合特征。随着层数的增加,解码器学习更好的特征表示。但是,如果层数大于 3,性能会下降。一个可能的原因是更深的解码器层会导致过拟合问题。因此,对于 φ,性能在增加到 4 或 5 后会下降是合理的。

在表6,我们评估了我们的细化图的有效性。当只使用As时,这意味着选择所有注意图来细化CAM,即[29]中提出的相同过程,生成71.8%的mIoU评分。请注意,这样的过程是一个静态操作,在训练期间没有优化。引入 Ge 和 Af 显着提高了 0.5% 和 2.5% mIoU。最后,结合 Af、Ge 和 As 使用方程式 (7) 生成比其他结果更好的结果,显示了我们的细化方法的有效性。更重要的是,使用来自我们解码器的亲和图提供了一种动态细化策略,使得在训练期间优化的细化过程。

4.5. Performance on Fully-supervised Semantic Segmentation

我们还使用我们的 WeCLIP 来解决完全监督的语义分割。对于全监督语义分割,它提供了准确的像素级标签,因此我们删除了冻结的文本编码器和我们的 RFM,只保留冻结的图像编码器和我们的解码器。此外,损失函数去除了与 ^A 相关的部分。该框架可以在我们的补充材料中找到。

在表7,我们在 PASCAL VOC 2012 集上评估我们的方法以进行完全监督的语义分割。由于我们的方法利用了冻结的主干,它的可训练参数更少,但保持了高级分割性能,显示出其在全监督语义分割的巨大潜力。

为了说明为什么冻结CLIP的视觉特征可以直接用于语义分割,我们展示了一些特征可视化结果来比较图5中CLIP特征和ImageNet特征之间的差异。我们从PASCAL VOC 2012训练集中随机选择200张图像。在没有任何训练或微调的情况下,我们使用 ViTB 作为主干,并使用冻结的预训练权重初始化它。可以发现属于相同类别的特征,由CLIP预训练的特征更加密集和聚类,而由ImageNet预训练的属于同一类的特征更加稀疏和分散。从图5可以看出,CLIP模型提取的特征可以更好地表示不同类的语义信息,使得属于不同类的特征不会混淆。具有这样的判别特性,便于进行分割任务。

5. Conclusion

我们提出了 WeCLIP,这是一种基于冻结 CLIP 主干的单级管道,用于弱监督语义分割。为了解释用于语义预测的冻结特征,我们设计了一个基于transformer架构的冻结 CLIP 特征解码器。同时,我们提出了一个冻结的CLIP CAM细化模块,该模块使用来自解码器的可学习特征关系来细化CAM,从而明显提高伪标签的质量。我们的方法以更少的训练成本实现了更好的性能,显示出解决此任务的巨大优势。我们还评估了我们的方法在全监督语义分割中的有效性。我们的解决方案提供了不同于传统方法的不同视角,即不需要主干的训练。我们相信所提出的方法可以进一步提高这个方向的研究。

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

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

相关文章

【笔记】自动驾驶预测与决策规划_Part1_自动驾驶决策规划简介

自动驾驶决策规划简介 0、前言1、自动驾驶概述1.1 预测(Prediction)1.2 决策(Decision Making)1.3 规划(Planning) 2、自动驾驶历史和背景3、自动驾驶级别和分类4、预测决策规划的重要性4.1 预测的重要性4.…

环境搭建---部署rabbitmq集群

rabbitmq下载:https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.34/rabbitmq-server-generic-unix-3.8.34.tar.xz erlang下载:https://github.com/erlang/otp/releases/download/OTP-24.3.4.1/otp_src_24.3.4.1.tar.gz 配置主机名 …

MySQL原理之UUID主键分析,插入或更新语法分析

文章目录 1 MySQL不能用UUID做主键1.1 前言1.2 mysql和程序实例1.2.1 准备工作1.2.2 开始测试1.2.3 程序写入结果1.2.4 效率测试结果 1.3 使用uuid和自增id的索引结构对比1.3.1 自增id1.3.2 uuid 1.4 自增id缺点1.5 雪花算法 2 插入或更新2.1 on duplicate key2.1.1 定义2.1.2 …

git版本问题Your branch is behind ‘origin/dev‘by 2 commits,

git版本问题 一个不小心点击了版本的修改,于是就进入了翻滚中,回不来了 遇事还是不要慌,出现这个问题,如果那些你不需要,只是需要回到某一个版本,那么就是需要 git reset --hard origin/master 上面这就…

Vue3入门 - 登录功能开发(Vue3+ts+Pinia+Element Plus)

Vue3中实现登录功能,通常涉及到创建一个表单,用户输入用户名和密码,然后将信息发送到后端进行验证,得到响应结果后作出相应操作。 一、创建项目 这里他用pnpm进行项目的创建的,所以需要事先全局安装pnpm(在…

神经网络的非线性激活

文章目录 一、神经网络的非线性激活是什么二、非线性激活常用函数三、非线性激活的实际演示 一、神经网络的非线性激活是什么 神经网络的非线性激活函数的主要作用是引入非线性变换,从而使网络能够学习和逼近复杂的函数关系。在神经网络中,线性变换&…

[产品管理-4]:NPDP新产品开发 - 2 - 战略 - 制定企业经营战略目标的结构化方法与工具

目录 一、SWOT分析工具 1、SWOT分析工具概述 2、SWOT分析与企业战略目标制定的关系 3、SWOT分析在企业战略目标制定中的应用实例 4、SWOT分析的改进与应用建议 二、P E S T L E 分 析:外部环境分析 2.1 概述 1. 政治因素(Political) …

COCOS:(飞机大战08)子弹和飞机添加碰撞器和刚体

做两个物体的碰撞有2种方式:碰撞检测和触发检测 这里子弹不能和飞机使用碰撞检测,因为会影响到敌机的运动,所有选择使用触发检测 从预制体Prefabs文件中,将子弹Bullet1和Bullet2拖到Canvas下 选中子弹,添加组件&#…

多线程:java中的实现

实现1: 通过java.util.concurrent.atomic中的原子性数据实现 static class Counter {// 通过加锁实现同步public static int count 0;public static final Object obj new Object(); // 通过原子性的整型来实现同步public static AtomicInteger c…

DesignPattern设计模式

1 前言 1.1 内容概要 理解使用设计模式的目的掌握软件设计的SOLID原则理解单例的思想,并且能够设计一个单例理解工厂设计模式的思想,能够设计简单工厂,理解工厂方法了解建造者模式的思想,掌握其代码风格理解代理设计模式的思想&a…

应用层自定义协议与序列化

一、理解应用层 上一篇文章http://t.csdnimg.cn/931k6简单介绍了如何写tcp / udp 网络服务,但是其实始终是在应用层。 一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层。 二、再谈协议 协议是一种 "约定"。socket api 的接口, 在读…

TiDB从0到1学习笔记(精华篇)

历时四个月,恭喜赵老师的《TiDB从0到1》 系列文章顺利完结,小编再次梳理一遍文稿,并附注解分享给大家。 整体架构 从 TiDB 1.0 到 8.0,TiDB 的体系结构一直在不断演进。接下来让我们一起看看整体架构的变化。 TiDB v1 TiDB v1&…

005——栈

目录 栈 栈的定义 栈的性质 栈的应用场景 存储结构: Ⅰ)采用顺序存储结构实现——顺序栈 Ⅱ)采用链式存储结构实现——链栈-->基于单链表(带头结点) 栈 栈的定义 之允许在一端进行插入和删除的线性表 栈的…

安卓获取apk的公钥,用于申请app备案等

要申请app的icp备案等场景,需要app的 证书MD5指纹和公钥,示例如下: 步骤1:使用keytool从APK中提取证书 1. 打开命令行,cd 到你的apk目录,如:app/release 2. 解压APK文件: unzip yo…

一维稳态与非稳态导热的详细分析

目录 引言 一维稳态导热 应用实例:单层平壁导热 数值求解: 一维非稳态导热 应用实例:单层平壁的非稳态导热 温度变化阶段 表格总结: 引言 热传导(Heat Conduction)是热量在物体内部通过微观粒子的相…

批量从word切割说话人!!对于转录后的文本进行纯数据清洗切割和区分说话人-批量从word切割说话人

battle AI的全过程 文章目录 初步切割同时基于文本中提取的动词变化类别做切割以及发言人变化路径设置 迁移模型到GPUbert输出空白debugCPU能运行的语义相似度代码GPU能用了但是没有加切分规则的代码 根据动词变化切分把发言人替换老师和学生的代码读取txt的代码先区分说话人&a…

Qt常用控件——QLCDNumber

文章目录 QLCDNumber核心属性倒计时小程序倒计时小程序相关问题 QLCDNumber核心属性 QLCDNumber是专门用来显示数字的控件,类似于这样: 属性说明intValue获取的数字值(int).value获取的数字值(double)和intValue是联动的例如value设为1.5,in…

黑马点评22——最佳实践-批处理优化

文章目录 pipeline和mset集群模式下的批处理问题 pipeline和mset pipeline就是大数据量的导入,pipeline是在单机模式下的。 redis的处理耗时相比较网络传输的耗时其实是比较低的。 所以我们最好采用批处理, 集群模式下的批处理问题 在集群环境…

生动灵活,MegActor重磅升级!旷视科技发布MegActor-Σ:首个基于DiT的人像动画方法!

文章链接:https://arxiv.org/pdf/2408.14975 项目链接:https://megactor-ops.github.io/ 亮点直击 一种新颖的混合模态扩散Transformer(DiT),能够有效整合音频和视觉控制信号。相较于之前基于UNet的方法,这…

qsort的理解--加强对指针的理解

前言:前面我们学习指针变量,数组指针变量,函数指针变量;这些实际上都是变量,实质上是在内存中开辟一块空间;而这些变量存储的都是地址。还有指针数组,函数指针数组,这指的是把多个地…