【论文阅读】PGAN

news2024/11/24 12:06:06

1. WHY

问题

图像超分辨率一直是一个热门研究课题,具有重要的应用价值。基于生成对抗网络GAN的单幅图像超分辨率方法显示重建图像与人类视觉特征更一致。因此,基于 GAN 的网络优化已成为图像超分辨率的主流。然而,一些最新研究表明,基于GAN的图像超分辨率方法会导致结构失真


结构失真

含义:结构失真指的是在使用某些图像超分辨率方法时,生成的高分辨率图像虽然分辨率提高了,但是图像中的物体结构发生了不应该有的变形、扭曲或者模糊等问题,导致图像看起来不自然,甚至影响对图像内容的准确理解。

产生原因:以基于 GAN 的图像超分辨率方法为例,常见的图像级生成对抗训练方式只是对整个图像进行二分类判断真假,没有考虑图像内部每个像素或者局部区域的结构关系。这就好比只看整栋房子的外观是否好看,却不关心房子内部的墙壁是否歪了、门窗是否变形。在这种情况下,生成的图像可能会出现局部结构混乱,比如原本是圆形的物体变成了椭圆形,直线变得弯曲,物体的边缘变得模糊不清等问题,使得图像的结构信息与原始图像相比出现了偏差和错误,也就是产生了结构失真。

现有方法

通过增强结构生成来缓解结构失真问题。但这种方法无法从根本上解决对抗训练导致的结构失真问题。


增强结构生成

含义:在图像超分辨率技术中,增强结构生成就是采取一系列措施,让生成的高分辨率图像能够更好地保留或恢复出原始低分辨率图像中物体的形状、轮廓、纹理等结构信息,使图像看起来更清晰、自然,接近真实的高分辨率图像。

方法举例:比如有些方法会专门设计一个独立的分支来生成高分辨率图像的梯度图(GM),这个梯度图就像是图像结构的一种指引。通过这个梯度图来指导整个超分辨率的过程,让生成的图像在细节和结构上更合理。就好像盖房子时,先有一个建筑结构的蓝图,然后按照这个蓝图来施工,确保房子的结构稳固、布局合理。在图像超分辨率里,这个梯度图就是那个 “蓝图”,引导着生成图像的结构朝着更好的方向发展。


于是本文提出了像素级生成对抗训练来解决结构失真问题,该方法在对抗训练过程中细致地约束图像的结构。此外,为了更好地生成图像的结构和细节,并充分利用图像中的相似纹理细节,我们构建了一个结构感知的图像超分辨率网络,该网络不仅通过梯度引导增强结构生成,还以多层次的方式有效整合非局部自相似模块。

2. WHAT

2.1. 结构感知DN

这个网络就像是一个智能的图像加工厂,有两个重要的 “车间”:一个是结构感知梯度生成分支,另一个是结构感知超分辨率分支。

梯度生成分支就像是一个 “结构分析员”,它会仔细研究低分辨率图像的梯度图(GM),这个 GM 就像是图像的 “结构草图”,包含了图像中物体的形状、边缘等结构信息。它还会结合超分辨率分支的各种特征信息,然后精心绘制出高分辨率图像的 GM,为超分辨率分支提供一个精确的 “结构蓝图”。

超分辨率分支则像是一群 “巧匠”,它们根据这个 “蓝图”,利用一种特殊的非局部自相似性模块,这个模块可以让图像中的各个部分互相参考、学习,就像工匠们互相交流经验一样,从而更好地理解图像的整体结构,进而生成高质量的高分辨率图像,让图像的细节更加丰富、清晰。

首先,在结构感知非局部自相似性模块中,有一套独特的计算方法来衡量图像中不同位置特征的相似性,就像在人群中找到志同道合的伙伴一样,把相似的特征联系起来,然后通过学习这些相似特征来优化图像的结构。

接着,结构感知梯度生成分支利用巧妙的计算方式从低分辨率图像中提取出 GM,再结合超分辨率分支的信息,经过一系列复杂的操作,如卷积、融合、上采样等,就像精心雕琢一件艺术品一样,逐步构建出高分辨率图像的 GM。

