深入探讨生成对抗网络(GANs):颠覆传统的AI创作方式
在人工智能的快速发展中,生成对抗网络(Generative Adversarial Networks, GANs)无疑是一个引人注目的技术。自2014年由Ian Goodfellow等人首次提出以来,GANs已经在图像生成、文本生成、视频生成等多个领域展现出了惊人的能力。本文将详细解析GANs的原理、结构以及应用场景,帮助读者全面理解这一颠覆性的技术。
一、GANs的基本原理
生成对抗网络(Generative Adversarial Networks, GANs)是一种通过对抗训练来生成数据的深度学习模型。其核心思想是使用两个神经网络——生成器(Generator)和判别器(Discriminator)——通过博弈的方式相互竞争,从而提升生成模型的性能。这种对抗机制使得GANs在生成任务中表现得尤为出色。
1.1 对抗过程
GANs的训练过程可以看作是一个零和博弈,其中生成器和判别器分别扮演着不同的角色:
-
生成器的目标:生成器的任务是从随机噪声中生成数据,试图制造出尽可能真实的样本,以“骗过”判别器。生成器的输入通常是一个从某个简单分布(如均匀分布或正态分布)中采样的噪声向量。生成器通过多层神经网络(通常是反卷积网络)将这个低维的随机向量映射到高维的数据空间,生成的输出就是伪造的数据。
-
判别器的目标:判别器的任务是区分输入的数据是真实数据(来自真实数据分布)还是生成器生成的假数据。判别器通常是一个二分类神经网络,输入可以是真实样本或生成样本,输出是一个介于0到1之间的概率值,表示输入样本为真实数据的置信度。
这种对抗的过程可以用以下公式来表示:
[ \min_G \max_D V(D, G) = \mathbb{E}{x \sim p{data}(x)}\left[\log D(x)\right] + \mathbb{E}_{z \sim p_z(z)}\left[\log(1 - D(G(z)))\right] ]
在这个公式中:
- (V(D, G)) 是判别器 (D) 和生成器 (G) 的对抗损失。
- (\mathbb{E}{x \sim p{data}(x)}) 表示对真实数据 (x) 的期望,(p_{data}(x)) 是真实数据的分布。
- (\mathbb{E}_{z \sim p_z(z)}) 表示对噪声 (z) 的期望,(p_z(z)) 是生成器输入的分布。
- (D(x)) 是判别器对真实样本的输出,(G(z)) 是生成器生成的样本。
1.2 训练过程
GANs的训练过程是一个交替优化的过程,通常包括以下几个步骤:
-
训练判别器:在每个训练周期中,首先固定生成器,使用真实数据和生成的数据来训练判别器。通过反向传播,更新判别器的参数,使其能够更准确地识别真实样本和伪造样本。
-
训练生成器:然后,固定判别器,训练生成器。生成器的目标是最大化判别器的错误率,换句话说,生成器要生成能够“骗过”判别器的样本。通过反向传播,更新生成器的参数,使其生成的数据越来越接近真实数据的分布。
-
迭代进行:重复以上两个步骤,直到生成器生成的样本能够在视觉上与真实样本难以区分,或者达到预设的训练轮数。
1.3 收敛与稳定性
GANs的训练过程存在收敛性和稳定性的问题。理论上,若判别器足够强大,GANs的训练应该能够收敛于一个纳什均衡点,即生成器生成的样本分布与真实数据分布相同。然而,在实际训练中,GANs往往面临以下挑战:
-
模式崩溃(Mode Collapse):生成器可能只学习到数据分布中的一部分,导致生成的样本缺乏多样性。例如,在生成图像时,生成器可能只生成某一类样本,而忽略其他类型的样本。
-
训练不稳定性:GAN的训练过程往往不稳定,容易出现振荡现象,导致生成器和判别器的性能无法持续提高。这种不稳定性可能源于网络结构、学习率设置、训练数据的选择等多个因素。
为了应对这些挑战,研究者们提出了多种改进的算法和结构,如WGAN(Wasserstein GAN)、LSGAN(Least Squares GAN)等,这些变种在训练稳定性和收敛性方面表现得更为出色。
二、GANs的结构
生成对抗网络(GANs)由两个主要组件构成:生成器(Generator)和判别器(Discriminator)。这两个网络在结构上各有特点,且相互依赖,通过对抗训练共同演化。以下将详细探讨这两个组件的结构及其功能。
2.1 生成器
生成器是GANs的核心部分,负责从随机噪声中生成逼真的数据。它的结构通常包括以下几个关键部分:
2.1.1 输入层
生成器的输入是一个随机噪声向量,通常从一个简单的分布中采样,如均匀分布或正态分布。这个噪声向量的维度可能会影响生成样本的多样性,通常选择一个相对较低的维度,例如100维。
2.1.2 隐藏层
生成器的隐藏层通常采用反卷积(Transposed Convolution)或上采样(Upsampling)层,这些层的作用是将低维的随机向量逐步扩展为高维数据。例如,在生成图像的任务中,生成器可能会通过多个反卷积层逐步将随机噪声转化为具有特定分辨率的图像。
-
反卷积层:反卷积层的主要作用是上采样,增加特征图的空间维度,同时提取特征。反卷积层的参数与卷积层类似,但其操作是对输入特征图进行反向传播。
-
激活函数:在每个隐藏层后,通常会使用非线性激活函数,如ReLU(Rectified Linear Unit)或Leaky ReLU,以引入非线性特征,使生成器能够学习复杂的模式。
2.1.3 输出层
生成器的输出层通常使用tanh或sigmoid激活函数,具体取决于生成数据的类型:
- tanh:一般用于生成图像,输出范围为[-1, 1],适合处理归一化后的图像数据。
- sigmoid:通常用于处理二值数据,输出范围为[0, 1]。
生成器的目标是生成与真实数据分布相似的样本,因此输出层的设计直接影响生成样本的质量。
2.2 判别器
判别器的任务是判断输入样本是真实的还是生成的。其结构通常包括以下几个部分:
2.2.1 输入层
判别器的输入是一个样本,可能是来自真实数据集的真实样本,也可能是生成器生成的伪造样本。输入的维度与数据类型有关,例如,对于图像数据,输入通常是一个高维的图像张量。
2.2.2 隐藏层
判别器的隐藏层通常采用卷积层和全连接层的组合,主要包括以下几个步骤:
-
卷积层:卷积层用于提取样本的特征,能够有效捕捉局部模式。通过多个卷积层逐步降低特征图的空间维度,同时增加特征的深度,判别器能够学习到更高层次的抽象特征。
-
激活函数:在卷积层后,通常会使用Leaky ReLU等激活函数,以避免在训练过程中出现“死亡神经元”的问题。
-
池化层:池化层(如最大池化或平均池化)用于进一步降低特征图的维度,减少计算量,并增强特征的平移不变性。
2.2.3 输出层
判别器的输出层是一个单神经元的全连接层,通常使用sigmoid激活函数,输出一个介于0到1之间的概率值,表示输入样本为真实的概率。输出值接近1表示样本为真实数据,接近0则表示样本为生成数据。
2.3 训练过程中的结构交互
在GANs的训练过程中,生成器和判别器的结构并不是孤立的。它们之间的交互是GANs成功的关键。具体来说:
-
生成器的优化:生成器通过判别器的反馈来调整自身的参数。通过最小化判别器对生成样本的判断错误率,生成器不断改进其生成能力,从而生成更具真实性的样本。
-
判别器的优化:判别器通过对真实样本和生成样本的判断,更新其参数,以提高对真实数据和生成数据的区分能力。判别器的表现直接影响到生成器的训练效果。
GANs的结构由生成器和判别器两部分组成,生成器负责生成数据,而判别器则负责评估数据的真实性。通过这两个网络的对抗训练,GANs能够逐步优化生成样本的质量。理解GANs的结构对于深入研究其应用和改进算法至关重要。随着深度学习技术的不断进步,GANs的结构和训练方法也在不断演化,为更复杂的生成任务提供了新的解决方案。
三、GANs的应用场景
生成对抗网络(GANs)因其强大的生成能力和灵活性,已在多个领域中展现出广泛的应用潜力。以下是一些主要的应用场景,展示了GANs在现代科技中的重要性和多样性。
3.1 图像生成
图像生成是GANs最为经典和直观的应用之一。通过训练,GANs能够生成与真实图像相似度极高的合成图像。以下是一些具体应用:
-
艺术创作:GANs可以生成逼真的艺术作品,甚至模仿特定艺术家的风格。例如,CycleGAN可以将照片转换成某种艺术风格的图像,实现风格迁移。
-
人脸生成:使用StyleGAN等变种,GANs能够生成高度真实的人脸图像。这些生成的人脸甚至可以用于社交媒体头像、游戏角色等场景。
-
图像超分辨率:GANs还被用于图像超分辨率重建任务,能够将低分辨率图像转化为高分辨率图像,恢复细节和清晰度。
3.2 图像到图像的转换
GANs在图像到图像的转换任务中同样表现出色,能够实现不同风格、不同域之间的转换。具体应用包括:
-
图像增强:GANs可以用于图像的去噪和增强,提升图像质量。例如,Pix2Pix模型可以将素描图像转换为真实图像。
-
风格迁移:通过训练GANs,可以将一幅图像的风格迁移到另一幅图像上。例如,将白天的风景图转换为夜晚的效果,或将夏天的场景转换为冬天的场景。
-
语义分割:GANs可以用于图像分割任务,通过将输入图像的不同区域标记为不同的类别,提升图像分析的精度。
3.3 文本生成与增强
虽然GANs最初主要用于图像生成,但其在自然语言处理(NLP)领域的应用也逐渐受到重视。以下是一些具体的应用:
-
文本生成:GANs可以生成自然语言文本,例如新闻报道、诗歌等。通过训练生成器生成文本,并利用判别器评估文本的流畅性和逻辑性,GANs能够生成更加自然的语言。
-
对话生成:在对话系统中,GANs可以用于生成对话回复,使得智能助手或聊天机器人能够提供更加人性化的回答。
3.4 视频生成
GANs在视频生成领域的应用也引起了广泛关注,能够生成连续的帧图像,从而创造出逼真的视频效果。具体应用包括:
-
视频合成:GANs可以用于生成短视频片段,例如合成特定场景的动态效果,或将静态图像转化为动态视频。
-
动作生成:GANs可以用于生成动作视频,例如通过输入特定的动作指令,生成相应的运动视频,这在动画制作和游戏开发中具有重要意义。
3.5 医疗影像分析
GANs在医学图像处理中的应用也逐渐增多,能够帮助医生更好地进行诊断和分析。具体应用包括:
-
医学图像生成:GANs可以用于生成高质量的医学影像,如MRI或CT图像,以帮助训练医生和医用设备。
-
图像分割:在医学影像分析中,GANs可以用于分割肿瘤或其他病变区域,辅助医生进行精准的诊断和治疗。
3.6 3D物体生成
GANs还可以用于生成三维物体模型,这是计算机视觉和计算机图形学中的一个重要任务。具体应用包括:
-
3D模型重建:通过输入2D图像,GANs可以生成相应的3D物体模型,这在虚拟现实(VR)和增强现实(AR)中具有重要应用。
-
虚拟环境生成:GANs可以用于生成虚拟环境中的物体和场景,提升游戏和仿真应用的真实感。
3.7 数据增强
在机器学习和深度学习中,数据的多样性和数量对模型的性能至关重要。GANs可以用于数据增强,具体应用包括:
-
合成训练数据:在数据稀缺的情况下,GANs可以生成额外的训练样本,帮助提高模型的泛化能力。
-
打破数据不平衡:在类别不平衡的情况下,GANs可以生成少数类样本,平衡训练数据集,从而提升模型对少数类的识别能力。
GANs的应用场景非常广泛,涵盖了从图像生成到自然语言处理,再到医学影像分析等多个领域。随着技术的不断发展和研究的深入,GANs的应用潜力仍在不断被挖掘。理解这些应用不仅有助于掌握GANs的实际价值,也为未来的研究和开发提供了方向。随着GANs技术的不断演进,我们可以期待在更多领域看到它们的身影。
四、GANs的挑战与未来发展
尽管生成对抗网络(GANs)在多个领域展现出了惊人的能力和广泛的应用,但在其发展和应用过程中也面临着许多挑战。理解这些挑战不仅有助于研究人员在技术上进行改进,也为未来的研究方向提供了指导。以下是GANs面临的一些主要挑战及其未来发展方向。
4.1 挑战
4.1.1 模式崩溃(Mode Collapse)
模式崩溃是GANs训练过程中最常见的问题之一。它指的是生成器在训练过程中仅学习到数据分布中的一部分,导致生成的样本缺乏多样性。例如,生成器可能只生成特定类型的图像,而忽略其他可能的样本。模式崩溃不仅影响生成样本的质量,也限制了GANs在多样化生成任务中的应用。
解决方案:为了解决模式崩溃问题,研究者提出了多种改进方法,包括使用多样性惩罚机制、引入噪声到生成过程、以及通过强化学习等方式来增强生成器的探索能力。例如,使用Wasserstein GAN(WGAN)通过引入地球移动距离(Wasserstein distance)来优化训练过程,已被证明在一定程度上可以缓解模式崩溃。
4.1.2 训练不稳定性
GANs的训练过程往往不稳定,容易出现振荡现象,使得生成器和判别器的性能无法持续提高。训练的不稳定性可能源于网络结构、学习率设置、训练数据的选择等多个因素。
解决方案:为提高训练的稳定性,研究者们开发了多种改进算法,例如使用标签平滑、梯度惩罚、以及调整优化器的学习率等。此外,采用分层训练或逐步增加生成器的复杂性也被认为是一种有效的策略。
4.1.3 评价标准缺乏
目前,GANs的生成质量缺乏统一的评估标准。常用的评估指标如Inception Score(IS)和Fréchet Inception Distance(FID)虽然能在一定程度上反映生成样本的质量,但它们依然存在局限性,难以全面评估生成样本的多样性和真实性。
解决方案:未来的研究可以集中在开发更全面的评价标准上,结合人类评估与自动评估机制,提升对生成样本质量的评估能力。
4.1.4 计算资源需求高
训练GANs通常需要大量的计算资源和时间,尤其是当处理高分辨率图像或复杂数据集时。这使得一些研究者和开发者在使用GANs时面临资源瓶颈。
解决方案:未来的研究可以集中在优化网络结构和训练算法上,以减少计算资源的需求。例如,采用更高效的模型架构,或者通过迁移学习和预训练的方式来加速训练过程。
4.2 未来发展
4.2.1 模型创新与变种
随着GANs的不断发展,研究者们已经提出了多种变种模型,如WGAN、LSGAN、CycleGAN、StyleGAN等。这些模型在不同的应用场景中展现出了更好的性能和稳定性。未来,继续探索和创新GAN模型将是一个重要的研究方向,以应对特定应用的需求和挑战。
4.2.2 多模态生成
多模态生成是指在一个模型中同时生成多种类型的数据(如图像、文本、音频等)。未来的GANs可能会朝着多模态生成的方向发展,使得不同类型的数据能够相互融合,提升生成的多样性和丰富性。
4.2.3 结合其他技术
将GANs与其他深度学习技术结合,如强化学习、图神经网络、变分自编码器(VAE)等,可能会带来新的突破。例如,强化学习可以用于优化生成过程,使生成器在训练过程中能够自我调整,提高生成质量。
4.2.4 伦理与隐私问题
随着GANs技术的广泛应用,伦理和隐私问题也日益凸显。GANs生成的内容(如深度伪造技术)可能会被滥用,导致假新闻、伪造视频等问题。未来的研究需要关注这些伦理问题,制定相应的技术规范和法律法规,以确保GANs的安全和合规应用。
尽管GANs在生成任务中展现出巨大的潜力和广泛的应用,但仍面临许多挑战,包括模式崩溃、训练不稳定性、评价标准缺乏以及计算资源需求高等问题。未来的发展将集中在模型创新、多模态生成、结合其他技术以及解决伦理与隐私问题等方面。随着技术的不断进步和研究的深入,GANs有望在更多领域中得到应用,并推动人工智能的发展。
五、总结
生成对抗网络(GANs)作为一种创新的生成模型,正在不断推动人工智能的发展。通过对抗训练的机制,GANs不仅在图像生成领域取得了显著的进展,也在其他多个领域展现出巨大的潜力。随着技术的不断进步,GANs将在未来的智能创作中发挥更加重要的作用。
相关文章:

