当前位置: 首页 > news >正文

生成式专题的第一节课---GAN图像生成

一、GAN的起源与发展

1.GAN的起源

GAN (生成式对抗网络)诞生于 2014 年,由 Ian Goodfellow 提出,是用于生成数据的深度学习模型,创新点是对抗性训练,即生成器与判别器的竞争关系,为图像生成、风格迁移等领域带来革命性影响。

2.GAN的发展

GAN 发展迅速,从 最初的DCGAN(深度卷积生成对抗网络) 到 WGAN( Wasserstein 生成对抗网络)再到 StyleGAN ,各里程碑式模型都在不断解决GAN训练过程中的稳定性和生成质量的问题。

例如,DCGAN 通过对卷积神经网络的改进,提高了生成图像的质量和稳定性;WGAN 则引入了 Wasserstein 距离,有效地解决了训练不稳定和模式崩溃的问题;StyleGAN 在生成图像的质量和多样性方面取得了重大突破,尤其是 StyleGAN2 能够生成极其逼真的人脸图像,极大地推动了计算机视觉和图形学的发展。

3.GAN的应用领域

随着技术不断发展,GAN 在艺术创作、数据增强等多个领域得到了广泛的应用。

GAN 在图像合成、数据增强、虚拟现实等领域应用广泛。

在图像合成方面,GAN 可以生成高质量的图像,包括自然图像、艺术作品等。例如,通过风格迁移技术,可以将一幅图像的风格应用到另一幅图像上,创造出独特的艺术效果。

在数据增强方面,GAN 可以生成大量的新数据,用于扩充训练数据集,提高模型的泛化能力。特别是在一些数据稀缺的领域,如医学图像、卫星图像等,GAN 的数据增强作用尤为重要。

在虚拟现实领域,GAN 可以生成逼真的虚拟场景和物体,为用户提供更加沉浸式的体验。

此外,GAN 还被广泛应用于艺术创作、影视制作、游戏开发等领域。在艺术创作中,艺术家可以利用 GAN 生成的图像作为灵感来源,创造出更加独特的作品。在影视制作中,GAN 可以用于生成特效场景和角色,降低制作成本。在游戏开发中,GAN 可以生成游戏中的场景和角色,提高游戏的画面质量和可玩性。

二、GAN的基本原理

1.组成部分

 GAN 主要由两个部分组成,即生成器(Generator)和判别器(Discriminator)。

生成器负责生成数据,接收随机噪声或特定的输入,并尝试生成逼真的数据,例如图像、文本等。生成器的目标是生成尽可能接近真实数据分布的样本,以骗过判别器。

判别器则负责区分真实数据和生成数据,区分输入的数据是来自真实数据还是由生成器生成的数据。判别器的目标是准确地判断数据的真实性,从而为生成器提供反馈。 

两者在训练过程中相互竞争,生成器努力生成越来越逼真的数据,而判别器则不断提高其辨别努力。

2.对抗过程 

1. 训练开始时,生成器生成的样本通常质量较低,很容易被判别器识别为假数据。判别器能够较为准确地判断出真实数据和生成器生成的虚假数据。判别器的损失函数通常是一个二分类交叉熵损失,对于真实数据,标签为 1,对于生成数据,标签为 0。判别器对于真实数据的预测概率为 D (x),对于生成数据的预测概率为 D (G (z)),其中 x 表示真实数据,G (z) 表示生成器生成的数据,z 是随机噪声。

判别器的损失函数可以表示为:

这里,表示期望,是真实数据的分布,是随机噪声的分布。第一项是真实数据被正确判断为真的期望损失,第二项是生成数据被正确判断为假的期望损失。判别器的损失是正确分类真实和生成数据的概率。

2. 随着训练的进行,生成器不断调整自身的参数,试图生成更加逼真的样本,以提高骗过判别器的概率。同时,判别器也在不断优化自身的参数,以更好地分辨真实数据和生成器生成的数据。

生成器的损失函数可以表示为:

生成器通过最小化这个损失函数来优化自身参数,使得生成的数据能够让判别器认为是真实数据。同时,判别器也在不断优化自身的参数,以更好地分辨真实数据和生成器生成的数据。生成器的损失是其生成数据被判别器错误分类的概率。

3. 这个对抗过程持续进行,通过交替优化生成器和判别器的损失函数,生成器和判别器相互竞争、共同进步。最终,当达到一种平衡状态时,生成器生成的样本非常接近真实数据的分布,使得判别器难以区分真假数据。

3.数学表达

从数学角度来看,GAN 的目标是最小化生成器和判别器之间的价值函数。价值函数与损失函数密切相关。而价值函数通常由两部分组成:

1. 对于判别器,价值函数要使其能够正确区分真实数据和生成数据,即最大化正确分类的概率。

2. 对于生成器,价值函数要使其生成的数据能够骗过判别器,即最小化判别器将生成数据判断为假的概率。

通过不断优化这个价值函数,GAN 实现了生成器和判别器的共同进化,从而达到生成高质量数据的目的。

在生成式对抗网络(GAN)中,价值函数和损失函数既有联系又有区别。

 

一、联系

 
  1. 目的一致性:价值函数和损失函数在 GAN 中都是为了衡量生成器和判别器的性能,并指导它们的优化过程。它们共同的目标是使生成器生成的样本尽可能接近真实数据分布,同时使判别器能够准确地区分真实数据和生成数据。
  2. 相互影响:价值函数通常由生成器和判别器的损失函数组成。生成器和判别器在训练过程中通过优化各自的损失函数来影响价值函数的值。例如,当生成器的损失函数减小,意味着生成的数据更接近真实数据,这会影响判别器的损失函数,进而影响价值函数。
 

二、区别

 
  1. 定义范围:
    • 损失函数通常是针对单个模型(生成器或判别器)定义的,用于衡量该模型在特定任务上的性能。例如,生成器的损失函数衡量生成器生成的数据与真实数据的相似程度;判别器的损失函数衡量判别器区分真实数据和生成数据的准确性。
    • 价值函数是针对整个 GAN 系统定义的,它综合考虑了生成器和判别器的性能。价值函数通常是生成器和判别器损失函数的组合,反映了 GAN 系统在生成数据和区分数据方面的整体性能。
  2. 优化目标:
    • 生成器的损失函数的优化目标是使生成的数据能够骗过判别器,即最小化判别器将生成数据判断为假的概率。
    • 判别器的损失函数的优化目标是准确地区分真实数据和生成数据,即最大化正确分类的概率。
    • 价值函数的优化目标是在生成器和判别器之间找到一个平衡,使得生成器生成的样本足够逼真,同时判别器能够有效地区分真实数据和生成数据。

4.网络架构与优化

一、GAN 的网络架构

GAN 的网络架构确实具有很大的灵活性和多样性,可以结合不同类型的神经网络来实现特定的生成任务。不同类型的神经网络有不同的效果。

  1. 卷积神经网络(CNN)

    • 在图像生成等领域,卷积神经网络常被用作 GAN 的生成器和判别器。CNN 能够有效地提取图像的特征,对于处理具有空间结构的数据具有优势。
    • 例如,在深度卷积生成对抗网络(DCGAN)中,生成器采用反卷积层逐步将低维的随机噪声映射为高维的图像数据,而判别器则使用卷积层对输入图像进行特征提取和分类。
    • CNN 的层级结构可以使 GAN 学习到不同层次的图像特征,从而生成更加逼真的图像。
  2. 循环神经网络(RNN)

    • 对于序列数据的生成任务,如文本生成、音乐生成等,循环神经网络是一个合适的选择。RNN 能够处理序列数据中的时间依赖关系,记住过去的信息并影响当前的输出。
    • 在基于 GAN 的文本生成中,生成器可以是一个基于 RNN 的语言模型,接收随机噪声或特定的初始输入,并逐步生成文本序列。判别器则负责判断生成的文本是否真实。
    • RNN 的变体,如长短期记忆网络(LSTM)和门控循环单元(GRU),可以更好地处理长期依赖关系,提高生成质量。
  3. 其他网络架构

    • 除了 CNN 和 RNN,还有许多其他类型的神经网络可以用于 GAN 的网络架构。例如,自编码器(Autoencoder)可以作为生成器的一部分,先对数据进行压缩编码,然后再解码生成新的数据。
    • 生成对抗网络还可以与其他深度学习技术结合,如变分自编码器(VAE)、注意力机制等,以进一步提高生成性能。

