十八章:用于弱监督语义分割的自监督等变注意力机制

0.摘要

        图像级弱监督语义分割是一个具有挑战性的问题,近年来得到了深入研究。大多数先进的解决方案利用类激活图(CAM)。然而,由于全监督和弱监督之间存在差距,CAM几乎无法用作对象掩码。在本文中,我们提出了一种自监督的等变注意机制(SEAM),以发现额外的监督信息并缩小差距。我们的方法基于这样一个观察结果:等变性是完全监督语义分割中的一个隐含约束,其像素级标签在数据增强期间与输入图像进行相同的空间变换。然而,这个约束在通过图像级监督训练的CAM上丢失了。因此,我们提出了对来自不同变换图像的预测CAM进行一致性正则化,为网络学习提供自监督。此外,我们提出了一个像素相关模块(PCM),它利用上下文外观信息,并通过其相似的邻居对当前像素的预测进行细化,进一步改善CAM的一致性。在PASCAL VOC 2012数据集上进行了大量实验证明我们的方法在相同级别的监督下优于现有的最先进方法。代码已在网上发布。

1.引言

        语义分割是一项基础的计算机视觉任务,旨在对图像进行像素级别的分类预测。近年来,由于深度学习研究的蓬勃发展,语义分割模型的性能取得了巨大的进步[6,23,38],推动了许多实际应用,如自动驾驶和医学图像分析。然而,与其他任务(如分类和检测)相比,语义分割需要收集耗时且昂贵的像素级别的类别标签。最近,许多工作致力于弱监督语义分割(WSSS),利用弱监督方法,如图像级别的分类标签、草图和边界框,试图达到与全监督方法相当的分割性能。本文重点研究通过图像级别的分类标签进行语义分割。

        据我们所知,大多数先进的弱监督语义分割方法都基于类激活图(CAM)[39],这是一种通过图像分类标签来定位对象的有效方法。然而,CAM通常只覆盖对象的最具区分性的部分,并且在背景区域错误地激活,可以分别总结为欠激活和过激活。此外,当通过仿射变换对相同的输入图像进行增强时,生成的CAMs不一致。如图1所示,对相同的输入图像应用不同的缩放变换会导致生成的CAMs存在显著的不一致性。这些现象的根本原因来自于全监督和弱监督语义分割之间的监督差距。

        本文提出了一种自监督的等变注意机制(SEAM),以缩小上述监督差距。SEAM通过对来自不同变换图像的CAMs进行一致性正则化,为网络学习提供自监督。为了进一步提高网络预测的一致性,SEAM引入了像素相关模块(PCM),它捕捉每个像素的上下文外观信息,并通过学习到的亲和性注意力图修正原始的CAMs。SEAM是通过具有等变交叉正则化(ECR)损失的孪生网络实现的,该损失在不同的分支上对原始的CAMs和修正的CAMs进行正则化。图1显示,我们的CAMs在各种变换的输入图像上都是一致的,并且比基线方法具有更少的过激活和欠激活区域。广泛的实验证明了我们方法的优越性,提供了定量和定性的结果。

总结起来,我们的主要贡献如下:

  • 我们提出了一种自监督的等变注意机制(SEAM),将等变正则化与像素相关模块(PCM)结合起来,以缩小全监督和弱监督语义分割之间的监督差距。
  • 我们设计了具有等变交叉正则化(ECR)损失的孪生网络结构,有效地将PCM和自监督耦合起来,生成既有较少过激活又有较少欠激活区域的CAMs。
  • 在PASCAL VOC 2012数据集上的实验证明,我们的算法仅使用图像级别注释就实现了最先进的性能。

 图1.不同尺度输入图像生成的CAMs的比较。(a)传统的CAMs。(b)我们的SEAM预测的CAMs,它们在重新缩放时更加一致。

2.相关工作

        近年来,深度学习的发展在全监督语义分割方面取得了一系列突破[6,11,23,37,38]。在本节中,我们介绍一些工作,包括弱监督语义分割和自监督学习。