深入探讨生成对抗网络(GANs):颠覆传统的AI创作方式
在人工智能的快速发展中,生成对抗网络(Generative Adversarial Networks, GANs)无疑是一个引人注目的技术。自2014年由Ian Goodfellow等人首次提出以来,GANs已经在图像生成、文本生成、视频生成等多个领域展现出了惊人的能力。本文…...

vmware Vnet8虚拟网卡丢失的找回问题
vmware Vnet8虚拟网卡丢失的找回问题 1.打开VMware Workstation 2.然后点击Edit --> Virtual Network Edit --> 打开Virtual Network Edit框 , 3.点击最下面的的Restore Default 按钮, 3.恢复默认设置,这会在网络连接那块可以看到丢失…...

Python 从入门到实战13(字符串简介)
我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们通过举例学习了流程控制语句中的循环语句。今天继续讨…...

Redis_RDB持久化
基于RDB的持久化方式会把当前内存中所有的redis键值对数据以快照的方式写入硬盘文件中,如果需要恢复数据,就把快照文件读到内存中。 RDB快照文件是经压缩的二进制格式的文件,它的储存路径不仅可以在redis服务器启动前通过配置参数来设置&…...

SOP流程制定:vioovi ECRS工时分析软件的智慧引领
在现代制造业中,标准化操作流程(SOP)已成为提升生产效率、确保产品质量、降低运营成本的关键要素。SOP不仅为生产活动提供了明确的指导,还促进了企业管理的规范化和精细化。然而,如何科学、高效地制定SOP流程ÿ…...

