RAM-DSIR:眼底和前列腺图像泛化能力增强,免除不同的扫描仪、成像协议和操作者等多种因素差异,影响学习效果

RAM-DSIR:眼底和前列腺图像泛化能力增强,免除不同的扫描仪、成像协议和操作者等多种因素差异,影响学习效果

    • 提出背景
      • 总体架构
      • 两种领域适应策略
      • 数学构造
    • 效果

 


提出背景

论文:https://arxiv.org/pdf/2208.03901.pdf

代码:https://github.com/zzzqzhou/RAM-DSIR

 

深度学习方法假设训练数据和测试数据共享相同的分布信息。

这一假设要求训练和测试数据来自同一分布,这是一个强假设。

众所周知,由于不同的扫描仪、成像协议和操作者等多种因素,医学图像的质量差异很大。

  • 不同实验室、不同专业人员、不同批次染色剂、不同扫描仪、不同玻片原材料、不同组织对颜色的响应程度等因素而引起的颜色差异,影响学习效果

由于数据分布的变化,这一假设在真实临床环境中通常变得无效。

因此,直接在一组训练图像上训练的分割模型可能缺乏对来自另一家医院或医疗中心、遵循不同分布的测试图像的泛化能力。

总体架构

在这里插入图片描述

图是一个用于医学图像分割的深度学习方法的总体架构,包含了两个主要部分:

(a) 随机振幅混合(RAM)模块:
这部分展示了如何生成具有不同领域风格的新图像,同时保留原始的语义信息。

具体步骤如下:

  1. 从不同领域(Domain 1, Domain 2, …, Domain K)随机采样图像。
  2. 对这些图像应用傅立叶变换(FFT),提取出它们的振幅映射(Amplitude Maps)。
  3. 通过计算不同振幅映射的加权和(通过一个称为λ的权重),结合原始的相位信息,再应用逆傅立叶变换(Inverse FFT)来合成新的图像。

通过这种方式,新图像包含了来自多个源领域的低级频率信息,有助于模型学习更具泛化性的特征。

(b) 训练流程(Training Pipeline):
这部分描述了如何使用合成的图像来训练医学图像分割模型,整个流程包括:

  1. 使用RAM模块合成的图像来训练分割模型,这样做可以增加训练数据的多样性并提高模型的泛化能力。
  2. 分割模型(Seg Prediction)使用基本的分割损失(L_seg)和语义一致性损失(L_consist)。语义一致性损失确保合成图像和真实源域图像的预测结果在语义上保持一致。
  3. 为了进一步提高模型的泛化能力,引入了领域特定图像恢复(DSIR)解码器(Rec Decoder D_rec)来从合成图像中恢复原始源域图像的低级特征。
  4. 通过这样的训练,模型不仅学会了分割任务,还通过DSIR和RAM模块提高了对不同领域变化的鲁棒性。

整个架构的目的是减少模型对于特定医学图像领域的依赖,从而提高在不同设备、协议或医疗中心获取的图像上的表现。

 

使用如图所示的RAM和DSIR框架:

  1. 收集和处理不同设备的眼底图像:从各种眼底相机和扫描设备收集图像,并进行预处理。

  2. 应用RAM模块:对收集的眼底图像应用RAM模块,通过傅立叶变换提取振幅信息,并结合来自不同设备的图像的振幅,生成新的合成图像。

  3. 域特定图像恢复:使用DSIR解码器从合成图像中恢复出接近原始设备图像的低级特征。

  4. 训练分割模型:使用合成图像和原始图像训练分割模型,同时采用语义一致性损失和分割损失来确保模型能够在语义上正确地分割眼底结构。

  5. 评估和应用:在不同设备获取的眼底图像上评估模型的性能,并将其应用于实际的医学诊断中。

通过这种方法,即使是在不同设备上获取的眼底图像,模型也能够更好地泛化和适应,从而在实际的医疗环境中提供更准确的分割结果。

虽然这个特定的架构是为医学图像分割设计的,它的一些概念也可以应用于其他医学图像分析任务,包括糖尿病视网膜病变的分类。

关键在于方法的主要目的是增强模型对不同域的泛化能力,无论是分割还是分类。

