【半监督医学图像分割 2023 CVPR】UCMT 论文翻译

news2024/10/2 12:17:22

文章目录

  • 【半监督医学图像分割 2023 CVPR】UCMT 论文翻译
    • 摘要
    • 1. 介绍
    • 2. 相关工作
      • 2.1 半监督学习
      • 2.2 半监督分割
      • 2.3 不确定性引导的半监督语义分割
    • 3. 方法
      • 3.1 问题的定义
      • 3.2 总览
      • 3.3 协作式均值教师
      • 3.4 不确定性指导混合
    • 4. 实验和结论
    • 5. 总结

【半监督医学图像分割 2023 CVPR】UCMT 论文翻译

论文题目:Co-training with High-Confidence Pseudo Labels for Semi-supervised Medical Image Segmentation

中文题目:基于高置信度伪标签的联合训练半监督医学图像分割

论文链接:https://arxiv.org/abs/2301.04465

论文代码:https://github.com/Senyh/UCMT

发表时间:2023年1月

论文团队:东北大学&福建师范大学&阿尔伯塔大学

引用:Shen Z, Cao P, Yang H, et al. Co-training with High-Confidence Pseudo Labels for Semi-supervised Medical Image Segmentation[J]. arXiv preprint arXiv:2301.04465, 2023.

引用数:

摘要

高质量的伪标签对于半监督语义分割是必不可少的。 一致性正则化和基于伪标记的半监督方法利用来自多视图输入的伪标记进行协同训练。

然而,这种协同训练模型往往在训练过程中早期收敛到一致,从而导致模型退化到自我训练模型。

另外,多视点输入是通过对原始图像的扰动或增强而产生的,这不可避免地会在输入中引入噪声,导致低置信度的伪标签。

针对这些问题,我们提出了一种基于不确定性指导的协同均值教师(UCMT)算法,用于具有高置信度伪标签的半监督语义分割。

具体而言,UCMT由两个主要部分组成:

1)协同均值教师(CMT)用于鼓励模型分歧并在子网络之间进行协同训练;

2)不确定性引导区域混合(UMIX)用于根据CMT的不确定性映射操作输入图像,并促进CMT产生高置信度的伪标签。

UCMT结合了UMIX和CMT的优点,在协同训练分割中保留了模型的不一致性,提高了伪标签的质量。

在包括二维和三维模式的四个公共医学图像数据集上进行了广泛的实验,证明了UCMT相对于现有技术的优越性。

1. 介绍

语义分割是医学图像分析的关键。 基于深度学习的分割模型依靠大量的标记数据取得了很大的进展[1,2]。

然而,标记这种像素级注释是费力的,需要专家知识,特别是在医学图像中,导致标记数据昂贵或根本不可用。 与此相反,未标记的数据价格低廉,且相对容易获得。

在这种情况下,半监督学习(SSL)通过从有限数量的标记数据和任意数量的未标记数据中挖掘信息,以缓解标记稀缺性问题,成为主要的数据高效策略[3]。


一致性正则化[4]和伪标记[6]是半监督语义分割的两种主要方法。

目前,通过子网络间的交叉监督,将一致性正则化和伪标记相结合,在半监督分割中表现出了很好的性能[6,7,8,5,9]。 这些方法的一个关键缺陷是子网络往往很早就收敛到一致情况,导致协同训练模型退化为自训练[10]。

在协同训练中,子网络之间的不一致性是至关重要的,用不同的参数初始化或用不同的视图训练的子网络具有不同的偏差(即不一致性),以确保它们提供的信息是相互补充的。

影响这些方法性能的另一个关键因素是伪标签的质量。

更重要的是,这两个因素是相互影响的。 直观地说,高质量的伪标签应该具有低的不确定性[11]。

然而,通过不同的扰动或增强来增加协同训练子网络之间的不一致程度,会导致它们的训练方向相反,从而增加伪标签的不确定性。