并发编程-synchronized解决原子性问题
并发编程-synchronized解决原子性问题 文章目录 并发编程-synchronized解决原子性问题零、说在前面一、线程安全问题1.1 什么是线程安全问题1.2 自增运算不是线程安全的1.3 临界区资源与临界区代码段 二、synchronized 关键字的使用2.1 synchronized 关键字作用2.2 synchronize…...

CSS之我不会
非常推荐html-css学习视频:尚硅谷html-css 一、选择器 作用:选择页面上的某一个后者某一类元素 基本选择器 1.标签选择器 格式:标签{} <h1>666</h1><style>h1{css语法} </style>2.类选择器 格式:.类…...

AI绘画:SD打光神器!(Stable Diffusion进阶篇:Imposing Consistent Light)
前言 在上一篇笔记中学习了如何简单地下载以及使用IC-Light,今天的内容会稍微有点不一样。 对于学过stable diffusion的小伙伴来说,forge UI和Comfy UI会更加熟悉一些。在IC-Light发布后,Openpose editor的开发者将其制作成了一个Forge UI上…...

QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第二期]
QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第二期] 第二期介绍:频道模块之频道管理 目录 QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第二期]第二期介绍:频道模块之频道管理获取用户详情获取用户频道列表获取频道详情获取子频道列表获…...