最后,结构感知超分辨率分支根据这个 GM,利用自身的网络结构和非局部自相似性模块,把低分辨率图像逐步提升为高质量的高分辨率图像,让图像的结构更加合理,细节更加逼真。

2.1.1. 非局部自相似模块

该模块基于独特的非局部均值操作定义,公式为$y_i=\frac1{e(x)}\sum_{\forall j}f(x_i,x_j)g(x_j)$

其中,$i$为输出信号$y$的位置索引,$j$为输入信号$x$的任意位置索引。函数$f$承担着测量$x_i$$x_j$相似性的重任,$g(x_j)$代表输入信号$x$在位置$j$的特征图,$e(x)$则为归一化函数。这种机制使得任意位置$j$的特征能够对位置$i$的输出产生影响,突破了传统卷积的局限,非常适合处理基于时空关系的视觉任务。

具体而言,函数$g$定义为$g(x_j)=W_gx_j,W_{g}$为待学习的权重矩阵。

模块选用嵌入高斯函数作为$f$,即$f(x_i,x_j)=e^{\theta(x_i)^T\phi(x_j)}$,其中$\theta(x_i)=W_\theta x_{i_{,}}\phi(x_j)=W_\phi x_{j}$为两个嵌入,归一化参数${C(x)}=\sum_{\forall j}f(x_i,x_j)$

对于给定的$i$$(1/C)f(x_i,x_j)$相当于沿维度$j$的 softmax 计算,从而得$y=softmax(x^TW_\theta^TW_\phi x)g(x)$,此形式与经典的非局部均值方法相呼应,便于在现代深度学习平台中实现。

进一步引入残差学习思想,模块被公式化为$z_i=W_zy_i+x_i,W_z$为待学习参数。模块输入$x$的通道数与$W_g$$W_\theta$$W_\phi$相 关 , 遵循瓶颈设计,有效减少计算量 。$W_z$的 作 用 是 使 模 块输入输出维度保持一致,极大地增加了模块应用的灵活性,使其可在神经网络的任意位置“嵌入”,为在结构感知超分辨率网络中进行多级集成创造了条件。

图 2. 非局部自相似性模块。特征图以其张量形状显示(在注明时进行适当的重塑)。“\times” 表示矩阵乘法,“+” 表示逐元素求和。softmax 操作在每一行上执行。紫色框表示1\times 1卷积。

2.1.2. 梯度生成分支

该分支主要任务是从低分辨率输入图像的 GM 重建目标高分辨率图像的 GM。首先,通过映射函数$M(\cdot)$从低分辨率图像$I$中提取 GM,其计算方式为计算相邻像素差得到水平和垂直梯度$I_x(x)$$I_y(y)$,进而得到梯度$\nabla I(x)$,最后计算其$L2$范数得到 GM,此映射函数可由固定卷积核的卷积层轻松实现。

提取的低分辨率 GM 随后被送入3\times 3卷积层以提取高维特征。由于 SR 分支同样蕴含丰富的结构特征信息,对 GM 的恢复至关重要,因此该分支通过 CONCAT 函数巧妙融合 GB 的高维特征与 SR 分支不同层级的结构特征。具体而言,采用 RRDB 作为基本构建单元构建深度网络,RRDB 模块架构复杂且功能强大,其内部结构在相关文献中有详细阐述。

在 CONCAT 融合层之后,依次经过 RRDB 模块和卷积层的处理,此融合操作连续进行四次,然后通过3\times 3卷积实现跳跃连接以进行残差学习。接着,利用最近邻函数对获得的梯度特征进行上采样,再使用两个3\times 3卷积层进一步优化梯度特征,从而为指导 SR 过程提供有力支持。最后,通过1\times 1卷积层重建最终的高分辨率 GM。该分支凭借对低分辨率 GM 上下文信息和 SR 分支多级结构特征的充分利用,以及 GM 自身特性(大部分区域接近零,便于关注结构空间关系),能够有效生成高质量的高分辨率图像 GM,为 SR 分支提供准确无误的结构指导信息。

