第十章:重新审视扩张卷积:一种用于弱监督和半监督语义分割的简单方法

0.摘要

        尽管取得了显著的进展,弱监督分割方法仍然不如完全监督方法。我们观察到性能差距主要来自于它们在从图像级别监督中学习生成高质量的密集目标定位图的能力有限。为了缓解这样的差距,我们重新审视了扩张卷积[1]并揭示了它如何以一种新颖的方式被用于有效地克服弱监督分割方法的这一关键限制。具体而言,我们发现不同的扩张率可以有效地扩大卷积核的感受野,并且更重要的是将周围的有辨别力的信息传递给非辨别性的目标区域,促进这些区域在目标定位图中的出现。然后,我们设计了一个具有不同扩张率的卷积块的通用分类网络。它可以产生密集且可靠的目标定位图,并有效地有利于弱监督和半监督语义分割。尽管表面上看起来很简单,我们提出的方法在性能上超过了现有技术水平。特别是,在弱监督(只有图像级别标签可用)和半监督(有1,464个分割掩码可用)的设置下,在Pascal VOC 2012测试集上实现了60.8%和67.6%的mIoU分数,创下了新的技术水平。

1.引言

        由于不需要昂贵的人力成本,弱监督的图像识别方法[11,15,16,19,23,38-42,44]已经得到广泛研究。其中最有吸引力的方法之一是仅使用图像级别注释学习对图像进行分割。对于这种方法来说,目前仍然存在一个被认为是最关键的挑战,即如何准确地和密集地定位目标区域,以获取高质量的目标线索,从而启动和改进分割模型的训练[1,20,45]。

        最近,一些自顶向下的方法[43,46]提出利用分类网络来生成类别特定的注意力线索,用于目标定位。然而,直接使用图像分类模型生成的注意力只能识别目标对象的一个小的有辨别力的区域,这对于训练一个良好的分割模型来说不够密集和广泛。例如,图1(b)的第二行展示了由最先进的类别激活映射(CAM)[46]生成的一些类别特定区域定位的样本。可以观察到,在存在大型对象的常见情况下,CAM很难生成密集的目标区域,这与语义分割任务的要求不符。CAM发现的这些区域通常散布在目标对象周围,例如孩子的头部和手部等有辨别力的部分。无法从图像级别监督中学习生成密集目标定位是发展性能良好的弱监督分割模型的关键障碍。基于这样的观察,我们提出将那些稀疏突出的区域中的有辨别力的知识转移到相邻的目标区域,从而形成密集的目标定位,这可以有效地促进分割模型的学习。

        为了实现这一目标,我们重新审视了流行的扩张卷积,并发现它确实提供了一个有前景的解决方案,只要能够正确地利用它。扩张卷积最初由Chen等人引入用于语义分割[1,2]。其一个关键优势是能够有效地扩大感受野的大小,以融入上下文信息,而不引入额外的参数或计算成本。我们发现这个特性非常适合在图像区域之间传播有辨别力的信息,并突出非辨别性的目标区域以生成密集的目标定位。受此启发,我们引入了多个扩张卷积块来增强标准的分类模型,如图1(a)所示。

        具体而言,我们提出的方法通过改变卷积核的扩张率,在多个尺度上扩大感受野。通常,分类网络能够识别出一个或多个具有高响应的小的有辨别力的部分,以正确识别图像。通过扩大感受野,具有低响应的目标区域可以通过感知周围高响应的上下文来提高辨别力。这样,目标对象高响应部分的辨别信息可以在多个尺度上传播到相邻的目标区域,使它们更容易被分类模型识别。我们利用CAM [46]为每个卷积块生成一个目标定位图。如图1(a)所示,在不扩大扩张率(即d=1)的情况下,卷积块只能定位两个小的有辨别力的区域。通过逐渐增加扩张率(从3到9),发现了更多与目标相关的区域。

        然而,一些真实的负面区域可能会被错误地突出显示,使用较大的扩张率(例如,对应于d=9的定位图)。因此,我们提出了一种简单但有效的抗噪声融合策略来解决这个问题。这个策略可以有效地抑制被扩大感受野激活的与目标无关的区域,并将不同扩张块产生的定位图融合为一个整体,清晰地突出显示目标区域。从图1(b)中所示的例子可以看出,我们的方法对尺度变化非常鲁棒,并能够密集地定位目标对象。