二、网络优化

训练 GAN 是一个具有挑战性的任务,需要仔细选择优化方法和学习率,以避免出现模式崩溃等问题。

  1. 优化方法

    • 常见的优化方法包括随机梯度下降(SGD)及其变体,如 Momentum SGD、Adagrad、Adadelta、RMSprop 和 Adam 等。不同的优化方法在收敛速度、稳定性和对超参数的敏感性等方面有所不同。
    • 在选择优化方法时,需要考虑 GAN 的特点和训练数据的性质。例如,Adam 优化器通常在训练初期收敛速度较快,但在后期可能会出现震荡。而一些传统的 SGD 变体可能需要更多的调参工作,但在某些情况下可以获得更稳定的训练效果。
    • 此外,一些专门为 GAN 设计的优化方法也被提出,如 WGAN(Wasserstein GAN)中的 Earth-Mover 距离优化和 Improved WGAN 中的梯度惩罚等。这些方法旨在提高 GAN 的训练稳定性和生成样本的质量。
  2. 学习率

    • 学习率是优化过程中的一个重要超参数,它决定了每次参数更新的步长。选择合适的学习率对于 GAN 的训练至关重要。
    • 学习率过大可能导致训练不稳定,甚至使模型无法收敛;学习率过小则会使训练过程缓慢,需要更多的训练时间。
    • 通常,可以采用动态调整学习率的策略,如学习率衰减。在训练初期使用较大的学习率以快速接近最优解,然后逐渐减小学习率以进行更精细的调整。
    • 还可以使用自适应学习率方法,如 Adagrad、Adadelta、RMSprop 和 Adam 等优化器自带的自适应学习率机制,根据参数的梯度历史自动调整学习率。
  3. 避免模式崩溃

    • 模式崩溃是 GAN 训练中常见的问题之一,表现为生成器只生成少数几种模式的样本,而无法覆盖真实数据的多样性。
    • 为了避免模式崩溃,可以采用以下方法:
      • 增加生成器和判别器的容量:使用更复杂的网络架构或增加网络的层数和参数数量,使模型能够学习到更丰富的特征和模式。
      • 引入多样性正则化:例如在生成器的损失函数中加入多样性惩罚项,鼓励生成不同的样本。
      • 采用多个生成器和判别器:通过多个模型的竞争和合作,增加生成样本的多样性。
      • 数据增强:对训练数据进行随机变换,如旋转、翻转、裁剪等,增加数据的多样性,从而减少模式崩溃的可能性。

GAN 的网络架构和优化是一个复杂的问题,需要根据具体的应用场景和任务进行选择和调整。通过合理地设计网络架构、选择优化方法和调整超参数,可以提高 GAN 的训练稳定性和生成样本的质量。

三、GAN的高级概念

一、条件生成对抗网络(cGAN)

条件生成对抗网络在传统 GAN 的基础上引入条件变量,使得生成的数据具有特定的属性,可以生成特定风格的图像或者具有特定特征的人脸,极大地增强了生成过程的可控性。

  1. 工作原理

    • 生成器接收随机噪声和条件变量作为输入,根据条件变量的指导生成特定的样本。例如,在图像生成任务中,如果条件变量是类别标签,生成器将生成属于特定类别的图像。
    • 判别器则同时接收真实样本或生成样本以及条件变量,判断样本是否真实且符合给定条件。
  2. 应用场景

    • 图像合成:可以根据特定的主题、风格或对象类别生成图像。比如生成特定风格的艺术画作、特定品牌汽车的图像等。
    • 文本到图像生成:将文本描述作为条件变量,生成与文本描述相符的图像。这在创意设计、广告制作等领域有很大的应用潜力。
    • 数据增强:在某些数据稀缺的情况下,可以利用 cGAN 根据已有数据的特征和条件变量生成新的样本,用于扩充数据集。