为了研究不一致性和伪标签质量对基于协同训练的半监督分割的影响,我们进行了一个试点实验来说明这些相关性。 如图1所示,与均值教师(MT)[4][图1(a)]相比,交叉伪监督(CPS)[5][图1(b)]具有较高的模型分歧[(d)]和较低的不确定性[图1(e)]在半变量分割上产生较高的性能[图1(f)]。

注意,两个分支的骰子损失是计算来衡量分歧的。

问题是:如何有效地改善协同训练子网络与伪LA质量之间的不一致

image-20230215103409386

本文主要研究了两个主要目标:同时保持模型的不一致性和高置信度的伪标签。

为此,我们提出了不确定性引导的协同均值教师(UCMT)框架,该框架能够基于更高置信度的伪标签(图1(e)),保留协同训练分割子网络之间更高的不一致性(图1(d)),从而在相同的骨干网和任务设置下实现更好的半监督分割性能(图1(f))。

具体而言,UCMT包括两个主要部分:

1)协同均值教师(CMT)和2)不确定性引导区域混合(UMIX),

其中UMIX根据CMT的不确定性映射操作输入图像,而CMT则在UMIX图像的伪标签监督下进行协同训练。

受协同教学[12,10,5]的启发,我们在协同训练框架中引入了第三个组件教师模型,作为正则化器来构造CMT以获得更有效的SSL。

教师模型通过对学生模型的平均作为自我集成,作为第三部分指导两个学生模型的培养。

此外,我们开发了UMIX来构造高可信度的伪标签,并执行区域退出来学习鲁棒的半监督语义分割模型。 UMIX不是随机区域擦除或交换[13,14],而是根据分割模型的认知不确定性对原始图像及其对应的伪标签进行处理,不仅降低了伪标签的不确定性,而且扩大了训练数据的分布。

最后,通过结合UMIX和CMT的优点,本文提出的UCMT方法在多个基准数据集上的半监督分割中显著地改善了现有的(SOTA)结果。 例如,UCMT和UCMT(U-Net)的DICE SIMIL分别达到88.22%和82.14%

概括地说,我们的贡献主要包括:

  • 我们指出了现有的基于协同训练的半监督分割方法存在的问题:子网络之间的不一致性不足和伪标签置信度较低。 为了解决这一问题,我们设计了一个不确定性指导协作模型教师来保持与高置信度伪标签的协同训练,其中我们将CMT和UMIX结合到一个半监督医学图像分割的整体框架中。
  • 为了避免在新样本中引入噪声,我们提出了一种不确定性引导的区域混合算法UMIX,该算法鼓励分割模型产生高可信度的伪标签,并扩大训练数据分布。
  • 我们在四个公共医学图像分割数据集上进行了广泛的实验,包括二维和三维场景,以研究我们方法的有效性。 综合结果表明,我们的方法每个组成部分的有效性和UCMT优于现有的技术。

2. 相关工作

2.1 半监督学习

半监督学习旨在通过利用通常与无监督学习相关的信息来提高监督学习的性能,反之亦然[3]。

SSL的一种常见形式是在监督学习的目标函数中引入一个正则化项,以利用未标记的数据。

从这个角度来看,基于SSL的方法可以分为两条主线,即伪标记和一致性正则化。

伪标记试图生成类似于groud truth的伪标记,对其进行模型训练,如监督学习[6]。 一致性正则化使模型的输出在不同扰动下对输入保持一致[4]。

目前最先进的方法已经将这两种策略结合起来,并在半光滑图像分类中显示出优越的性能[16,17]。 在此基础上,我们探索了更有效的一致性学习算法用于半监督语义分割。

2.2 半监督分割

与图像分类相比,语义分割对像素级标注的要求更高,代价也更大。 半监督语义分割继承了半监督图像分类的主要思想。

一致性正则化和伪标记相结合,主要是利用伪标记在子网络之间进行交叉监督,已经成为自然图像[7,5]和医学图像[18,19,20,21]半监督语义分割的主流策略。