我们使用我们提出的方法生成的定位图来为训练分割模型生成分割掩码。我们的方法是通用的,并可以以弱监督和半监督的方式用于学习语义分割网络。尽管看起来简单,但我们的方法确实提供了密集的目标定位,可以轻松提升弱监督和半监督语义分割的效果,这在广泛的实验证明中得到了证实。总结起来,这项工作的主要贡献有三个方面:

        •我们重新审视了扩张卷积,并揭示了它自然适应于密集定位目标区域的要求,以构建一个良好的弱监督分割模型,这对于弱监督/半监督图像语义分割是新的。

        •我们提出了一种简单而有效的方法,利用扩张卷积来通过传递辨别性的分割信息密集地定位目标。

        •我们提出的方法可以以弱监督和半监督的方式学习语义分割网络。具体而言,在弱监督和半监督设置下,它在Pascal VOC分割基准测试集上分别达到了60.8%和67.6%的mIoU分数,这是最新的技术水平。

图1.(a)我们提出的方法:为标准分类网络配备具有不同扩张率的多个扩张卷积块,以实现密集的目标定位。(b)比较最先进的CAM [46](第2行)和我们的方法(最后一行)在生成的目标定位图质量上的差异。我们的方法即使在存在很大的尺度变化的情况下,也能更准确地定位目标对象。

2.相关工作

使用粗糙注释进行分割为了训练语义分割模型,收集大量的像素级注释是一项费时费力的工作。为了减轻像素级注释的负担,Dai等人[3]和Papandreou等人[21]提出使用带有注释边界框的方法来学习语义分割。Lin等人[17]使用语义涂鸦作为语义分割的监督。最近,监督注释进一步放宽为实例点[28]。

使用图像级别注释进行分割图像级别标签是最简单的分割学习监督,容易获取。一些工作[22–24]提出利用多实例学习和图像级别标签进行语义分割。Papandreou等人[21]提出基于期望最大化算法动态预测前景对象和背景进行监督。最近,在这一具有挑战性的任务上取得了很大的进展[8,9,13,14,26,29,31,34,35]。Wei等人[35]和Qi等人[26]利用提议生成像素级注释以进行监督。然而,使用MCG[25]提议或采用额外的网络[36]进行基于提议的分类通常会导致较长的时间消耗,并且也会固有地使用更强的监督(MCG是从带有像素级注释的PASCAL训练图像中训练得到的)。Wei等人[34]提出了一个从简单到复杂(STC)的框架,逐步提高分割网络的能力。然而,STC的成功主要依赖于大量简单图像的训练。Kolesnikov等人[14]提出了一种SEC方法,将三种损失函数(种子、扩张和边界约束)集成到统一的框架中来训练分割网络。但是SEC只能获得与对象相关的小而稀疏的种子用于监督,这不能为学习可靠的分割模型提供足够的信息。最近,Wei等人[33]提出了一种对抗擦除(AE)方法来挖掘密集的目标区域进行监督。虽然它在PASCAL VOC基准测试中达到了最先进的性能,但AE方法需要重复的训练过程来学习多个分类模型,然后将这些模型应用于定位与对象相关的区域。相比之下,在这项工作中,我们只需要训练一个分类模型来定位密集且完整的目标区域。

图2.我们方法的动机:通过改变卷积核的扩张率,信息可以从最初具有区分性的区域传递到其他区域。对应的定位图在第二行显示。最佳观看效果为彩色显示。