二、循环一致性生成对抗网络(CycleGAN)

CycleGAN 用于实现无监督的图像到图像转换,能够在没有成对训练数据的情况下,实现不同域之间的图像转换。

  1. 工作原理

    • CycleGAN 由两个生成器和两个判别器组成。一个生成器用于将源域的图像转换到目标域,另一个生成器则负责将目标域的图像转换回源域。
    • 判别器分别对源域和目标域的真实图像与生成器生成的图像进行判别。同时,为了保证转换的一致性,引入了循环一致性损失,通过循环一致性损失函数来保证生成的图像在不同域之间的转换具有一致性,保持转换过程中的原始结构信息。
    • 例如,将马的图像转换为斑马的图像,生成器 G 将马的图像转换为看似斑马的图像,生成器 F 再将这个看似斑马的图像转换回类似马的图像。通过循环一致性损失,确保转换前后的图像尽可能相似。
  2. 优势

    • 无监督学习:不需要成对的源域和目标域图像进行训练,只需要两个不同域的图像集合即可,大大降低了数据收集的难度。
    • 灵活性高:可以应用于各种不同类型的图像转换任务,具有很强的通用性。
    • 生成效果好:能够生成高质量的转换图像,在视觉上具有较高的逼真度。

三、基于信息最大化生成对抗网的可解释表征学习(InfoGAN)

InfoGAN,它是对生成性对抗网络(GAN)的一个信息论扩展,因此,它是对原有模型的改进。InfoGAN能够以完全无监督的方式学习分离的表示。InfoGAN 旨在学习可解释的、有意义的潜在表示。

  1. 核心思想

    • 将输入的随机噪声分为两部分,一部分是不可解释的随机噪声,另一部分是可解释的潜在编码。通过优化网络,使得可解释的潜在编码能够控制生成样本的特定属性。
    • 例如,在图像生成中,潜在编码可以控制生成图像的颜色、形状等属性。
  2. 优势

    • 提供了对生成过程的更深入理解:通过可解释的潜在编码,用户可以了解不同属性是如何影响生成结果的。
    • 增强了生成的可控性:可以通过调整潜在编码来精确地控制生成样本的特定属性,而不仅仅是依赖于外部的条件变量。

四、渐进式生成对抗网络(Progressive GAN)

Progressive GAN 采用逐步增加生成器和判别器的分辨率的方法来提高生成质量。

  1. 训练过程

    • 从低分辨率开始训练,随着训练的进行,逐渐增加生成器和判别器的层数和分辨率,使得网络能够逐步学习到更精细的细节。
    • 这种渐进式的训练方法可以避免在高分辨率下训练的困难,同时提高了训练的稳定性和效率。
  2. 应用优势

    • 能够生成非常高分辨率的逼真图像:由于逐步增加分辨率,Progressive GAN 可以生成具有极高细节和真实感的图像。
    • 加速训练过程:通过从低分辨率开始训练,减少了计算资源的需求,加快了训练速度。

五、BigGAN

BigGAN 以其大规模的网络结构和强大的生成能力而闻名。

  1. 特点

    • 具有非常深的网络结构和大量的参数,能够学习到复杂的数据分布。
    • 采用了高效的训练方法和正则化技术,以提高训练的稳定性和生成样本的质量。
  2. 应用表现

    • 能够生成极其逼真的高分辨率图像,在图像生成领域取得了令人瞩目的成果。
    • 对于大规模数据集的处理能力强,可以应用于大规模的图像生成任务。