具体地说,这些组合方法加强了不同扰动下预测的一致性,例如输入扰动[22,23]、特征扰动[7]和网络扰动[4,5,20,21]。 另外,基于对抗性学习的方法,使来自标记数据的模型预测分布与来自未标记数据的模型预测分布一致,也可以被视为一致性正则化的一种特殊形式[24,25]。 然而,这种交叉监管模式可能会早期收敛为共识,从而退化为自我训练模式。 我们假设扩大基于高置信度伪标签的协同训练模型的不一致性可以提高SSL的性能。 因此,我们提出了一种新的SSL框架,即UCMT,以生成更准确的伪标签,并保持半监督医学图像分割的协同训练。

2.3 不确定性引导的半监督语义分割

模型不确定性(认知不确定性)可以指导SSL模型从伪标签中捕获信息。 利用模型不确定性的两个关键问题是如何获取和利用模型不确定性。 目前,估计模型不确定性的策略主要有两种:1)使用Monte Carlo Dropout[26],2)计算不同预测之间的方差[27]。 对于半监督语义分割,以往的研究利用模型的不确定性来重新加权训练损失[18]或选择对比样本[15]。 然而,这些方法都需要手动设置阈值,以忽略低置信度伪标签,其中固定阈值难以确定。 本文通过对相同输入的CMT预测的熵来获得认知不确定性,并利用这种不确定性来指导区域混合,以便从未标记的数据中逐步挖掘信息。

3. 方法

3.1 问题的定义

在介绍我们的方法之前,我们首先定义了半监督分割问题,并给出了本文中使用的一些符号。 训练集 D = { D L , D U } \mathcal{D}=\{\mathcal{D}_{\mathcal{L}},\mathcal{D}_{\mathcal{U}}\} D={DL,DU}包含一个标记集 D L = { ( X i , Y i ) i = 1 N } \mathcal{D}_{\mathcal{L}}=\{(X_i,Y_i)^N_{i=1}\} DL={(Xi,Yi)i=1N}和一个未标记集 D U = { ( X j ) j = N + 1 M } \mathcal{D}_{\mathcal{U}}=\{(X_j)_{j=N+1}^M\} DU={(Xj)j=N+1M},其中 X i / X j X_i/X_j Xi/Xj表示第 i t h / j t h i_{th}/j_{th} ith/jth个标记/未标记图像, Y i Y_i Yi是标记图像的基本真值, N N N M − N M-N MN分别是标记和未标记样本的个数。 给定训练数据 D \mathcal{D} D,半监督语义分割的目标是学习一个在未知测试集上表现良好的模型 f ( ⋅ ; θ ) f(\cdot;\theta) f(;θ)

3.2 总览

为了避免协同训练对自训练的影响,我们建议在训练过程中鼓励模型分歧,并保证伪标签具有较低的不确定性。

基于这种动机,我们提出了一种基于不确定性指导的协同均值教师半监督图像分割方法,该方法包括:1)协同均值教师和2)不确定性指导的区域混合。

如图1(d)所示,CMT和UCMT逐渐扩大了协同训练子网络之间的分歧。

同时,CMT配备了UMIX,保证了伪标签的低不确定性。

借助这些条件,我们可以安全地维持协同训练状态,从而提高SSL对未标记数据挖掘的有效性。

CMT及UMIX的详情分别载于第3.3及3.4节。 图2说明了拟议的UCMT的示意图。

UCMT的训练阶段一般分为两个步骤。

第一步,利用原始标记和未标记数据对CMT进行训练,得到不确定度图; 然后,我们使用MUMIX生成基于不确定性映射的新样本。

在第二步中,我们使用UMIX样本重新训练CMT。 UCMT训练过程的细节如算法1所示。

虽然UCMT包括三个模型,即一个教师模型和两个学生模型,但在测试阶段只需要教师模型。

image-20230215114209150

3.3 协作式均值教师

目前基于一致性学习的SSL算法,如Mean-Teacher[4]和CPS[5],建议在多模型体系结构中执行伪标签之间的一致性正则化,而不是在单个模型中执行。 然而,在训练过程中,双网络SSL框架可能会提前收敛到一致,协同训练退化到自训练[10]。 为了解决这个问题,我们通过在协同培训体系结构中引入一个“仲裁者”,即教师模型[5],设计了协作平均教师(CMT)框架,以指导两个学生模型的培训。

