论文阅读笔记:Task-Customized Mixture of Adapters for General Image Fusion

论文阅读笔记:Task-Customized Mixture of Adapters for General Image Fusion

  • 1 背景
  • 2 创新点
  • 3 方法
  • 4 模块
    • 4.1 任务定制混合适配器
    • 4.2 提示生成
    • 4.3 提示驱动融合
    • 4.4 互信息正则化MIR
    • 4.5 任务定制化损失
  • 5 实验
    • 5.1 VIF任务
    • 5.2 MEF任务
    • 5.3 MFF任务
    • 5.4 消融实验
    • 5.5 性能和可扩展性
    • 5.6 融合可控性
    • 5.7 泛化性
    • 5.8 路由器可控性
    • 5.9 超参实验
    • 6 思考

代码:https://github.com/YangSun22/TC-MoA

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

1 背景

通用图像融合旨在整合多个源图像的重要信息。然而,由于跨任务差距显著,各自的融合机制在实际中差异较大,导致跨子任务的性能受限。例如,多曝光图像融合(MEF)更注重整合多重曝光等级的图像为高质量的全曝光图像。每幅源图像为融合图像贡献了自己的光照和结构信息。可见光-红外光融合(VIF)是多模态融合(MMF)的一个子领域,旨在融合红外和可见光模态的互补信息,以产生鲁棒和信息丰富的融合图像,红外图像提供了更多的强度信息,而可见光图像提供了更多的纹理和梯度信息。多焦距图像融合(MFF)旨在从一系列部分聚焦的图像中产生一幅全聚焦图像,多焦距融合图像中的一块通常只对应一幅源图像。因此可见MEF和VIF涉及相对平衡的融合,而MFF是一种极不平衡的任务,倾向于表现出极端化的选择。

任务特定的方法通常只使用任务特定策略,比如设计复杂的任务偏向网络或者利用任务特定融合损失,导致对其他任务不通用。其实这些不同的融合任务都有相似的目标,即从多张源图像中整合互补信息。

参考论文《U2fusion: A unified unsupervised image fusion network》的观点来回答为什么要用通用图像融合模型:

作者认为通用模型可以提升每种单独任务的性能,比如经过多曝光融合训练的模型,就具有潜在提升曝光不足的多焦点和多模态图像融合的能力。统一模型可以比多个单独训练的模型具有更强的泛化能力,为每个单一的融合任务获得更好的结果

为了解决这个问题,作者提出了一种新的任务定制的混合适配器(TC-MoA)用于通用图像融合,在统一的模型中自适应地提示各种融合任务。借用专家混合体(MoE)的洞察力,将专家作为有效的调优适配器,以提示预训练的基础模型。这些适配器在不同任务之间共享,并通过互信息正则化进行约束,保证了对不同任务的兼容性,同时对多源图像具有互补性。如图1所示,MFF任务的提示和VIF以及MEF都有很大的不同,以为着特征选择在显性强度偏向上具有更多的双极性。
在这里插入图片描述
任务特定路由网络以不同的主导强度从不同源上提取任务特定信息。值得注意的是,TC-MoA 控制了不同融合任务的主导强度偏差,成功地将多个融合任务统一在一个模型中。 大量实验表明,TC-MoA 在学习共性方面优于竞争方法,同时保留了通用图像融合(多模态、多曝光和多聚焦)的兼容性,并且在更多泛化实验中表现出惊人的可控性。

2 创新点

  1. 提出了一个统一的通用图像融合模型,为自适应多源图像融合(受益于从各自的模态中动态聚合有效信息)提供了一种新的任务定制的适配器混合( TC-MoA )。

  2. 提出了适配器的互信息正则化,使模型能够更准确地识别不同源图像的主导强度。

  3. 首次提出了一个基于MoE的通用图像融合基础模型的灵活适配器。通过仅增加2.8 %的可学习参数便可以应对大量的融合任务。大量的实验证明了本文方法相对于竞争方法的优越性,同时显示出显著的可控性和可推广性。

3 方法