3.所提出的方法

3.1.重新审视扩张卷积

        一些自顶向下的方法[43,46]可以识别对分类网络决策有贡献的具有区分能力的目标区域,但它们通常会漏掉非区分目标区域。我们提出通过使信息能够从具有区分性的区域传递到相邻的非区分性区域来增强分类模型,以克服这种局限性。我们发现,扩张卷积[1]可以通过增大卷积核的感受野大小有效地融入周围上下文,提供了一个有希望的解决方案。图2说明了扩张如何实现信息传递。原始图像中绿色循环中的头部区域对于分类网络将其识别为"鸟"图像最具区分能力。我们采用一个3x3的卷积核来学习红色循环所示位置的特征表示。通过将3x3卷积核的扩张率从1增大到3,靠近头部的位置将被感知并提高其区分性。通过进一步增加扩张率(到d=6,9),一些更远的位置将感知到头部,并同样有助于分类模型发现这些区域。为了证明扩张卷积确实可以提高低响应目标区域的区分能力,我们使用CAM[46]在不同的扩张率下生成了定位图。我们可以观察到,在d=1的定位图上那些低响应的目标区域可以通过各种扩张率有效地突出显示。根据不同的扩张率产生的定位图是互补的,因此整合来自多个扩张块的结果也是必要的。

图3.多个扩张卷积块训练网络的说明。

3.2.用于定位的多扩张卷积

        受以上发现的启发,我们提出了一个增强的分类网络,使用多个扩张卷积块(MDC)来产生密集的目标定位,如图3所示。该网络基于在ImageNet上预训练的VGG16 [32]模型构建。我们移除了那些全连接层,并移除一个池化层以增加特征图的分辨率。然后,在conv5后附加具有多个扩张率(即d=ri,i=1,···,k)的卷积块,以定位由不同感受野感知到的与对象相关的区域。在全局平均池化(GAP)之后,生成的特征表示经过一个全连接层进行图像级别的分类预测。我们通过最小化sigmoid交叉熵损失来优化分类网络,然后使用分类激活映射(CAM)[46]方法为每个块生成类别特定的定位图。

        我们实现了两种卷积操作。1)我们应用标准的卷积核,即d=1。在这种情况下,我们可以获得准确的定位图,其中目标对象的一些具有区分性的部分被突出显示,但是很多与对象相关的区域被漏掉了。2)为了将稀疏突出显示区域的区分性知识转移到其他对象区域,我们改变扩张率以扩大卷积核的感受野。通过这种方式,相邻突出显示区域的区分性特征可以传递到尚未被发现的与对象相关的区域。我们观察到,具有较大扩张率的卷积块会引入一些无关的区域,即通过利用相邻具有区分性的对象部分突出显示的一些真负区域。因此,我们在这项工作中提出使用小的扩张率(即d=3,6,9)。

        然而,即使我们采用小的扩张率,仍然可能会识别出一些无关的区域。为了解决这个问题,我们提出了一个简单的抗噪声融合策略,用于抑制与对象无关的区域,并将生成的定位图融合成一个整体的定位图,其中对象区域被清晰地突出显示。我们注意到,真正的正面与对象相关的区域通常可以通过两个或更多的定位图区分,而真负区域在不同的扩张情况下表现出多样性。为了减少错误区域,我们对由不同扩张卷积块(d=3,6,9)生成的定位图进行平均操作。然后,将平均图添加到标准卷积块(d=1)的定位图中,以生成最终的定位图。通过这种方式,标准卷积块挖掘的准确区域不会被漏掉。形式上,我们使用H0和Hi(i=1···nd,nd为扩张卷积块的数量)来表示标准和扩张卷积块生成的定位图。用于生成对象区域的最终定位图H由H = H0 + n1d n i=1 d Hi产生。

        基于H,像素值大于预定义阈值δ的像素被视为支持对象相关区域的前景。此外,还需要背景定位线索来训练分割网络。受到[14,33,34]的启发,我们利用显著性检测方法[37]生成训练图像的显著性图,并将显著性值较低的像素视为背景。我们遵循[33]中详细介绍的相同策略来合并突出显示的对象区域和背景线索。最后,我们能够获得每个训练图像的预测分割掩码,用于学习分割。

 图4.我们提出的弱监督或半监督方式下训练语义分割的细节。具体而言,(a)是从密集定位图推断出的分割掩码;(b)是在线预测的分割掩码;(c)是人工标注的分割掩码。

