AI 绘画核心技术与实战
南柯
某头部大厂图像团队技术 leader,高级算法专家
6373 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 36 讲
AI 绘画核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

05| 旧画师GAN:天生有缺陷还是学艺不精湛?

你好,我是南柯。
今天开始,我们正式进入 AI 绘画理论阶段的学习。我会带你理解图像生成模型背后的算法原理,掌握 AI 绘画主流算法方案背后通用的算法模块,并带你从零到一训练一个扩散模型。
基于扩散模型的 AI 绘画技术是我们这门课的主题,但其实在 22 年以前,GAN 才是业界公认的 AI 绘画技术首选。在老一辈的 AI 画图中,GAN(生成对抗网络)可以说是唯一的选择。相信你也在各种社交软件上见到过各种变小孩、变老、性别变换的视觉特效,这类效果通常就是靠 GAN 完成的。
然而,随着 22 年 DALL-E 2、Stable Diffusion 的推出,扩散模型技术逐渐成为了 AI 绘画的主流技术。无论是绘画细节的精致度还是内容的多样性,扩散模型似乎都要优于 GAN。
即便如此,对于入门 AI 绘画知识体系而言,GAN 仍然是绕不开的话题,值得我们深入了解。因为搞懂了 GAN 的长处和短板,才能理解后来扩散模型解决了 GAN 的哪些痛点。而且今天我们要学的各种算法模型,也是面试中常常会问到的。
在正式探索基于扩散模型的 AI 绘画技术之前,我们用这一讲来重温旧画师 GAN,探讨 GAN 如何从兴起到高光,并简要回顾 GAN 发展史上那些里程碑式的技术。

GAN 的起源

下面我放了两张例子。第一个例子是张大千模仿石涛的画作,第二个例子是贝特莱奇 14 岁时仿照毕加索的画作。假如你是艺术鉴赏家,能否发现这些仿作的破绽呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