本文提出了一个任务定制的通用图像融合适配器,联合参数高效的微调方法和自适应的提示各种融合任务。给定一组源图像 { ( X , Y ) ∣ X , Y ∈ R H × W × 3 } \{(X,Y)|X,Y∈R^{H×W×3}\} {(X,Y)X,YRH×W×3},网络从不同源图像上整合互补信息得到融合图像 I F u s i o n ∈ R H × W × 3 I_{Fusion}∈R^{H×W×3} IFusionRH×W×3。方法流程如图2所示。
在这里插入图片描述
将源图像输入ViT网络,通过 patch embedding 层获得源图像的 tokens。ViT由用于特征提取的编码器和用于图像重建的解码器组成,两者均由 transformer 块组成。在编码器和解码器的每 τ ( τ = 4 ) τ(τ = 4) τ(τ=4) 个 transformer 块中插入一个TC-MoA。每个 TC-MoA 由任务特定路由库、任务共享适配器库和融合层组成。网络通过这些 TC-MoA 逐步调制融合结果。

4 模块

4.1 任务定制混合适配器

每个 TC-MoA 由一个任务特定路由库 { G V , G E , G F } \{G^V,G^E,G^F\} {GV,GE,GF} ,一个任务共享适配器库 { A 1 , … , A N } \{A_1,…,A_N\} {A1,,AN} 和一个提示融合层 F F F 组成。
在这里插入图片描述
TC-MoA 包含两个主要阶段:提示生成和提示驱动融合。为了方便表达,以 VIF 任务为例。假设输入来自 VIF 数据集,用 G 代替VIF对应的路由 G V G_V GV

4.2 提示生成

首先,获取多源特征用于后续处理。定义输入图像对分别为 X X X Y Y Y,第 j j j 个 TC-MoA 之前的网络结构为 E j ( ⋅ ) E_j(·) Ej() ,提取的特征为 f x f_x fx f y f_y fy,其中 f ∈ R p H × p W × C f∈R^{pH×pW×C} fRpH×pW×C p p p 是下采样系数。将 f x f_x fx f y f_y fy concat 起来作为一对源图像 tokens。这使得不同来源的 tokens 可以在后续的网络中交换信息。然而,直接对拼接起来的高维特征进行计算会带来大量不必要的参数,因此作者利用 L ( ⋅ ) L(·) L() 进行特征降维,得到处理后的多源特征 Φ Φ Φ,用公式表述如下:
在这里插入图片描述
其中 C a t ( ⋅ ) Cat(·) Cat() 表示特征拼接, L ( ⋅ ) L(·) L() 由一个线性层和归一化层组成。

接着,根据 Φ Φ Φ 所属任务,从路由库中选择一个特定任务的路由来定制路由方案,即为每个 token 对选择适配器库中哪些适配器,用公式表示如下:
在这里插入图片描述
其中 T o p K ( ⋅ ) TopK(·) TopK() 表示只保持 top K ( k = 2 ) K(k=2) K(k=2) 的值,将其他值设置为 -∞,这样经过softmax,这部分值就会变成0。 W g W_g Wg W n o i s e W_{noise} Wnoise 是可学习的参数。如图2右侧不同适配器被路由器的响应比例不同(如 G V G^V GV 第二第三个路由响应更高,第一第四个路由经过softmax后权重就会被置零)。之后,对适配器的输出进行加权求和,得到提示。每个路由掌握一个任务的偏向,以定制合适的路由组合。用公式表示如下:在这里插入图片描述
其中, G A P ( ⋅ ) GAP(·) GAP() 表示全剧平均池化, i i i 是适配器的索引, G ( ⋅ ) i G(·)_i G()i i i i 个适配器对应的路由值。任务定制提示,记为 p r o m p t ∈ R p H × p W × 2 prompt∈R^{pH × pW × 2} promptRpH×pW×2,由 p r o m p t x prompt_x promptx p r o m p t y ∈ R p H × p W × 1 prompt_y∈R^{pH × pW × 1} promptyRpH×pW×1 组成,取值范围为(0,1)。

这个过程总结下来,训练时,如果使用 VIF 的数据集,就训练 VIF 任务对应的路由器 G V G_V GV,如果使用 MEF 的数据集,就训练MEF对应的路由器 G E G_E GE。推理时也一样,对应的任务使用对应的路由,去定制生成提示。

4.3 提示驱动融合