2.1.弱监督语义分割

        与全监督学习相比,弱监督语义分割(WSSS)使用弱标签来指导网络训练,例如边界框[7,18]、涂鸦[22,30]和图像级别分类标签[19,25,27]。一些先进的研究利用图像级别的分类标签来训练模型。其中大多数方法通过优化分类网络生成的类激活图(CAM)[39]来逼近分割掩码。SEC [19]提出了种子、扩展和约束三个原则来优化CAMs,这个方法被许多其他研究所采用。对抗擦除[15,32]是一种流行的CAM扩展方法,它擦除CAM中最具区分性的部分,引导网络从其他区域学习分类特征并扩展激活。AffinityNet [2]训练另一个网络来学习像素之间的相似性,生成一个过渡矩阵,并多次与CAM相乘以调整其激活范围。IRNet [1]从边界激活图生成过渡矩阵,并将该方法扩展到弱监督实例分割。此外,一些研究尝试在WSSS框架中聚合自注意力模块[29,31],例如CIAN [10]提出了跨图像注意力模块,通过显著性图的指导,从包含相同类别对象的两个不同图像中学习激活图。

2.2.自监督学习

        自监督学习方法不同于使用大量标注数据来训练网络,它旨在设计预训练任务以生成无需额外手工注释的标签。有许多经典的自监督预训练任务,例如相对位置预测[9]、空间变换预测[12]、图像修复[26]和图像着色[20]。在某种程度上,生成对抗网络[13]也可以被视为一种自监督学习方法,鉴别器的真实性标签不需要手动注释。预训练任务生成的标签为网络提供了自我监督,使其能够学习更强大的特征表示。自监督学习所学到的特征在某些任务上可以替代ImageNet [8]预训练的特征,例如目标检测[9]和局部分割[17]。考虑到全监督和弱监督语义分割之间存在较大的监督差距,我们的直觉是应该寻求额外的监督来缩小这一差距。由于图像级别的分类标签对于网络学习适应对象边界的分割掩码来说过于弱,我们设计了使用理想分割函数的等变性作为预训练任务,为只有图像级别注释的网络学习提供额外的自我监督。

3.方法

        本节详细介绍了我们的SEAM方法。首先,我们阐述了我们工作的动机。然后,我们介绍了通过共享权重的孪生网络实现等变正则化的方法。我们提出的像素相关模块(PCM)被集成到网络中,以进一步提高预测的一致性。最后,我们讨论了SEAM的损失设计。图2显示了我们SEAM网络的结构。

 图2.我们提出的SEAM方法的孪生网络架构。SEAM是等变正则化(ER)(第3.2节)和像素相关模块(PCM)(第3.3节)的集成。通过特别设计的损失函数(第3.4节),修正后的CAM不仅在仿射变换下保持一致,还能很好地适应对象的轮廓。

3.1.动机

        我们将理想的像素级语义分割函数表示为Fws(·),其参数为ws。对于每个图像样本I,分割过程可以表示为Fws(I)=s,其中s表示像素级分割掩码。这个表达式在分类任务中也是一致的。通过额外的图像级别标签l和池化函数Pool(·),分类任务可以表示为Pool(Fwc(I))=l,其中参数wc是分类网络的参数。大多数弱监督语义分割方法基于一个假设,即最优的分类和分割参数满足wc=ws。因此,这些方法首先训练一个分类网络,然后去除池化函数来处理分割任务。

        然而,很容易发现分类和分割函数的特性是不同的。假设对于每个样本存在一个仿射变换A(·),分割函数更倾向于具有等变性,即Fws(A(I))=A(Fws(I))。而分类任务更注重不变性,即Pool(Fwc(A(I)))=l。尽管分类函数的不变性主要是由于池化操作引起的,但Fwc(·)没有等变性约束,这使得在网络学习过程中很难实现与分割函数相同的目标。需要将额外的正则化器集成进来,以缩小完全监督和弱监督学习之间的监督差距。

        自注意力是一种广泛接受的机制,可以显著提高网络的逼近能力。它通过捕捉上下文特征依赖关系来修正特征图,这也符合大多数弱监督语义分割方法使用像素相似性来改进原始激活图的思想。根据[31]的表示,一般的自注意力机制可以定义为:

        这里的x和y表示输入和输出特征,具有空间位置索引i和j。输出信号由C(xi)=∑j f(xi,xj)进行归一化。函数g(xj)给出了每个位置上输入信号xj的表示,并且它们都通过相似性权重f(xi,xj)在位置i进行聚合,f(xi,xj)计算了嵌入空间中的像素亲和度的点积。为了提高网络对一致预测的能力,我们提出了SEAM方法,将自注意力与等变正则化相结合。