2.1.3. 超分辨率分支

基于现有研究成果,充分利用图像先验有助于提升图像超分辨率性能。尽管深度网络的感受野较大,但传统卷积网络在维持长程依赖方面仍存在不足。因此,本 SR 分支以多级方式集成非局部自相似性模块,旨在有效建立长程依赖关系,强化结构保留能力。同时,为生成更合理的图像结构和纹理,该分支进一步融合 GB 提供的结构信息。

具体操作流程为,分支首先使用3\times 3卷积层提取高维特征,然后堆叠 23 个 RRDB 模块构建深度神经网络。在特定位置(第五、第十、第十五和第二十个 RRDB 模块后)分别添加非局部自相似性模块,这些模块之间通过跳跃连接实现残差学习。接着进行最近邻上采样操作以获取高分辨率特征,随后使用卷积层进行处理。之后,利用 CONCAT 融合层融合 SR 分支的上下文信息与 GB 分支的结构信息。最后,通过 RRDB 模块和两个卷积层重建高分辨率图像,从而实现生成具有更优结构和纹理的图像的目标。

2.2. 像素级GAN

像素级生成对抗训练的目的是让生成的图像在结构上更加合理,避免出现结构失真的问题。它的做法是让生成器和判别器进行一场激烈的 “博弈”。判别器就像一个非常严格的 “裁判”,它会仔细检查生成图像的每个像素,判断这个像素是否和真实图像中的像素来自同一个分布,就像检查每个产品的零部件是否合格一样。生成器则像是一个 “生产者”,它根据低分辨率图像努力生成高分辨率图像,并且要尽量让判别器认为它生成的像素是真实的。

与传统的图像级对抗训练不同,传统的方法只是对整个图像进行一个大致的真假判断,就像只看一眼整栋房子的外观就判断好坏,而像素级生成对抗训练深入到每个像素层面进行判断和优化。它通过构建一个特殊的基于全卷积的判别器,这个判别器可以输出一个和输入图像大小相同的概率图,每个像素都有对应的概率值,表示这个像素是真实像素的可能性。这样就能更精准地控制图像的结构生成,避免出现局部结构混乱的情况,使生成的图像更加自然、真实,就像精心打造每一个细节,让整栋房子从里到外都完美无缺。

2.2.1. 像素级对抗损失

与图像级对抗判别器输出一个概率值来判定整个图像真假不同,像素级对抗判别器的输出是一个与输入图像大小相同的概率图,用于确定每个像素是否为真实像素。为此构建了一个基于全卷积的判别器,它由五个3\times 3卷积层组成,前四层各有 64 个卷积核并接 LeakyReLU 层以增强非线性建模能力,最后一层仅有一个卷积核用于生成概率图。所有卷积步长为 1 且使用填充操作,确保生成的概率图与输入图像分辨率相同,从而实现像素级对抗训练。

2.2.2. 梯度+图像联合优化损失

图像损失

以低分辨率(LR)图像$I^{LR}$为输入,生成超分辨率(SR)图像$I^{SR}$,其对应的高分辨率(HR)图像$I^{HR}$作为真实值。生成器记为$G$,则$I^{SR}=G(I^{LR})$$I^{SR}$应尽可能与$I^{HR}$相似。

多数方法使用像素级重建损失优化网络:

$L1-$范数像素级重建损失$\mathcal{L}_{SR}^{Pix_I}=\mathbb{E}_{I^{SR}}\parallel G\left(I^{LR}\right)-I^{HR}\parallel_{1}$,但该损失会使超分辨率图像边缘过于平滑,降低感知效果,

因此还使用 Johnson 等提出的感知损失函数$\mathcal{L} _{SR}^{Per}= \mathbb{E} _{I^{SR}}\parallel \phi _i\left ( G\left ( I^{LR}\right ) \right ) - \phi _i\left ( I^{HR}\right ) \parallel _1$ ( 其中$\phi _i( \cdot )$表示VGG模型的第$i$层输出)来弥补不足。