六、变分自编码器(VAE)与GAN

  1. VAE的工作原理

    • VAE是一种生成模型, 通过编码器和解码器生成数据。编码器将输入数据映射到一个潜在空间,这个潜在空间通常是一个低维的连续空间。编码器输出的是潜在变量的均值和方差,通过重参数化技巧从这个分布中采样得到一个潜在变量向量。
    • 解码器则接收这个潜在变量向量,将其映射回原始数据空间,生成与输入数据相似的输出。
    • VAE 的目标是最大化输入数据的对数似然,同时使潜在空间的分布尽可能接近标准正态分布。
  2. VAE的应用场景

    • 图像生成:可以生成新的图像,通过在潜在空间中进行采样并解码得到新的图像样本。
    • 数据压缩:将高维的数据压缩到低维的潜在空间中,实现数据的高效存储和传输。
    • 异常检测:通过比较输入数据在潜在空间中的重构误差,可以检测出异常数据点。
  3. GAN 与 VAE 的比较
    • 生成原理

      • GAN 通过生成器和判别器的对抗训练来生成数据。生成器试图生成逼真的数据来骗过判别器,判别器则努力区分真实数据和生成数据。
      • VAE 则是通过最大化输入数据的对数似然和约束潜在空间的分布来生成数据。生成过程更加确定性,通过从已知的潜在空间分布中采样并解码得到生成数据。
    • 生成质量

      • GAN 通常能够生成非常逼真的样本,尤其是在图像生成等领域表现出色。但 GAN 的训练过程不稳定,容易出现模式崩溃等问题。
      • VAE 生成的样本相对较为平滑和连续,但可能在细节和逼真度上稍逊于 GAN。VAE 的训练过程相对稳定,不容易出现严重的训练问题。
    • 潜在空间性质

      • GAN 的潜在空间通常没有明确的语义含义,难以直接在潜在空间中进行有意义的操作。
      • VAE 的潜在空间具有一定的语义连续性,通过在潜在空间中进行插值等操作,可以得到平滑的过渡效果,具有更好的可解释性。
    • 应用场景侧重

      • GAN 更适合需要生成高度逼真样本的任务,如艺术创作、图像合成等。
      • VAE 更适合需要对数据进行压缩、编码和解码的任务,以及对潜在空间进行有意义操作的任务,如数据生成、异常检测等。

 GAN与VAE在生成质量和多样性上有所不同,两者可以相互补充。

四、GAN的挑战与解决方案

1.GAN 的挑战

  1. 训练不稳定

    • GAN 的训练过程涉及生成器和判别器的对抗博弈,这种对抗性使得训练过程容易不稳定,导致生成器和判别器之间的不平衡。例如,生成器可能会在某些情况下过度拟合判别器,导致生成的样本质量下降。
    • 训练不稳定还可能表现为模式崩溃,即生成器只生成少数几种模式的样本,无法覆盖真实数据的多样性。
  2. 难以评估生成质量

    • 评估 GAN 生成的样本质量是一个具有挑战性的问题。传统的评估指标如峰值信噪比(PSNR)和结构相似性指数(SSIM)等可能无法准确反映生成样本的真实质量。
    • 此外,由于 GAN 生成的样本是随机的,很难确定一个固定的评估标准来衡量其质量。
  3. 计算资源需求大

    • GAN 的训练通常需要大量的计算资源,特别是在处理高分辨率图像或大规模数据集时。这限制了 GAN 在一些资源有限的环境中的应用。
  4. 缺乏可解释性

    • GAN 的生成过程通常是黑盒的,难以理解生成器和判别器是如何学习数据分布并生成样本的。这使得 GAN 在一些需要可解释性的应用场景中受到限制。
  5. 模式崩溃

    • 由于生成器和判别器的不平衡、或者真实数据的分布关于复杂、或者训练算法的问题,导致GAN模式崩溃,模式崩溃是指生成器开始生成非常相似或重复的样本,无法覆盖真实数据的多样性。