两种领域适应策略

  1. 无监督领域适应 (UDA):

    • 问题设定:利用来自一个或多个源域的有标签数据和目标域的无标签数据来训练分类器。
    • 动机:使源域和目标域的分布对齐。
    • 方法
      • 生成模型:缩小源域和目标域之间的像素级分布差距。
      • 对抗训练:通过对抗性训练对齐源域和目标域的特征分布,以保持不同域中的语义特征一致。
      • 输出空间对齐:缩小源域和目标域在输出空间级别的分布差距。
  2. 领域泛化 (DG):

    • 问题设定:仅在一个或多个相关源域上训练模型,并直接泛化到目标域。
    • 方法
      • 领域不变表示学习:最小化多个源域之间的领域差异。
      • 情景训练策略:利用元学习方法开发模型以泛化到未见过的域。
      • 领域特定知识:利用领域属性聚合领域特定的先验知识。
  3. 自监督正则化:

    • 动机:利用无需注释的任务来学习数据的特征表示,为下游任务服务。
    • 方法
      • 自监督任务:引入自监督任务来规范语义特征学习。
      • 图像级恢复任务:开发图像级恢复自监督任务以进一步正则化模型。

例子:假设我们需要训练一个模型来识别和分类糖尿病视网膜病变图像。

  • 步骤 1:使用UDA,我们可能会从一个医院(源域)获取有标签的图像,并从另一个医院(目标域)获取无标签的图像。

    我们的目标是训练一个模型,能够在目标域的图像上表现良好,即使我们没有这些图像的标签。

  • 步骤 2:如果目标域的数据因为隐私保护而不可用,我们转向DG。

    我们将仅使用源域的数据来训练模型,并希望模型能够直接泛化到目标域。

  • 步骤 3:为了提高模型的鲁棒性并减少过拟合,我们加入自监督正则化。

    例如,我们可能会设计一个自监督任务,如图像级恢复,让模型学习如何从部分损坏的图像中恢复出完整的视网膜图像。

  • 步骤 4:最终,我们评估模型在不同医院收集的糖尿病视网膜病变图像的分类性能。

    如果模型在来自源域的测试集和未见过的目标域测试集(比如其他医院的数据)上都表现良好,那么我们可以认为模型具有良好的泛化能力。

完整流程:

  1. 数据准备
  • 收集数据:从多个医院或诊所收集糖尿病视网膜图像。这些图像来自不同的设备,代表了多个源域。
  • 标注数据:对部分数据进行专家标注,包括健康视网膜和不同阶段的糖尿病视网膜病变。
  1. 无监督领域适应 (UDA)
  • 目标域数据:假设某些医院的数据无法获取标签,这些数据被视为目标域数据。
  • UDA应用:使用有标签的源域数据和无标签的目标域数据,训练一个模型,尝试缩小源域和目标域间的分布差异。
  1. 领域泛化 (DG)
  • 模型训练:如果无法访问目标域数据或者目标域过于广泛,采用DG策略。仅使用源域的有标签数据训练模型,并期望它能够泛化到新的、未见过的目标域。
  1. 自监督正则化
  • 自监督任务设计:设计自监督任务,如预测图像的缺失部分,作为训练过程的一部分。这有助于模型学习更丰富的特征表示,增强泛化能力。
  1. 随机振幅混合(RAM)模块
  • 数据增强:使用RAM技术生成新的训练图像。这些图像结合了来自不同源域图像的频率信息,增加数据多样性,帮助模型学习处理来自不同设备的图像变化。
  1. 训练流程
  • 模型训练:结合上述技术,训练糖尿病视网膜分类模型。利用自监督任务和RAM增强的数据,以及原始的有标签数据进行训练。
  • 损失函数:使用分类损失(如交叉熵损失),以及自监督任务的损失来优化模型。
  1. 评估和应用
  • 性能评估:在独立的测试集上评估模型性能,测试集包括来自未见过医院(设备)的图像。
  • 应用:将训练好的模型部署到临床环境中,帮助医生识别和分类糖尿病视网膜病变,以便及时治疗。