3.2.等变正则化

        在完全监督语义分割的数据增强阶段,像素级标签应该与输入图像应用相同的仿射变换。这为网络引入了一个隐含的等变约束。然而,考虑到弱监督语义分割只能访问图像级别的分类标签,这里缺少了隐含的约束。因此,我们提出了如下的等变正则化方法:

        这里F(·)表示网络,A(·)表示任意的空间仿射变换,例如缩放、旋转、翻转。为了在原始网络上集成正则化,我们将网络扩展为一个共享权重的孪生结构。其中一个分支将变换应用于网络输出,另一个分支在网络前馈之前对图像进行相同的变换。两个分支的输出激活图被正则化以保证CAMs的一致性。

3.3.像素相关模块

        尽管等变正则化为网络学习提供了额外的监督,但只通过经典的卷积层很难实现理想的等变性。自注意力是一种有效的模块,可以捕捉上下文信息并改进逐像素的预测结果。为了将由公式(1)和公式(2)给出的经典自注意力模块集成到CAM的改进中,可以将公式写成:

        其中ˆy表示原始的CAM,y表示修订后的CAM。在这个结构中,原始的CAM通过函数g嵌入到残差空间中。每个像素根据公式(2)给出的相似性与其他像素进行聚合。三个嵌入函数θ,φ,g可以通过单独的1×1卷积层来实现。为了通过上下文信息进一步改进原始的CAM,我们在网络末端提出了一个像素相关模块(PCM),用于整合每个像素的低级特征。PCM的结构参考了自注意力机制的核心部分,并进行了一些修改,并通过等变正则化的监督进行训练。我们使用余弦距离来评估像素间的特征相似性:

        在这里,我们在归一化的特征空间中进行内积,以计算当前像素i与其他像素之间的亲和度。可以通过对公式(1)进行一些修改将f集成进去,如下所示:

        相似性通过ReLU激活以抑制负值。最终的CAM是原始CAM与归一化相似性的加权和。图3给出了PCM结构的示意图。与经典的自注意力相比,PCM去除了残差连接,以保持原始CAM的相同激活强度。此外,由于另一个网络分支为PCM提供像素级别的监督,这种监督并不像真实值那样准确,因此我们通过去除嵌入函数φ和g来减少参数,以避免在不准确的监督上过拟合。我们使用ReLU激活函数和L1归一化来屏蔽不相关的像素并生成一个在相关区域更平滑的亲和力注意力图。

图3. PCM的结构,其中H、W、C/C1/C2分别表示特征图的高度、宽度和通道数。

3.4.SEAM的损失设计

        图像级别的分类标签l是唯一可以在这里使用的人工标注监督。我们在网络末端采用全局平均池化层来生成用于图像分类的预测向量z,并采用多标签软边缘损失进行网络训练。分类损失定义为针对C-1个前景对象类别的损失,如下所示:

         形式上,我们将孪生网络的原始CAM表示为ˆyo和ˆyt,其中ˆyo来自具有原始图像输入的分支,而ˆyt来自经过变换的图像。全局平均池化层分别将它们聚合成预测向量zo和zt。分类损失在两个分支上计算如下:

        分类损失为目标定位提供了学习监督。为了保持输出的一致性,需要对原始CAM进行等变正则化的聚合。原始CAM上的等变正则化(ER)损失可以很容易地定义为:

        这里的A(·)是在孪生网络的变换分支中已经应用于输入图像的仿射变换。此外,为了进一步提高网络的等变学习能力,将原始的CAM和浅层特征输入PCM进行细化。直观的想法是在修正后的CAM之间引入等变正则化yo和yt。然而,在我们的早期实验中,PCM的输出图像很快陷入局部最小值,导致图像中的所有像素都被预测为同一类。因此,我们提出了一个等变交叉正则化(ECR)损失,如下所示:

        PCM的输出通过孪生网络的另一个分支上的原始CAM进行正则化。这种策略可以避免PCM细化过程中CAM的退化。虽然CAM是通过前景目标分类损失来学习的,但在PCM处理过程中,不应忽视许多背景像素。原始的前景CAM在这些背景位置上具有零向量,无法产生梯度来将特征表示推向这些背景像素之间更接近。因此,我们定义背景分数如下:

        其中ˆyi,c是位置i上类别c的原始CAM的激活得分。我们通过将每个像素的激活向量归一化,并将前景非最大激活抑制为零,然后与额外的背景分数连接起来。在推断过程中,我们只保留前景激活结果,并将背景分数设置为ˆyi,bkg =α,其中α是硬阈值参数。总之,SEAM的最终损失定义如下:

        分类损失用于粗略定位目标,ER损失用于缩小像素级和图像级监督之间的差距。ECR损失用于将PCM与网络的主干集成在一起,以便在各种仿射变换下进行一致的预测。网络架构如图2所示。我们在实验部分详细介绍了网络训练设置,并对每个模块的有效性进行了仔细研究。