3.3.弱监督和半监督语义分割学习

        我们使用所提出的方法生成的密集定位图来训练弱监督和半监督的分割模型。

3.3.1.弱监督学习

        对于弱监督应用,我们采用类似于[21,33]中提出的框架,利用推断的分割掩码中被忽略的像素,并对错误标注的像素具有鲁棒性,如图4上部所示。具体而言,我们以在线方式提取与真实图像级标签对应的置信度图,用于推断分割掩码,这与从密集定位图中得到的分割掩码一起作为监督信息。

        我们更正式地解释这个过程。设Iw是弱监督训练集Iw中的一张图像。对于任意的Iw ∈ Iw,Mw是由密集定位图生成的相应的伪分割掩码,C是标签集,其中包括背景类别。我们的目标是训练一个具有可学习参数θ的分割模型(例如FCN),表示为f(Iw;θ)。FCN模型建模了类别特定置信度图fu,c(Iw;θ)在任意位置u处的任意标签c ∈ C的条件概率。用Mˆw表示Iw的在线预测分割掩码,它与Mw一起用于监督。优化弱监督FCN的损失函数定义如下:

3.3.2.半监督学习

        除了大量带有图像级标注的图像外,我们还对利用少量图像的像素级标注进一步提高分割性能的半监督学习设置感兴趣。如图4底部所示,通过共享参数,可以将强标注和弱标注的图像结合起来学习分割网络。设Is为强监督训练集Is中的一张图像,Ms是由人工标注的相应分割掩码。用于优化半监督FCN的损失函数可以定义为:

4.实验

4.1.数据集和设置

数据集和评价指标:我们在PASCAL VOC 2012分割基准数据集[5]上评估了我们提出的方法。该数据集中注释了一个背景类别和20个物体类别。按照常规做法[1,6,33],通过数据增强将训练图像数量增加到10,582张。验证集和测试集分别包括1,449张和1,456张图像。我们以在21个类别上平均像素mIoU作为性能评价指标。在所有实验中,只使用图像级标签作为监督,并对验证集进行详细分析。我们将我们的方法与其他最先进的方法在验证集和测试集上进行了比较。测试集上的结果是通过将预测结果提交给官方PASCAL VOC评估服务器获得的。

训练/测试设置:我们采用了在ImageNet [4]上预训练的VGG16 [32]的卷积层来初始化分类网络,除了新增加的卷积块。对于分割网络,我们选择了[1]中的DeepLab-CRF-LargeFOV模型作为基础网络,其参数也是由VGG16进行初始化的。我们采用每批30张图像的小批量大小。从图像中随机裁剪出大小为321×321像素的补丁,用于训练分类和分割网络。我们训练模型15个epochs。初始学习率设置为0.001,在第6个epoch后降低10倍。所有实验都在NVIDIA TITAN X PASCAL GPU上进行。我们使用基于公开可用的Caffe框架[10]实现的DeepLab [1]代码。为了基于密集定位图获取与对象相关的区域,我们选择属于前30%最大值的唯一像素作为对象区域。利用[37]生成的显著图提供背景线索。根据[33]的设置,我们将标准化显著值小于0.06的像素设置为背景。所有冲突和未分配的像素在训练中被忽略。

4.2.与当下方法的对比

