【半监督图像分割 2023 】BHPC

news2024/12/22 22:56:19

【半监督图像分割 2023 】BHPC

论文题目:Semi-supervised medical image segmentation via hard positives oriented contrastive learning

中文题目:通过面向硬阳性的对比学习进行半监督医学图像分割

论文链接:

论文代码:https://github.com/PerPerZXY/BHPC

论文团队:

发表时间:

DOI:

引用:

引用数:

摘要

半监督学习(Semi-supervised learning, SSL)是解决模式识别和医学图像分割中标注稀缺性问题的常用技术,主要集中在两个关键问题上:1)学习结构良好的可分类嵌入空间,2)建立嵌入空间到像素空间的鲁棒映射

  • 在本文中,为了解决第一个问题,我们提出了一种硬正定向对比(HPC)学习策略来预训练基于编码器-解码器的分割模型

    与传统的对比学习倾向于只关注硬阴性不同,我们的HPC学习策略还关注硬阳性(即具有相同类别但与锚点不同特征表示的样本),这被认为在为半监督医学图像分割提供判别知识方面发挥更重要的作用。具体来说,HPC由两个层次构成,包括无监督图像级HPC (IHPC)和监督像素级HPC (PHPC),使编码器学习的嵌入空间具有局部和全局感知。特别是,PHPC学习策略以基于区域的方式实现,在提供更多多粒度信息的同时节省了内存使用。

  • 针对第二个问题,我们在预训练的解码器中插入了几个特征交换(FS)模块。这些FS模块旨在扰动中间嵌入空间到像素空间的映射,试图鼓励更稳健的分割预测
  • 在两个公共临床数据集上的实验表明,我们提出的框架在很大程度上超过了最先进的方法。

1. 介绍

医学图像分割是计算机视觉和模式识别的一项基本任务,近年来随着深度学习(DL)的发展取得了重大进展[1-3]。通过使用大量标记数据进行训练,这些基于数据驱动的基于深度学习的方法可以以全监督的方式生成有希望的分割结果。但在临床中,医学图像的标注耗时长,专业性强,这对上述全监督方法提出了现实挑战。为了缓解标注稀缺性的问题,一个可行的解决方案是采用基于半监督学习(SSL)的方法来有效地利用标记和未标记的数据

一般来说,分割方法的一个关键问题是学习一个结构良好的嵌入空间,使每个像素可以轻松准确地分类。但是,对于SSL设置,这可能更具挑战性,因为几乎没有像素级监督。为此,一些研究工作致力于探索有效的预训练策略,使分割模型能够从嵌入空间中提取判别特征,从而大大提高SSL的性能[4]。其中,对比学习(CL)以其强大的提取能力受到了表征学习界的广泛关注没有注释的判别特征。CL的核心思想在于,给定一个锚点样本,鼓励语义相似的样本(或阳性)聚集在锚点周围,而不相似的样本(或阴性)则被迫远离锚点。基于这一理念,CL已被证明对图像分类等许多图像级下游计算机视觉任务是有益的[5]。为了使CL适应语义分割等密集预测任务,一些研究试图通过对比局部像素级表示而不是全局图像级表示来定制像素级CL以适应分割任务[6,7]。此外,一些艺术[8,9]试图从局部层面和全局层面形成双层CL方案,进一步提升CL的性能。由于局部和全局线索对于学习有意义的分割嵌入空间都很重要,因此这些具有双级别方案的方法通常比仅关注单级别CL的方法有显着改进。