参赛心得和思路分享:2021第二届云原生编程挑战赛2: 实现一个柔性集群调度机制
关联比赛: 2021第二届云原生编程挑战赛2:实现一个柔性集群调度机制 参赛心得 历时快两个月的第二届云原生编程挑战赛结束了,作为第一次参赛的萌新,拿下了28名的成绩,与第一名差了19万分,因为赛制时间太长,…...

具体函数的卡诺图填入
目录 用卡诺图表示逻辑函数 基本步骤 例子1 例子2 例子3 用卡诺图表示逻辑函数 基本步骤 例子1 由真值表得卡诺图。 在函数值为1的地方在卡诺图上画上1。 例子2 例子3 非标准与或式,要找到公共部分。 将AB所在的那一行填上1。 将A非D的那个部分也填上1。 再…...

STM32 HAL freertos零基础(六)计数型信号量
1、计数型信号量 计数型信号量(Counting Semaphore)是另一种类型的信号量,它可以保持一个大于等于0的整数值,这个值表示可用资源的数量。本质上相当于队列长度大于1得队列。经典问题就是剩余车辆统计,出入车辆,车辆数据可以实时更新。 2、相关API函数 xSemaphoreCreat…...

Dynamics CRM Ribbon Workbench-the solution contains non-entity components
今天在一个低版本的环境里准备用Ribbon Workbench去编辑一个按钮时,遇到了如下错误 一开始没当回事,以为是我的解决方案问题,去检查了下,只有一个组件,并且哪怕我把组件换成了某个实体也不行,尝试了其他任何…...

