布景方针


平常都是在用 AI 东西生成美人写真,审美已经麻痹疲劳了,辗转反侧就那么几样,所以我想下定决心自己亲手完成一次模型练习和生成进程,这样一旦我把整个工程的流程走通,我就能够按照自己的兴趣爱好,搜集相应的图片生成自己想要的内容了(嘻嘻懂得谈论区打 666 ),所以才有了本文的内容。方针便是:

  • 完成分散模型,并生成美人写真图片

前期准备


  • stable diffusion webui
  • tensorflow-gpu 2.10
  • anaconda 虚拟环境
  • python 3.10
  • 显卡 4090

数据生成


我手头没有那么多美人图片,怎么办呢?灵机一动,我有 stable diffusion ,能够生成一波。于是进行了一次烧卡举动,选择麦橘写实根底模型,然后填入常见的正向和负面提示词,主要便是“一个美丽的女孩”、“面部特写”、“看着观众”、“微笑”等提示词,每次生成 100 张图片,生成了 10 次,除掉了了吓人的鬼图,剩下了 972 张图片,作用如下,都是美人的写真。用 stable diffusion 生成的美人图来当作我的分散模型的练习数据,然后用分散模型再去生成美人图片,这是不是便是武当梯云纵,左脚踩右脚吗?我他娘的真是个天才。

为了生成想要的美女写真,我决定自己动手训练扩散模型

理论根底


为了生成想要的美女写真,我决定自己动手训练扩散模型

整个论文中对于模型的数学推导很杂乱,涉及到很多高数的内容,可是最终繁重求简之后,得到的定论却是十分简略的,咱们能够直接运用定论来复现模型的结构。要完成分散模型生成数据需要两步:

  1. 练习阶段:运用定义好的超参数不同时刻步原图进行添加不同程度的噪声,这些噪声作为咱们的标签,然后运用分散模型生成预测噪声,核算预测噪声原噪声的丢失值,最终核算梯度更新分散模型,不断重复这个进程直到收敛。

  2. 采样阶段:模型练习好,从一个正态分布的全噪声图中,不断运用分散模型去噪,逐渐生成原图

分散模型


分散模型主要运用的是 Unet 的网络结构结构,U-Net 的最初是运用在医学图画切割,可是分散模型在此根底上进行了些改变,主要有 6 个部分:

  1. 编码器(Encoder)部分:U-Net 的编码器部分由多个卷积层组成,用于从输入图画中提取特征信息。这些卷积层一般包含卷积操作激活函数池化层。编码器的使命是逐渐下降图画分辨率,同时提取高档语义特征。
  2. 中心衔接(Bottleneck) :U-Net 的中心衔接部分将编码器的输出衔接到解码器的输入。这个衔接答应网络在不同分辨率上融合初级和高档特征信息,以便更好地还原细节。
  3. 解码器(Decoder)部分:解码器部分由多个卷积层上采样操作组成,用于逐渐恢复图画的分辨率,并生成预测噪声结果。
  4. 跳跃衔接(Skip Connections) :U-Net 的关键设计特点是跳跃衔接,它将编码器的特征图与解码器的特征图相衔接。这些跳跃衔接有助于传递详细的局部信息,协助网络准确地预测噪声。
  5. 残差衔接(Residual Connections) :残差衔接是一种用于处理深度神经网络练习中的梯度消失和梯度爆炸问题的技术。在 U-Net 的解码器、中心衔接、解码器中引进残差衔接,能够协助网络更轻松地练习更深层次的模型。残差衔接经过将某一层的输入直接添加到该层的输出中。这有助于网络在反向传播中更好地传递梯度,然后加快收敛并提高模型功能。
  6. 注意力机制(Attention Mechanisms) :注意力机制答应神经网络在处理图画时愈加重视感兴趣的区域或特征。在 U-Net 的解码器、中心衔接、解码器中运用注意力机制,能够提高网络在噪声预测的作用

模型练习


咱们的丢失函数运用均方误差 MeanSquaredError ,优化器为 Adam,进行 800 个 epoch 的练习,每个 epoch 耗时平均 5 秒。

Epoch 1/800
15/15 [==============================] - 19s 356ms/step - loss: 0.9907
Epoch 2/800
15/15 [==============================] - 5s 357ms/step - loss: 0.9657
...
Epoch 718/800
15/15 [==============================] - 6s 363ms/step - loss: 0.0163
Epoch 719/800
15/15 [==============================] - 6s 364ms/step - loss: 0.0198
...
Epoch 799/800
15/15 [==============================] - 6s 359ms/step - loss: 0.0233
Epoch 800/800
15/15 [==============================] - 6s 360ms/step - loss: 0.0174

作用展现


下图便是运用练习好的模型进行图画的制作,能够看出来大部分还是比较不错的。从整个模型的练习和测试进程中有能够得出以下定论:

  • 优点:生成作用比较好,灵活的模型架构、不需要对抗练习
  • 缺陷:核算杂乱度较高,生成速度慢

为了生成想要的美女写真,我决定自己动手训练扩散模型

后文


假如大家有什么有趣的想法也能够谈论区留言,欢迎讨论。

参阅


  • arxiv.org/abs/2006.11…
  • www.bilibili.com/video/BV1Re…
  • github.com/AUTOMATIC11…
  • github.com/wangdayaya/…