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

news2024/11/15 4:44:58

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.coloradmin.cn/o/806701.html

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

相关文章

最后的组合:K8s 1.24 基于 Hekiti 实现 GlusterFS 动态存储管理实践

前言 知识点 定级:入门级GlusterFS 和 Heketi 简介GlusterFS 安装部署Heketi 安装部署Kubernetes 命令行对接 GlusterFS 实战服务器配置(架构 1:1 复刻小规模生产环境,配置略有不同) 主机名IPCPU内存系统盘数据盘用途ks-master-0192.168.9.912450100…

王道数据结构-代码实操1(全注解版)

#include<stdio.h>void loveyou(int n){ // 传入参数类型为int型&#xff0c;在此函数中表示为n&#xff1b;返回值类型为void&#xff0c;即没有返回值&#xff1b; int i1; //定义了一个整数型变量i&#xff0c;且只在loveyou函数中有用&#xff1b;while(i…

python环境搭建和pycharm安装

python环境搭建 下载地址&#xff1a;Python Releases for Windows | Python.org 双击安装 选择自定义安装&#xff0c;勾选添加至PATH 配置自定义安装路径 点击disable 长度限制 测试安装 winr ->cmd->python,出现版本号则安装成功 pycharm安装 访问Jetbrains中文官网&a…

linux的C/C++线程池(VS2019开发)

文章目录 一、准备工作二、C语言threadpool实现三、C 11标准实现 代码看视频敲的&#xff0c;非原创 一、准备工作 创建项目 连接linux虚拟机 启动测试&#xff1a;VS2019运行Linux程序报错&#xff1a;无法启动gdb。系统中缺少gdb。sudo yum install -y gdb 线程池的组成主…

【Maven】Maven配置国内镜像

文章目录 1. 配置maven的settings.xml文件1.1. 先把镜像mirror配置好1.2. 再把仓库配置好 2. 在idea中引用3. 参考资料 网上配置maven国内镜像的文章很多&#xff0c;为什么选择我&#xff0c;原因是&#xff1a;一次配置得永生、仓库覆盖广、仓库覆盖全面、作者自用的配置。 1…

matlab使用教程(5)—矩阵定义和基本运算

本博客介绍如何在 MATLAB 中创建矩阵和执行基本矩阵计算。 MATLAB 环境使用矩阵来表示包含以二维网格排列的实数或复数的变量。更广泛而言&#xff0c;数组为向量、矩阵或更高维度的数值网格。MATLAB 中的所有数组都是矩形&#xff0c;在这种意义上沿任何维度的分量向量的长度…

启动Anaconda卡在loading applications的解决办法

启动Anaconda卡在 loading applications的解决办法 问题解决方法 问题 系统环境&#xff1a;macOS BigSur v11.2.2 启动anaconda后&#xff0c;卡在 loading applications界面。 解决方法 在anaconda安装目录下找到conda_api.py文件&#xff0c;将 data yaml.load(f)修改为…

【沐风老师】3dMax子样条线编辑插件SubSpline使用方法详解

3dMax子样条线编辑插件SubSpline&#xff0c;是3dMax中样条曲线形状的高级子对象选择器和材质ID编辑器。 只需一个简单的切换按钮&#xff0c;即可在屏幕上轻松显示所有选定形状的顶点编号和材质ID。 利用箭头工具选择样条曲线子对象&#xff0c;以补充和扩展3dsMax的标准工具…

推荐功能强大的活码管理平台(支持淘宝客和分享卡片)

功能强大的活码管理平台源码-支持淘宝客和分享卡片等功能 演示地址&#xff1a;runruncode.com/code/19494.html 首页 查看群活码、客服码、渠道码当天总访问量查看成员账号个数查看群活码、客服码、渠道码当天各时段访问量 群活码 创建、编辑、删除、分享群活码查看群活码…

使用MyBatis(2)

目录 一、定义接口、实体类、创建XML文件实现接口&#xff09; 二、MyBatis的增删改查 &#x1f345;1、MyBatis传递参数查询 &#x1f388;写法一 &#x1f388;写法二 &#x1f388;两种方式的区别 &#x1f345;2、删除操作 &#x1f345;3、根据id修改用户名 &#x…

推荐带500创作模型的付费创作V2.1.0独立版系统源码

ChatGPT 付费创作系统 V2.1.0 提供最新的对应版本小程序端&#xff0c;上一版本增加了 PC 端绘画功能&#xff0c; 绘画功能采用其他绘画接口 – 意间 AI&#xff0c;本版新增了百度文心一言接口。 后台一些小细节的优化及一些小 BUG 的处理&#xff0c;前端进行了些小细节优…

fasta序列转为数字0和1-python

原始文件&#xff1a; 目标文件&#xff1a; linux版本 #name:lin_convert_fasta_to_01.py #! /usr/bin/env python #usage: python hash-always.py -l 1.list -f 2.txt > out.txt import argparse parser argparse.ArgumentParser(description"Advanced screeni…

训练自己的行文本检测EAST模型

训练自己的行文本检测EAST模型 训练数据格式 训练数据格式

Mybatis初识(一)

一.Mybatis是什么 MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义SQL、存储过程以及高级映射。MyBatis 去除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的XML或注解来配置,和映射原始类型、接口和Java POJO (Plain Old Java Objects…

UDS诊断协议

UDS本质上是一系列服务的集合&#xff0c;包含6大类&#xff0c;共26种。每种服务都有独立的ID&#xff0c;即SID。 请求 SID(1Byte) 参数 SID(1Byte) Sub-function(1Byte) 参数 SID DID(2Bytes) 响应 肯定响应 SID0x40(1Byte) Sub-function(根据请求是否存在) 参数…

【C++进阶】继承

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;C进阶 ⭐代码仓库&#xff1a;C进阶 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff0c;你们的支持是我…

收集springboot2.6和2.7新功能新特性,以便后续项目中使用

更多功能看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/nbcio-boot 前端代码:https://gitee.com/nbacheng/nbcio-vue.git 在线演示(包括H5) : http://122.227.135.243:9888 因为nbcio-boot已经升级到2.7,所以先收集SpringBoot2.6和2.7的新功能,…

数据结构:链表的一些经典的OJ题目

文章目录 写在前面链表OJ调试技巧移除链表元素反转链表链表的中间节点链表中倒数第K个节点链表分割问题 写在前面 本篇为本人学习链表的过程中遇到的典型OJ题&#xff0c;于是整理出来分享思路和便于后续重新学习&#xff0c;每个标题均可跳转至对应习题&#xff0c;大多为Lee…

Autosar通信实战系列02-CAN报文发送周期测试脚本开发及周期不准优化

本文框架 前言1. CAN发送报文的周期测试脚本开发2. 发送报文周期不准的可能原因及优化策略2.1 发送报文的控制逻辑2.2 送报文周期不准的可能原因及优化策略前言 在本系列笔者将结合工作中对通信实战部分的应用经验进一步介绍常用,包括但不限于通信各模块的开发教程,代码逻辑…

nvidia显卡设置 让显卡发挥最大的性能

1、打开官网https://www.nvidia.cn/geforce/drivers/ 查看电脑系统位数和显卡(GPU)的版本 产品系列&#xff1a;Notebooks表示笔记本 2、点击【搜索】-【下载】(game表示游戏驱动)-【下载】 3、双击运行exe文件 4、使用邮箱注册账号时注意要设置正常的年龄 PS设置 1、设置PS使用…