第五章:通过对抗擦除的目标区域挖掘:一种简单的语义分割方法
0.摘要
我们研究了一种逐步挖掘具有鉴别性的物体区域的原则方法,使用分类网络来解决弱监督语义分割问题。分类网络只对感兴趣对象中的小而稀疏的鉴别性区域有响应,这与分割任务的要求相背离,分割任务需要定位密集、内部和完整的区域以进行像素级推理。为了缓解这种差距,我们提出了一种新的对抗擦除方法,逐步定位和扩展物体区域。从一个小的物体区域开始,我们的方法通过以对抗性的方式擦除当前挖掘的区域,驱动分类网络依次发现新的和补充的物体区域。这些定位的区域最终构成了用于学习语义分割的密集而完整的物体区域。为了进一步提升通过对抗擦除发现的区域的质量,我们开发了一种在线禁止分割学习方法,通过提供由更可靠的分类分数调节的辅助分割监督,与对抗擦除相协作。尽管看起来很简单,但是提出的方法在PASCAL VOC 2012验证集和测试集上分别达到了55.0%和55.7%的平均交并比(mIoU)得分,成为了新的最先进方法。
1.引言
深度神经网络(DNNs)在语义分割任务上取得了显著的成功[2,13,15,33],可以说这要归功于可用的像素级注释掩码资源。然而,为了在新的图像集上训练语义分割网络,收集大量精确的像素级注释是一项劳动密集型工作,不可避免地需要大量的财务投入。为了减轻对昂贵的像素级图像注释的需求,弱监督方法[10,12,14,16–20,22–24,28,29]提供了一些有希望的解决方案。
在各种程度的弱监督信息中,可以用于训练语义分割模型的最简单和最有效的是图像级注释[30,32]。然而,仅凭这样的图像级注释训练一个性能良好的语义分割模型是相当具有挑战性的——一个障碍是如何准确地将图像级标签分配给相应的训练图像像素,以使基于DNN的方法能够学习端到端地进行图像分割。为了建立所需的标签-像素对应关系,一些方法被开发出来,可以分为基于提议和基于分类的方法。基于提议的方法[20,28]经常详尽地检查每个提议以生成像素级的掩码,这非常耗时。相比之下,基于分类的方法[10,16–19,24]提供了更高效的替代方案。这些方法利用分类模型选择最具鉴别性的区域作为像素级语义分割学习的监督。然而,对象分类模型通常只能识别和依赖于对象中一个小而稀疏的鉴别性区域(如图1(a)中分类网络生成的热图所示)。这与分割任务需要定位密集、内部和完整的区域以进行像素级推理的要求背离。这种偏离是适应分类模型解决分割问题的主要障碍,并且会影响到分割结果。为了解决这个问题,我们提出了一种新的对抗擦除(AE)方法,能够逐步驱动分类网络学习完整的对象区域。AE方法可以看作是建立了一系列竞争者,试图挑战分类网络,直到没有可支持的证据为止,发现某个特定类别的证据。
具体而言,我们首先使用图像级的弱监督信息,即对象类别注释,训练一个图像分类网络。该分类网络用于定位图像中最具区分性的区域,以推断对象的类别。然后,我们从图像中擦除发现的区域,以破坏分类网络的性能。为了弥补性能下降,分类网络需要定位另一个区分性区域,以正确分类图像。通过这种重复的对抗擦除操作,分类网络能够挖掘出属于感兴趣对象的其他区分性区域。这个过程在图1(a)的示例中进行了说明,其中头部是分类"dog"图像最具区分性的部分。擦除头部并重新训练分类网络后,另一个具有区分性的部位身体会出现。重复这样的对抗擦除可以定位出越来越具有诊断图像类别的区域,直到没有更多的信息区域为止。最后,擦除的区域被合并形成像素级的语义分割掩码,可用于训练分割模型。图1(b)中展示了更多的可视化示例。
然而,AE方法可能会错过一些与对象相关的区域,并且由于对边界的注意力较少,可能会引入一些噪声。为了利用这些被忽视的与对象相关的区域,并减轻噪声,我们进一步提出了一种补充的在线禁止分割学习(PSL)方法,与AE一起工作,以发现更完整的对象区域并学习更好的语义分割模型。 具体而言,PSL利用预测的图像级分类置信度来调节相应的类别特定响应图,并将其形成辅助分割掩码,该掩码可以以在线方式更新。那些具有低分类置信度的类别特定分割图被禁止对形成的监督掩码做出贡献,因此可以有效减少噪声。 总之,我们的主要贡献有三个:
• 我们提出了一种新的AE方法,可以有效地使图像分类网络不断挖掘和扩展目标对象区域,并最终生成可用于训练分割模型的连续对象分割掩码。
• 我们提出了一种在线PSL方法,利用图像级分类置信度来减少监督掩码内的噪声,并实现分割网络的更好训练,与AE协作。
• 我们的工作在PASCAL VOC分割基准的验证集和测试集上分别达到了55.0%和55.7%的mIoU值,这是新的最先进水平。
图1.(a)所示为提出的AE方法的示意图。使用AE方法,一个分类网络首先挖掘出对于图像类别标签"dog"最具区分性的区域。然后,AE擦除该挖掘到的区域(头部)并重新训练分类网络,以发现一个新的目标区域(身体)进行分类,而不会导致性能下降。我们重复这样的对抗擦除过程多次,并将擦除的区域合并成一个完整的前景分割掩码。
(b)显示了AE在不同步骤中挖掘的具有区分性的对象区域的示例,以及最终得到的前景分割掩码。
2.相关工作
为了减少像素级注释的负担,已经提出了各种弱监督方法来使用更粗糙的注释进行语义分割的学习。例如,Papandreou等人[16]和Dai等人[3]提出使用标注的边界框来估计分割。最近,Lin等人[12]使用涂鸦作为语义分割的监督。在[22]中,所需的监督信息进一步放宽为实例点。所有这些注释都可以被认为比像素级注释要简单得多。
一些研究[16-19,27,31]提出了只使用图像级标签来训练分割模型的方法,这是训练语义分割模型最简单的监督方式。在这些方法中,Pinheiro等人[19]和Pathak等人[18]提出利用多实例学习(MIL)来训练分割模型。Pathak等人[17]引入了一种约束的卷积神经网络模型来解决这个问题。Papandreou等人[16]采用基于期望最大化算法的替代训练过程,动态预测语义前景和背景像素。然而,这些方法的性能并不令人满意。最近,一些新的方法[10,20,23,24,28,29]被提出来进一步改善这个具有挑战性的任务的性能。特别地,Wei等人[29]提出了一种从简单到复杂的学习方法,其中使用显著性图作为监督,在简单图像上训练初始分割模型,然后逐渐引入越来越复杂的样本,以进一步增强分割模型的能力。在[10]中,提出了三种损失函数,即种子、扩展和约束边界,将它们集成到统一的框架中来训练分割网络。[10]和我们的工作都提出了根据分类网络定位对象线索的方法。然而,Kolesnikov等人[10]只能获得小而稀疏的与对象相关的种子用于监督。相比之下,我们提出的AE方法能够挖掘密集的与对象相关的区域,为学习语义分割提供更丰富的监督信息。此外,Qi等人[20]提出了一种增强反馈方法,使用GrabCut [21]和对象提议来生成像素级注释,以进行监督。据我们所知,Qi等人[20]在PASCAL VOC基准测试中使用了Selective Search [26](52.7%)和MCG [1](55.5%)分割提议,取得了最先进的mIoU分数。然而需要注意的是,MCG是使用PASCAL训练图像的像素级注释进行训练的,因此[20]的结果本质上是使用更强的监督获得的。
图2.提出的对抗擦除方法的概述。在第t步,我们首先使用当前处理的图像It训练分类网络,然后使用分类激活方法(例如CAM [34])生成类别特定的响应热图(Ht)。对热图Ht进行硬阈值处理可以得到具有区分性的区域Ft。然后,我们从It中擦除Ft并生成It+1。接着,将这个图像输入分类网络,学习定位一个新的具有区分性的区域。底部显示了学习到的热图和相应进行擦除的训练图像。多个步骤中挖掘到的区域共同构成了预测的对象区域作为输出,用于后续训练分割网络。
3.从分类到语义分割
所提出的分类到语义分割的方法包括两个新颖的组成部分,即基于AE的对象区域挖掘和在线PSL用于语义分割。
3.1.使用AE的目标区域挖掘
为了解决分类网络只对小而稀疏的区域具有响应的问题,我们提出了AE方法逐步定位和扩展对象区域。如图2所示,AE方法分为两个操作:学习分类网络以定位对象区域和对发现的区域进行对抗擦除。具体而言,分类网络是基于DeepLab-CRF-LargeFOV [2]模型进行初始化的。在conv7上应用全局平均池化,并通过全连接层生成表示用于预测分类。在第一个操作中,我们通过最小化平方标签预测损失来训练分类网络,这是根据[30]的建议。在第二个擦除操作中,我们使用分类激活映射(CAM)方法[34]为每个图像级标签生成热图。然后,通过对热图应用硬阈值,获得具有区分性的对象区域。我们通过用所有训练图像的均值像素值替换其内部像素来从训练图像中擦除挖掘到的区域。经过擦除的处理图像随后被送入下一个分类学习迭代中。
由于区分性区域已被移除,不再对分类预测有贡献,分类网络自然地被驱使去发现新的对象区别性区域以维持其分类准确性水平。我们重复进行分类学习和AE过程多次,直到网络无法在生成的训练图像上很好地收敛,即没有更多的区分性区域可用于进行合理的分类。
现在我们更正式地解释AE过程。假设训练集I = {(Ii, Oi)}Ni=1包含N个图像,F = {Fi}Ni=1表示AE挖掘出的对象区域。我们使用分类模型Mt在第t个学习步骤中对每个训练图像Ii,t生成对象区域Fi,t。记C为对象类别集合,CAM(·)表示热图生成操作。因此,对于Ii,t的第c个热图Hi,t c,其中c ∈ Oi且Oi ⊆ C是Ii,t的图像级标签集合,可以根据CAM(Ii,t, Mt, c)获得。为了使分类网络从Ii,t中扩展对象区域,我们擦除H c i H c i,t上值大于δ的像素。然后,通过Algorithm 1中总结的过程获得F。
除了挖掘前景对象区域外,找到背景定位线索对于训练分割网络也至关重要。受[10,29]的启发,我们使用显著性检测技术[9]生成训练图像的显著性图。基于生成的显著性图,选择像素具有低显著性值的区域作为背景。假设Bi表示Ii的选定的背景区域。我们可以获得分割掩码S = {Si}Ni=1,其中Si = Fi ∪ Bi。在生成S时,我们忽略三种像素:
1)不同类别之间冲突的被擦除的前景区域;
2)位于AE识别的对象区域内部的低显著性像素;
3)未被分配语义标签的像素。
图3(a)展示了一种分割掩码生成过程的示例。“黑色”和“紫色”区域分别指背景和对象。
3.2.用于语义分割的在线PSL
所提出的AE方法为每个训练图像提供了初始的分割掩码,可以用于训练分割网络。然而,一些与对象相关或背景相关的像素可能会被遗漏(如图3(a)中AE输出中的“蓝色”像素)。此外,由于AE在捕捉边界细节方面的限制,一些标记像素的语义标签可能存在噪声。为了利用AE未标记的像素进行训练,并对错误标记的像素具有鲁棒性,我们提出了一种在线禁止分割学习(PSL)方法,以进一步学习在AE提供的掩码上执行语义分割。在线PSL利用图像分类结果来识别可靠的类别特定分割图,并将它们形成一个噪声较小的辅助监督图,为AE输出提供辅助信息。PSL以在线方式更新生成的辅助分割图,同时训练分割网络,并产生越来越可靠的辅助监督。如图3(b)所示,提出的PSL构建了一个框架,包括一个用于分类的分支和一个用于语义分割的分支。特别地,PSL使用平方损失作为分类分支的优化目标,其生成的分类置信度被PSL用于加权对应的类别特定分割得分图。借助分类结果,在线PSL能够将多类别分割图集成到辅助分割掩码中,并提供额外的监督信息。通过PSL,与低分类置信度的类别相对应的分割图被禁止对辅助分割图做出贡献。因此,可以有效减轻来自不相关类别的噪声。
形式上,将分割任务的语义标签集合表示为Cseg,给定图像I的图像特定标签集合表示为Oseg,其中包括背景类别。在每个训练时期,将分类分支的图像级预测表示为v。假设S是AE生成的分割掩码。在线PSL利用Cseg上的图像预测来训练由θ参数化的分割网络f(I;θ),该网络在图像平面的每个位置u预测每个标签c ∈ Cseg的像素级概率fu,c(I,θ)。为了生成用于训练分割网络的附加分割掩码Sˆ,PSL使用v来加权前景类别的分割得分图,如图3(b)所示。通过这种禁止操作,可以通过乘以一个小的分类类别得分来抑制负分数图中的大响应值。同时,主导类别(即占据图像大面积的相应对象)的得分图也可以增强。将加权操作符表示为⊗,然后通过以下方式生成Sˆ:
通过在线训练,网络的分割能力逐渐提高,可以产生越来越准确的Sˆ,用于监督后续的训练过程。在测试过程中,对于那些具有低分类置信度的类别,我们采用更严格的禁止策略。具体来说,我们将那些小于p的分类置信度设为零,保持其他不变,并将它们应用于加权预测的分割得分图,从而产生最终的分割结果。
图3.(a)分割掩码生成的过程。
(b)提出的用于语义分割的在线PSL方法。
分类得分用于在线加权“分割得分图”,产生“加权图”。那些具有低分类置信度的类别被禁止产生分割掩码。然后,挖掘得到的掩码和在线生成的掩码都用于优化网络。
4.实验
4.1.数据集和实验设置
数据集和评估指标 我们在PASCAL VOC 2012分割基准数据集[5]上评估我们提出的方法,该数据集有20个目标类别和一个背景类别。该数据集被分为三个子集:训练集(train,1,464张图像)、验证集(val,1,449张图像)和测试集(test,1,456张图像)。按照常见的做法[2,6,19],我们通过图像增强将训练图像数量增加到10,582张。在我们的实验中,只使用图像级别标签进行训练。性能以在21个类别上平均的像素IoU进行评估。我们在val集上将我们的方法与其他最先进的方法进行比较。在val和test集上的结果是通过将预测结果提交到官方的PASCAL VOC评估服务器获得的。
训练/测试设置 我们采用来自[2]的DeepLab-CRF LargeFOV作为AE和PSL中的分类网络和分割网络的基本网络,其参数由在ImageNet[4]上预训练的VGG-16[25]进行初始化。我们使用一个小批量大小为30张图像,从图像中随机裁剪出大小为321×321像素的补丁来训练网络。在这个阶段,我们遵循[2]中的训练过程。初始学习率为0.001(最后一层为0.01),经过6个时期后降低10倍。训练在15个时期后终止。两个网络都在具有12GB内存的NVIDIA GeForce TITAN X GPU上进行训练。在我们的实验中,我们使用了基于公开可用的Caffe框架[8]实现的DeepLab代码[2]。
在AE的每个步骤中,根据热图中最大值的前20%的像素(这是根据[10,34]建议的比例),将其擦除,并将其视为前景对象区域。我们使用[9]中的显著图来产生背景定位线索。对于属于室内场景(例如沙发或桌子)的图像,我们采用归一化的显著值0.06作为阈值来获取背景定位线索(即显著值小于0.06的像素被视为背景),以防一些对象被错误地归类为背景。对于其他类别的图像,阈值设置为0.12。在语义分割的测试阶段,禁止阈值p经验性地设置为0.1,并使用CRF [11]进行后处理。
4.2.与当下主流方法的对比
我们与使用不同级别注释的最先进的弱监督语义分割解决方案进行了广泛的比较,包括涂鸦、边界框、斑点和图像级别标签。这些方法以及我们在PASCAL VOC验证集上的结果总结在表1中。在基线方法中,MIL-*[19]、STC [29]和TransferNet [7]使用了更多的图像(分别为700K、50K和70K)进行训练。所有其他方法都基于10K个训练图像,并建立在VGG16 [25]模型的基础上。
从结果可以看出,我们提出的方法在使用图像级别标签和点注释进行弱监督时优于所有其他方法。特别是,在仅使用图像级别标签的基线方法中,AF-MCG [20]取得了第二好的性能。然而,MCG生成器是在PASCAL VOC上以全监督的方式训练的,因此相应的结果,即AF MCG [20],隐含地利用了更强的监督。
因此,使用选择性搜索段,AF-SS [20]的性能下降了1.7%。此外,AF-*[20]还使用GrabCut [21]来对分割掩码进行细化,这通常在训练过程中耗时较长。相比之下,所提出的AE方法非常简单方便,用于目标区域挖掘。此外,在线PSL对于训练语义分割网络也是有效且高效的。与使用图像级别标签进行监督的方法相比,所提出的AE-PSL在最佳性能上提升了2.4%以上。此外,我们的方法在超过0.7%的像素级监督下也优于那些隐式使用的方法。在PASCAL VOC测试中,这些方法的额外比较结果如表2所示。可以看出,我们的方法在竞争性基准测试中实现了这一具有挑战性任务的最新技术水平。
图4显示了一些成功的分割结果,表明我们的方法即使对于一些复杂的图像也能产生准确的结果。图4底部一行给出了一个典型的失败案例。这种情况可能可以通过使用低级视觉特征(例如颜色和纹理)来改进和扩展擦除区域来解决。
表1.在VOC 2012验证集上对弱监督语义分割方法的比较。
表2.在VOC 2012测试集上对弱监督语义分割方法的比较。
图4.在VOC 2012验证集上的定性分割结果。最后一行显示了一个失败案例。
4.3.消融分析
4.3.1.使用AE的目标区域挖掘
使用AE方法,辨别性的物体区域被逐步对抗性地擦除。因此,预计在训练的收敛点处,通过不同AE步骤进行的分类网络的损失值将随着更多辨别性区域的缺失而逐渐增加。图5(a)显示了不同AE步骤下分类训练损失曲线的比较。可以观察到,原始图像训练收敛时的损失值约为0.05。通过进行多个AE步骤,收敛的损失值略微增加(AE-step2:∼0.08,AE-step3:∼0.1),与AE-step1相比。这表明AE移除了具有下降辨别能力的区域。继续进行更多步骤的AE以移除更多区域时,分类网络收敛到一个训练损失值约为0.15的网络。这表明没有更多有用的区域可用于获得良好的分类网络,因为过度擦除引入了许多真负区域到挖掘的前景对象区域中,阻碍了分割的学习。图5(b)展示了过度擦除导致的一些失败案例。在大多数物体区域从训练图像中被移除的情况下,分类网络必须依赖于一些上下文区域来识别类别。这些区域是真负区域,对分割网络的训练有害。为了防止负面区域的污染,我们只将从前三个步骤中挖掘出的具有辨别性的区域集成到最终的分割掩码中。
为了定量理解每个AE步骤的贡献,表3显示了基于DeepLab-CRF-LargeFOV的分割网络训练中合并自不同k(k = 1,2,3,4)AE步骤的前景区域的mIoU分数的比较。我们可以观察到,随着添加更多前景对象区域,性能确实会提高,因为分割网络获得了更密集的监督。然而,在进行了四个AE步骤之后,由于如上所述的过度擦除,性能下降了2.1%。图6展示了一些可视化示例,包括训练图像(顶部一行),不同AE步骤生成的热图和最终擦除的区域(底部一行)。我们可以观察到,AE方法有效地驱使分类网络定位不同的辨别性物体区域。例如,最后一列中显示的“cow”的最右侧实例的身体覆盖区域首先被定位。通过擦除这个实例,左侧的另外两个实例被发现。我们还在VOC 2012测试集上使用从前三个AE步骤合并的物体区域进行了实验。mIoU得分为52.8%,优于仅使用图像级标签进行监督的所有方法(如表2所示)。
表3.在VOC 2012验证集上使用来自不同AE步骤的物体区域的分割mIoU得分的比较。
图5.(a)不同AE步骤下分类网络对不同训练时期数的损失曲线。(b)使用四个AE步骤过度擦除样本的失败案例。
4.3.2.用于语义分割的在线PSL
我们现在进行在线PSL的评估,并研究它如何通过发现辅助信息来改进AE方法。我们在表4中报告了在线PSL的性能,其中“w/o PSL”和“w/PSL”分别表示原始的DeepLab-CRF-LargeFOV和提出的用于训练的PSL方法的结果。我们可以观察到,与“w/o PSL”相比,“w/PSL”提高了3.2%的性能,证明了PSL提供了额外有用的分割监督的显著有效性。
另外,我们对PSL进行了一次迭代训练步骤,以改善分割结果。具体而言,我们首先使用来自AE和PSL的训练分割模型对训练图像进行分割。然后,预测的分割掩码用作训练分割网络的监督,进行另一轮训练。如表4所示,通过这一额外的训练(表示为w/PSL++),性能进一步从54.1%提高到55.0%。这一改进得益于对训练图像的预测分割掩码进行CRF操作。在CRF结果上进行一轮训练后,分割网络已经得到了很好的训练。我们没有观察到进一步的性能提升,因为没有提供新的监督信息。
此外,我们还检验了我们的测试策略的有效性,其中禁止阈值被经验地设为0.1。我们利用地面真实的图像级标签作为分类置信度,对预测的分割得分图进行加权(请注意,这与训练阶段的禁止信息不同)。结果为56.1%(“w/PSL +GT”),比“w/PSL ++”仅好1.1%。需要注意的是,“w/PSL +GT”实际上提供了可实现性能的上限,因为分数图是通过地面真实的类别注释进行过滤的,“w/PSL ++”非常接近这个上限。
PSL采用分类网络的即时输出来重新加权分割得分图。另一种选择是使用地面真实注释作为分类信息。我们还考虑在训练阶段使用地面真实图像级标签进行禁止,并评估性能。然而,与我们提出的PSL设计相比,使用地面真实信息会导致性能下降0.6%。这是因为PSL有效地利用了有关物体尺度的信息,有助于生成更准确的分割掩码(即,相比小物体的分类分数,大物体的类别更受偏爱)。简单地使用0-1的地面真实注释忽略了尺度,并且表现更差。我们还研究了在不使用图像级分类置信度的情况下PSL的性能表现,并发现性能下降了1%。这清楚地证明了所提出的使用图像级分类信息的在线PSL方法的有效性。
表4.在VOC 2012验证集上,根据不同的训练策略进行的分割mIoU得分比较。
图6.所提出的对抗擦除方法产生的挖掘对象区域示例。第二至第四行显示了生成的热图,其中突出显示了有辨识力的区域。擦除区域的图像以灰色显示在最后一行。
5.总结
我们提出了一种对抗性擦除方法,可以有效地使分类网络逐步发现和扩展物体辨识区域。发现的区域被用作像素级监督来训练分割网络。这种方法为弱监督分割问题提供了一种简单而有效的解决方案。此外,我们提出了一种在线禁止分割学习方法,该方法对于挖掘辅助信息对自动编码器(AE)非常有效。实际上,PSL方法可以帮助任何其他弱监督方法。本研究为实现弱监督语义分割的对抗性擦除开辟了新的方向。在未来,我们计划开发更有效的策略来改进对抗性擦除,例如使用自适应步骤对每个训练图像进行擦除,或者将对抗性擦除和PSL集成到更统一的框架中。
相关文章:

第五章:通过对抗擦除的目标区域挖掘:一种简单的语义分割方法
0.摘要 我们研究了一种逐步挖掘具有鉴别性的物体区域的原则方法,使用分类网络来解决弱监督语义分割问题。分类网络只对感兴趣对象中的小而稀疏的鉴别性区域有响应,这与分割任务的要求相背离,分割任务需要定位密集、内部和完整的区域以进行像素…...

自定义view - 玩转字体变色
自定义View步骤: 1>:values__attrs.xml,定义自定义属性; 2>:在第三个构造方法中获取自定义属性; 3>:onMeasure【不是必须的】; 4>:onDraw:绘制代…...

工业边缘网关HiWoo Box的4G/5G CPE功能:为现场无线设备提供网络
引言 随着工业物联网的快速发展,现场设备的无线连接需求越来越迫切。然而,在一些室外或者不方便布网的场景下,为现场的无线设备提供网络仍然是一个挑战。为了满足这一需求,工业边缘网关HiWoo Box引入了4G/5G CPE(Cust…...

Set 和 Map 数据结构
数据结构Set ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set本身是一个构造函数,用来生成Set数据结构。 // 数组去重 const set new Set([1, 2, 3, 4, 4]); [...set] // [1, 2, 3, 4]目前个人感觉Se…...

nginx根据url参数动态代理
nginx根据url参数动态代理 请求url格式,其中参数proxy后面的url就是需要访问的真实地址: http://localhost:9388/?proxyhttp://localhost:8038/Content/layui/font/iconfont.woff?v256 http://localhost:9388/?proxyhttp://localhost:8072/article/A…...

TCP协议(收集和记录)
收集写的比较好的文章 TCP四次挥手详解 四次挥手介绍的非常详细, 重点介绍了各种异常情况下协议是如何处理的, 异常处理可以做到两点: 让连接保活, 也许只是一次连接异常让连接死掉后不影响后续的操作, 重点介绍了TIME_WAIT...

【Kafka】自动提交偏移量和手动提交偏移量的区别
区别 自动提交偏移量(Auto Commit Offset)和手动提交偏移量(Manual Commit Offset)是两种不同的消费者偏移量管理方式。 自动提交偏移量: 在自动提交模式下,消费者会定期自动将已消费的消息偏移量提交给…...

缠论线段的划分
第一种情况: 第二种情况: 第二种情况中的特例: 第二种情况的特例: 顶分型成立: 向上线段延续: 顶分型后面底分型,形成三段 插入一个分型的反面例子: dd...

【Linux】Ubuntu基本使用与配置, 以及常见问题汇总(一)
前言 大学期间,感觉很多时候学习课外知识都是被推着往前走,很多内容并没有深入去学习,知识的记录受限于所学比较片面,如今渐渐意识到似乎并没有建立起相关知识的体系架构,缺乏一个系统学习并整理的过程。本文将以Ubunt…...

【UE5 多人联机教程】02-开始游戏菜单控件
目录 步骤 一、完善开始游戏菜单控件 二、控件功能实现 2.1 “开始游戏”按钮切换界面 2.2 “创建房间”、“加入房间”按钮切换界面 2.3 “创建房间”按钮 步骤 一、完善开始游戏菜单控件 打开“UMG_Main” 首先在控件切换器外层包裹一个画布面板 然后调整控件切换器全…...

设计模式-工厂方法模式
基于面向对象语言开发中,免不得需要创建对象。前面讲解的"单例模式"也是如此,不过是要创建唯一的对象。本文要讲述“工厂方法模式”是要封装创建对象的过程。工厂,也称之为“制造厂”,用于创建具体的产品直接提供给外界…...

【Hammerstein模型的级联】快速估计构成一连串哈默斯坦模型的结构元素研究(Matlab代码实现)
目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 💥1 概述 在许多振动应用中,所研究的系统略微非线性。Hammerstein模型的级联可以方便地描述这样的系统。Hammerstein提供了一种基于指数正弦…...

「C 语言」extern关键字
在 C 语言中,关键字 extern 是用来告诉编译器,这个变量 OR 函数在其他文件中已有定义,可在当前文件中使用 当我们定义了一个全局变量 OR 函数时,它就已经具有了外部链接的属性,我们只需要通过在引用该变量的文件中用 …...

oracle单个用户最大连接数限制
项目经理反馈,现场已做了单个用户的最大连接数2000的限制,但数据库还是报无法连接,故障用户的连接数已3800多了。 查看日志报错如下 2023-07-20T13:07:57.79465308:00 Process m000 submission failed with error 20 Process m000 submiss…...

计算机网络最基础知识介绍
OSI和TCP/IP是很基础但又非常重要的知识,很多知识点都是以它们为基础去串联的,作为底层,掌握得越透彻,理解上层时会越顺畅。今天这篇网络基础科普,就是根据OSI层级去逐一展开的。 01 计算机网络基础 01 计算机网络的分类 按照网络的作用范围:广域网(WAN)、城域网(MA…...

接口测试进阶之数据模板
大家好久不见了。今天的文章将介绍jinja2模板在接口测试数据上的应用。 这几个月我在想,进阶系列要怎么写。 毕竟很多情况下,我觉得写技术文章和做培训一样,都会有两个结果: 1.是需要这些知识的人看不懂。 2.是看得懂的人不需要…...

Java中使用MySQL详解
1. 简介 在Java开发中,与数据库的交互是常见且重要的一部分。MySQL是一个广泛使用的关系型数据库管理系统,而Java作为一种强大的编程语言,提供了丰富的API和工具,使得与MySQL数据库的结合应用更加便捷和高效。 本篇博客将详细介…...

Docker安装Elasticsearch相关软件安装
Docker安装Elasticsearch相关软件安装 本文将介绍通过 Docker 的方式安装 Elasticsearch 相关的软件。 1、Docker安装Elasticsearch 1.1 搜索镜像 $ docker search elasticsearch $ docker search elasticsearch:7.12.11.2 拉取镜像 $ docker pull elasticsearch:7.12.11.…...

Ubuntu的安装与部分配置
该教程使用的虚拟机是virtuabox,镜像源的版本是ubuntu20.04.5桌面版 可通过下面的链接在Ubuntu官网下载:Alternative downloads | Ubuntu 也可直接通过下面的链接进入百度网盘下载【有Ubuntu20.04.5与hadoop3.3.2以及jdk1.8.0_162,该篇需要使…...

为什么 Splashtop 是更好用的 iOS 远程桌面应用
全球远程桌面软件市场最近达到19.2亿美元,表明使用任意设备实现随处远程控制越来越受欢迎。 近年来,企业的运营方式发生了重大改变,远程桌面软件已成为广泛使用的解决方案。Splashtop 是目前最好用的远程桌面工具之一,安全可靠且…...

[SQL挖掘机] - 字符串函数 - lower
介绍: lower函数是mysql中的一个字符串函数,其作用是将给定的字符串转换为小写形式。它接受一个字符串作为参数,并返回一个新的字符串,其中所有的字母字符均被转换为小写形式。 使用lower函数可以帮助我们在字符串处理中实现标准化和规范化…...

什么是Koala?
Koala 介绍 koala 是一个前端预处理器语言图形编译工具,支持 Less、Sass、Compass、CoffeeScript,帮助 web 开发者更高效地使用它们进行开发。跨平台运行,完美兼容 windows、linux、mac。 关键特性 多语言支持 支持 Less、Sass、CoffeeSc…...

阿里巴巴前端开发规范
前言 规范的目的是为了编写高质量的代码,让你的团队成员每天的心情都是愉悦的,大家在一起是快乐的。 现在软件架构的复杂性需要协同开发完成,如何高效地协同呢?无规矩不成方圆,无规范难以协同,比如…...

opencv-19 图像色彩空间转换函数cv2.cvtColor()
cv2.cvtColor() 函数是 OpenCV 中用于图像颜色空间转换的函数。它允许你将图像从一个色彩空间转换为另一个色彩空间。在 Python 中,你可以使用这个函数来实现不同色彩空间之间的转换。 函数的基本语法为: cv2.cvtColor(src, code[, dst[, dstCn]])参数…...

SpringCloudAlibaba微服务实战系列(二)Nacos配置中心
SpringCloudAlibaba Nacos配置中心 在java代码中或者在配置文件中写配置,是最不雅的,意味着每次修改配置都需要重新打包或者替换class文件。若放在远程的配置文件中,每次修改了配置后只需要重启一次服务即可。话不多说,直接干货拉…...

【Kafka源码走读】Admin接口的客户端与服务端的连接流程
注:本文对应的kafka的源码的版本是trunk分支。写这篇文章的主要目的是当作自己阅读源码之后的笔记,写的有点凌乱,还望大佬们海涵,多谢! 最近在写一个Web版的kafka客户端工具,然后查看Kafka官网,…...

Windows API遍历桌面上所有文件
要获取桌面上的图标,可以使用Windows API中的Shell API。以下是遍历桌面上所有文件的示例代码: #include <Windows.h> #include <ShlObj.h> #include <iostream> #include <vector> using namespace std;int main() {// 获取桌…...

【MySQL】基本查询(插入查询结果、聚合函数、分组查询)
目录 一、插入查询结果二、聚合函数三、分组查询(group by & having)四、SQL查询的执行顺序五、OJ练习 一、插入查询结果 语法: INSERT INTO table_name [(column [, column ...])] SELECT ...案例:删除表中重复数据 --创建…...

【Go语言】Golang保姆级入门教程 Go初学者介绍chapter1
Golang 开山篇 Golang的学习方向 区块链研发工程师: 去中心化 虚拟货币 金融 Go服务器端、游戏软件工程师 : C C 处理日志 数据打包 文件系统 数据处理 很厉害 处理大并发 Golang分布式、云计算软件工程师:盛大云 cdn 京东 消息推送 分布式文…...

mysql 自增长键值增量设置
参考文章 MySQL中auto_increment的初值和增量值设置_auto_increment怎么设置_linda公馆的博客-CSDN博客 其中关键语句 show VARIABLES like %auto_increment% set auto_increment_increment4; set auto_increment_offset2;...