4.2.1弱监督语义分割

        对于弱监督语义分割,我们主要比较使用粗糙的像素级注释(包括涂鸦、边界框和斑点)和图像级注释作为监督信息的方法。表1显示了在PASCAL VOC验证集和测试集上的比较结果。需要注意的是,一些方法利用更多的图像进行训练,例如MIL-*[24](700K)、TransferNet [7](70K)、STC [34](50K)和Hong等人[8](970K)。此外,由于使用了MCG [25]提案,一些方法(如SN B [35]和AF-MCG [26])隐式地使用了像素级监督。

        从表1可以看出,从我们生成的密集定位图推断出的分割掩码对于学习分割网络非常可靠,优于所有使用图像级标签作为弱监督的其他方法。我们注意到,Hong等人[8]在这个具有挑战性的任务上取得了最先进的性能。然而,改进主要受益于使用额外的视频数据进行训练。由于视频中的时间动态可以提供丰富的信息,因此从视频中区分整个对象区域比从静态图像中更容易。值得注意的是,我们只使用了1万张图像来训练模型,在验证集上的性能比Hong等人[8]提高了2.3%。这充分证明了所提方法在生成高质量密集对象定位图方面的有效性。AE-PSL需要进行多个对抗性擦除步骤来挖掘与对象相关的区域,这需要训练多个不同的分类模型来进行对象定位。所提出的方法只需要训练一个单一的分类模型来定位对象区域,并且在mIoU得分上比AE-PSL表现更好。与AF-MCG [26]相比,我们的方法不需要大量的提案,因此在生成提案和训练上更高效。在没有任何像素级监督的情况下,我们的弱监督结果进一步接近基于涂鸦和基于边界框的方法,并且比基于斑点的方法表现更好,提高了超过8.8%。我们在PASCAL VOC测试集上进行了额外的比较。我们的方法在这个竞争性的基准上达到了最新的最先进水平,并且在mIoU得分上超过其他方法超过2.1%。

表1。PASCAL VOC 2012验证集和测试集上弱监督语义分割方法的比较。

表2。PASCAL VOC 2012验证集和测试集上半监督语义分割方法的比较。

4.2.2.半监督语义分割

        对于半监督语义分割,我们主要与WSSL [21]进行比较,其弱监督注释是图像级标签。为了进一步验证密集定位图的质量,我们还与可以访问边界框进行监督的方法进行了比较。我们采用了与这些基线方法相同的强监督/弱监督划分,即1.4K个强标注图像和9K个弱标注图像。

        从表2可以看出,在相同的设置下,我们的方法取得了比WSSL更好的结果,即在验证集上分别为65.7%对64.6%,在测试集上为67.6%对66.2%。此外,我们还与其他使用对象边界框作为弱监督信息而不是图像级标签的方法进行了比较。尽管我们的方法使用了更弱的监督,但在验证集和测试集上仍分别取得了具有竞争力和更好的mIoU得分。

4.3.消融分析

        然后,我们分析了所提出的密集对象定位方法的有效性,以及它如何对弱监督和半监督语义分割都带来了好处。