任务定制提示通过互信息正则化(MIR)进行约束,保证了不同来源的互补性。因此,提示语可以看作是对各信息源中重要信息所占比例的评价。通过多源特征的点乘和提示,在保留互补信息的同时去除冗余信息。然后,考虑到特征表示应该包含一个与源相关的偏置(例如,可见光或红外图像),所以为每个源引入了与输入无关的可学习参数,即源嵌入S。经过特征提示和迁移,得到了细化的源特征 ( h x 、 h y ) (h_x、h_y) (hxhy):
在这里插入图片描述
其中 S x S_x Sx S y S_y Sy 分别表示VIF中可见光和红外图像的源嵌入(每个任务都有各自一对源嵌入)。 F ( ⋅ ) F ( · ) F() 使用加法运算融合细化后的多源特征,然后通过一组卷积层。这些层引入局部感受野,以减少棋盘格伪影,并对齐后续 transformer 块的解空间。最终,通过任务定制提示获得融合特征。为了鼓励模型逐步提取重要信息,对输入到下一个 transformer 块的特征进行如下处理:
在这里插入图片描述
其中 λ f λ_f λf 是可学习的参数,初始化为0.5。

4.4 互信息正则化MIR

为了保证模型在动态保留互补信息的同时舍弃多源特征的冗余信息,对提示项施加正则化约束。假设特征的信息表示是线性变化的,定义MIR如下:
在这里插入图片描述
MIR 可使模型准确识别不同源的主导强度,与源的信息含量正相关。

从提示生成到融合的具体流程如下图:
在这里插入图片描述

4.5 任务定制化损失

除了在网络结构中容纳不同任务的特异性,作者还为每个融合任务定制了无监督的损失函数。在每个任务的损失函数中加入 L a u x L_{aux} Laux 来保证 TC-MoA 的训练,以避免适配器学习不平衡。

L a u x L_{aux} Laux 出自论文《Outrageously large neural networks: The sparsely-gated mixture of-experts layer》,即论文中提到的MoE,结合本片论文中的公式符号,其表达式应该如下:
I m p o r t a n c e ( X ) = ∑ x ∈ X G ( x ) Importance(X) = \sum_{x∈X}G(x) Importance(X)=xXG(x)
L a u x = w a u x ∗ C v ( I m p o r t a n c e ( X ) ) 2 L_{aux}=w_{aux}*C_v(Importance(X))^2 Laux=wauxCv(Importance(X))2
其中 X X X 为一个Batch的训练样本, G ( x ) G(x) G(x) 为式(3)提到的路由适配方案。 w a u x w_{aux} waux 为损失权重, I m p o r t a n c e ( ⋅ ) Importance(·) Importance() 为重要性值集合, C v C_v Cv为重要性值集合的变异系数,即样本的标准差和均值之比。

对不同的融合任务,作者使用了不同的损失来约束结构信息( L s s i m L_{ssim} Lssim),强度信息( L P i x e l L_{Pixel} LPixel)和梯度信息( L G r a d L_{Grad} LGrad)。

对于VIF任务,目标是在融合图像中保留源图像中最明显的高频和低频信息。因此,作者设计了 L M a x P i x e l L_{MaxPixel} LMaxPixel L M a x G r a d L_{MaxGrad} LMaxGrad。为了避免混淆梯度,在所有与梯度信息相关的损失函数中保留梯度值的符号。总损失如下:
在这里插入图片描述
在这里插入图片描述

对于MEF任务,融合图像应该在保持所有梯度信息的同时保持平均亮度水平,因此为MEF任务设计了 L A v g P i x e l L_{AvgPixel} LAvgPixel L M a x G r a d L_{MaxGrad} LMaxGrad 损失函数。此外,作者采用了专门为MEF任务设计的 L m e f s s i m L_{mefssim} Lmefssim,而不是传统的 L s s i m L_{ssim} Lssim。总损失如下:
在这里插入图片描述
对于MFF任务,融合图像的每一块往往依赖于一幅具有最大梯度的特定源图像。这使得散焦区域的物体边缘无法得到保留,从而影响了融合图像的质量。在实际应用中,只选择一个源图像块来计算融合图像中每个图像块的损失函数。因此,MFF的 L M a s k P i x e l L_{MaskPixel} LMaskPixel L M a s k G r a d L_{MaskGrad} LMaskGrad 损失函数设计为:
在这里插入图片描述

5 实验

5.1 VIF任务

在VIF任务上的指标:
在这里插入图片描述