此外,超分辨率分支的像素级对抗损失$\mathcal{L}_SR^{Dis_t}$用于优化判别器$D_I$$\mathcal{L}_{SR}^{Adv_t}$用于优化生成器$G$

梯度损失

梯度图 (GM) 能反映图像结构信息,可作为生成器的二阶约束。

通过最小化从SR 图像和 HR 图像中提取的 GM 差异来实现梯度损失,包括:

基于像素级的损失$\mathcal{L}_{SR}^{Pix_{GM}}=\mathbb{E}_{I^{SR}}\parallel M\left(G\left(I^{LR}\right)\right)-M\left(I^{HR}\right)\parallel_{1}$

判别梯度像素是否来自HRGM的损失$\mathcal{L}_{SR}^{DisGM}$

以及梯度判别器通过对抗学习对 SR 结果生成的监督损失$\mathcal{L}_{SR}^{AdvGM}$

联合损失

判别器$D_{I}$$D_{GM}$分别由$\mathcal{L}_{SR}^{Dis}$$\mathcal{L}_{SR}^{DisGM}$优化,生成器$G$由联合损失$\mathcal{L}^G$优化。

$\mathcal{L}^G$包含图像生成损失$\mathcal{L}_{SR}^G$和梯度生成损失$\mathcal{L} ^{G}_{GB}$,其 中 梯 度 生 成 损 失 旨 在 最 小 化 GB 中的像素级重建损失$\mathcal{L}_{GB}^{PixGM}$以重建高质量 GM。

2.3. 实验

2.3.1. 训练细节

训练集:选用 DIV2K 数据集中编号从 0001 到 0800 的 800 张图像,将每张图像切割成 40 张小图像(每张 480×480 像素),共生成 32208 张作为目标高分辨率图像,通过双三次插值获得低分辨率输入,实验仅考虑 4 倍缩放因子。

测试集:使用 Set5、Set14、BSD100、Urban100 和 General100 五个常用数据集,所有数据集均使用双三次插值生成低高分辨率图像对,且训练集和测试集不同。

模型训练的超参数$\gamma_{SR}^{I},\beta_{SR}^{GM},\gamma_{SR}^{GM},\beta_{GB}^{GM},$分别设置为 0.01,0.005,0.01,0.005,0.5,与SPSR 方法训练相同的$5\times10^{5}$次迭代

学习率的设置:采用了动态调整策略,随着训练送代次数的增加而逐渐递减。具体而言,在$0$$5\times10^{4}$次迭代时,学习率为$1.00\times10^{-4}$;在$5\times10^4$$1\times10^5$次迭代时,学习率降至$5.00\times10^{-5}$;在$1\times10^5$$2\times10^5$次迭代时,进一步降低至$2.50\times10^{-5}$;在$2\times10^{5}$$3\times10^{5}$次迭代时,学习率为$1.25\times10^{-5}$;在$3\times10^{5}$$5\times10^{5}$次迭代时,学习率最终降至$6.25\times10^{-6}$。在上述参数设置下,模型 (PGAN) 的学习曲线清晰地展示了训练过程中的损失变化情况,水平轴表示训练迭代次数,垂直轴表示损失值,其中背景中颜色较浅的曲线是原始数据绘制而成,未进行平滑处理,而颜色较深的曲线则是对应的平滑曲线,通过观察学习曲线,可以直观地了解模型在训练讨程中的收敛趋势和稳定性。

2.3.2. 非局部自相似性模块的影响