通过这个流程,可以看到UDA、DG、自监督正则化、RAM模块和训练流程如何相互配合,共同解决糖尿病视网膜病变分类任务中的领域适应问题。

这个综合策略旨在提高模型对于不同设备、不同医院收集的图像的泛化能力,确保在实际应用中具有较高的准确性和可靠性。

数学构造

  1. 傅立叶变换 (公式 1)
  • 目的:将图像从空间域转换到频率域。
  • 推导
    • 对于每个图像 x i k x^k_i xik,计算其傅立叶变换 F ( x i k ) F(x^k_i) F(xik)
    • 傅立叶变换把图像转换为频率空间信号,表示为 F ( x i k ) ( u , v ) F(x^k_i)(u,v) F(xik)(u,v)

F ( x i k ) ( u , v , c ) = ∑ h = 0 H − 1 ∑ w = 0 W − 1 x i k ( h , w , c ) e − j 2 π ( h H u + w W v ) , j 2 = − 1. F(x_i^k)(u, v, c) = \sum_{h=0}^{H-1} \sum_{w=0}^{W-1} x_i^k(h, w, c)e^{-j2\pi(\frac{h}{H}u + \frac{w}{W}v)}, \quad j^2 = -1. F(xik)(u,v,c)=h=0H1w=0W1xik(h,w,c)ej2π(Hhu+Wwv),j2=1.

  1. 振幅和相位分解 (无明确公式编号)
  • 目的:在频率域中分解图像为振幅和相位,振幅包含风格信息,相位包含结构信息。
  • 推导
    • 从傅立叶变换得到的信号 F ( x i k ) F(x^k_i) F(xik) 中分解出振幅 A i k A^k_i Aik 和相位 P i k P^k_i Pik
  1. 随机振幅混合 (RAM) (公式 2 和 3)
  • 目的:通过混合不同源域图像的振幅,生成新的图像以增加数据多样性。
  • 推导
    • 随机选择一个样本图像 x i k x^k_i xik 和另一个样本 x j n x^n_j xjn
    • 通过权重 λ \lambda λ 和二元掩码 M M M 插值两个图像的振幅 A i k A^k_i Aik A j n A^n_j Ajn
    • 使用插值后的振幅 A i n → k A^{n \rightarrow k}_i Aink 与原始相位 P i k P^k_i Pik 通过逆傅立叶变换合成新图像 x i n → k x^{n \rightarrow k}_i xink

A i , λ n → k = A i k ∗ ( 1 − M ) + ( ( 1 − λ ) A i k + λ A j n ) ∗ M , A_{i, \lambda}^{n \rightarrow k} = A_i^k * (1 - M) + ((1 - \lambda)A_i^k + \lambda A_j^n) * M, Ai,λnk=Aik(1M)+((1λ)Aik+λAjn)M,

x i , λ n → k = F − 1 ( A i , λ n → k , P i k ) , x_{i, \lambda}^{n \rightarrow k} = F^{-1}(A_{i, \lambda}^{n \rightarrow k}, P_i^k), xi,λnk=F1(Ai,λnk,Pik),

  1. 分割模型训练 (公式 4, 5, 6, 7 和 8)
  • 目的:训练模型以进行图像分割,并通过损失函数优化。
  • 推导
    • 定义分割模型的前向传播,使用编码器 E E E 和分割解码器 D s e g D_{seg} Dseg
    • 计算预测的分割掩码 y ^ i k \hat{y}^k_i y^ik
    • 通过交叉熵损失 L c e L_{ce} Lce 和 Dice 损失 L d i c e L_{dice} Ldice 优化模型,这两个损失结合评估分割的精确度和一致性。

y ^ i k = D s e g ( E ( x i k ) ) , \hat{y}_i^k = D_{seg}(E(x_i^k)), y^ik=Dseg(E(xik)),

y ^ i , λ n → k = D s e g ( E ( x i , λ n → k ) ) , \hat{y}_{i, \lambda}^{n \rightarrow k} = D_{seg}(E(x_{i, \lambda}^{n \rightarrow k})), y^i,λnk=Dseg(E(xi,λnk)),