从可视化效果上看,本文提出的模型在视觉质量方面优于竞争方法。例如,树在黑暗区域的轮廓被很好地描绘出来,背景纹理更加清晰。值得注意的是,TC-MoA 具有直接生成彩色图像的能力,或者也可以按照其他方法对灰度图像进行处理并对结果进行着色,从而得到 T C − M o A Y U V TC-MoA^{YUV} TCMoAYUV。与竞争方法相比,TC-MoA 表现出更高的前景和背景对比度,以及更多的饱和颜色。这种比较表明本文方法是有效的,可以生成具有优越感知质量的融合图像。
在这里插入图片描述

5.2 MEF任务

在MEF任务上的指标:
在这里插入图片描述
从可视化效果上看,本文方法在高、低照度区域都保留了最多的纹理细节和颜色。具体来说,在高照度区域,TC-MoA 有效地保留了更多的太阳周围云层的结构信息。在低照度区域,热气球上的字体颜色在 PMGI 和 U2Fusion 方法中完全混淆。作为对比,TC-MoA 在保持细节信息的同时,保留了更准确的颜色信息。实际上,对于多曝光图像,融合图像的亮度并没有一个客观的标准。为了解决这个问题,本文方法通过调节提示使图像的融合可控。TC-MoA Light 的图像显示了这种调制的结果。
在这里插入图片描述

5.3 MFF任务

在MFF任务上的指标:
在这里插入图片描述
从可视化效果上看,本文方法的融合图像在纹理和颜色方面表现出了很好的一致性,超过了其他方法。U2Fusion 在远聚焦区域会出现颜色偏差,而 IFCNN 会使近聚焦图像失真。此外,这些方法无法有效地去除花朵周围的扭曲,而本文引入了 MFF-specific loss, 该损失为花朵带来了最吸引人的视觉效果。
在这里插入图片描述

5.4 消融实验

为了验证 TC-MoA 的有效性,将其从框架中剔除。在表4中, S 表示单任务训练,M 表示多任务训练,SA 表示单个适配器,MA 表示多个适配器。如第一行和第二行所示,基于5个常用指标,多任务训练的模型优于单任务训练的模型。但这一点在MEF的情况下却相反,这表明对于直接用多个任务训练的模型,任务间会发生竞争。相比较而言,第三行的实验集成了多个适配器的模型提高了所有指标的性能,这表明 TC-MoA 可以动态地兼容不同的任务。
在这里插入图片描述
对骨干和适配器方法进行了消融实验,如表5所示。’ FrozenBackbone '的微调方法代表冻结整个骨干,只解冻最后的线性层。与 "FrozenBackbone " 方法相比,TC - MoA通过引入少量可学习的参数,获得了显著的融合性能提升。更重要的是,本文方法在基础模型和大预训练模型上都优于现有的基于适配器的视觉微调方法 AdaptFormer,证明了TC-MoA 结构在融合任务中的优越性。

5.5 性能和可扩展性

不同方法之间的参数量,可训练参数量,以及在不同任务上的FPS对比。计算量的问题作者通过shift windows进一步降低,感兴趣的可以看附录,这里不具体介绍。
在这里插入图片描述

5.6 融合可控性

采用式(8),同时操纵提供给训练模型的提示的缩放和平移,其中 μ = 0.5 表示均值,α 和 β分别表示缩放和平移因子。论文对一些样本进行了操作,并在给出了一个例子,如下图:
在这里插入图片描述
显然,随着 β 值的增大,融合图像的亮度和纹理与源图像 X 越来越相似,相反,随着 β 的减小,则和源图像 Y 越来越相似。因此,β 可以被认为是主导强度偏差的移动。此外,在图像块中,较高的 α 值倾向于一个源图像优于另一个源图像,这可以被认为是主导强度偏差的缩放。例如,β = - 0.3的输出与全局曝光不足图像更相似。随着 α 从0增加到3,融合图像的建筑物区域逐渐变亮,但云层的亮度基本保持不变。这表明,改变提示语的比例因子会激励模型选择不同的区域。总体而言,本实验证明了该提示是可控的,并且可以通过线性变换得到不同程度的融合图像。

5.7 泛化性

本文方法通过零样本融合,对具有相似融合规则的任务具有较高的泛化性。具体来说,从医学影像融合数据集和 Quickbird 卫星生成的 Pan - sharpening 数据集中抽取样本,基于VIF的范式进行融合。得到了 α = 1 和 β = 0 的基融合图像,如图6 ( b )和( c )所示。然而,在没有这些未知任务的任何先验知识的情况下,输出的融合图像是一幅性能欠佳的图像,丢失了许多高低频信息。有趣的是,通过操纵提示词,可以找到适合这些新任务的融合规则,从而得到合理的融合结果。
在这里插入图片描述

