2023春季李宏毅机器学习笔记 05 :机器如何生成图像

资料

  • 课程主页:https://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.php
  • Github:https://github.com/Fafa-DL/Lhy_Machine_Learning
  • B站课程:https://space.bilibili.com/253734135/channel/collectiondetail?sid=2014800

一、图像生成常见模型

前提:一张好的图像的资讯量是远超一句文句所能提供的。

差异:在图像中许多文字中没有提供的信息是需要机器进行大量的脑补才能产生的,这也是图片生成(或语音生成)与文字生成的不同之处,而这种不同体现在模型的设计上。

对比
在这里插入图片描述

  • 文字生成:多采用Autoregressive(各个击破)的方法,也就是去计算下一个输出文字的概率

  • 图像生成:类比文字生成,多采用Autoregressive(各个击破)的方法,计算下一个像素出现的概率;图像逐行生成,可行,但是生成速度慢,所以在图像生成中一般采用一次到位的生成方法

    一次到位产生的问题:输入一段文字,正确答案并不是只有一个,单独做每个像素的分布,各有各的想法,会导致生成的图像像拼凑的破布;在这里插入图片描述

    对应解法:增加一个额外的输入normal/uniform distribution,产生P(x|y)在这里插入图片描述

二、常见图像生成模型

在这里插入图片描述

1. VAE

在这里插入图片描述
说明:

  • 1)文字输入decoder,用于限制图像生成的范围;
  • 2)Encoder输出一个向量交给Decoder,希望还原回一样的图像;
  • 3)Encoder和Decoder一起训练,希望生成的图像越相似越好;
  • 4)Encoder生成的向量强制满足Normal Distribution;

2. Flow-based Generative Model

在这里插入图片描述说明:
1)训练Encoder,输入一张图片输出一个向量,并保证这个向量是Invertible可逆的(大小与输入图像一致);
2)多个向量组成Normal Distribution,输入Encoder得出生成图像;

3. Diffusion Model

在这里插入图片描述
说明:
1)对一张图片不断添加噪声,让它看起来就像一个Normal Distribution取样得出的向量;
2)训练一个Denoise(解噪声)模型,一步步去除噪音,得到原图;

4. GAN

在这里插入图片描述
说明:
1)训练decoder,输出大量从Normal Distribution中sample出的向量(此时的输出质量差,几乎看不出是什么,只是一堆噪音),
2)训练Discriminator(鉴别器),作用是判断一张图片是decoder生成的图片P’(x)(左)还是真正的图片P(x)(右),
3)调整decoder的参数,计算P’(x)和P(x)的相似程度Loss,使discriminator越接近越好;

三、浅谈Diffusion Model

相关论文:Denoising Diffusion Probabilistic Models (DDPM)
论文地址:https://arxiv.org/abs/2006.11239

在这里插入图片描述

1. Diffusion Model原理

(1)Diffusion model在这里插入图片描述
(2)Denoise模块

  • 将带有噪音的图像和噪音严重程度输入Noise Predicter
  • Noise Predicter预测输入图片的噪音并输出噪音图像
  • 最后将输入的图片减去预测的噪音图像作为输出结果
    在这里插入图片描述

(3)Noise Predicter模块

  • 训练数据:通过Forward/Diffusion Process不断对原图像加噪音生成噪音图像;
  • 输入:输入图像input、噪声严重程度step
  • 输出:Ground truth
    在这里插入图片描述

2. Text-to-Image 文生图

在这里插入图片描述
说明:

  • 模型:在原有Diffusion的基础上增加文本输入;
    在这里插入图片描述

  • 数据来源:在原有Noise Predicter训练基础上增加文本输入;
    在这里插入图片描述

四、Stable Diffusion、DALL-E、Imagen 背后共同的套路

1. 观察Stable Diffusion、DALL-E、Imagen

在这里插入图片描述

论文地址:https://arxiv.org/abs/2112.10752

模型:最右边是输入(不只可以输入文字),中间是一个生成模型(使用diffusion modal),将diffusion modal生成的中间产物(一个图片压缩后的版本)输入最左边,还原回原来的图像;
在这里插入图片描述
模型:DALL-E series内置两个生成模型autoregressive(图像不大时使用)与diffusion modal
在这里插入图片描述
模型:先通过diffusion modal生成64×64的小图,再通过decoder生成256×256的大图;

2. 总结套路

在这里插入图片描述

  1. Text Encoder将文字叙述转化为多个向量;
  2. Generation Model,输入噪音和text Encoder生成的向量,生成一个中间产物(中间产物有不同的形式)
  3. 把中间产物(图中的中间产物是图片的压缩版本)输入Decoder,将图片还原为原始图像
模块 1:Text Encoder

过程:文字转为向量

模块2:Generation Model