谷歌对抗司法部:为什么谷歌的“数百个竞争对手”说法站不住脚
随着谷歌反垄断陪审团审判的进行,谷歌声称美国司法部对广告技术市场的看法狭隘,并且广告商和出版商有很多替代选择。然而,证据并不支持这一说法。 谷歌误导性地声称有“数百个竞争对手。” 虽然存在许多广告技术提供商,但谷歌在…...

重生奇迹MU 沉迷升级的快感 法魔升级机器人
重生奇迹MU是一款以升级为主要玩法的游戏。升级是游戏基础,也是最重要的部分。通过升级,玩家可以获得更多的基础属性奖励和自由点数奖励,同时还能够穿戴最好的装备和翅膀。因此,升级在游戏中具有极其重要的地位。 史上升级最快的…...

从地图到智能地图:空间索引技术如何改变我们的世界
图源:WL 为什么空间索引很有用? 在处理地理空间数据时,空间索引是一个至关重要的功能,它决定了我们如何高效地从海量的地理数据中检索出所需的信息。想象一下,如果你正在处理一个包含数千万乃至数亿条记录的数据库,…...

深入理解AI Agent架构,史上最全解析!赶紧码住!
AI Agent框架(LLM Agent):LLM驱动的智能体如何引领行业变革,应用探索与未来展望 1. AI Agent(LLM Agent)介绍 1.1. 术语 Agent:“代理” 通常是指有意行动的表现。在哲学领域,Agen…...