4.3.1.密集目标定位策略

        采用的用于对象定位的分类网络使用带有多个膨胀率的卷积块进行增强。来自不同膨胀块的与对象相关的线索可以集成到密集和完整的对象区域中。为了验证这一点,图5中可视化了来自不同卷积块和融合结果的定位图样本。我们观察到,块(d = 1)能够以高精度但低召回率定位对象(目标对象的大部分区域被忽略)。通过利用具有较大膨胀率(d = 3,6,9)的其他块,一些其他与对象相关的区域也被突出显示,例如第一行中右侧猫的身体(d = 6)和第二行中摩托车的一些部分(d = 3和d = 6)。然而,我们注意到,如果采用较大的膨胀率(例如,与d = 6和d = 9对应的那些定位图),也会突出显示一些真负区域。例如,我们可以观察到地图中的中心区域(第5行,第6列)对于狗这一类别具有区分能力。原因是当进行中心像素的卷积操作时,扩大的卷积核感知到周围两只狗的上下文,从而提高了产生的卷积特征的区分能力。

        可以观察到,真正的正面对象相关区域通常由两个或更多的定位图共享,而误报的区域则根据膨胀率而异。为了防止虚假的对象相关区域被突出显示,我们对这些具有较大膨胀率的定位图进行平均操作。然后,我们将得到的定位图与d = 1块产生的定位图相加,生成最终结果。从图5可以看出,即使对于一些具有挑战性的情况,如多类别和多实例,大多数对象的区域仍在最终融合的定位图中得到了突出显示。

        此外,我们方法值得强调的一个优点是,我们可以根据生成的密集定位图使用一个固定的阈值来准确获取大部分对象区域,而不受对象尺度的影响。然而,对于没有扩大膨胀率(即d = 1)的定位图,使用固定阈值准确提取对象区域非常困难,如图1(b)和图5所示。特别是,对于大型对象,我们需要一个较小的阈值来发现大多数与对象相关的区域。然而,对于小型对象,阈值需要较大,以防止出现真负区域。

        我们在图5的底部一行展示了一个失败案例。这个样本具有以下特点,即当d = 1时,对象具有较大的尺度,而区分性区域只在目标对象的一端稀疏地突出显示。在这种情况下,使用较小的膨胀率将区分性知识从头部传输到尾部是困难的。我们相信一些技术,如[33]中提出的对抗擦除技术,可能有助于解决这个问题。

4.3.2.弱监督语义分割

        表3显示了使用不同定位图生成的分割掩模作为学习分割网络的监督的比较结果。我们观察到,通过扩大卷积核的膨胀率,性能逐渐提高(从50.3%提高到54.4%),这进一步验证了使用扩张卷积块进行对象定位的有效性。此外,基于所提出的抗噪声融合策略生成的密集定位图,mIoU分数进一步提高到57.1%,这进一步证明了这种策略用于突出显示对象和去除噪声的有效性。需要注意的是,我们还尝试通过对所有卷积块(包括d = 1)的定位图进行平均来生成密集定位图。与使用当前融合策略相比,mIoU分数下降了近1%。此外,与使用一个膨胀率相同的四个卷积块(例如d = 1)相比,mIoU没有显著改善。由于条件随机场(CRF)被认为是语义分割的标准后处理操作,并且被所有先前的工作用于进一步提高性能,因此我们系统地使用CRF来优化预测的掩模,以便与其他最新技术进行公平比较。我们可以观察到,我们的方法最终在验证集和测试集上分别达到了60.4%和60.8%的mIoU分数,并超过了所有其他弱监督方法。

图5.不同膨胀块产生的定位图示例,以及具有抗噪声融合策略的密集定位图。底部两行显示了两个失败案例。

表3.在PASCAL VOC 2012数据集上使用不同定位图的mIoU得分比较。

4.3.3.半监督语义分割

        表4显示了在半监督方式下使用不同的强/弱标注集进行分割网络学习的结果。我们观察到,通过将强标注图像的数量从1.4K减少到500,性能仅下降了0.9%,这表明我们的方法即使在数量较少的强标注图像下也能轻松获得可靠的分割结果。基于生成的密集定位图,在CRF后处理的情况下,我们在验证集和测试集上取得了新的最佳结果(基于1.4K强标注图像)。我们还在另一种设置下进行评估,使用2.9K强标注图像进行训练。我们可以看到相应的mIoU得分为68.5%,与[21]中报告的结果相同。由于[21]和本文都基于相同的基本分割网络,当强标注图像的数量超过一定阈值时,性能可能会达到饱和状态。我们在图6中可视化了一些预测的分割掩模,显示出我们的方法可以在较少甚至没有强标注图像的情况下实现令人满意的分割结果。