如图2所示,CMT由一个教师模型和两个学生模型组成,其中教师模型是学生模型平均值的自集成。

对于有标记的数据,这些模型都是通过监督学习优化的。 对于无标记数据,有两个关键因素:1)两个学生模型之间的协同训练;2)教师对学生模型的直接监督。 形式上,CMT的数据流图可以说明为2,
↗ f ( ⋅ ; θ 1 ) → Y ^ 1 X → f ( ⋅ ; θ ) → Y ^ 0 ↘ f ( ⋅ ; θ 2 ) → Y ^ 2 , \begin{aligned} \nearrow f\left(\cdot ; \theta_{1}\right) & \rightarrow \hat{Y}^{1} \\ X \rightarrow f(\cdot ; \theta) & \rightarrow \hat{Y}^{0} \\ \searrow f\left(\cdot ; \theta_{2}\right) & \rightarrow \hat{Y}^{2}, \end{aligned} f(;θ1)Xf(;θ)f(;θ2)Y^1Y^0Y^2,
其中 X X X是标记或未标记数据的输入图像, Y ^ 0 / Y ^ 1 / Y ^ 2 \hat{Y}^0/\hat{Y}^1/\hat{Y}^2 Y^0/Y^1/Y^2是预测的分割图,参数θ、θ1和θ2的 f ( ⋅ ; θ ) / f ( ⋅ ; θ 1 ) / f ( ⋅ ; θ 2 ) f(\cdot;\theta)/f(\cdot;\theta_1)/f(\cdot;\theta_2) f(;θ)/f(;θ1)/f(;θ2)分别表示教师模型和学生模型。 这些模型具有相同的体系结构,但对网络扰动的初始化权重不同。

为了探索标记和未标记的数据,训练UCMT的总损失L包括两个部分,即有监督损失 L s \mathcal{L}_s Ls和无监督损失 L u \mathcal{L}_u Lu
L = L s + λ L u \mathcal{L}=\mathcal{L}_s+\lambda\mathcal{L}_u L=Ls+λLu

其中λ是平衡有监督和无监督学习损失的正则化参数。 我们采用一个高斯渐升函数来逐渐增加系数,即λ(t)=λm×exp[-5(1-ttm)2],其中λm缩放加权函数的最大值,t表示当前迭代,tm是训练中的最大迭代。

监督学习路径。 对于标记的数据,监督损失被制定为,
L s = 1 N ∑ i = 1 N L s e g ( f ( X i ; θ ) , Y i ) + L s e g ( f ( X i ; θ 1 ) , Y i ) + L s e g ( f ( X i ; θ 2 ) , Y i ) \mathcal{L}_s=\frac{1}{N}\sum_{i=1}^N\mathcal{L}_{seg}(f(X_i;\theta),Y_i)+\mathcal{L}_{seg}(f(X_i;\theta_1),Y_i)+\mathcal{L}_{seg}(f(X_i;\theta_2),Y_i) Ls=N1i=1NLseg(f(Xi;θ),Yi)+Lseg(f(Xi;θ1),Yi)+Lseg(f(Xi;θ2),Yi)
其中 L s e g \mathcal{L}_{seg} Lseg可以是任何有监督的语义分割损失,如交叉熵损失和骰子损失。 注意,我们在实验中选择骰子损失作为它在医学图像分割中的引人注目的性能。