L c e k = − 1 N ∑ i = 0 N − 1 ( y i k log ⁡ y ^ i k + ( 1 − y i k ) log ⁡ ( 1 − y ^ i k ) ) , L_{ce}^k = -\frac{1}{N} \sum_{i=0}^{N-1} (y_i^k \log \hat{y}_i^k + (1 - y_i^k) \log(1 - \hat{y}_i^k)), Lcek=N1i=0N1(yiklogy^ik+(1yik)log(1y^ik)),

L d i c e k = 1 − 2 ∑ i = 0 N − 1 y i k y ^ i k ∑ i = 0 N − 1 ( y i k + y ^ i k + ϵ ) , L_{dice}^k = 1 - \frac{2 \sum_{i=0}^{N-1} y_i^k \hat{y}_i^k}{\sum_{i=0}^{N-1}(y_i^k + \hat{y}_i^k + \epsilon)}, Ldicek=1i=0N1(yik+y^ik+ϵ)2i=0N1yiky^ik,

L s e g k = L d i c e k + L c e k , L s e g n → k = L d i c e n → k + L c e n → k . ( 8 ) \mathcal{L}_{seg}^k=\mathcal{L}_{dice}^k+\mathcal{L}_{ce}^k,\quad\mathcal{L}_{seg}^{n\to k}=\mathcal{L}_{dice}^{n\to k}+\mathcal{L}_{ce}^{n\to k}.\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad(8) Lsegk=Ldicek+Lcek,Lsegnk=Ldicenk+Lcenk.(8)

  1. 语义一致性损失 (公式 9)
  • 目的:确保分割模型在风格化图像和原始图像上具有一致的预测。
  • 推导
    • 使用KL散度 K L KL KL 计算预测掩码和目标掩码之间的差异。
    • 通过 L c o n s i s t L_{consist} Lconsist 最小化源域和合成图像预测之间的差异。

L c o n s i s t k = 1 N ∑ i = 0 N − 1 ( K L ( y ^ i k ∥ y ^ i , λ n → k ) + K L ( y ^ i , λ n → k ∥ y ^ i k ) ) , ( 9 ) \mathcal{L}_{consist}^k=\frac1N\sum_{i=0}^{N-1}\Big(\mathrm{KL}(\hat{y}_i^k\|\hat{y}_{i,\lambda}^{n\to k})+\mathrm{KL}(\hat{y}_{i,\lambda}^{n\to k}\|\hat{y}_i^k)\Big),\quad\quad\quad(9) Lconsistk=N1i=0N1(KL(y^iky^i,λnk)+KL(y^i,λnky^ik)),(9)

  1. 领域特定图像恢复 (DSIR) (公式 10 和 11)
  • 目的:从低级特征中恢复图像,作为正则化任务。
  • 推导
    • 定义图像恢复模块的前向传播,使用编码器 E E E 和图像恢复解码器 D r e c D_{rec} Drec
    • 通过L2距离作为恢复损失 L r e c L_{rec} Lrec 来优化图像恢复模块。

x ^ i k = D r e c k ( E ( x i , λ n → k ) ) , ( 10 ) \begin{aligned}\hat{x}_{i}^{k}=D_{rec}^{k}(E(x_{i,\lambda}^{n\to k})),\quad(10)\end{aligned} x^ik=Dreck(E(xi,λnk)),(10)

L r e c k = 1 N H W C ∑ i = 0 N − 1 ∑ h = 0 H − 1 ∑ w = 0 W − 1 ∑ c = 0 C − 1 ( x i k ( h , w , c ) − x ^ i k ( h , w , c ) ) 2 , ( 11 ) \begin{aligned}\mathcal{L}_{rec}^k&=\frac{1}{NHWC}\sum_{i=0}^{N-1}\sum_{h=0}^{H-1}\sum_{w=0}^{W-1}\sum_{c=0}^{C-1}\left(x_i^k(h,w,c)-\hat{x}_i^k(h,w,c)\right)^2,\quad(11)\end{aligned} Lreck=NHWC1i=0N1h=0H1w=0W1c=0C1(xik(h,w,c)x^ik(h,w,c))2,(11)