为深入探究非局部自相似性模块在网络中的作用,进行了一系列消融实验。具体而言,在 SPSR 网络的八个不同位置嵌入非局部自相似性模块,研究其在不同位置对网络性能的影响。这些候选嵌入位置分布在超分辨率分支(每 5 个 RRDB 模块后)和梯度生成分支(每个 concat 操作后),如图 14 所示。通过设计六个不同的消融实验(Exp.1 - Exp.6),分别在不同的组合位置嵌入非局部自相似性模块,并在相同的训练设置下(均训练 200000 次迭代)对各实验结果进行评估。实验结果以表格形式呈现(如表四所示),从中可以看出,并非在所有位置嵌入非局部自相似性模块都能带来性能提升,这表明在超分辨率网络中有效地融合非局部自相似性模块并非易事,需要精心选择嵌入位置。其中,Exp.5 的实验结果表明,当在超分辨率分支的特定位置(①、②、③、④)以多级方式嵌入非局部自相似性模块时,网络能够获得最佳的性能表现,在平均 PSNR 和 SSIM 指标上取得了较好的成绩。基于此实验结果,最终确定的结构感知深度网络仅在超分辨率分支的多个层级(①、②、③、④位置)嵌入四个非局部自相似性模块,以充分发挥其提升图像超分辨率性能的作用。

图 14. 非局部自相似性模块的八个候选嵌入位置示意图。

表四:非局部自相似性模块在不同嵌入位置的消融实验的平均 PSNR(峰值信噪比)和 SSIM(结构相似性)比较。最佳性能以粗体突出显示

表五:非局部自相似性模块不同嵌入位置的消融实验描述

2.3.3. 像素级生成对抗训练的影响

为了验证像素级生成对抗训练对图像超分辨率的影响,专门设计了对比实验。将像素级对抗训练直接应用于 SPSR 方法(记为 Exp.7),并将其结果与同时使用非局部自相似性模块和像素级对抗训练的 PGAN 方法进行对比。所有实验均在相同的训练条件下进行,训练次数为 500000 次迭代。实验结果以表格形式展示(如表六和表七所示),通过对比平均 PSNR 和 SSIM 指标可以发现,像素级对抗训练的引入显著提升了网络性能。在 SPSR 方法中加入像素级对抗训练后(Exp.7),其 PSNR 和 SSIM 值均有明显提高,这表明像素级对抗训练能够使网络生成的图像在结构和质量上更接近真实高分辨率图像。而 PGAN 方法在融合了多级非局部自相似性模块和像素级对抗训练后,进一步提升了性能,在定量指标上取得了最佳成绩。此外,通过视觉对比(如图 15 所示),可以直观地看到像素级对抗训练在缓解结构失真问题上的显著效果。在与图像级对抗训练(如 SPSR)的对比中,像素级对抗训练生成的图像结构更加合理,有效地减少了结构扭曲和变形等问题,使得图像看起来更加自然逼真。这充分证明了像素级生成对抗训练在提高图像超分辨率质量方面的重要作用,与结构感知深度网络相结合,能够为图像超分辨率任务提供更有效的解决方案。

表六:针对有和无非局部自相似性模块以及像素级对抗训练的网络的消融实验说明

表七:有和无非局部自相似性模块以及像素级对抗训练的图像超分辨率网络的平均PSNR(峰值信噪比)和SSIM(结构相似性)比较。最佳性能以粗体突出显示。 

3. HOW

3.1. 定量对比

 将提出的方法 PGAN 与基于 GAN 的图像超分辨率方法(SFTGAN、SRGAN、ESRGAN、NatSR、SPSR)进行对比。在五个数据集上的平均峰值信噪比(PSNR)、结构相似性(SSIM)、感知指数(PI)和学习感知图像块相似性(LPIPS)对比结果显示,PGAN 在大多数数据集上实现了最佳的平均 PSNR、SSIM 和 LPIPS 值,PI 值也与现有技术相当。

表一:各种基于 GAN 的先进图像超分辨率方法在五个数据集上的平均 PSNR 和 SSIM 比较。最佳性能以粗体突出显示

表二:各种基于 GAN 的先进图像超分辨率方法在五个数据集上的平均 PI(感知指数)和 LPIPS(学习感知图像块相似性)比较。最佳性能以粗体突出显示

此外,通过与基线 SPSR 在不同数据集上的测试时间对比,可以发现 PGAN 在运行速度上与 SPSR 相近,这意味着 PGAN 在实现高质量图像超分辨率的同时,并没有牺牲过多的计算效率。