4.实验

4.1.实现细节

        我们在PASCAL VOC 2012数据集上评估了我们的方法,该数据集包含21个类别的注释,即20个前景对象和背景。官方的数据集划分为1464张训练图像,1449张验证图像和1456张测试图像。按照语义分割的常见实验协议,我们从SBD [14]中获取额外的注释,构建了一个包含10582张图像的增强训练集。值得注意的是,在网络训练过程中只有图像级别的分类标签可用。使用平均交并比(mIoU)作为评估分割结果的指标。

        在我们的实验中,我们采用ResNet38 [35]作为主干网络,输出步长为8。我们通过个别的1×1卷积层从第3和第4阶段提取特征图,并将它们的通道数量分别减少到64和128。在PCM中,这些特征与图像连接,并通过另一个1×1卷积层输入到公式(5)中的函数θ中。图像通过最长边随机缩放在[448,768]范围内,然后通过448×448进行裁剪作为网络输入。模型在4个TITAN-Xp GPU上进行训练,批量大小为8,共进行8个epoch。初始学习率设为0.01,按照多项式策略lritr =lrinit(1−max itritr)γ进行衰减,其中γ=0.9。在ECR损失上使用在线难例挖掘(OHEM),保留最大的20%像素损失。

        在网络训练过程中,我们在PCM流和网络主干之间的交点处切断梯度的反向传播,以避免相互干扰。这个设置将PCM简化为一个纯粹的上下文细化模块,它仍然可以与网络的主干同时进行训练。原始CAM的学习不会受到PCM细化过程的影响。在推断过程中,由于我们的SEAM是一个共享权重的孪生网络,只需要恢复一个分支。我们在推断过程中采用多尺度和翻转测试来生成伪分割标签。

4.2.消融研究

        为了验证我们的SEAM的有效性,我们从修正后的CAMs在PASCAL VOC 2012训练集上生成了像素级的伪标签。在我们的实验中,我们遍历了所有的背景阈值选项,并给出了伪标签的最佳mIoU,而不是与相同的背景阈值进行比较。因为最高的伪标签准确率代表了CAMs与真实分割掩码之间的最佳匹配结果。具体来说,前景激活覆盖率会随着平均激活强度的增加而扩大,而与真实标签的匹配程度则不会改变。只有当CAMs不仅增加了平均激活强度,而且与真实标签更加匹配时,最高的伪标签准确率才会得到改善。

与基准线的比较:表1列出了我们方法中每个模块的消融研究结果。结果显示,使用具有等变正则化的孪生网络相比基准线提高了2.47%。我们的PCM实现了显著的性能提升,提高了5.18%。在等变交叉正则化损失上应用OHEM之后,生成的伪标签在PASCAL VOC训练集上进一步实现了55.41%的mIoU。我们还对基准线CAM与稠密CRF进行测试以改进预测结果。结果显示,稠密CRF将mIoU提高到52.40%,低于SEAM的结果55.41%。在将稠密CRF作为后处理进行聚合后,我们的SEAM可以进一步提高性能,达到56.83%。图4显示,SEAM生成的CAMs具有较少的过度激活和更完整的激活覆盖,其形状与基准线相比更接近于真实分割掩码。为了进一步验证我们提出的SEAM的有效性,我们可视化了PCM生成的亲和性注意力图。如图5所示,所选的前景和背景像素在空间上非常接近,而它们的亲和性注意力图却差异很大。这证明PCM可以从自监督中学习到边界敏感的特征。

改进的定位机制:一种直观的想法是,改进的弱监督定位机制将提高伪分割标签的mIoU。为了验证这个想法,我们简单地评估了在聚合我们提出的SEAM之前的GradCAM[28]和GradCAM++[3]。然而,表2给出的评估结果表明,无论是GradCAM还是GradCAM++都无法缩小完全监督和弱监督语义分割任务之间的监督差距,因为最佳mIoU结果没有改善。我们认为,改进的定位机制只是设计用来表示与对象相关的部分,没有受到低级信息的任何约束,这对于分割任务来说是不合适的。这些改进的定位方法生成的CAMs并没有变得更与真实掩码匹配。以下实验证明了我们提出的SEAM能够显著提高CAM的质量,以适应对象掩码的形状。