表4.在PASCAL VOC 2012数据集上,使用不同的强/弱标注集进行的mIoU得分比较。

图6.我们的方法在弱监督和半监督方式下预测的分割掩模示例。

5.总结

        我们重新审视了膨胀卷积,并提出利用不同膨胀率的多个卷积块生成密集的目标定位图。我们的方法易于实现,并且生成的密集定位图可以用于在弱监督或半监督方式下学习语义分割网络。我们在这两个具有挑战性的任务上取得了新的最佳mIoU得分。这项工作为仅使用分类网络来挖掘密集目标区域铺平了一条简单而全新的道路。如何通过将判别区域从一端扩展到另一端来解决失败案例,并在大规模数据集(如MS COCO [18]和ImageNet [4])上进行实验,将成为我们未来的工作。

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

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

相关文章

【云原生】Docker容器资源限制(CPU/内存/磁盘)

目录 ​编辑 1.限制容器对内存的使用 2.限制容器对CPU的使用 3.block IO权重 4.实现容器的底层技术 1.cgroup 1.查看容器的ID 2.在文件中查找 2.namespace 1.Mount 2.UTS 3.IPC 4.PID 5.Network 6.User 1.限制容器对内存的使用 ⼀个 docker host 上会运⾏若⼲容…

【Python入门系列】第十八篇:Python自然语言处理和文本挖掘