7. 总损失 (公式 12)

  • 目的:结合所有损失,以全面优化模型。
  • 推导
    • 总损失 L t o t a l L_{total} Ltotal 是基础分割损失 L s e g k L_{seg}^k Lsegk、合成图像的分割损失 L s e g c n − k L_{seg}^{cn-k} Lsegcnk、图像恢复损失 L r e c k L_{rec}^k Lreck 和一致性损失 L c o n s i s t k L_{consist}^k Lconsistk 的加权和。
    • 每个损失函数都由一个对应的权重参数 λ \lambda λ 控制,这些权重参数在训练前需要设定。
    • 总损失函数可以表示为:

L t o t a l = 1 K ∑ k = 1 K ( λ 1 L s e g k + λ 2 L s e g c n − k + λ 3 L r e c k + λ 4 L c o n s i s t k ) L_{total} = \frac{1}{K} \sum_{k=1}^{K} \left( \lambda_1 L_{seg}^k + \lambda_2 L_{seg}^{cn-k} + \lambda_3 L_{rec}^k + \lambda_4 L_{consist}^k \right) Ltotal=K1k=1K(λ1Lsegk+λ2Lsegcnk+λ3Lreck+λ4Lconsistk)

其中, K K K 是源域的数量, λ 1 \lambda_1 λ1 λ 4 \lambda_4 λ4 是超参数,用来平衡不同损失项的重要性。

想象我们正在处理眼科疾病的诊断,需要从眼底图像中分割出视盘和视杯区域。

我们收集了来自多家医院的眼底图像,每家医院使用不同的眼底相机,这就在图像中造成了变化,可以被视为不同的“域”。

  1. 傅立叶变换(公式1):我们首先将每张眼底图像的空间信息转换为频率域,因为这样可以减少由于不同相机造成的图像对比度或亮度变化的影响。

    例子:对于每张眼底图像,我们计算其傅立叶变换,捕捉图像的结构和纹理细节的频率成分。

  2. 振幅和相位分解:进行傅立叶变换后,我们分离振幅和相位成分。振幅可能包含了图像的风格信息,而相位则包含了结构信息。

    例子:从变换后的眼底图像中,我们提取振幅和相位。振幅可能反映了视盘和视杯的纹理信息,而相位则描绘了它们的形状和位置。

  3. 随机振幅混合(RAM)(公式2和3):为了增加训练数据的多样性,我们混合了来自不同域的图像振幅,创造新的图像风格。

    例子:我们可能会取一张来自甲医院的眼底图像的振幅,与乙医院的图像振幅混合,然后进行逆傅立叶变换,创建一个新的混合风格图像供模型学习。

  4. 分割模型训练(公式4, 5, 6, 7和8):模型被训练用来从原始图像和新创建的混合图像中分割视盘和视杯。它必须学会无视相机的特性,准确分割。

    例子:模型在眼底图像中预测视盘和视杯的边界。我们使用交叉熵和Dice损失来评估预测分割与实际医学标注的一致性。

  5. 语义一致性损失(公式9):我们引入了语义一致性损失来确保模型对原始图像及其混合版本的分割预测保持一致性。

    例子:如果模型在甲医院的图像中预测了视盘的边界,它也应该在由甲乙医院数据创建的混合图像中做出相似的预测,以保持预测的一致性。

  6. 领域特定图像恢复(DSIR)(公式10和11):此步骤帮助模型学习如何从混合频率信息中恢复原始眼底图像,加强对解剖结构的理解。

    例子:模型尝试从混合了不同医院图像数据的频率信息中重建甲医院的原始眼底图像。

  7. 总损失(公式12):所有损失组成部分结合起来形成总损失,用于训练模型。

效果

在这里插入图片描述

红色轮廓表示真实的分割边界(ground truths),而绿色和蓝色轮廓表示由不同方法预测的分割边界。

可以看出,“Ours”(作者的方法)在分割边缘的精确度上与真实边缘的一致性较高,这表明其在这些任务上的有效性。

在这里插入图片描述
"语义一致性训练策略"本文提高模型泛化能力的方法,目的是确保模型在不同数据集(或称为“域”)上都能给出准确的分割结果。