仿射变换:理想情况下,公式(3)中的A(·)可以是任何仿射变换。在孪生网络中进行了几种变换,以评估它们对等变正则化的影响。如表3所示,有四种候选的仿射变换:0.3下采样率的缩放、[-20,20]度的随机旋转、15像素的平移和水平翻转。首先,我们提出的SEAM在网络训练中简单地采用了缩放。表3显示,伪标签的mIoU从47.43%提高到55.41%。表3还显示,简单地结合不同的变换效果不太明显。当缩放变换与翻转、旋转和平移分别结合时,只有翻转的改进很小。在我们看来,这是因为翻转、旋转和平移之间的激活图太相似,无法产生足够的监督。在其他实验中,我们只保留缩放作为关键变换,采用0.3的下采样率。

数据增强和推理:与原始的单支网络相比,孪生结构在实践中扩大了图像大小的增强范围。为了调查改进是否源于缩放范围,我们评估了具有更大缩放范围的基准模型,表4给出了实验结果。结果表明,仅增加缩放范围不能提高生成的伪标签的准确性,这证明性能的改进来自PCM和等变正则化的组合,而不是数据增强。在推理过程中,常常使用多尺度测试,通过聚合不同尺度图像的预测结果来提高最终性能。这也可以看作是一种提高预测等变性的方法。为了验证我们提出的SEAM的有效性,我们评估了单尺度和多尺度测试生成的CAMs。表5显示,我们提出的模型在单尺度和多尺度测试中均优于基准模型,具有更高的峰值性能。

改进的来源:CAM质量的提高主要源自更完整的激活覆盖范围或更少的过度激活区域。为了进一步分析我们SEAM的改进来源,我们定义了两个指标来代表欠激活和过度激活的程度:

        其中,TPc表示类别c的真正预测像素数量,FPc和FNc分别表示假正和假负。这两个指标排除了背景类别,因为背景的预测与前景相反。具体而言,如果CAM没有完全的激活覆盖,会有更多的假负区域,mFN的值会更大。相对地,更大的mFP意味着有更多的假正区域,即CAM过度激活。基于这两个指标,我们收集了基准模型和我们的SEAM的评估结果,然后绘制了图6中的曲线,显示了基准模型和我们的方法之间的巨大差距。SEAM实现了更低的mFN和mFP,这意味着我们方法生成的CAM具有更完整的激活覆盖和更少的过度激活像素。因此,SEAM的预测映射更好地适应了地面真实分割的形状。此外,SEAM的曲线在不同的图像尺度上更加一致,证明等变正则化在网络学习过程中起作用,并有助于改进CAM的质量。

表1. SEAM中每个部分的消融研究结果。ER:等变正则化。PCM:像素相关模块。OHEM:在线难例挖掘。CRF:条件随机场。

表2. 使用语义分割度量(mIoU)评估各种弱监督定位方法的结果。

图4. CAM的可视化。(a)原始图像。(b)地面真值分割。(c)基准CAM。(d)SEAM生成的CAM。SEAM不仅抑制了过度激活,还将CAM扩展到完整的对象激活范围。

图5. 前景和背景上亲和性注意力图的可视化。红色和绿色的十字表示选定的像素,具有类似特征表示的蓝色。

表3. 对等变正则化的各种变换实验。简单地聚合不同的仿射变换不能带来显著的改进。

表4. 改变增强重缩放范围的实验。这里SEAM的重缩放率设置为0.5。

表5. 不同的单尺度和多尺度测试实验。

图6. 过度激活和不足激活的曲线。较低的mFN曲线表示较少的不足激活区域,较低的mFP表示较少的过度激活区域。

4.3.与当下方法的比较

        为了进一步提高伪像素级标注的准确性,我们参考了[2]的工作,在我们修订后的CAM上训练了一个基于亲和度网络的模型。最终合成的伪标签在PASCAL VOC 2012训练集上达到了63.61%的mIoU。然后,我们使用ResNet38作为主干网络,在这些伪标签上以全监督的方式训练了经典的分割模型DeepLab [5],以获得最终的分割结果。表6显示了验证集上每个类别的mIoU,表7给出了先前方法的更多实验结果。与基准方法相比,我们的SEAM在相同的训练设置下显著提升了验证集和测试集上的性能。此外,我们的方法在仅使用图像级标签的情况下,在PASCAL VOC 2012测试集上展现了最先进的性能。需要注意的是,我们的性能提升既不源自更大的网络结构,也不是改进的显著性检测器。性能的提升主要来自于额外的自监督和PCM的协作,这为分割任务产生了更好的CAM。图7展示了一些定性结果,验证了我们的方法在大物体和小物体上的良好表现。