苹果iOS/ iPadOS18 RC 版、17.7 RC版更新发布
iPhone 16 / Pro 系列新机发布后,苹果一同推出了 iOS 18 和 iPadOS 18 的 RC 版本,iOS 18 RC 的内部版本号为22A3354,本次更新距离上次发布 Beta/RC 间隔 12 天。 在 iOS 18 中,苹果给我们带来了 Apple Intelligence,这…...

CAN集线器(工业级、隔离式)
型号: MS-HUB-C 概述 MS-HUB 是一款可通过一路 CAN ,一路 RS-232为主口扩展出 7 路 CAN 从口的工业级光电隔离型 CAN 分配器。可以有效的实现 CAN 网络的中继、扩展与隔离。采用先进的自动流控技术自动侦测CAN 信号流向。MS-HUB 具备光电隔离功能&#x…...

代码随想录训练营 Day57打卡 图论part07 53. 寻宝(prim,kruskal算法)
代码随想录训练营 Day57打卡 图论part07 卡码53. 寻宝 题目描述 在世界的某个区域,有一些分散的神秘岛屿,每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这些岛屿上建公路,方便运输。 不同岛屿之间,路途距离不同,…...

Hibernate QueryPlanCache 查询计划缓存引发的内存溢出
目录 1.排查方式2.结论3.解决办法 前言:在生产环境中有一个后端程序多次报oom然后导致程序中断。 1.排查方式 通过下载后端程序产生的oom文件,将oom文件导入MemoryAnalyzer程序分析程序堆内存使用情况。 1、将oom文件导入MemoryAnalyzer后可以看到概览信…...

前端开发的观察者模式
什么是观察者设计模式 观察者模式(Observer Pattern)是前端开发中常用的一种设计模式。它定义了一种一对多的依赖关系,使得当一个对象的状态发生改变时,其所有依赖对象都能收到通知并自动更新。观察者模式广泛应用于事件驱动的系…...

Pycharm 输入三个引号没有自动生成函数(方法)注释
配置项路径:pycharm–>Settins–>Tools–>Python Integrated Tools–>Docstrings–>Docstrings format选择对应的工程,如果有多个工程的话将 Docstrings format 的值从 Plain 换成 reStructuredText...

lammps后处理:多帧孔洞体积和孔隙率的计算
本文介绍lammps后处理技巧:多帧孔洞体积和孔隙率的计算方法。 在前面的专栏中,已经介绍了单帧孔洞体积的计算方法,有不少粉丝朋友咨询多帧孔洞体积的计算方法。 在上一次案例代码的基础上,稍加修改,添加一个for循环遍历所有的帧即可实现多帧孔洞体积的计算。 计算的结果…...

免费且实用:UI设计常用的颜色参考网站和一些Icon设计网站
用心去分享!请给我点个关注和点赞收藏!谢谢各位努力的人才! 1.在UI设计的时候,没有灵感,怎么办?可以参考这个网站(需要魔法能量) 网址如下: Color Hunt - Color Palette…...

log4j日志封装说明—slf4j对于log4j的日志封装-正确获取调用堆栈
日志是项目中必用的东西,日志产品里最普及应该就是log4j了。(logback这里暂不讨论。) 先看一下常用的log4j的用法,一般来说log4j都会配合slf4j或者common-logging使用,这里已slf4j为例。添加gradle依赖: dependencies { compile(l…...

JVM面试真题总结(六)
文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 解释GC的标记-整理算法及其优点 GC(垃圾收集ÿ…...

C语言代码练习(第十八天)
今日练习: 48、猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时&…...

linux上使用rpm的方式安装mysql
1.从mysql官网上下载需要的版本,根据操作系统版本,CPU架构,下载让rpm bundle,这个版本是个完整版,包含其他所有版本 上传到服务器的一个目录,进行解压 执行tar -xvf mysql*.tar tar -xvf mysql*.tar 2.卸载老版本m…...

html 中如何使用 uniapp 的部分方法
示例代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><…...