文章目录 前言一、Python常用的NLP和文本挖掘库二、Python自然语言处理和文本挖掘1、文本预处理和词频统计2、文本分类3、命名实体识别4、情感分析5、词性标注6、文本相似度计算 总结 前言 Python自然语言处理(Natural Language Processing,简称NLP&…

PLC学习的步骤与重点:

熟悉基础元器件的原理和使用方法:了解按钮、断路器、继电器、接触器、24V开关电源等基础元器件的原理和使用方法,并能够应用它们来实现简单的逻辑电路,例如电机的正反转和单按钮的启停控制。 掌握PLC的接线方法:了解PLC的输入输出…

【微服务架构设计】微服务不是魔术:处理超时

微服务很重要。它们可以为我们的架构和团队带来一些相当大的胜利,但微服务也有很多成本。随着微服务、无服务器和其他分布式系统架构在行业中变得更加普遍,我们将它们的问题和解决它们的策略内化是至关重要的。在本文中,我们将研究网络边界可…

element-ui form表单的动态rules校验

在vue 项目中,有时候可能会用到element-ui form表单的动态rules校验,比如说选择了哪个选项,然后动态显示或者禁用等等。 我们可以巧妙的运用element-ui form表单里面form-item想的校验规则来处理(每一个form-item项都可以单独校验…

uiautomatorViewer无法获取Android8.0手机屏幕截图的解决方案

问题描述: 做APP UI自动化的时候,会碰到用uiautomatorViewer在Android 8.0及以上版本的手机上,无法获取到手机屏幕截图,无法获取元素定位信息的问题,会有以下的报 在低版本的Android手机上,则没有这个问题…

数字化新时代,VR全景拍摄与制作

导语: 随着科技的飞速发展,数字化图片正在引领新的时代潮流。在这个数字化图片的新时代,VR全景拍摄与制作技术正以其独特的特点和无限的优势,成为数字影像领域的一颗璀璨明星。让我们深入了解VR全景拍摄与制作的特点和优势&#…

selenium浏览器驱动下载

Chrome谷歌浏览器 下载地址:http://chromedriver.storage.googleapis.com/index.html 不同的Chrome的版本对应的chromedriver.exe 版本也不一样,下载时不要搞错了。 如果是最新的Chrome, 下载最新的chromedriver.exe 就可以了。 Firefox火狐浏览器 驱…

vue中Cascader 级联选择器实现-修改实现

vue 的cascader研究了好长时间&#xff0c;看了官网给的示例&#xff0c;上网查找了好多信息&#xff0c;才解决修改时回显的问题&#xff0c;现将方法总结如下&#xff1a; vue代码&#xff1a; <el-form-item label"芯片" prop"firmware"> <…

C++-----stack和queue

本期我们来学习stack和queue 目录 stack介绍 栈的使用 栈的模拟实现 queue介绍 队列的使用 队列的模拟实现 deque 优先级队列 模拟实现 仿函数 全部代码 stack介绍 1. stack 是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除…

3D工厂模拟仿真 FACTORY I/O 2.55 Crack

FACTORY I/O 提供超过20个典型的工业应用场景让您如身临其境般地练习控制任务。选择一种场景直接使用或以其作为一个新项目的开端。学生可以利用内嵌的可编辑的典型工业系统模板&#xff0c;也可以自由搭建并编辑工业系统。同时该系统具有全方位3D视觉漫游&#xff0c;可随意放…

在Vue-Element中引入jQuery的方法

一、在终端窗口执行安装命令 npm install jquery --save执行完后&#xff0c;npm会自动在package.json中加上jquery 二、在main.js中引入&#xff08;或者在需要使用的页面中引入即可&#xff09; import $ from jquery三、使用jquery

5、Kubernetes核心技术 - Controller控制器工作负载

目录 一、Deployments - 控制器应用 二、Deployment升级回滚和弹性收缩 2.1、创建一个 1.14 版本的 pod 2.2、应用升级 2.3、查看升级状态 2.4、查看历史版本 2.5、应用回滚 2.6、弹性伸缩 三、StatefulSet - 有状态应用 四、DaemonSet - 守护进程 五、Job - 单次任…

Centos7 安装tomcat9

去官网下载 数据包 ps: wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.78/bin/apache-tomcat-9.0.78.tar.gz检查Java环境 [tomcatlocalhost bin]$ java -version java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8.0_121-b13) Java H…

js的变量

目录 变量 var和let 1.for循环中的声明 2.暂时性死区 3.全局声明 4.条件声明 const声明 变量 java是一种强数据类型语言,对数据类型要求高&#xff0c;要声明清楚变量的类型 数据类型 变量名 值 -----> int a 10 而javaScrit是一种弱类型语言&#xff0c;在声明变…

【图像去噪】基于进化算法——自组织迁移算法(SOMA)的图像去噪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

k8s Webhook 使用java springboot实现webhook 学习总结

k8s Webhook 使用java springboot实现webhook 学习总结 大纲 基础概念准入控制器&#xff08;Admission Controllers&#xff09;ValidatingWebhookConfiguration 与 MutatingWebhookConfiguration准入检查&#xff08;AdmissionReview&#xff09;使用Springboot实现k8s-Web…

一文谈谈Git

"And if forever lasts till now Alright" 为什么要有git&#xff1f; 想象一下&#xff0c;现如今你的老师同时叫你和张三&#xff0c;各自写一份下半年的学习计划交给他。 可是你的老师是一个极其"较真"的人&#xff0c;发现你俩写的学习计划太"水&…

深度剖析APP开发中的UI/UX设计

作为一个 UI/UX设计师&#xff0c;除了要关注 UI/UX设计之外&#xff0c;还要掌握移动开发知识&#xff0c;同时在日常工作中也需要对用户体验有一定的认知&#xff0c;在本次分享中&#xff0c;笔者就针对自己在工作中积累的一些经验来进行一个总结&#xff0c;希望能够帮助到…

软件兼容性测试中需注意的关键问题

在进行软件兼容性测试时&#xff0c;有一些关键问题需要特别注意&#xff0c;以确保测试的准确性和全面性。本文将介绍一些在软件兼容性测试中需注意的关键问题&#xff0c;帮助测试人员更好地进行兼容性测试工作。 首先&#xff0c;测试范围&#xff0c;测试人员需要明确测试的…