图7. PASCAL VOC 2012验证集上的定性分割结果。(a) 原始图像。(b) 真实标签。(c) 使用我们的伪标签重新训练的DeepLab模型预测的分割结果。

表6. 在仅使用图像级监督的情况下,对PASCAL VOC 2012验证集进行的类别性能比较。

表7. 我们的方法与其他最先进的WSSS方法在PASCAL VOC 2012数据集上的性能比较。

5.概括

        在本文中,我们提出了一种自监督等变注意机制(SEAM),通过引入额外的自监督来缩小完全监督和弱监督语义分割之间的监督差距。SEAM通过利用等变正则化将自监督嵌入到弱监督学习框架中,强制要求从各种变换后的图像预测的CAM保持一致。为了进一步提高网络生成一致CAM的能力,我们设计了一个像素相关模块(PCM),通过学习像素间的相似性来改进原始的CAM。我们的SEAM采用了一个具有高效正则化损失的连体网络结构进行实现。生成的CAM不仅在不同的变换输入上保持一致,而且更好地适应了真实掩码的形状。通过我们合成的像素级伪标签重新训练的分割网络在PASCAL VOC 2012数据集上达到了最先进的性能,这证明了我们SEAM的有效性。

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

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

相关文章

[JAVAee]定时器

目录 定时器的含义 定时器的使用 定时器的解析 ①TaskQueue ​②TimerThread ③Timer 定时器的模拟实现 ①创建Task自定义类型 ②创建TimerThread类 ③Timer类 完整代码 定时器的含义 从名字上看,就是我们通俗理解的那个定时器.设置一定的时间,并在一定的时间后发生…

安卓抓包神奇黄鸟HttpCanary安装配置及使用教程

1、下载安装包 黄鸟抓包下载地址 2、安装下载的apk 3、证书安装问题 vivo手机我安装时打开黄鸟app,会直接弹出,直接安装即可 其他手机,需要去系统设置中安装 3.1 搜索 证书,选择CA证书 3.2 进行本人操作验证 3.3 安装HttpCa…

黄东旭:The Future of Database,掀开 TiDB Serverless 的引擎盖

在 PingCAP 用户峰会 2023 上, PingCAP 联合创始人兼 CTO 黄东旭 分享了“The Future of Database”为主题的演讲, 介绍了 TiDB Serverless 作为未来一代数据库的核心设计理念。黄东旭 通过分享个人经历和示例,强调了数据库的服务化而非服务化…

C语言假期作业 DAY 01