这种策略涉及在训练过程中使用特定的损失函数,促使模型学习到在视觉上可能有所不同但在结构上应该相似的图像之间保持一致的分割预测。

图像中的Fig. 4,显示了两组数据:

  • 绿色柱子表示当使用语义一致性损失作为训练模型的一部分时的模型性能,这种情况下的Dice系数通常更高。
  • 蓝色柱子表示没有使用语义一致性损失进行训练时的模型性能,这种情况下的Dice系数较低。

Dice系数是一个衡量分割质量的指标,数值范围从0到1,数值越接近1,说明模型的分割结果与真实情况(即医生或专家标注的真实边缘)越吻合。

因此,图中绿色柱子较蓝色柱子高表示模型在使用语义一致性损失时能够获得更准确的分割结果。

性能差异的意义在于,通过使用语义一致性训练策略,模型能够更好地学习如何处理来自不同来源的图像,即便这些图像在外观上有所不同(比如由于不同的成像设备或成像条件造成的差异),模型依然能够准确识别出图像中的结构,这对于实际临床应用是非常重要的。

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

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

相关文章

(详细使用指南)Linux下交叉编译带ffmpeg的opencv并移植到RK3588等ARM端

一 问题背景 瑞芯微RK3588等嵌入式板作为边缘端设备为算法模型的部署提供了便利,目前很多分类或好检测模型针对边缘端做了优化或量化,使得在边缘端也能达到实时稳定的识别和检测效果。 但嵌入式设备普遍的flash emmc不大,一般在32G左…

MySQL - 事务日志

目录 1. redo日志 1.1 为什么需要REDO日志 1.2 REDO日志的好处、特点 1. 好处 2. 特点 1.3 redo的组成 1.4 redo的整体流程 1.5 redo log的刷盘策略 1.6 不同刷盘策略演示 1. 流程图 ​编辑2. 举例 1.7 写入redo log buffer 过程 1.8 redo log file 1. 相关参数…

初识Lombok

前言 最近读一些公司的业务代码,发现近几年的java项目工程中都使用了lombok,lombok是一个可以自动生成get,set、toString等模板类方法的工具框架,程序再引入lombok后,添加一个注解便可以不写get\set\toString等方法。 Lombok示例…

DALL-E 系列 (1-3)

DALL-E 系列 (1-3) 本文主要梳理 DALL-E 系列图像生成模型的整体框架,相关论文中都包含了丰富的训练、优化细节,对这些细节本文不做过多介绍,有兴趣的读者可以阅读原文。注意,在阅读本文之前,最好先了解 VAE、VQVAE、…

SQL进阶(三):Join 小技巧:提升数据的处理速度

复杂数据结构处理:Join 小技巧:提升数据的处理速度 本文是在原本sql闯关的基础上总结得来,加入了自己的理解以及疑问解答(by GPT4) 原活动链接 用到的数据:链接 提取码:l03e 目录 1. 课前小问…

静态时序分析:SDC约束命令set_load详解

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 set_load命令用于指定端口(port)或线网(net)的负载电容,该指令的BNF范式(有关BNF范式,可以参考以往文章)为&#…

锂电池SOC估计 | PyTorch实现基于Basisformer模型的锂电池SOC估计

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 PyTorch实现基于Basisformer模型的锂电池SOC估计 锂电池SOC估计,全新【Basisformer】时间序列预测 1.采用自适应监督自监督对比学习方法学习时序特征; 2.通过双向交叉注意力机制计算历史序列和…

计算机网络面经-TCP的拥塞控制

写在前边 前边我们分享了网络分层协议、TCP 三次握手、TCP 四次分手。今天我们继续深入分享一下 TCP 中的拥塞控制。 对于 TCP 的拥塞控制,里边设计到很多细节,平平无奇的羊希望通过这一节能够将这部分内容串通起来,能够让你更深刻的记忆这部分内容。 思维导图 1、什么…

嵌入式学习 Day 23

一. 进程基本概念: 1.进程: 程序:存放在外存中的一段数据组成的文件 进程:是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡 2.进程相关命令: 1.top 动态查看当前系统中的所有进程信息(根据CPU占用率排序)…

Java/Python/Go不同开发语言基础数据结构和相关操作总结-GC篇