2.解决方案

  1. 改进训练算法

    • 研究人员提出了许多改进的训练算法来提高 GAN 的稳定性。例如,Wasserstein GAN(WGAN)使用 Wasserstein 距离作为损失函数,有效地缓解了训练不稳定和模式崩溃的问题。
    • 还有一些方法通过调整生成器和判别器的更新频率、使用不同的优化算法等方式来提高训练的稳定性。
  2. 开发新的评估指标

    • 为了更好地评估 GAN 生成的样本质量,研究人员开发了一些新的评估指标。例如,Inception Score 和 Frechet Inception Distance 等指标通过计算生成样本的多样性和真实性来评估生成质量。
    • 此外,一些基于人类主观评价的评估方法也被提出,以更准确地反映生成样本的质量。
  3. 优化模型架构和计算效率

    • 优化 GAN 的模型架构可以减少计算资源的需求。例如,使用轻量级的神经网络结构、采用模型压缩技术等可以降低模型的计算复杂度。
    • 同时,研究人员也在探索更高效的计算方法,如分布式训练、硬件加速等,以提高 GAN 的训练效率。
  4. 提高可解释性

    • 为了提高 GAN 的可解释性,研究人员尝试从不同角度理解 GAN 的生成过程。例如,通过可视化生成器和判别器的中间层特征、分析生成样本的统计特性等方式来揭示 GAN 的工作原理。
    • 一些研究还尝试将可解释性引入 GAN 的设计中,例如使用可解释的生成器结构或添加可解释的正则化项。
  5. 数据增强和正则化
    •  为了提高 GAN 在数据增强和正则化方面的效果,研究人员尝试从不同角度进行改进。例如,通过采用不同的随机变换方式,如旋转、翻转、缩放等,以更有效地增加数据的多样性,让生成器能够接触到更多不同的模式。同时,分析不同随机变换对生成样本的影响,以确定最佳的数据增强策略。
    • 一些研究还尝试将新的正则化方法引入 GAN 的设计中,例如使用基于信息论的正则化项,或者结合自监督学习的正则化策略,以更好地防止生成器过拟合,提高生成样本的多样性。

GAN 虽然在生成数据方面具有强大的能力,但也面临着一些挑战。通过不断改进训练算法、开发新的评估指标、优化模型架构、提高可解释性和数据增强和正则化等方法,研究人员正在努力克服这些挑战,推动 GAN 的发展和应用。

相关文章:

生成式专题的第一节课---GAN图像生成

一、GAN的起源与发展 1.GAN的起源 GAN (生成式对抗网络)诞生于 2014 年,由 Ian Goodfellow 提出,是用于生成数据的深度学习模型,创新点是对抗性训练,即生成器与判别器的竞争关系,为图像生成、…...

中科星图GVE(案例)——AI实现建筑用地变化前后对比情况

目录 简介 函数 gve.Services.AI.ConstructionLandChangeExtraction(image1,image2) 代码 结果 知识星球 机器学习 简介 AI可以通过分析卫星图像、航拍影像或其他地理信息数据,实现建筑用地变化前后对比。以下是一种可能的实现方法: 数据获取&am…...

Spring Boot中获取application.yml中属性的几种方式

在Spring Boot应用程序中,可以通过多种方式从application.yml文件中获取配置属性。以下是几种常见的方法: 1. 使用Value注解 你可以使用Value注解将application.yml中的属性注入到Spring管理的bean中。 application.yml app:name: MySpringBootAppve…...