表三:我们的方法 PGAN 与基线 SPSR 在不同数据集上的测试时间(以秒为单位)比较

进一步对比 PGAN 和 SPSR 在训练过程中的 PSNR 变化,可以清晰地看到 PGAN 的收敛速度更快,这表明 PGAN 在训练过程中能够更有效地优化模型参数,更快地达到较好的性能状态。

图 13. SPSR 与我们的 PGAN 在训练过程中的 PSNR(峰值信噪比)比较。

3.2. 定性对比

通过视觉效果对比,双三次插值结果模糊但无结构失真,SPSR 结果虽清晰但仍有结构失真问题,而 PGAN 结果更自然逼真,重建图像结构清晰,无失真和伪影,表明提出的方法可缓解 GAN - 基于方法的结构失真问题,提高重建图像的视觉感知效果。

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

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

相关文章

江协科技STM32学习- P28 USART串口数据包

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

C# Retry库

比如网络访问或硬件参数设置需要重试&#xff0c;可引用gunet上的Polly库。 同步方式&#xff08;每次重试有不同的时间间隔&#xff09; var polly Policy.Handle<Exception>().WaitAndRetry(new[] { new TimeSpan(0, 0, 1), new TimeSpan(0, 0, 2), new TimeSpan(0, …

Java避坑案例 - 线程池使用中的风险识别与应对

文章目录 线程池的基本概念创建线程池的注意事项实例1&#xff1a; newFixedThreadPool 使用无界队列&#xff0c;可能因任务积压导致 OOM实例2&#xff1a; newCachedThreadPool 会创建大量线程&#xff0c;可能因线程数量过多导致无法创建新线程。 线程池参数设置的最佳实践线…