无监督学习路径。 无监督损失LU作为一个正则化项,为标记和未标记数据挖掘潜在的知识。 LU包括两个学生模型之间的交叉伪监督LCPS和从教师引导学生模型的平均教师监督LMTS,具体如下:
L u = L c p s + L m t s \mathcal{L}_u=\mathcal{L}_{cps}+\mathcal{L}_{mts} Lu=Lcps+Lmts
交叉伪监管。 LCPS的目的是促进两个学生相互学习,加强他们之间的一致性。 LCPS=LCPS1+LCPS2鼓励两个学生子网络f(·;θ1)和f(·;θ2)的双向交互,如下所示,
L c p s 1 = 1 M − N ∑ j = 1 M − N L s e g ( f ( X j ; θ 1 ) , Y ^ j 2 ) L c p s 2 = 1 M − N ∑ j = 1 M − N L s e g ( f ( X j ; θ 2 ) , Y ^ j 2 ) \mathcal{L}_{cps1}=\frac{1}{M-N}\sum_{j=1}^{M-N}\mathcal{L}_{seg}(f(X_j;\theta_1),\hat{Y}_j^2) \\ \mathcal{L}_{cps2}=\frac{1}{M-N}\sum_{j=1}^{M-N}\mathcal{L}_{seg}(f(X_j;\theta_2),\hat{Y}_j^2) Lcps1=MN1j=1MNLseg(f(Xj;θ1),Y^j2)Lcps2=MN1j=1MNLseg(f(Xj;θ2),Y^j2)
均值–教师监督。 为了避免两个学生交叉督导的错误方向,我们引入了教师模式来指导学生模式的优化。 具体地说,教师模型通过学生模型平均值的指数移动平均值(EMA)来更新:
θ t = α θ t − 1 + ( 1 − α ) θ 1 t + θ 2 t 2 \theta^t=\alpha\theta^{t-1}+(1-\alpha)\frac{\theta^t_1+\theta^t_2}{2} θt=αθt1+(1α)2θ1t+θ2t
其中T表示当前的训练迭代。 α是控制参数更新速率的均方根衰减,我们在实验中设置α=0.999。 平均教师监督损失LMTS=LMTS1+LMTS2由两个分支计算:

L m t s 1 = 1 M − N ∑ j = 1 M − N L s e g ( f ( X j ; θ 1 ) , Y ^ j 0 ) L m t s 2 = 1 M − N ∑ j = 1 M − N L s e g ( f ( X j ; θ 2 ) , Y ^ j 0 ) \begin{aligned} \mathcal{L}_{m t s 1} & =\frac{1}{M-N} \sum_{j=1}^{M-N} \mathcal{L}_{s e g}\left(f\left(X_{j} ; \theta_{1}\right), \hat{Y}_{j}^{0}\right) \\ \mathcal{L}_{m t s 2} & =\frac{1}{M-N} \sum_{j=1}^{M-N} \mathcal{L}_{s e g}\left(f\left(X_{j} ; \theta_{2}\right), \hat{Y}_{j}^{0}\right) \end{aligned} Lmts1Lmts2=MN1j=1MNLseg(f(Xj;θ1),Y^j0)=MN1j=1MNLseg(f(Xj;θ2),Y^j0)

3.4 不确定性指导混合

尽管CMT可以促进协同训练的不一致性,但它也稍微增加了伪标签的不确定性,如图1所示。

另一方面,随机区域退出可以扩大训练分布,提高模型的泛化能力[13,14]。

然而,这种对输入图像的随机扰动不可避免地在新样本中引入噪声,从而恶化了SSL伪标签的质量。

一个子网络可能会向其他子网络提供一些不正确的伪标签,从而降低它们的性能。

为了克服这些缺陷,我们提出了UMIX算法,在CMT产生的不确定性映射的指导下对图像进行处理。 UMIX的主要思想是用输入图像中的前k个最确定(高置信度)区域替换前k个最不确定(低置信度)区域来构造新的样本。

例如,如图2所示,我们从不确定性图U中获得最不确定的区域(红色网格)和最确定的区域(绿色网格)。然后,我们用输入图像X中的绿色区域替换红色区域,以构造新的样本X’。


形式上,Umix构造了一个新的样本x’=Umix(x,u1,u2;k,1/r),方法是用x中的前k个最确定的区域(V1和V2中的红色网格)替换前k个最不确定的区域(V2和V1中的绿色网格),其中每个区域的大小为图像大小的1/r。