生成对抗网络(GAN)是一种重要的AI绘画技术,通过生成器和判别器的对抗训练,使生成的图像逐渐趋近于真实图像。虽然GAN在图像生成领域取得了重大进展,但存在的问题促使了扩散模型技术的崛起。GAN的发展历程展示了其从平凡到卓越的进化过程,为后续的AI绘画技术发展提供了重要的基础。随着扩散模型的兴起,GAN的地位逐渐被取代,但了解GAN的长处和短板对于理解后来扩散模型的优势至关重要。GAN的改进版如GigaGAN和DragGAN展示出令人惊叹的创新和功能,为AI绘画领域带来更加出色的图像生成和编辑能力。GAN在图像生成、局部编辑、图像风格化、老照片修复等应用场景中占据着重要地位,同时扩散模型在很大程度上解决了GAN的痛点,如训练不稳定性、生成图像模糊等问题。虽然扩散模型风靡,但研究人员并没有放弃对GAN的探索,新的GAN架构如GigaGAN和DragGAN展现出卓越的优势,为GAN技术的进步和突破带来期待。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《AI 绘画核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(10)

  • 最新
  • 精选
  • Chengfei.Xu
    GAN的原理总结: 生成对抗网络(GAN)由两个部分组成:生成器(Generator)与判别器(Discriminator),它们在模型训练的过程中会持续更新和对抗,最终达到平衡 生成器的任务是根据输入的随机噪声,生成看起来像真实样本的新数据 判别器的任务是辨别给定的真实数据是真样本还是生成器生成的伪造样本(它会收到一组真实数据和一组生成数据) 在训练过程中,生成器和判别器互相对抗。生成器试图生成更逼真的样本来迷惑判别器,而判别器则努力辨别出生成器生成的伪造样本。它们之间会不断重复这个过程,持续更新自己的参数,达到相互改进和提升 而随着训练的进行,生成器和判别器逐渐“学会”了“博弈”,最终会达到一个平衡状态,即生成器的样本会越来越逼真,判别器识别的准确率也会越来越高。通过这种对抗式的训练方式,GAN可以生成非常逼真的数据,使用场景有图像合成、图像修复、图像风格转换等等。

    编辑回复: 赞总结记录精神

    2023-09-26归属地:浙江
    1
  • Wiliam
    老师请教一下: 1. GAN 的局限性主要表现在训练不稳定性、生成图像模糊、难以评估和控制生成质量等问题,那么GigaGAN具体是解决了哪个问题呢? 2. 抛开GAN的劣势,相比Diffusion,GAN有什么优点吗?有考虑过GAN的优点与Diffusion的优点强强联合吗?

    作者回复: 你好。针对第一个问题,GigaGAN引入更多的模型参数、CLIP文本编码器和海量数据,能够通过文本生成高分辨率的清晰图像。在使用体验上和Stable Diffusion是类似的,但由于训练代码和模型权重没有开源,没有形成很大的影响力。在我看来,它的优势是图像质量,训练稳定性和生成质量控制的问题没有被解决。针对第二个问题,GAN的优点就是推理速度快,在单一任务上发挥稳定(比如变性别算法)。强强联合方面,短视频平台推出过一些特效,用Diffusion模型生产高质量风格化数据,使用Pix2Pix来实现手机端实时的风格化算法。

    2023-09-13归属地:福建
  • xixi
    giga读错了

    作者回复: 你好~感谢反馈!我们的音频同学会再接再厉😁。

    2023-09-01归属地:北京
  • xingliang
    BigGAN:BigGAN 是为了实现高分辨率、高质量的图像生成而设计的。它的特点是在模型中引入了大量的参数,利用更大的批次大小和更多的特征通道。这样可以实现高分辨率且内容丰富的图像生成。但同时,由于模型的复杂性,它需要大量的计算资源和时间来训练。 StarGAN:不同于其他 GANs 专注于单一领域或任务,StarGAN 能够在多个领域之间进行图像转换,例如,它可以在一个模型中实现人脸属性(如头发颜色、性别等)的多种转换。StarGAN 的核心是使用一个共同的生成器和判别器,以及域标签,使其可以对多个域进行学习和转换。 Progressive GAN (逐步增长的 GAN,也被称为 PGGAN):Progressive GAN 的主要特点是它从低分辨率开始训练,然后逐渐添加更多的层来增加分辨率。这种逐步的方法使得模型在初期的训练更稳定,并且能够逐渐适应更高分辨率的图像。这使得模型能够生成高质量且高分辨率的图像。

    编辑回复: 赞,自行总结也是加深记忆理解的好方法~

    2023-08-14归属地:立陶宛
  • xueerfei007
    一口气看完,催更

    编辑回复: 下一讲已经更新了,继续追更吧~

    2023-07-27归属地:浙江
    2
  • AI悦创
    这句:下面我放了两张例子。第一个例子是张大千模仿石涛的画作,第二个例子是贝特莱奇 14 岁时仿照毕加索的画作。假如你是艺术鉴赏家,能否发现这些仿作的破绽呢? 所以破绽是什么?(到这里,我还没往下看,想先提问一下)

    作者回复: 你好。如果非要说破绽,笔触、配色还是有差异的(当然,我并不是艺术鉴赏家,这个问题见仁见智)。这里我们是举一个例子,为了引出GAN中生成器、判别器的作用。希望能对你有所帮助。

    2023-07-26归属地:福建
  • peter
    请教老师几个问题: Q1:GAN有具体产品吗? 扩散模型有具体产品,比如SD,GAN有具体产品吗? Q2:GAN的生成器加随机噪声,请问有非随机噪声吗? Q3:模型的训练一般用什么语言? Q4:GAN或webUI能制作技术文档上的图吗?比如写一个技术文档,上面有数据链应用图等,可以制作这一类的技术图片吗?

    作者回复: 你好。针对Q1,2019年风靡一时的「ZAO」、各种DeepFake换脸软件都是GAN的具体产品;抖音、快手各种实时的人像特效(年龄、性别、表情编辑)基本也都是GAN;SD的具体产品当前有很多,比如Midjourney、最近大火的妙鸭相机、Lensa相机、Wink相机等等,以及去年年底以来各种AIGC短视频特效。针对Q2,在GAN和扩散模型中提到的噪声,可以理解为高斯噪声(都是随机噪声),这样才能保证最终生成内容的多样性。针对Q3,模型训练一般使用Python,训练框架可以是Pytorch、TensorFlow等(对于矩阵运算进行各种加速处理);针对Q4,GAN和WebUI不适合制作确定性的流程图、时间轴、链路图等,当前主要用于创意图片的生成。希望能帮助到你。

    2023-07-26归属地:北京
  • yanyu-xin
    看不懂伪代码。将代码复制给极客的"AI学习助手“,回答如下: 这段代码是一个用于训练生成对抗网络(GAN)的循环。下面是对代码的逐行分析: for epoch in range(num_epochs)::外层循环,用于控制训练的轮数。 for batch_data in data_loader::内层循环,用于遍历训练数据集中的每个批次。 real_images = batch_data.to(device):将真实图像数据移动到指定的设备(如GPU)上。 z = torch.randn(batch_size, latent_dim).to(device):从标准正态分布中生成一组随机噪声向量z,并将其移动到指定的设备上。 fake_images = generator(z).detach():使用生成器网络(generator)和随机噪声z生成一组假图像,并将其与生成器的参数的计算图分离。 d_loss_real = discriminator(real_images):将真实图像输入判别器网络(discriminator)中,计算真实图像的判别器损失。 d_loss_fake = discriminator(fake_images):将假图像输入判别器网络中,计算假图像的判别器损失。 d_loss = -(torch.mean(d_loss_real) - torch.mean(d_loss_fake)):计算判别器的总损失,这里使用了最大化判别器对真实图像的预测概率和最小化判别器对假图像的预测概率的策略。 discriminator.zero_grad():清除判别器的梯度。 d_loss.backward():反向传播,计算判别器的梯度。 discriminator_optimizer.step():更新判别器的参数,使用优化器进行梯度下降。 z = torch.randn(batch_size, latent_dim).to(device):重新生成一组随机噪声向量z,并将其移动到指定的设备上。 fake_images = generator(z):使用生成器网络和新的随机噪声z生成一组新的假图像。 g_loss = -torch.mean(discriminator(fake_images)):计算生成器的损失,这里使用了最大化判别器对假图像的预测概率的策略。 generator.zero_grad():清除生成器的梯度。 g_loss.backward():反向传播,计算生成器的梯度。 generator_optimizer.step():更新生成器的参数,使用优化器进行梯度下降。 这段代码的作用是通过交替地训练判别器和生成器,使生成器能够生成逼真的假图像,同时判别器能够准确地区分真实图像和假图像。
    2023-07-29归属地:广东
    4
  • 大将
    最大化真实图像的损失(d_loss_real)和最小化生成图像的损失(d_loss_fake),个人感觉这个描述并不准确,最大化和最小化容易引起歧义
    2024-02-06归属地:北京
  • Geek_0bac2d
    AI生成的代码解释 for epoch in range(num_epochs): for batch_data in data_loader: # 更新判别器 real_images = batch_data.to(device) # 获取真实图像数据 z = torch.randn(batch_size, latent_dim).to(device) # 生成随机噪声向量 fake_images = generator(z).detach() # 通过生成器生成假图像,并将其与生成器的梯度计算图分离 d_loss_real = discriminator(real_images) # 判别器对真实图像的判别结果 d_loss_fake = discriminator(fake_images) # 判别器对假图像的判别结果 # 判别器损失 d_loss = -(torch.mean(d_loss_real) - torch.mean(d_loss_fake)) # 计算判别器的损失 discriminator.zero_grad() # 清空判别器的梯度 d_loss.backward() # 反向传播计算判别器的梯度 discriminator_optimizer.step() # 利用优化器更新判别器的参数 # 更新生成器 z = torch.randn(batch_size, latent_dim).to(device) # 生成新的随机噪声向量 fake_images = generator(z) # 通过生成器生成新的假图像 g_loss = -torch.mean(discriminator(fake_images)) # 判别器对新的假图像的判别结果作为生成器的损失 generator.zero_grad() # 清空生成器的梯度 g_loss.backward() # 反向传播计算生成器的梯度 generator_optimizer.step() # 利用优化器更新生成器的参数
    2023-07-30归属地:广东
收起评论
显示
设置
留言
10
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部