Java/Python/Go不同开发语言基础数据结构和相关操作总结 1. 常见gc方式1.1 gc判断对象是否存活1.2 引用计数法1.2 标记-清除算法1.3 复制算法1.4 标记-压缩算法1.5 分代收集算法 2. java的gc方式以及垃圾回收器2.1 gc方式2.1 gc回收器2.1.1 Serial收集器2.1.2 ParNew收集器2.1.…

成长优化算法(Growth Optimizer,GO)求解不闭合MD-MTSP(提供MATLAB代码)

一、成长优化算法介绍 成长优化算法(Growth Optimizer,GO)由Qingke Zhang等人于2023年提出,该算法的设计灵感来源于个人在成长过程中的学习和反思机制。学习是个人通过从外部世界获取知识而成长的过程,反思是检查个体…

手写myscrapy(五)

项目地址:https://gitee.com/wyu_001/myscrapy 我们继续完成返回的处理类 MyResponse的实现 先上类图: 主要功能: json() 方法解析返回的json格式内容,转换为 python 的json对象 xpath()方法解析返回的html格式的内…

LabVIEW和Python开发微细车削控制系统

LabVIEW和Python开发微细车削控制系统 为满足现代精密加工的需求,开发了一套基于LabVIEW和Python的微细车削控制系统。该系统通过模块化设计,实现了高精度的加工控制和G代码的自动生成,有效提高了微细车削加工的自动化水平和编程效率。 项目…

微服务-微服务Spring Security OAuth 2实战

1. Spring Authorization Server 是什么 Spring Authorization Server 是一个框架,它提供了 OAuth 2.1 和 OpenID Connect 1.0 规范以及其他相关规范的实现。它建立在 Spring Security 之上,为构建 OpenID Connect 1.0 身份提供者和 OAuth2 授权服务器产…

区分服务 DiffServ

目录 区分服务 DiffServ 区分服务的基本概念 区分服务 DiffServ 的要点 每跳行为 PHB DiffServ 定义的两种 PHB 区分服务 DiffServ 区分服务的基本概念 由于综合服务 IntServ 和资源预留协议 RSVP 都较复杂,很难在大规模的网络中实现,因此 IET…

挑战杯 基于机器学习与大数据的糖尿病预测

文章目录 1 前言1 课题背景2 数据导入处理3 数据可视化分析4 特征选择4.1 通过相关性进行筛选4.2 多重共线性4.3 RFE(递归特征消除法)4.4 正则化 5 机器学习模型建立与评价5.1 评价方式的选择5.2 模型的建立与评价5.3 模型参数调优5.4 将调参过后的模型重…

vulnhub靶场---->DOUBLETROUBLE: 1

详细思路 知识点1.网段探测2.nmap扫描3.目录扫描4.隐写5.上传木马文件6.awk提权 知识点 图片隐写----->steghide 密码爆破----->stegseek awk提权------>sudo awk BEGIN {system("/bin/bash")}1.网段探测 kali:192.168.0.131 靶机:192.168.0.1…

【小沐学QT】QT学习之Web控件的使用

文章目录 1、简介1.1 Qt简介1.2 Qt下载和安装1.3 Qt快捷键1.4 Qt帮助 2、QtWeb控件2.1 测试代码1(QApplication)2.2 测试代码2(QApplicationQWidget)2.3 测试代码3(QApplicationQMainWindow)2.4 测试代码4&…

Spring事务模板及afterCommit存在的坑

大家好,我是墨哥(隐墨星辰)。今天的内容来源于两个线上问题,主要和大家聊聊为什么支付系统中基本只使用事务模板方法,而不使用声明式事务Transaction注解,以及使用afterCommit()出现连接未按预期释放导致的…

AI赋能Oracle DBA:以自然语言与Oracle数据库互动

DBA AI助手:以自然语言与Oracle数据库互动 0. 引言1. AI赋能Oracle DBA的优势2. AI如何与Oracle数据库交互3. 自然语言查询的一些示例4. 未来展望 0. 引言 传统的Oracle数据库管理 (DBA) 依赖于人工操作,包括编写复杂的SQL语句、分析性能指标和解决各种…