深入解析AI绘画算法:从GANs到VAEs

news2024/11/20 8:41:50

在这里插入图片描述
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
在这里插入图片描述

  • 推荐:「stormsha的主页」👈,持续学习,不断总结,共同进步,为了踏实,做好当下事儿~
  • 专栏导航
    • Python面试合集系列:Python面试题合集,剑指大厂
    • GO基础学习笔记系列:记录博主学习GO语言的笔记,该笔记专栏尽量写的试用所有入门GO语言的初学者
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 运维系列:总结好用的命令,高效开发
    • 算法与数据结构系列:总结数据结构和算法,不同类型针对性训练,提升编程思维

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

💖The Start💖点点关注,收藏不迷路💖

📒文章目录

      • 1. 生成对抗网络(GANs)
        • 1.1 生成器(Generator)
        • 1.2 判别器(Discriminator)
        • 1.3 对抗训练
        • 1.4 代码讲解
      • 2. 变分自编码器(VAEs)
        • 2.1 编码器(Encoder)
        • 2.2 解码器(Decoder)
        • 2.3 损失函数
        • 2.4 代码讲解


当涉及到AI作画算法时,主要的方法包括生成对抗网络(GANs)、变分自编码器(VAEs)、神经风格迁移(Neural Style Transfer)等。下面我将详细介绍每个组成部分的原理,并给出数学公式和代码讲解。
在这里插入图片描述

1. 生成对抗网络(GANs)

生成对抗网络由两个主要组件组成:生成器(Generator)和判别器(Discriminator)

在这里插入图片描述

1.1 生成器(Generator)

生成器旨在从随机噪声中生成逼真的图像。它通常是一个深度卷积神经网络,其目标是最小化生成的图像与真实图像之间的差距。

在数学上,生成器可以表示为:
G : z → x G:z\to x G:zx
其中,( z ) 是输入的随机噪声向量,( x ) 是生成的图像。

1.2 判别器(Discriminator)

判别器旨在区分生成器生成的假图像和真实图像。它也是一个深度卷积神经网络,其目标是最大化正确分类真实图像和生成的图像的概率。

在数学上,判别器可以表示为:
D : x → [ 0 , 1 ] D:x\to[0,1] D:x[0,1]
其中, D ( x ) D(x) D(x) 表示输入图像 x x x 是真实图像的概率。

1.3 对抗训练

生成器和判别器通过对抗训练相互竞争。生成器试图最小化判别器的损失,而判别器试图最大化将真实图像与生成的图像正确分类的概率。他们的损失函数可以定义如下:

生成器的损失函数:
L G A N = − log ⁡ ( D ( G ( z ) ) ) \mathcal{L}_\mathrm{GAN}=-\log(D(G(z))) LGAN=log(D(G(z)))

判别器的损失函数:
L G A N = − log ⁡ ( D ( x ) ) − log ⁡ ( 1 − D ( G ( z ) ) ) \mathcal{L}_{\mathrm{GAN}}=-\log(D(x))-\log(1-D(G(z))) LGAN=log(D(x))log(1D(G(z)))

这样的对抗训练会持续进行,直到生成器生成的图像与真实图像难以区分为止。

1.4 代码讲解

以下是一个简化的生成器和判别器的PyTorch代码示例:

import torch
import torch.nn as nn

# Generator
class Generator(nn.Module):
    def __init__(self):
        super(Generator, self).__init__()
        self.model = nn.Sequential(
            nn.Linear(noise_dim, hidden_dim),
            nn.ReLU(),
            nn.Linear(hidden_dim, output_dim),
            nn.Tanh()
        )

    def forward(self, z):
        return self.model(z)

# Discriminator
class Discriminator(nn.Module):
    def __init__(self):
        super(Discriminator, self).__init__()
        self.model = nn.Sequential(
            nn.Linear(input_dim, hidden_dim),
            nn.ReLU(),
            nn.Linear(hidden_dim, 1),
            nn.Sigmoid()
        )

    def forward(self, x):
        return self.model(x)

2. 变分自编码器(VAEs)

变分自编码器是一种生成模型,通过学习数据的潜在分布来生成新的数据样本。
在这里插入图片描述

2.1 编码器(Encoder)

编码器将输入图像编码为潜在空间中的潜在表示。它学习将图像映射到潜在空间中的均值和方差。

在数学上,编码器可以表示为:
q ( z ∣ x ) = N ( μ ( x ) , σ 2 ( x ) ) q(z|x)=\mathcal{N}(\mu(x),\sigma^2(x)) q(zx)=N(μ(x),σ2(x))
其中, μ ( x ) \mu(x) μ(x) σ 2 ( x ) \sigma^2(x) σ2(x) 是图像 x x x 的均值和方差。

2.2 解码器(Decoder)

解码器将潜在表示解码为图像。它学习将潜在空间中的点映射回图像空间。