为了保证不确定度评估的可靠性,我们通过对教师和学生模型的输出进行积分来获得不确定映射,而不是执行Monte Carlo dropout估计模型[26,18]设计的t个随机前向传递,这相当于从以前和当前的迭代中采样预测。 这一过程可制定为:
U m = U n c e r t r a i n ( f ( X ; θ m ) , f ( X ; θ ) ) = − ∑ c P c log ⁡ ( P c ) P c = 1 2 ( S o f t m a x ( f ( X ; θ m ) ) + S o f t m a x ( f ( X ; θ ) ) ) U^m=\mathcal{Uncertrain}(f(X;\theta_m),f(X;\theta))=-\sum_{c}P_c\log(P_c) \\ P_c=\frac{1}{2}(Softmax(f(X;\theta_m))+Softmax(f(X;\theta))) Um=Uncertrain(f(X;θm),f(X;θ))=cPclog(Pc)Pc=21(Softmax(f(X;θm))+Softmax(f(X;θ)))
其中m=1,2表示学生模型的索引,c表示类索引。

4. 实验和结论

5. 总结

提出了一种用于半监督医学图像分割的不确定性引导协作均值教师。 我们的主要思想在于保持与高置信度伪标签的协同训练,以提高SSL模型从未标记数据中挖掘信息的能力。 在四个公共数据集上的大量实验证明了该思想的有效性,并表明所提出的UCMT可以达到最先进的性能。 在未来的研究中,我们将更加深入地研究协同训练的潜在机制,以实现更有效的半监督图像分割。

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

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

相关文章

webpack(4版本)使用

webpack简介:webpack 是一种前端资源构建工具,一个静态模块打包器(module bundler)。在 webpack 看来, 前端的所有资源文件(js/json/css/img/less/...)都会作为模块处理。它将根据模块的依赖关系进行静态分析,打包生成对应的静态资源(bundle)…

sentinel持久化方案