5.8 路由器可控性

如图7所示,在没有梯度引导的区域,MFF路由器生成的图像比VIF更暗。MFF基于梯度来选择参考源,它倾向于在没有梯度引导的情况下对参考源的信息进行平均。相比之下,VIF路由器倾向于保留最大强度信息。此外,在图像的底部,MFF路由器倾向于保留依赖于单个源的梯度信息,而VIF路由器则保留来自两个源的梯度信息。通过操纵不同路由器组合,对融合程度进行动态控制,可以获得更可控的效果。
在这里插入图片描述

这里怎么组合的原文没说,代码中也只看到偏移,缩放系数来控制融合,并没有看到这里提到的组合不同路由器融合,知道的朋友可以讨论一下。

5.9 超参实验

作者从专家数量( N )和两个 TC-MoAs 之间的间隔( τ )两个方面进行了超参数分析。使用ViT - large作为骨干,它由编码器中的24个Transformer模块和解码器中的8个Transformer模块组成。如果τ = 4,模型包含8个TC-MoA实例。我用两个广泛使用的度量指标 Qabf 和 SSIM 来指导超参数的选择。如图8所示,随着N的增大,性能先增大后减小,在 N = 4 时性能达到峰值。这说明增加专家数量并不一定能提高模型的性能。同样,当 τ = 4时,模型在多任务上表现出最好的性能。因此,本文其他实验是在N = 4和τ = 4的条件下进行的。
在这里插入图片描述

6 思考

从实验的可控性融合上看,可应用性较高,对当前融合任务的细节提升很有帮助。

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

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

相关文章

网络编程 一

一、UDP socket api的使用 Java 把系统原生的封装了. 核心的类有两个: 1 -> DatagramSocket 操作系统中,有一类文件,就叫socket文件. socket文件,抽象表示了 " 网卡"这样的硬件设备. 进行网络通信最核心的硬件设备网卡 通过网卡发送数据,就是写…

人工智能应用-实验8-用生成对抗网络生成数字图像

文章目录 🧡🧡实验内容🧡🧡🧡🧡代码🧡🧡🧡🧡分析结果🧡🧡🧡🧡实验总结🧡🧡 &#x1f9…

spark的简单学习一

一 RDD 1.1 RDD的概述 1.RDD(Resilient Distributed Dataset,弹性分布式数据集)是Apache Spark中的一个核心概念。它是Spark中用于表示不可变、可分区、里面的元素可并行计算的集合。RDD提供了一种高度受限的共享内存模型,即RD…

想学接口测试,不知道那个工具适合?

引言: 接口测试在软件开发中扮演着至关重要的角色,它可以帮助我们验证系统的功能、性能和安全性。而选择适合的工具是进行接口测试的重要一步。本文将从零开始,为你详细介绍如何选择合适的工具,并提供规范的指导。 一、了解接口…

【大数据】MapReduce实战

文章目录 [toc]Word CountMapperReducerrun.sh本地调试 基于白名单的Word CountMapperReducerrun.sh本地调试 文件分发-fileMapperReducerrun.sh -cacheFileMapperReducerrun.sh -cacheArchiveMapperReducerrun.sh 杀死MapReduce Job排序压缩文件mr_ip_lib_python本地调试 个人…

PE文件(六)新增节-添加代码作业

一.手动新增节添加代码 1.当预备条件都满足,节表结尾没有相关数据时: 现在我们将ipmsg.exe用winhex打开,在节的最后新增一个节用于存放我们要增加的数据 注意:飞鸽的文件对齐和内存对齐是一致的 先判断节表末尾到第一个节之间…

《书生·浦语大模型实战营》第一课 学习笔记:书生·浦语大模型全链路开源体系

文章大纲 1. 简介与背景智能聊天机器人与大语言模型目前的开源智能聊天机器人与云上运行模式 2. InternLM2 大模型 简介3. 视频笔记:书生浦语大模型全链路开源体系内容要点从模型到应用典型流程全链路开源体系 4. 论文笔记:InternLM2 Technical Report简介软硬件基础…

Flat Ads获广东电视台报道!CEO林啸:助力更多企业实现业务全球化增长