基于SSM+微信小程序的社区垃圾回收管理系统(垃圾1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于ssm微信小程序的社区垃圾回收管理系统&#xff0c;有管理员&#xff0c;回收员&#xff0c;用户三个角色。 1、管理员功能有个人中心&#xff0c;用户管理&#xff0c;回收员管理&am…

确保组织决策权清晰的有效策略

在组织中&#xff0c;明确的决策权、有效的沟通机制、权责明确的结构是确定和维护清晰决策权的关键要素。明确的决策权确保了每个成员知道自己的职责和权限&#xff0c;有效的沟通机制促进了信息的流通和理解&#xff0c;权责明确的结构则为组织的运作提供了清晰的框架。明确的…

SpringBoot3+SpringSecurity6基于若依系统整合自定义登录流程

SpringBoot3SpringSecurity6基于若依系统整合自定义登录流程 问题背景 在做项目时遇到了要对接统一认证的需求&#xff0c;但是由于框架的不兼容性&#xff08;我们项目是springboot3&#xff0c;jdk17&#xff0c;springsecurity6.1.5&#xff09;等因素&#xff0c;不得不使…

WPF+MVVM案例实战(十四)- 封装一个自定义消息弹窗控件(下)

文章目录 1、案例效果2、弹窗空间使用1.引入用户控件2、按钮命令实现 3、总结4、源代码获取 1、案例效果 2、弹窗空间使用 1.引入用户控件 打开 Wpf_Examples 项目&#xff0c;在引用中添加用户控件库&#xff0c;在 MainWindow.xaml 界面引用控件库&#xff0c;代码如下&…

【论文精读】ID-like Prompt Learning for Few-Shot Out-of-Distribution Detection

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;论文精读_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 注&#xff1a;下文…

PIDNet(语义分割)排坑

PIDNet训练自己的数据集 1. 前言2. 准备工作3. 配置环境4. 排坑过程4.1.1 configs增加了VOC文件夹 并在里面写了yaml参数文件4.1.2 加载VOC格式数据集的类4.1.3 train.py调试 1. 前言 paper小修时reviewer说baseline太老&#xff0c;所以对CVPR2023的PIDNet进行复现&#xff0…

Google Recaptcha V2 简单使用

最新的版本是v3&#xff0c;但是一直习惯用v2&#xff0c;就记录一下v2 的简单用法&#xff0c;以免将来忘记了 首先在这里注册你域名&#xff0c;如果是本机可以直接直接填 localhost 或127.0.0.1 https://www.google.com/recaptcha/about/ 这是列子 网站密钥&#xff1a;是…

autMan奥特曼机器人-内置Redis

autMan内置了redis服务&#xff0c;有的脚本运行需要redis支持 几个注意事项&#xff1a; 启用redis服务后要重启autMan生效&#xff0c;关闭一样的道理。启用redis服务后会增加约200M的内存占用多个autMan的redis服务可以组成集群redis服务

五、快速入门K8s之Pod容器的生命周期

一、容器的初始化init ⭐️ init c &#xff1a; init contariner 初始化容器&#xff0c;只是用来初始化&#xff0c;初始化完成就会死亡可以大于的等于一也可以没有&#xff0c;每个init只有在前一个init c执行完成后才可以执行下一个、init容器总是运行到成功完成为止&#…

sqoop问题汇总记录

此篇博客仅记录在使用sqoop时遇到的各种问题。持续更新&#xff0c;有问题评论区一起探讨&#xff0c;写得有不足之处见谅。 Oracle_to_hive 1. main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTr…

C++对象模型:Function 语意学

Member 的各种调用方式 Nonstatic Member Function 使用C时&#xff0c;成员函数和非成员函数在性能上应该是等价的。当设计类时&#xff0c;我们不应该因为担心效率问题而避免使用成员函数。 实现&#xff1a;编译器会将成员函数转换为一个带有额外this指针参数的非成员函数…

二叉树中的深搜 算法专题

二叉树中的深搜 一. 计算布尔二叉树的值 计算布尔二叉树的值 class Solution {public boolean evaluateTree(TreeNode root) {if(root.left null) return root.val 0? false: true;boolean left evaluateTree(root.left);boolean right evaluateTree(root.right);return…

【Linux】环境ChatGLM-4-9B 模型部署

一、模型介绍 GLM-4-9B 是智谱 AI 推出的最新一代预训练模型 GLM-4 系列中的开源版本。 在语义、数学、推理、代码和知识等多方面的数据集测评中&#xff0c; GLM-4-9B 及其人类偏好对齐的版本 GLM-4-9B-Chat 均表现出超越 Llama-3-8B 的卓越性能。除了能进行多轮对话&#xf…

深入理解Java 线程并发编排工具: 概述和应用场景

目录 前言概述1. CountDownLatch2. CyclicBarrier3. Semaphore&#xff08;信号量)4. Condition 案例CountDownLatch-马拉松场景CyclicBarrier-马拉松场景Semaphore-公交车占座场景Condition-线程等待唤醒场景 前言 在 Java 的 java.util.concurrent (JUC) 包中&#xff0c;提…

C++初阶(八)--内存管理

目录 引入&#xff1a; 一、C中的内存布局 1.内存区域 2.示例变量存储位置说明 二、C语言中动态内存管理 三、C内存管理方式 1.new/delete操作内置类型 2.new和delete操作自定义类型 四、operator new与operator delete函数&#xff08;重要点进行讲解&#xff09; …

架构的本质之 MVC 架构

前言 程序员习惯的编程方式就是三步曲。 所以&#xff0c;为了不至于让一个类撑到爆&#x1f4a5;&#xff0c;需要把黄色的对象、绿色的方法、红色的接口&#xff0c;都分配到不同的包结构下。这就是你编码人生中所接触到的第一个解耦操作。 分层框架 MVC 是一种非常常见且常…

Node学习记录-child_process 子进程

来自&#xff1a;https://juejin.cn/post/7277045020422930488 child_process用于处理CPU密集型应用&#xff0c;Nodejs创建子进程有7个API&#xff0c;其中带Async的是同步API,不带的是异步API child_process.exec(command[, options][, callback]) command:要运行的命令&am…