尽管如此,大多数现有的基于对比学习的方法都是简单而统一地根据类别等固有设置构建正、负样本,并对其进行平等对待,没有进行有效的区分(如图1(a)所示),忽略了正、负样本聚类内部的分布差异。考虑到分布边缘的样本更靠近决策边界,Robinson等[10]提出了对硬负(靠近锚点的负,如图1(b)所示)进行更多约束,并揭示了它们有助于将学习到的知识空间向决策边界扩展。此外,之前在自然图像分类/分割任务方面的一些工作(Alonso等[11];Wang等人[12]也证实了硬否定对度量学习至关重要。然而,硬阳性(远离锚点的阳性,如图1©左侧所示)的巨大潜力在大多数当前分割模型中仍未得到充分开发。特别是在医学图像分割领域,这个问题更值得关注,因为硬阳性比硬阴性出现的频率更高。直观地说,更多硬正面的原因来自以下两个因素。一方面,由于医疗数据采集的程序、设备或实验参数的异质性,同一器官/类别在不同的图像/病例中往往具有巨大的特征差异。另一方面,即使是同一幅图像,由于边缘不清晰和可能存在的噪声,同一器官/类别的不同区域的像素级特征也会有很大差异。上述两个因素经常导致错误分类,其中一些应该属于同一类(正数)的硬样本(像素)被分类到其他类中(如图2所示)。鉴于这一观察结果,我们认为硬正数也可以或更好地提供判别知识,以形成良好的嵌入空间,并从另一个角度指出医学分割任务中的决策边界(如图1©所示)。在我们的研究中,我们希望将硬负选择策略和我们提出的硬正选择策略整合到双水平CL中,并进一步使用它来预训练特定的SSL框架,而很少甚至不需要额外的监督。

image-20240217214032187

除了形成结构良好的嵌入空间外,半监督分割的另一个关键问题是建立从嵌入空间到输出像素空间的鲁棒映射,当全监督模型退化为具有稀缺标记数据的半监督模型时,这可能会困难得多。为了解决这个问题,已经进行了大量的研究,开发了各种SSL策略,其中伪标签和一致性正则化是两种常用的技术。具体而言,伪标记方法[13,4]将像素级模型预测作为未标记数据的伪标签,并使用这些生成的伪标签进行迭代自训练。然而,由于监管的限制和可能产生的噪音,伪标签的质量很难得到保证。一致性正则化尝试从另一个方面执行SSL,它假设模型预测对于不同的扰动应该是不变的。最近,MixMatch[14]和FixMatch[15]成功地将一致性正则化策略与基于伪标签的自训练框架结合起来,取得了最先进的性能。然而,这些组合研究往往只在输出水平施加一致性约束,在输入水平施加扰动,很少考虑中间嵌入空间。这种端到端的约束会给从嵌入空间到输出像素空间的鲁棒映射学习带来很大的负担。鉴于此,在中间嵌入空间中加入更多的扰动应该有利于减轻这种负担,进一步增强学习映射的鲁棒性

在本文中,为了更好地解决上述两个关键问题,我们提出了一种新的三阶段双层面的硬正性导向半监督医学图像分割的对比学习框架。前两个阶段对编码器-解码器模型进行预训练,目的是全面获得结构良好的嵌入空间。具体而言,这两个阶段都配备了一种新颖的硬阳性导向对比(HPC)学习策略,该策略创新性地专注于选择硬阴性样本之外的硬阳性样本。特别地,HPC学习策略分别从前两个阶段的两个层次构建。第一阶段采用无监督图像级HPC (IHPC)学习策略来挖掘图像级硬阳性,第二阶段采用监督像素级HPC (PHPC)学习策略来挖掘像素级硬阳性。这两个阶段共同挖掘出更多的线索来构建判别嵌入。在这种双层硬正CL结构的指导下,鼓励模型产生鲁棒表示。然后,第三阶段在基于伪标签的SSL框架上采用简单而有效的一致性正则化策略,进一步构建从嵌入空间到像素空间的鲁棒映射。该策略是通过我们提出的解码器中的特征交换(FS)模块来实现的,该模块旨在对中间嵌入空间而不仅仅是输入空间增加更多的扰动,并提高像素级建模的能力。

总的来说,我们的主要贡献有四个方面:(1)除了关注硬阴性样本外,我们还提出了一种针对硬阳性样本的新型双水平CL策略,以充分探索其中包含的判别知识,从而产生无监督IHPC学习策略和监督PHPC学习策略。通过将上述双层CL注入前两个预训练阶段,我们提出的方法可以学习具有全局和局部感觉的结构良好的嵌入空间,促进半监督分割任务的像素分类。(2)我们通过计算其在大区域和小区域内/跨区域的损失而不是单独在整个特征映射中计算损失来仔细实现PHPC学习策略。这不仅缓解了像素级对比损失对内存的过度消耗要求,而且丰富了多粒度信息,便于更全面的对比学习。(3)与大多数SSL方法仅在输入层扰动增强视图引入一致性不同,我们还设计了特征交换(FS)模块,通过交换未标记数据的部分特征对中间嵌入空间产生更多扰动,从而进一步增强了学习映射的鲁棒性。(4)在两个公共临床数据集上获得的实验结果表明,我们提出的方法在定性和定量度量方面都优于最先进的方法。据我们所知,这项工作是第一次将硬阳性策略注入到医学图像分割的双层对比学习中。

2. 相关工作

2.1 半监督医学图像分割

在临床中,由于标注成本巨大,大量未标注的医学图像未被使用。为了充分利用这些数据,许多研究都采用了半监督学习(SSL),旨在挖掘包含的知识以提高分割性能。一般来说,有两种流行的SSL范例。一种是伪标注[13,16]。例如,Fan等[13]提出先对未标记的图像进行伪标签预测,然后将这些伪标签图像与人工标记的图像一起参与分割模型的训练。通过几轮伪标签训练,模型的性能得到了提高。Seibold等[16]根据标记图像中相似的语义对偶为未标记的图像分配伪标签,在一定程度上避免了确认偏差。另一种SSL范例是一致性正则化[17,18]。例如,Li等人[17]基于均值教师模型研究了变换后的图像之间的一致性[19],提高了分割预测的泛化程度。Liu和Tan[18]提出了半监督学习的确定性驱动一致性损失(certain -driven Consistency Loss, CCL),利用一致性损失中的预测不确定性,让学生模型从可靠的目标中动态学习,与现有方法相比,性能得到了提高。此外,不确定性估计[20,21]、注意力[6]、共同训练[22]、课程学习[23]和相互学习[24]等机制被进一步纳入一致性正则化中,以确保预测的可靠性。除了上述方法外,也有研究考虑将伪标记和一致性正则化结合起来,以一种简单而有效的方式,如MixMatch[14]和FixMatch[15],并证明了它们在图像分类任务上的优越性。

2.2 对比学习

自监督学习通过从未标记的数据中学习有效的嵌入,为计算机视觉任务提供了好处。这样的成功是基于一个共识,即更高质量的嵌入可以获得更好的性能收益。近年来,自我监督学习的代表——对比学习[25,7]受到了越来越多的关注。对比学习的核心是学习一个强大的嵌入空间,可以帮助在数据集中区分相似(正)对和不相似(负)对。从这种结构良好的嵌入空间中得到的嵌入有望对下游的视觉任务做出重大贡献。如Xie等[7]提出采用全局图像和局部patch之间的对比学习,提高目标检测的性能。Chen等人[25]也提出了一种使用动量对比学习的COVID-19诊断方法,训练编码器用于特征表示和原型网络用于分类,并在两个公开可用的COVID-19 CT数据集上展示了优异的性能。与这些任务相比,语义分割需要更密集、更精细的嵌入。为此,Alonso等[11]建立了像素级的对比学习,生成局部特征嵌入进行语义分割。Yuan等人提出了一种用于弱监督语义分割(WSSS)的多策略对比学习(MuSCLe)框架,该框架利用不同层次(图像、区域、像素和对象边界)的对比样本对来改进特征表示,并在PASCAL VOC 2012数据集上实现最先进的性能。Chaitanya等[8]开发了一种两步自监督对比学习方案来学习图2。海马数据集特定扫描上分割结果的可视化。

image-20240217214041762

这里展示了两种基于简单或硬负向对比学习的半监督方法进行比较,包括SCLM[4]和SimSiam (Chen和He, 2021)。可以看出,在某些情况下,它们相对容易出现将目标类分类为背景类(分割不足)或其他类(误分割)的错误(用圆圈标出),而我们提出的方法同时关注硬正和硬负样本,可以在一定程度上避免这些问题。C. Tang等。在预训练阶段从未标记数据中提取全局和局部特征。Hu等[4]进一步在类似的两步对比学习框架中引入标签信息,以获得更高质量的嵌入,提高分割性能。然而,这些方法最多考虑的是如何利用来自负样本的信息,而很少考虑硬正样本中的判别信息,这些信息也可以指示决策边界。我们认为,探索硬阳性可以进一步促进对比学习的性能,有助于为下游分割任务学习更具代表性的嵌入空间。

3. 方法

我们提出的方法的架构如图3所示,其中包括三个阶段。在第一阶段,两批增强的未标记数据被送入编码器E和投影仪P1,以获得实时图像级表示。同时,维护一个内存库M来存储先前生成的表示。在此基础上,设计了一种无监督图像级硬正定向对比(IHPC)学习策略,使编码器E能够形成结构化的特征空间。然后,在第二阶段,预训练的编码器E与解码器D和另一个投影仪P2一起接收不同的增强标记数据作为输入,以产生分割类感知嵌入。在每个嵌入中,衍生出多个大小区域,并开发了基于区域的像素级硬正定向对比(PHPC)学习策略来计算这些区域内和交叉标记像素上的损失。因此,编码器E和解码器D被赋予了生成判别特征空间进行逐像素分割的能力。最后,在第三阶段,训练有素的编码器E和解码器D进一步适应半监督医学图像分割任务。其中,我们采用自训练策略对未标记的数据生成伪标签,从而指导分割像素的预测。在此期间,提出了特征交换(FS)模块,并将其加入到解码器中,以增强嵌入空间中的扰动,提高分割预测的鲁棒性。在下面的小节中,我们将首先简要介绍硬阳性样品的原理,然后再详细说明我们方法中的每个阶段。

3.1 硬阳性样品原理

受Robinson等人[10]的启发,我们提出了硬阳性样本应遵循的两个指导原则:

原则1。所选的硬阳性图像应该与有监督情况下的锚具有相同的标签,或者与无监督情况下的锚具有相同的图像内容。

原则2。所选硬阳性体在埋设空间内应尽可能远离锚体。

简而言之,我们认为与锚点更不相似的阳性样本“更硬”。实际上,这些硬正值可以为模型训练带来更多的梯度贡献,揭示更多的判别知识[10]。基于以上两个原则,我们提出了图像级和像素级两种硬正性取向对比(HPC)学习策略,分别称为图像级硬正性取向对比(IHPC)学习策略和像素级硬正性取向对比(PHPC)学习策略。此外,我们的方法还引入了负样本来计算损耗。

为简单起见,我们在以下小节中省略了面向损失的硬消极因素,而只关注硬积极因素。

image-20240217112702305

3.2 第一阶段:无监督图像级对比学习

3.2.1 处理流程

本阶段拟在无监督IHPC学习的指导下,在未标记数据上预训练编码器E,使编码器E能够生成图像级的判别特征表示。在我们的问题设置中,未标记的数据集记为 D u = { X i } i = 1 N D^{u}=\{X_{i}\}_{i=1}^{N} Du={Xi}i=1N,其中 X i ∈ R C × H × W X_i\in R^{C\times H\times W} XiRC×H×W表示一个特定的图像,N为总数,C、H、W分别为 X i X_i Xi的通道号、高度和宽度。为每个输入 X i X_i Xi,我们对它进行两个不同的增广得到两个共轭图像 X i a , X i b X_{i}^{a},X_{i}^{b} Xia,Xib。然后通过编码器E和投影仪 P 1 P_1 P1将这两幅图像投影到图像级特征空间中,产生两个图像级表示 ε i , ε i + \varepsilon_{i},\varepsilon_{i}^{+} εi,εi+。上述过程的数学表达式为 ε i , ε i + = P 1 ( E ( X i a , X i b ) ) \varepsilon_{i},\varepsilon_{i}^{+}=P_{1}(E(X_{i}^{a},X_{i}^{b})) εi,εi+=P1(E(Xia,Xib))。与MoCo[26]类似,我们将 ε i \varepsilon_{i} εi作为锚样本, ε i + \varepsilon_{i}^+ εi+作为正样本。表示为 { ε j − } \{\varepsilon_{j}^{-}\} {εj}的其他图像的表示被视为负样本。为了收集尽可能多的负样本,我们维护一个内存库M来存储它们,并用动态的 ε i \varepsilon_{i} εi更新M,同时丢弃最旧的 ε j − \varepsilon_{j}^{-} εj。基于锚点样本 ε i \varepsilon_{i} εi、正样本 ε i + \varepsilon_{i}^+ εi+和负样本 { ε j − } \{\varepsilon_{j}^{-}\} {εj},我们计算了IHPC学习的以下损失。

3.2.2 IHPC学习

对于对比学习,性能很大程度上取决于判别样本的构造。然而,大多数方法仅通过利用负样本来考虑这一点,而忽略了阳性中包含的强判别信息,特别是在那些硬阳性中。因此,在第一阶段,我们尝试将非浪漫的对比学习提升为IHPC学习。其核心是对特征空间中距离较远的锚正对赋予更大的权值,可以表示为:
w 1 = exp ⁡ ( − β i m g ∗ r 1 ( ε i , ε i + ) ) , w_{1}=\exp\bigl(-\beta_{img}*r_{1}\bigl(\varepsilon_{i},\varepsilon_{i}^{+}\bigr)\bigr), w1=exp(βimgr1(εi,εi+)),
其中βimg是图像级浓度超参数[27],“∗”表示元素乘法,r1(⋅)表示用于测量对(ε I, ε+ I)的距离(即硬度)的内点积。请注意,我们并没有人为地给出一个阈值来强制将样本分类为硬或不硬,而是让网络通过相似性度量来自行判断。这种加权策略可以强制编码器E更多地关注那些更难的正信息,并学习更多的图像级知识。由此,第一阶段IHPC学习的损失可表述为:
L I H P C = − 1 ∣ A I ∣ ∑ ϵ i ∈ Λ I l o g exp ⁡ ( ε i ⋅ ε i + / τ ) ∗ w 1 exp ⁡ ( ε i ⋅ ε i + / τ ) ∗ w 1 + ∑ ϵ j − ∈ S i e x p ( ε i ⋅ ε j − / τ ) , L_{IHPC}=-\frac{1}{|A_{I}|}\sum_{\epsilon_{i}\in\Lambda_{I}}log\frac{\exp(\varepsilon_{i}\cdot\varepsilon_{i}^{+}/\tau)*w_{1}}{\exp(\varepsilon_{i}\cdot\varepsilon_{i}^{+}/\tau)*w_{1}+\sum_{\epsilon_{j}^{-}\in S_{i}}exp(\varepsilon_{i}\cdot\varepsilon_{j}^{-}/\tau)}, LIHPC=AI1ϵiΛIlogexp(εiεi+/τ)w1+ϵjSiexp(εiεj/τ)exp(εiεi+/τ)w1,
式中, A I A_{I} AI为图像级锚点集, S i S_{i} Si为锚点εi的负集。 ε j − ∈ S i \varepsilon_{j}^{-}\in S_{i} εjSi表示从内存库加载的相应的负样本。τ是一个温度超参数。

3.3 步骤二: 监督像素训练

3.3.1 流程

经过IHPC学习的预训练后,在监督式PHPC学习的指导下,在第二阶段的标记数据上进一步优化编码器E,形成像素级判别特征空间。在这里,我们将标记的数据集定义为 D l = { X i , Y i } i = N + 1 M \mathscr{D}^{l}=\{X_{i},Y_{i}\}_{i=N+1}^{M} Dl={Xi,Yi}i=N+1M,其中 Y i ∈ { 0 , 1 } H × W Y_{i}\in\{0,1\}^{H\times W} Yi{0,1}H×W表示图像 X i X_i Xi的分割标签。与第一阶段相同,我们采用相同的增强技术对Xi进行增强,从而得到成对的增强图像 X i a X_i^{a} Xia X i b X_i^{b} Xib。然后,我们将它们与从头开始训练的新解码器D一起发送到阶段I预训练的编码器E中,随后是另一个投影仪P2,以像素对像素的方式将D的特征映射到相应的特征 z i a z_i^a zia z i b z_i^b zib。这个过程可以表示为 z i a , z i b = P 2 ( D ( E ( X i a , X i b ) ) ) z_{i}^{a},z_{i}^{b}=P_2(D(E(X_i^a,X_i^b))) zia,zib=P2(D(E(Xia,Xib)))。最后,在 z i a z_i^a zia z i b z_i^b zib内的标记像素上计算PHPC学习的损失。

3.3.2 基于区域的PHPC学习

考虑到半监督情况下提供了多个像素级标注数据,充分利用这些已有的标注可能会为对比学习提供更可靠的指导,提高对比学习的性能。同时,以ground truth作为输入,可以提供更多标记的正负样本,这使得模型能够获得更可靠和鲁棒的上下文。因此,我们在第二阶段以监督的方式进行PHPC学习。这里,为了简单起见,我们省略了zi, zbi的上标,因为它们经历了相同的操作。具体来说,我们随机将特征映射zi的第u列、第v行处的像素级表示 z i ( u , v ) ∈ R c z_{i(u,v)}\in R^{c} zi(u,v)Rc作为锚点样本,其中c为维数。然后选取其对应的正样本为 z i ( u + , v + ) z_{i(u^{+},v^{+})} zi(u+,v+),位于u+行和v+列,具有相同的像素标签,而其对应的负样本为 z i ( u − , ν − ) z_{i(u^{-},\nu^{-})} zi(u,ν),位于u¶行和v¶列,具有不同的标签。与第一阶段的IHPC学习类似,我们还通过为更不相似的锚定-正对分配更大的权重来放大硬正的贡献,这可以用以下公式表示:
w 2 = e x p ( − β p i x ∗ r 2 ( z i ( u , v ) , z i ( u + , v + ) ) ) , w_2=exp\big(-\beta_{pix}*r_2\big(z_{i(u,v)},z_{i(u^+,v^+)}\big)\big), w2=exp(βpixr2(zi(u,v),zi(u+,v+))),
其中 β p i x \beta_{pix} βpix为像素级浓度超参数[27],r2(⋅)表示余弦相似度测量值。显然,正样本zi(u+,v+)离锚点zi(u,v)越远,即难度越大,则在网络学习过程中获得的关注越多。更进一步,PHPC学习的损失可以计算如下:

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

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

相关文章

CCF编程能力等级认证GESP—C++6级—20231209

CCF编程能力等级认证GESP—C6级—20231209 单选题(每题 2 分,共 30 分)判断题(每题 2 分,共 20 分)编程题 (每题 25 分,共 50 分)闯关游戏工作沟通 答案及解析单选题判断题编程题1编程题2 单选题…

Midjourney绘图欣赏系列(五)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子,它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同,Midjourney 是自筹资金且闭源的,因此确切了解其幕后内容尚不…

2024023期传足14场胜负前瞻

新的一年祝大家行大运、发大财、中大奖!2024023期赛事由英超2场,德甲2场、意甲4场、西甲3场、法甲3场组成。售止时间为2月18日(周六)21点30分,敬请留意: 本期中深盘较少,1.5以下赔率仅1场&#…

二、ActiveMQ安装

ActiveMQ安装 一、相关环境二、安装Java8三、下载安装包四、启动五、其他命令六、开放端口七、后台管理 一、相关环境 环境:Centos7.9安装ActiveMQ版本:5.15.9JDK8 二、安装Java8 安装教程:https://qingsi.blog.csdn.net/article/details/…

RCS系统之:基础算法

设计仓库机器人的控制管理系统涉及到路径规划、任务分配、库存管理、通信系统等方面。以下是一个基本的仓库机器人控制管理系统方案的概述: 路径规划:设计一个路径规划系统,用于确定机器人在仓库内的最佳行驶路径,以最大程度地提…

学习数据结构和算法的第9天

题目讲解 移除元素 ​ 给你一个数组nums和一个值 val,你需要 原地 移除所有数值等于 val的元素,并返回移除后数组的新长度。 ​ 不要使用额外的数组空间,你必须仅使用0(1)额外空间并 原地 修改输入数组。 ​ 元素的顺序可以改变。你不需要…

使用Taro开发鸿蒙原生应用——快速上手,鸿蒙应用开发指南

导读 本指南为开发者提供了使用 Taro 框架开发鸿蒙原生应用的快速入门方法。Taro,作为一个多端统一开发框架,让开发者能够使用一套代码同时适配多个平台,包括鸿蒙系统。文章将详细介绍如何配置开发环境,以及如何利用 Taro 的特性…

leetcode hot100 拆分整数

在本题目中,我们需要拆分一个整数n,让其拆分的整数积最大。因为每拆分一次都和之前上一次拆分有关系,比如拆分6可以拆成2x4,还可以拆成2x2x2,那么我们可以采用动态规划来做。 首先确定dp数组的含义,这里dp…

linux学习进程控制【创建-终止-等待】

目录 1.进程创建 1.1fork函数 1.2写时拷贝 2.进程终止 2.1进程退出场景 2.2进程退出方式 3.进程等待 3.1进程等待的必要性 3.2等待方式 3.2.1wait() 3.2.2waitpid() 3.3轮训等待 总结: 1.进程创建 …

给定n个结点m条边的简单无向图,判断该图是否存在鱼形状的子图:有一个环,其中有一个结点有另外两条边,连向不在环内的两个结点。若有,输出子图的连边

题目 思路: #include <bits/stdc++.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn = 1e6 + 5, inf = 1e18 * 3, maxm = 4e4 + 5,…

对树莓派上配置mdadm的一些补充

1、如果要重新配置该如何回退到初始状态&#xff1f; 答&#xff1a;可参考以下指令&#xff1a; cat /proc/mdstat sudo umount /dev/md0 sudo mdadm --stop /dev/md0 sudo mdadm --zero-superblock /dev/sda sudo mdadm --zero-superblock /dev/sdb sudo nano /etc/fstab&a…

不具备这十个能力,真不能说是专业的B端系统设计师

B端系统的复杂程度要远远的超过C端&#xff0c;作为这类设计师绝对不能满足于&#xff0c;画个界面&#xff0c;拼一下组件能搞定的&#xff0c;真的需要精心研究&#xff0c;本文列举了十项能力&#xff0c;帮助设计师们针对的提升。 一、什么是B端管理系统设计 B端管理系统设…

谷歌新动作:双子模型大放送,开发者福音来了!

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

wayland(xdg_wm_base) + egl + opengles——dma_buf 作为纹理数据源(五)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、EGL dma_buf import 相关的数据结构和函数1. EGLImageKHR2. eglCreateImageKHR()3. glEGLImageTargetTexture2DOES()二、egl 中 import dma_buf 作为纹理的代码实例1. egl_wayland_dmabuf_…

Flink理论—Flink架构设计

Flink架构设计 Flink 是一个分布式系统&#xff0c;需要有效分配和管理计算资源才能执行流应用程序。它集成了所有常见的集群资源管理器&#xff0c;例如Hadoop YARN&#xff0c;但也可以设置作为独立集群甚至库运行,例如Spark 的 Standalone Mode 本节概述了 Flink 架构&…

单片机学习笔记---直流电机驱动(PWM)

直流电机介绍 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极&#xff0c;当电极正接时&#xff0c;电机正转&#xff0c;当电极反接时&#xff0c;电机反转 直流电机主要由永磁体&#xff08;定子&#xff09;、线圈&#xff08;转子&#xff09;和换向器…

leetcode(双指针)15.三数之和(C++详细解释)DAY10

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的…

shell脚本之高级变量

目录 一、高级变量赋值 1、高级变量赋值总结表 2、相关操作 二、变量间接引用 1、eval命令 一、高级变量赋值 1、高级变量赋值总结表 变量配置方式str 无配置str 为空字符串str 已配置为非空字符串var${str-expr}varexprvarvar$strvar${str:-expr}varexprvarexprvar$str…

RK3399平台开发系列讲解(调试篇)死锁检测工具lockdep

🚀返回专栏总目录 文章目录 一、常见死锁场景二、lockdep使用方法三、lockdep技术原理3.1、锁类状态3.2、检查规则沉淀、分享、成长,让自己和他人都能有所收获!😄 📢介绍死锁检测工具lockdep。 资料 一、常见死锁场景 场景1:进程重复申请同一个锁,称为AA死锁。例如…

多模态(三)--- BLIP原理与源码解读

1 BLIP简介 BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation 传统的Vision-Language Pre-training &#xff08;VLP&#xff09;任务大多是基于理解的任务或基于生成的任务&#xff0c;同时预训练数据多是从web获…