近日,在广州举行的第四届全球产品与增长展会(PAGC2024)上,Flat Ads凭借其卓越的一站式全球化营销和创新的变现方案大放异彩,不仅吸引了众多业界目光,同时也在展会上斩获了备受瞩目的“金帆奖”,展现了其在全球化营销推广领域的卓越实力和专业服务。 在大会现场,Flat Ads的CEO林…

fyne网格包裹布局

fyne网格包裹布局 与之前的网格布局一样,网格环绕布局以网格模式创建元素排列。但是,此网格没有固定数量的列,而是为每个单元格使用固定大小,然后将内容流到显示项目所需的行数。 layout.NewGridWrapLayout(size) 您可以使用其中…

如何官方查询论文分区,中科院及JCR

中科院分区 有一个小程序:中科院文献情报中心分区表 点2023升级版,输入期刊名 大类1区 JCR分区 进入官方网站 Journal Citation Reports 输入要查询的期刊名,点开 拼命往下拉 这就是根据影响因子的排名,在computer science&am…

Dijkstra算法求最短路径 c++

目录 【问题背景】 【相关知识】 【算法思想】 【算法实现】 【伪代码】 【输入输出】 【代码】 【问题背景】 出门旅游,有些城市之间有公路,有些城市之间则没有,如下图。为了节省经费以及方便计划旅程,希望在出发之前知道…

【iceberg数据一致性】iceberg如何保证高并发数据一致性

在使用iceberg写数据时,一直弄不清楚为什么iceberg写入快,并且能够保证数据的一致性。今天决定搞清楚这个问题,经过查询和理解,写下来。 文件格式 iceberg元数据的文件目前有三个:metadata.json,snap.avro…

MyBatis实用方案,如何使项目兼容多种数据库

系列文章目录 MyBatis缓存原理 Mybatis plugin 的使用及原理 MyBatisSpringboot 启动到SQL执行全流程 数据库操作不再困难,MyBatis动态Sql标签解析 Mybatis的CachingExecutor与二级缓存 使用MybatisPlus还是MyBaits ,开发者应该如何选择? 巧…

SVN创建项目分支

目录 背景调整目录结构常规目录结构当前现状目标 调整SVN目录调整目录结构创建项目分支 效果展示 背景 当前自己本地做项目的时候发现对SVN创建项目不规范,没有什么目录结构,趁着创建目录分支的契机,顺便调整下SVN服务器上的目录结构 调整目…

Day36 代码随想录打卡|二叉树篇---翻转二叉树

题目(leecode T226): 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 方法: 迭代法 翻转二叉树,即从根节点开始,一一交换每个节点的左右孩子节点,然后…

【Arthas】阿里的线上jvm监控诊断工具的基本使用

关于对运行中的项目做java监测的需求下,Arthas则是一个很好的解决方案。 我们可以用来 1.监控cpu 现成、内存、堆栈 2.排查cpu飚高 造成原因 3.接口没反应 是否死锁 4.接口慢优化 5.代码未按预期执行 是分支不对 还是没提交? 6.线上低级错误 能不能不重启…

伦敦金交易商压箱底的交易技法 居然是……

很多伦敦金交易商,也就是我们常说的伦敦金交易平台,或者伦敦金交易服务提供商,他们会和一些资深的市场分析师合作。另外,一般在这些伦敦金交易商内部,也会有一批高手,他们一边在交易,一边在平台…

【设计模式深度剖析】【3】【创建型】【抽象工厂模式】| 要和【工厂方法模式】对比加深理解

👈️上一篇:工厂方法模式 | 下一篇:建造者模式👉️ 目录 抽象工厂模式前言概览定义英文原话直译什么意思呢?(以运动型车族工厂,生产汽车、摩托产品为例) 类图4个角色抽象工厂(Abstract Fac…

起底震网病毒的来龙去脉

2010年,震网病毒被发现,引起世界哗然,在后续的10年间,陆陆续续有更多关于该病毒的背景和细节曝光。今年,《以色列时报》和《荷兰日报》又披露了关于此事件的更多信息,基于这些信息,我们重新梳理…

使用 Docker 部署 Jenkins 并设置初始管理员密码

使用 Docker 部署 Jenkins 并设置初始管理员密码 每一次开始,我都特别的认真与胆怯,是因为我期待结局,也能够不会那么粗糙,不会让我失望,所以,就多了些思考,多了些拘束,所以&#xf…