过程:输入文字的向量和噪音图像,输出中间产物,与前面的描述diffusion model不同的是,noise不是直接加在图片上,而是加在representation上。
在这里插入图片描述
训练完成后,将Latent Representation与一段文字输入Denoise,重复多次,得到合适的中间产物传给Decoder;
在这里插入图片描述

模块3:Decoder

过程:Decoder的训练不需要文字资料,只需要大量的图片资料。

  • 第一种:中间产物是小图,将原图(图像对的右边)做down-sampling变为小图(左),即可得到训练资料;
    在这里插入图片描述

  • 第二种:中间产物是Latent Representation(潜在图像特征),获取方式(使用Auto-encoder:往encoder输入一张图像,生成Latent Representation,再把Latent Representation输入decoder,以还原原来的图片,让输入与输出越接近越好。训练完成后,取出decoder即为所求。
    在这里插入图片描述

五、拓展学习

Variational Auto-encoder (VAE)
Flow-based Generative Model
Generative Adversarial Network (GAN)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

经常使用耳机对耳朵听力有影响吗?戴哪种耳机不伤耳朵听力?

经常使用耳机容易引起末梢感受器官受损,可能造成内耳功能损伤,出现耳聋、耳鸣等听力的适应性下降的症状,建议使用耳机时间不要过长,并且音量不要过大。如果想保护听力的话,建议选择骨传导耳机,骨传导耳机通…

深情回忆VB编程之路

深情回忆VB编程之路 在上世纪90年代末,我与编程世界的初次邂逅始于QBasic这一古老而亲切的语言。那时的编程环境虽然简陋,但却蕴藏着无穷的可能性,每个字符仿佛跳跃着生命,在黑色屏幕中编织出我对编程世界最初的憧憬和梦想。 时光…

羊大师解读,羊奶的口味更适合哪些人群?

羊大师解读,羊奶的口味更适合哪些人群? 羊奶作为一种营养丰富的乳制品,拥有许多独特的品质和口味,备受消费者的青睐。它不仅含有丰富的蛋白质、维生素和矿物质,还具有更易消化的特点,适合许多人群的饮用。…

Pillow图像处理(PIL.Image类的详细使用)

文章目录 Opencv、Matplotlib(plt)、Pillow(PIL)、Pytorch读取数据的通道顺序Python图像处理库(PIL、Pillow、Scikit-image、Opencv)Pillow 官方文档(超详细,超推荐)一、PIL库与Pillow库的区别二、Pillow库&#xff08…

YOLOv5算法进阶改进(13)— 更换上采样方式之CARAFE | 轻量级通用上采样算子

前言:Hello大家好,我是小哥谈。CARAFE算子是一种上采样运算符,全称为Content-Aware ReAssembly Feature Extraction,它在图像语义分割任务中被广泛应用。CARAFE算子通过学习像素之间的关系来进行上采样,从而提高了图像分割的精度。CARAFE算子的优势在于它能够根据图像的内…

Sqlmap参数设置

Sqlmap参数设置 🎈🎈🎈🎈🎈🎈🎈🎈🎈🎈🎈🎈🎈🎈 --------------------------------------------注意---------…

类加载器的分类

类加载器的任务就是把 java字节码文件内容 加载到 JVM 中去 分类 类加载器一般分为两类: 启动类加载器: 这个类加载器使用C实现 是虚拟机自身的一部分,启动类加载器加载的内容 包括java.lang.Object、java.lang.String等在内的Java核心类库。…

一月 Intel、NVIDIA 轮放大招,AMD 彻底绷不住了

对关注 PC 硬件圈的同学来说,2024 年 1 月可能会是非常有意思的一个月份。 硬件大厂在结束 2023 一整年激烈较量后,开始将重心转向新的一年。 迎面而来便是这个月的 CES 2024(国际消费类电子产品展览会)! 大家关心的…

科研+临床观摩|牙科医生公派美国从事访问学者交流

很多临床医学专业的访问学者希望在访学从事科研的同时,能到医院进行临床观摩。对于这些申请者的要求,我们会尽量满足。本案例中的T医生,口语较弱,担心英语面试,最终我们为其取得了田纳西大学健康科学中心的邀请函&…

微软重定义键盘 将在键盘中植入Copilot键

大家好,我是极智视界,欢迎关注我的公众号,获取我的更多前沿科技分享 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq 这篇其实大基调偏吐…

SpringBoot从配置文件中获取属性的方法

方式一:Value 基本类型属性注入,直接在字段上添加Value("${xxx.xxx}")即可.注意这里用的是$,而不是#,Value注入的属性,一般其他属性没有关联关系。 配置文件 user:name: Manaphyage: 19sex: m…

C++ 运算符重载operator

运算符重载是一种形式的C多态。函数重载或函数多态,旨在能够用同名的函数来完成相同的基本操作,即使这种操作被用于不同的数据类型。 运算符重载将重载的概念扩展到运算符上,允许赋予C运算符多种含义。实际上,很多C(也包括C语言)…