题目 1.选择题 1、执行下面程序,正确的输出是( ) int x5,y7; void swap() { int z; zx; xy; yz; } int main() { int x3,y8; swap(); printf("%d,%d\n",x, y)…

Android Studio 代码模板插件实现

Android Studio 代码模板插件 背景 可以跳过背景和简述,从模板插件实现开始看. 开发新页面时,原先需要写一堆模板代码。比如用Databinding写列表结构的页面,需要手写以下文件: XxActivity.ktXxFragment.ktXxViewModel.ktXxListA…

基于K8s环境·使用ArgoCD部署Jenkins和静态Agent节点

今天是「DevOps云学堂」与你共同进步的第 47天 第⑦期DevOps实战训练营 7月15日已开营 实践环境升级基于K8s和ArgoCD 本文节选自第⑦期DevOps训练营 , 对于训练营的同学实践此文档依赖于基础环境配置文档, 运行K8s集群并配置NFS存储。实际上只要有个K8s集…

CAD .NET 15.0 企业版 Crack

CAD .NET 15.0 企业版 企业版 企业版 企业版 企业版 Updated: June 14, 2023 | Version 15.0 NEW CAD .NET is a library for developing solutions in .NET environment. It supports AutoCAD DWG/ DXF, PLT and other CAD formats. The library can be used in a wide rang…

C语言之pthread_cond_t信号变化探究总结(八十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

【RabbitMQ(day2)】默认(直连)交换机的应用

文章目录 一、第一种模型(Hello World)二、第二种模型(work queue)自动确认机制的后果和公平分配 三、阐述默认交换机 这篇博客是以下资料学后的总结: 不良人的RabbitMQ的教学视频 官方启动教程 RabbitMQ中文文档 一、…

【SQL语句】

目录 一、SQL语句类型 1.DDL 2.DML 3.DLL 4.DQL 二、数据库操作 1.查看 2.创建 2.1 默认字符集 2.2 指定字符集 3.进入 4.删除 5.更改 5.1 库名称 5.2 字符集 三、数据表操作 1.数据类型 1.1 数值类型(常见,下同) 1.1.1 T…

ChatGPT长文本对话输入方法

ChatGPT PROMPTs Splitter 是一个开源工具,旨在帮助你将大量上下文数据分成更小的块发送到 ChatGPT 的提示,并根据如何处理所有块接收到 ChatGPT(或其他具有字符限制的语言模型)的方法。 推荐:用 NSDT设计器 快速搭建可…

【QT】Day3

1. 完成闹钟的实现&#xff1a; widgt.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> #include <QTimerEvent> //定时器事件处理函数 #include <QTime> //时间类 #include <QTextToSpeech> //文本转语音类头…

Jmap-JVM(十六)

上篇文章说了ZGC是jdk11加入的&#xff0c;他是未来jvm垃圾收集器的奠定者&#xff0c;满足TB级别内存处理&#xff0c;STW时间保持在10ms以下。 Jmap 我们可以先通过jmap -histo 进程ip 来查看&#xff0c;但是这样看不太清晰&#xff0c;我们可以用这行命令生成一个文件&…

机器学习:GPT3

GPT3 模型过于巨大 GPT3是T5参数量的10倍&#xff01; 训练GPT3的代价是$12百万美元 Zero-shot Ability GPT3的思想是不是能拿掉Fine-tune 只需要给定few-shot或者zero-shot就能干相应的任务了。 few-shot learning&#xff08;no gradient descent&#xff09;&#…

9.python设计模式【外观模式】

内容&#xff1a;为子系统中的一组接口提供一个一致的界面&#xff0c;外观模式定义了一个高层接口&#xff0c;这个接口使得这一个子系统更加容易使用。 角色&#xff1a; 外观&#xff08;facade&#xff09;子类系统&#xff08;subsystem classes&#xff09; UML图 举…

容器化安装环境EFK搭建

容器化安装环境 Docker中安装并启动ElasticSearch 前置配置 第一步&#xff1a;在宿主机上执行echo “net.ipv4.ip_forward1” >>/usr/lib/sysctl.d/00-system.conf 2.第二步&#xff1a;重启network和docker服务 [rootlocalhost /]# systemctl restart network &&…

使用低代码开发,需要注意哪些?

低代码平台的历史相对较短&#xff0c;大约始于 2000 年初&#xff0c;源于快速应用程序开发工具。随着低代码平台和工具的日益普及和优势&#xff0c;它不断发展以满足各种领域和角色的需求。 本文将研究各种低代码和无代码应用程序开发方法、业务用例、挑战和未来预测等。 一…

论文浅尝 | 预训练Transformer用于跨领域知识图谱补全

笔记整理&#xff1a;汪俊杰&#xff0c;浙江大学硕士&#xff0c;研究方向为知识图谱 链接&#xff1a;https://arxiv.org/pdf/2303.15682.pdf 动机 传统的直推式(tranductive)或者归纳式(inductive)的知识图谱补全(KGC)模型都关注于域内(in-domain)数据&#xff0c;而比较少关…

UEditor 百度富文本编辑器使用 遇到问题

小小吐槽 碰到前后不分离项目&#xff0c;富文本使用的UEdtior UEditor 点击上传图片转base64 在ueditor.all.js文件中找到这个 callback()函数 这里使用根据图片的url转成base64 UEditore 粘贴图片转base64 UEditor回显图片&#xff08;base64&#xff09; 把ueditor.all…

Java面向对象编程实战详解(图书管理系统示例)

文章目录 面向编程概念图书管理系统示例需求分析设计阶段编码实现创建目录结构Book类的编码BookList类的编码User类的编码AdminUser类的编码NormalUser类的编码启动类的编写具体的操作实现IOperation接口新增图书的实现借阅图书的实现删除图书的实现显示图书的实现查找图书的实…