在数学上,解码器可以表示为:
p ( x ∣ z ) = N ( f ( z ) , σ 2 I ) p(x|z)=\mathcal{N}(f(z),\sigma^2I) p(xz)=N(f(z),σ2I)
其中, f ( z ) f(z) f(z) 是潜在表示 z z z 的解码结果, σ 2 I \sigma^2 I σ2I 是噪声。

2.3 损失函数

VAEs使用重构损失和KL散度来训练模型。

重构损失:
L recon = − E q ( z ∣ x ) [ log ⁡ p ( x ∣ z ) ] \mathcal{L}_{\text{recon}} = -\mathbb{E}_{q(z|x)}[\log p(x|z)] Lrecon=Eq(zx)[logp(xz)]

KL散度:
L KL = KL ( q ( z ∣ x ) ∣ ∣ p ( z ) ) \mathcal{L}_{\text{KL}} = \text{KL}(q(z|x)||p(z)) LKL=KL(q(zx)∣∣p(z))

总损失:
L VAE = L recon + L KL \mathcal{L}_{\text{VAE}} = \mathcal{L}_{\text{recon}} + \mathcal{L}_{\text{KL}} LVAE=Lrecon+LKL

2.4 代码讲解

以下是一个简化的VAE的PyTorch代码示例:

import torch
import torch.nn as nn

# Encoder
class Encoder(nn.Module):
    def __init__(self, input_dim, hidden_dim, latent_dim):
        super(Encoder, self).__init__()
        self.fc1 = nn.Linear(input_dim, hidden_dim)
        self.fc2_mean = nn.Linear(hidden_dim, latent_dim)
        self.fc2_logvar = nn.Linear(hidden_dim, latent_dim)

    def forward(self, x):
        h = torch.relu(self.fc1(x))
        return self.fc2_mean(h), self.fc2_logvar(h)

# Decoder
class Decoder(nn.Module):
    def __init__(self, latent_dim, hidden_dim, output_dim):
        super(Decoder, self).__init__()
        self.fc1 = nn.Linear(latent_dim, hidden_dim)
        self.fc2 = nn.Linear(hidden_dim, output_dim)

    def forward(self, z):
        h = torch.relu(self.fc1(z))
        return torch.sigmoid(self.fc2(h))

# VAE
class VAE(nn.Module):
    def __init__(self, encoder, decoder):
        super(VAE, self).__init__()
        self.encoder = encoder
        self.decoder = decoder

    def reparameterize(self, mu, logvar):
        std = torch.exp(0.5*logvar)
        eps = torch.randn_like(std)
        return mu + eps * std

    def forward(self, x):
        mu, logvar = self.encoder(x)
        z = self.reparameterize(mu, logvar)
        recon_x = self.decoder(z)
        return recon_x, mu, logvar

    def reconstruct(self, x):
        recon_x, _, _ = self.forward(x)
        return recon_x

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏、分享下吧,非常感谢!👍 👍 👍

🔥🔥🔥道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

💖The End💖点点关注,收藏不迷路💖

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

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

相关文章

蛋糕购物商城

蛋糕购物商城 运行前附加数据库.mdf(或使用sql生成数据库) 登陆账号:admin 密码:123456 修改专辑价格时去掉¥以及上传专辑图片 c#_asp.net 蛋糕购物商城 网上商城 三层架构 在线购物网站,电子商务系统 …

Linux——终端

一、终端 1、终端是什么 终端最初是指终端设备(Terminal),它是一种用户与计算机系统进行交互的硬件设备。在早期的计算机系统中,终端通常是一台带有键盘和显示器的电脑,用户通过它输入命令,计算机在执行命…

redisson分布式锁的单机版应用

package com.redis;/*** author linn* date 2024年04月23日 15:31*/ import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.config.Config; import org.springframework.context.annotation.Bean; import org.springframework.context.…

SpringBoot 3.2.5 引入Swagger(OpenApi)