YOLO11改进 | 注意力机制 | 结合静态和动态上下文信息的注意力机制

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 上下文Transformer(CoT&…...

Python中函数的使用方法

1 问题 在python的学习中,一个相同的程序可能会有多种不同的代码输入方式,那么函数这种方式是否方便快捷呢?今天我们来简单介绍函数的部分使用方法。 2 方法 定义函数:代码清单1Def function name (arguments):return result在上面…...

遨游智能终端赋能“危急特”场景,力推北斗技术规模化应用!

随着《北斗规模应用三年行动计划(2023-2025)》的发布,北京、湖北、重庆等多地出台北斗支持政策,北斗系统正稳步迈向“安全可控,泛在融合,开放兼容,服务全球”的发展目标。遨游通讯紧跟国家战略步…...

构建流媒体管道:利用 Docker 部署 Nginx-RTMP 从 FFmpeg RTMP 推流到 HLS 播放的完整流程

最近要实现一个类似导播台的功能,于是我先用 FFmpeg 实现一个参考对照的 Demo,我将其整理为一篇文章,方便后续大家或者和自己参考! 1、软件工具介绍 本次部署相关软件 / 工具如下: FFmpeg:全称是 Fast Fo…...

【汇编语言】寄存器(CPU工作原理)(六)—— 修改CS,IP的指令以及代码段

文章目录 前言1. 修改CS、IP的指令2. 问题分析:CPU运行的流程3. 代码段小结结语 前言 📌 汇编语言是很多相关课程(如数据结构、操作系统、微机原理)的重要基础。但仅仅从课程的角度出发就太片面了,其实学习汇编语言可以深入理解计…...

机器学习与神经网络:从技术前沿到诺贝尔奖的跨越与未来展望

近日,2024年诺贝尔物理学奖颁发给了机器学习与神经网络领域的研究者,这是历史上首次出现这样的情况。这项奖项原本只授予对自然现象和物质的物理学研究作出重大贡献的科学家,如今却将全球范围内对机器学习和神经网络的研究和开发作为了一种能…...

java 洛谷题单【数据结构1-2】二叉树

P4715 【深基16.例1】淘汰赛 解题思路 半区分配:将前半部分国家分配到左半区,后半部分国家分配到右半区,分别找到两个半区的最强国家。决赛和亚军确定:最后比较两个半区最强国家的能力值,失败者即为亚军,输…...

项目优化内容及实战

文章目录 事前思考Prometheus 普罗米修斯概述架构安装及使用 Grafana可视化数据库读写分离实战1-PrometheusGrafanaspringboot 事前思考 需要了解清楚:需要从哪些角度去分析实现?使用了缓存,就需要把缓存命中率数据进行收集;使用…...

科研绘图系列:R语言蝴蝶图(Butterfly Chart)

文章目录 介绍加载R包数据函数画图系统信息介绍 蝴蝶图(Butterfly Chart),也被称为龙卷风图(Tornado Chart)或双轴图(Dual-Axis Chart),是一种用于展示两组对比数据的图表。这种图表通过在中心轴两侧分别展示两组数据的条形图,形似蝴蝶的翅膀,因此得名。蝴蝶图的特点…...

【FPGA开发】Modelsim如何给信号分组

前面已经发布过了一篇关于 Modelsim 的入门使用教程,针对的基本是只有一个源文件加一个仿真tb文件的情况,而实际的工程应用中,往往是顶层加多个底层的源文件结构,如果不对信号进行一定的分组,就会显得杂乱不堪&#xf…...

Apache SeaTunnel 9月份社区发展记录

各位热爱 SeaTunnel 的小伙伴们,9月份社区月报来啦!这里将定期更新SeaTunnel社区每个月的重大进展,欢迎关注! 月度Merge Stars 感谢以下小伙伴上个月为 Apache SeaTunnel 做的精彩贡献(排名不分先后)&…...

系统架构设计师:数据库系统相关考题预测

作为系统架构设计师,在准备数据库系统相关的考试时,可以预期到的一些关键知识点包括但不限于以下几个方面: 数据库类型: 关系型数据库(RDBMS)与非关系型数据库(NoSQL)的区别及其适用场景。数据库管理系统(DBMS)的功能及组成部分。数据模型: 如何设计ER模型(实体-关…...

污水排放口细粒度检测数据集,污-水排放口的类型包括10类目标,10000余张图像,yolo格式目标检测,9GB数据量。

污水排放口细粒度检测数据集,污-水排放口的类型包括10类目标(1 合流下水道,2 雨水,3 工业废水,4 农业排水,5 牲畜养殖,6 水产养殖,7 地表径流,8 废水处理厂&…...

c++(多态)

多态的定义 多态是⼀个继承关系的下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为 ⽐如Student继承了Person。Person对象买票全价,Student对象优惠买票。 多态实现的条件 • 必须指针或者引⽤调⽤虚函数 第⼀必须是基类的指针或引⽤,…...

【网络协议】TCP协议常用机制——延迟应答、捎带应答、面向字节流、异常处理,保姆级详解,建议收藏

💐个人主页:初晴~ 📚相关专栏:计算机网络那些事 前几篇文章,博主带大家梳理了一下TCP协议的几个核心机制,比如保证可靠性的 确认应答、超时重传 机制,和提高传输效率的 滑动窗口及其相关优化机…...

财政部官宣: 国家奖学金,涨了!

财政部副部长郭婷婷10月12日在国新办新闻发布会上介绍,关于高校学生的资助,财政部将会同相关部门从奖优和助困两个方面,分两步来调整完善高校学生的资助政策—— 第一步是在2024年推出以下政策措施: 国家奖学金的奖励名额翻倍。…...

antd table合并复杂单元格、分组合并行、分组合并列、动态渲染列、嵌套表头

项目里遇到个需求,涉及到比较复杂的单元格合并 、嵌套表头、分组合并行、合并列等,并且数据列还是动态的,效果图如下: 可以分组设置【显示列】例如:当前组为【合同约定】,显示列为【合同节点】和【节点金额…...

一键安装与配置Stable Diffusion,轻松实现AI绘画

随着技术的迭代,目前 Stable Diffusion 已经能够生成非常艺术化的图片了,完全有赶超人类的架势,已经有不少工作被这类服务替代,比如制作一个 logo 图片,画一张虚拟老婆照片,画质堪比相机。 最新 Stable Di…...

模板和静态文件

模板和静态文件 1、templates模板2、静态文件2.1、static目录2.2、引用静态文件 1、templates模板 "templates"目录用于存放模板文件,通常是用于动态生成页面的文件。 在app01目录下创建templates文件夹,html文件均保存在templates中 在urls.p…...

Android Studio 打包aar丢失远程依赖问题解决

之前打包,使用的com.kezong.fat-aar,embed(‘XXXX’)的方式,可以使三方依赖打包在aar包里,在项目里直接使用 升级了Gradle:7.5后,打包就打包不起来了,一直报错&#xff…...

Chromium 搜索引擎功能浅析c++

地址栏输入:chrome://settings/searchEngines 可以看到 有百度等数据源,那么如何调整其顺序呢,此数据又存储在哪里呢? 1、浏览器初始化搜索引擎数据来源在 components\search_engines\prepopulated_engines.json // Copyright …...

DDoS攻击快速增长,如何在抗ddos防护中获得主动?

当下DDoS攻击规模不断突破上限。前段时间,中国首款3A《黑神话:悟空》也在一夜之内遭受到28万次攻击DDoS攻击,严重影响到全球玩家的游戏体验。Gcore发布的数据也显示了 DDoS攻击令人担忧的趋势,尤其是峰值攻击已增加到了令人震惊的…...

MongoDB 死锁 锁定问题

要查看 MongoDB 是否出现“锁死” (也就是所谓的 锁定问题,通常指长时间的锁定导致数据库操作无法正常进行),可以通过以下几种方法来检测数据库的锁定状态和锁定相关信息。 1. 使用 db.currentOp() 检查活动操作 MongoDB 提供了 db.currentOp() 命令来查…...

鸿蒙--商品列表

这里主要利用的是 List 组件 相关概念 Scroll:可滚动的容器组件,当子组件的布局尺寸超过父组件的视口时,内容可以滚动。List:列表包...

【Fargo】5:根据网络带宽动态调整发送速率

根据网络带宽动态调整发送速率 原理:这个简单实现的原理是 改变包的发送速率就可以改变发送码率了。例如1秒发1000个1KB 的包,带宽8Mbps,如果带宽是4Mbps,那么1秒发500个就够了。D:\XTRANS\thunderbolt\ayame\zhb-bifrost\player-only\worker\src\fargo\zhb_uv_udp_sender.…...

入门C语言:从原码、反码、补码到位运算

入门C语言:从原码、反码、补码到位运算 C语言作为一门底层编程语言,离不开对计算机硬件的深入理解。掌握整数的二进制表示法和位运算是深入学习C语言的基础。对于大一新生来说,理解原码、反码、补码与位运算这几个概念,将帮助你更…...

18770 差值最大

### 思路 为了找到两个数x和y使得x - y的值最大,并且x在y的右侧,我们可以使用以下方法: 1. 从右向左遍历数组,记录当前遍历到的最大值max_right。 2. 对于每个元素a[i],计算max_right - a[i],并更新最大差…...