一.sentinel规则推送原理 1.原有内存规则存储原理 (1)dashborad中请求到服务器后,在controller中通过http把规则直接推送给client,client接收后把规则放入内存; 2.持久化推送规则原理 ![在这里插入代码片](https://img-blog.csdnimg.cn/1…

质量保障体系建设演进案例

在业务早期发展阶段,主要是产品驱动、研发和测试互相配合。不同的测试方法是验证和保障交付质量的手段,而不是构建质量体系的基石。测试的努力带来的更多是一些“安全感”,而非安全保障。因此,要做到高质量的交付,就需…

k8s简单搭建

前言 最近学习k8s,跟着网上各种教程搭建了简单的版本,一个master节点,两个node节点,这里记录下防止以后忘记。 具体步骤 准备环境 用Oracle VM VirtualBox虚拟机软件安装3台虚拟机,一台master节点,两台…

Wails简介

https://wails.io/zh-Hans/docs/introduction 简介 Wails 是一个可让您使用 Go 和 Web 技术编写桌面应用的项目。 将它看作为 Go 的快并且轻量的 Electron 替代品。 您可以使用 Go 的灵活性和强大功能,结合丰富的现代前端,轻松的构建应用程序。 功能…

mac上安装mysql

mac上安装mysql1. 关于Linux上安装mysql2. 下载安装2.1 下载2.2 安装3. 客户端连接mysql3.1 先查看mysql服务3.2 连接mysql客户端3.2.1 终端使用命令连接3.2.2 可视化工具连接3.3 其他简单操作(启动服务等)3.3.1 可视化界面操作4. 配置环境变量4.1 配置环…

视图、索引、存储过程、触发器

视图、索引、存储过程、触发器 group by补充: 规范来说,分组查询中,select后的字段只能是group by的字段或者是聚合函数。mysql在这有一个小优化,分组后如果某个字段的所有记录相同,同样可以select。 视图 视图是虚拟…

一文详解java.nio.ByteBuffer

java.nio.ByteBuffer是一个可以进行缓冲区分配、读取和写入的缓冲区,其持有一个字节数组,并通过4个属性:capacity、limit、position、mark来管理缓冲区,进行字节级别读取和数据写入。基于此,ByteBuffer常被用来处理网络…

MySql数据库约束

概述、目的 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。 目的:保证数据库中数据的正确性、有效性和完整性。 分类: 约束描述关键字非空约束限制该字段的数据不能为nullNOT NULL唯一约束保证该字段的所有数据都…

【闲聊杂谈】高并发下基于LVS的负载均衡

1、使用http协议进行网络请求 在前几年公布的用户入网数据中,移动入网的数量已经达到六七亿的规模,固网用户数也达到三至五个亿。想要解决这么大并发访问的场景,有多种的解决方案,常规有基于4层的,也有基于7层的。这个…

ChatGPT提示语编写指南

ChatGPT AI 对话模型自 2022 年 11 月下旬开始可用,此后用户一直在探索聊天机器人的局限性和功能。 然而,OpenAI 也在不断地进行调整,因此 ChatGPT 处于不断变化的状态。 但是我们在这个小指南中描述的提示应该是永恒的。 要获得想要的结果&…

SqlSession 和 SqlSessionTemplate 简单使用及注意事项

1、SqlSession 简单使用 先简单说下 SqlSession 是什么?SqlSession 是对 Connection 的包装,简化对数据库操作。所以你获取到一个 SqlSession 就相当于获取到一个数据库连接,就可以对数据库进行操作。 SqlSession API 如下图示:…

基于 CentOS7 的 KVM 部署 + 虚拟机创建

目录一、实验环境二、部署 KVM三、创建虚拟机四、远程管理 KVM 虚拟机FAQ一、实验环境 实验环境:VMware Workstation 16 Pro 打开虚拟机之前,首先开启 VMware Workstation Pro 16 上的硬件辅助虚拟化功能,如下图所示: 二、部署 …

Spring Cloud Gateway集成Nacos实现负载均衡

💡Nacas可以用于实现Spring Cloud Gateway中网关动态路由功能,也可以基于Nacos来实现对后端服务的负载均衡,前者利用Nacos配置中心功能,后者利用Nacos服务注册功能。接下来我们来看下Gateway集成Nacos实现负载均衡的架构图一. 环境…

为什么现代企业发展离不开CRM系统的助力

如今的CRM系统对于任何企业来说都重要,因为它能帮助企业收获新客户,保留现有客户,并且将不同部门的信息全部汇集,实时提供关于每位客户整体全面的看法。因此,销售、市场营销和客户支持等领域的客户直接服务员工能够做出…

VHDL-延迟模型-惯性延迟与传输延迟

目录 1,惯性延时 2,传输延时 信号通过元件都会有延迟,延迟时间的计算是逻辑仿真的重要功能。考虑延迟信息得到的仿真输出波形可以更精确地反映实际电路的情况。针对元件的延时,人们根据需要建立了一些用的延时模型,这…

集成电路相关书籍

注:从此开始,文中提到的书籍都会在公众号对应文章末尾给出链接,不需要在微信后台获取,当然还是可以通过在微信后台回复相关书名获取对应的电子书。 在后台看到很多人回复集成电路相关的一些书籍,所以本文就提供一些书籍…

GD库图片裁剪指定形状解决办法(PHP GD库 海报)

需求描述:需要把图片裁剪成一个指定的平行四边形,目的是使用GD库,把裁剪后的图片放在底图上面,使最终合成的图片看起来是一个底图平行四边形的样子提示:可以结合本作者的其他文章,来生成一个定制化的海报&a…

【项目精选】基于Javaee的影视创作论坛的设计与实现(视频+论文+源码)

点击下载源码 基于Javaee的影视创作论坛的设计与实现主要用功能包括: 首页推荐、用户管理、影片管理、评论管理、 预告片管理、海报管理、公告管理、数据检索、用户注册与登录等等功能、统结构如下 (1)后台管理: 管理模块:管理员…

vscode编程小插件之Doxygen和Better Align

一、插件Doxygen:配置相应文件、函数说明项。 1、扩展商店,搜索Doxygen,如下图1,安装。 图1 2、设置项中,选择扩展设置,如图2 图2 3、配置版本、作者邮箱、作者名称、日期格式等等,如图3 4、定义函数后&…