SpringBoot 3.2.5 引入Swagger(OpenApi) pom文件配置文件启动类Controller 层ApiFox题外话 springdoc-openapi 和 swagger 都可以用,用其中一个就行,不用两个都引入。 这里简单记录以下springdoc-openapi。 springdoc-openapi(J…

【AI相关】模型相关技术名词

目录 过拟合和欠拟合 1.过拟合 2.欠拟合 特征清洗、数据变换、训练集、验证集和测试集 1.特征清洗 2.数据变换 3.训练集 4.验证集 5.测试集 跨时间测试和回溯测试 1.跨时间测试(OOT 测试) 2.回溯测试 联合建模与联邦学习 1.联合建模 2.联…

用友政务财务系统FileDownload接口存在任意文件读取漏洞

声明: 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 简介 用友政务财务系统是由用友软件开发的一款针对政府机…

OPPO手机支持深度测试+免深度测试解锁BL+ROOT权限机型整理-2024年3月更新

绿厂OPPO手机线上线下卖的都很不错,目前市场份额十分巨大,用户自然也非常多,而近期ROM乐园后台受到很多关于OPPO手机的私信,咨询哪些机型支持解锁BL,ROOT刷机,今天ROM乐园正式盘点当前市场上可以解BL刷root…

树莓派4-通过IIC实现图片循环播放

一、环境 1、树莓派4; 2、串口连接电脑; 3、树莓派由杜邦线连接0.96寸OLED1306协议 4、树莓派能够联网,便于安装环境。离线情况也可以安装,相对麻烦; 二、目标 1、树莓派可以开启IIC并识别已连接的IIC; …

机器人-轨迹规划

旋转矩阵 旋转矩阵--R--一个3*3的矩阵,其每列的值时B坐标系在A坐标系上的投影值。 代表B坐标系相对于A坐标系的姿态。 旋转矩阵的转置矩阵 其实A相对于B的旋转矩阵就相当于把B的列放到行上就行。 视频 (将矩阵的行列互换得到的新矩阵称为转置矩阵。&…

4月26日 阶段性学习汇报

1.毕业设计与毕业论文 毕业设计已经弄完,加入了KNN算法,实现了基于四种常见病的判断,毕业论文写完,格式还需要调整,下周一发给指导老师初稿。目前在弄答辩ppt(25%)。25号26号两天都在参加校运会…

【蓝桥杯省赛真题38】python字符串拼接 中小学青少年组蓝桥杯比赛 算法思维python编程省赛真题解析

目录 python字符串拼接 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python字符串拼接 第十三届蓝桥杯青少年组python编程省赛真题 一、题目…

Cadence OrCAD学习笔记(2)OrCAD原理图

最近换份工作主要用到Cadence,之前都是用AD居多,所以现在也开始记录下Cadence学习过程,方便后面复习。 参考教程: OrCAD视频教程第2期:10分钟学会OrCAD原理图_哔哩哔哩_bilibili 本期主要介绍原理图中的基本操作&…

ZooKeeper 搭建详细步骤之二(伪集群模式)

ZooKeeper 搭建详细步骤之一(单机模式) ZooKeeper 及相关概念简介 伪集群搭建 ZooKeeper 伪集群是指在一个单一的物理或虚拟机环境中模拟出一个由多个 ZooKeeper 节点构成的集群。尽管这些节点实际上运行在同一台机器上,但它们通过配置不同的…

【学习笔记二十八】EWM和QM集成的后台配置和前台展示

一、EWM和QM集成概述 SAP EWM(扩展仓库管理)和QM(质量管理)的集成是SAP系统中一个重要的特性,它允许企业在仓库管理过程中实现质量控制和检验流程的自动化。以下是关于EWM和QM集成的一些关键点概述: 集成优势:通过集成,企业可以确保仓库中的物料在收货、存储、…

flutter笔记-主要控件及布局

文章目录 1. 富文本实例2. Image2.1 本地图片2.2 网络图片 笔记3. 布局4. 滑动相关view4.1 GridView类似九宫格view4.2 ListView 关于widget的生命周期的相关知识这里就不做介绍,和很多语言类似; 1. 富文本实例 Dart中使用richtext,示例如下…

深入浅出MySQL-02-【MySQL支持的数据类型】

文章目录 前言1.数值类型2.日期时间类型3.字符串类型3.1.CHAR和VARCHAR类型3.2.ENUM类型3.3.SET类型 4.JSON类型 前言 环境: Windows11MySQL-8.0.35 1.数值类型 MySQL中的数值类型,如下: 整数类型字节最小值最大值TINYINT1有符号 -128无…

C#反射应用

1.根据类名名称生成类实例 CreateInstance后面的参数部分一定要和所构造的类参数数量对应,即使设置参数默认值,也不可省略。 2.只知道类名,需要将该类作为参数调用泛型接口。 3.只知道类名,需要将该类的数组作为参数调用泛型接口…

基于51单片机的电梯仿真系统

基于51单片机的电梯设计 (仿真+程序PPT) 功能介绍 具体功能: 1.一共4层,数码管显示当前楼层; 2.六个按键模拟电梯外按键(1上、2上、2下、3上、3下、4下),每当按下时有…

前端HTML5学习2(新增多媒体标签,H5的兼容性处理)

前端HTML5学习2新增多媒体标签,H5的兼容性处理) 分清标签和属性新增多媒体标签新增视频标签新增音频标签新增全局属性 H5的兼容性处理 分清标签和属性 标签(HTML元素)和属性,标签定义了内容的类型或结构,而…

基于 Redis 发布订阅实现服务注册与发现

写在前面 其实很少有公司会使用 Redis 来实现服务注册与发现,通常是ETCD、NACOS、ZOOKEEPER等等,但是也不妨碍我们了解。本文会先介绍 Redis 的发布/订阅模式,接着基于这个模式实现服务注册与发现。 Redis发布订阅流程图: Red…