本书是对DiffusionAI绘图模型的综合性讲解书籍,书中包括最基础的组件的用例演示,也包括具体的项目实战,以及Diffusion模型的底层设计思路和实现原理的介绍。通过本书的学习,读者可以快速掌握Diffusion模型的使用方法,掌握AI绘图模型的训练、测试过程,并能研发属于自己的AI绘图模型。
本书共19章,分为快速上手篇(第1~2章),概述了Diffusion模型的发展历史,介绍了开发环境的部署方法,以及Diffusion模型的快速上手演示。以文生图的Diffusion模型的训练方法篇(第3~7章),通过5个实战任务演示使用高层API的方法快速训练Diffusion模型。图像生成模型的历史发展篇(第8~12章),演示了前Diffusion时代的几个代表性的图像生成模型。以图生图的Diffusion模型的训练方法篇(第13~15章),通过3个实战项目演示了以图生图的Diffusion模型的训练方法。以图生图模型的历史发展篇(第16~18章),演示了前Diffusion时代的几个以图生图模型。完全手动构造Diffusion模型篇(第19章),演示了从零开始的Diffusion模型的搭建、训练、测试方法。
本书将使用最简单浅显的语言,带领读者快速地了解Diffusion模型的训练、测试方法。通过本书中实战项目的学习,读者可以掌握一般的AI绘图模型的研发流程。通过本书中Diffusion模型底层原理的学习,能够让读者知其然也知其所以然,做到融会贯通。
内容全面 本书是一本对Diffusion AI绘图模型进行综合性讲解的书籍,既有基础知识,也有实战示例,还包括底层原理的讲解。
语言简洁 本书尽量以简洁的语言书写,每个章节之间的内容尽量独立,使读者可以跳跃阅读而没有障碍。
代码清晰 本书的代码也尽量以简洁的形式书写,使读者阅读不感吃力。每个代码块即是一个测试单元,读者可以对每个程序的每个代码块按从上到下的顺序进行测试,从一个个小知识点聚沙成塔,融会贯通。
自从AI绘图技术面世以来,激发了很多人进行艺术创作的兴趣,创作绘画曾经是一件有很高门槛的活动,然而现在,只要输入一句描述文本,计算机就能根据文本的内容生成相应的绘画作品,并且在作画的细节上表现得十分优秀,甚至能超越很多职业画师,让画师这一职业的发展前景看起来岌岌可危。
初见这种技术时,大多数人会被它的表现所震撼,笔者也不例外,这里的AI绘图指的是以Diffusion模型为代表的以文生图模型。事实上图像生成并不是很新的技术,在Diffusion模型之前就已经有自动编码(Auto Encoder,AE)、生成对抗网络(Generative Adversarial Network,GAN)等一系列模型,并且也都取得了很好的成绩,之所以还是会被震撼到,是因为Diffusion模型把图像生成这件事情一下子提高到了过去无法企及的高度,尤其是作画的质量,是过去的模型无法相比的,Diffusion模型生成的图像很清晰,还能使用文本控制图像的内容,过去的模型想生成一张清晰的图片,难度就已经不小了,更不用说再去控制图像的内容了。
Diffusion模型优秀的地方还在于生成内容的丰富性上,无论描述文本的内容是自然风景、古典建筑、人物肖像、动漫卡通,还是可爱的小动物,都可以很自然地生成,这体现了Diffusion模型巨大的知识量,说明它见过的图像和文本是海量的,这和过去的传统模型拉开了差距。自从BERT到ChatGPT以来,大模型的思想被不断强化,Diffusion模型也符合大模型思想。
作为技术人员,可能会对Diffusion模型的底层原理非常感兴趣,本书将从Diffusion模型的高层API开始,逐渐深入地讲解Diffusion模型的底层原理。Diffusion模型中借鉴了一些历史模型的经验,在接触到这些知识时本书会作为单独章节进行讲解,以帮助读者构建完整的知识体系。
本书中所有的实战任务都配有完整的可执行代码,本书和书中代码笔者都尽量以简单、浅显的语言书写,尽量避免无意义的内容,以帮助读者快速、准确地理解本书中的知识。
通过本书的学习,读者能够快速地掌握Diffusion模型的构建、训练、测试方法,并且能够独立研发属于自己的Diffusion绘图模型。
李福林,一个在IT领域摸爬滚打十多年的老程序员、培训师,精通多种IT技术,具有软件设计师职称。分享了多部AI技术教程,受到了读者的广泛赞誉。现任职于阳狮集团,担任算法工程师职位。教学风格追求化繁为简,务实而不空谈,课程设计思路清晰,课程演绎说理透彻,对AI领域技术有自己独到的见解。
第1章介绍Diffusion模型的发展历程,以及本书中相关任务的训练方法。
第2章介绍开发环境的配置,并且快速上手Diffusion模型的使用。
第3章介绍不定图像的生成任务。
第4章介绍文本训练方法。
第5章介绍Dream Booth训练方法。
第6章介绍图文结合的训练方法。
第7章介绍使用LoRA技巧加速训练。
第8章介绍AE模型。
第9章介绍VAE模型。
第10章介绍DCGAN模型。
第11章介绍WGANGP模型。
第12章手动构造一个没有文本输入的Diffusion模型。
第13章介绍ControlNet组件。
第14章介绍Instruct Pix2Pix训练方法。
第15章介绍正负样本混合训练方法。
第16章介绍Pix2Pix模型。
第17章介绍CycleGAN模型。
第18章介绍风格迁移任务。
第19章手动构建一个完整的Diffusion模型。
阅读建议
本书是一本对Diffusion模型进行综合性讲解的书籍,既有基础知识,也有实战示例,也包括底层原理的讲解。
本书尽量以简洁的语言书写,每个章节之间的内容尽量独立,使读者可以跳跃阅读而没有障碍。
作为一本实战型书籍,读者要掌握本书的知识,务必要结合代码调试,本书的代码也尽量以简洁的形式书写,使读者阅读时不感吃力。每个代码块即是一个测试单元,读者可以对每个程序的每个代码块按从上到下的顺序进行测试,从一个个小知识点聚沙成塔,融会贯通。
资源下载提示
素材(源码)等资源: 扫描封底的文泉云盘防盗码,再扫描目录上方的二维码下载。
致谢
感谢HuggingFace社区无私的奉献,因为有了你们的工作成果,本书才得以以简洁、标准化的API面世。
在书写本书的过程中,我竭尽所能为读者呈现最好的内容,错漏难免会存在,敬请读者批评指正。
李福林2023年11月
本书源码
快速上手篇
第1章Diffusion模型3
1.1Diffusion模型介绍3
1.1.1Diffusion模型的演化之路4
1.1.2图像以外的应用6
1.1.3其他的绘图模型6
1.2微调预训练模型6
1.2.1预训练模型6
1.2.2微调模型以适应新数据7
1.2.3微调相比重新训练的优势7
1.3小结8
第2章快速上手9
2.1部署开发环境9
2.2HuggingFace简介和快速上手11
2.2.1快速上手11
2.2.2加速技巧12
2.3Diffusion模型相关组件介绍13
2.3.1tokenizer13
2.3.2scheduler15
2.3.3Encoder16
2.3.4VAE17
2.3.5UNet18
2.4小结20
训练方法篇
第3章不定图像的生成23
3.1任务简介23
3.2数据集介绍23
3.3测试部分24
3.3.1测试函数24
3.3.2未训练模型的测试结果25
3.3.3训练后模型的测试结果27
3.4训练部分28
3.4.1全局常量28
3.4.2定义数据集28
3.4.3定义模型30
3.4.4初始化工具类31
3.4.5计算loss32
3.4.6训练34
3.5小结35
第4章文本训练36
4.1任务简介36
4.2数据集介绍36
4.3测试部分37
4.3.1测试函数37
4.3.2未训练模型的测试结果38
4.3.3训练后模型的测试结果39
4.4训练部分39
4.4.1全局常量39
4.4.2定义数据集39
4.4.3定义模型44
4.4.4初始化工具类47
4.4.5计算loss47
4.4.6训练50
4.5小结51
第5章Dream Booth53
5.1任务简介53
5.2数据集介绍53
5.3测试部分54
5.3.1测试函数54
5.3.2未训练模型的测试结果55
5.3.3训练后模型的测试结果55
5.4训练部分56
5.4.1全局常量56
5.4.2定义数据集56
5.4.3定义模型60
5.4.4初始化工具类61
5.4.5计算loss61
5.4.6训练62
5.5小结64
第6章图文结合的训练65
6.1任务简介65
6.2数据集介绍65
6.3测试部分66
6.3.1测试函数67
6.3.2未训练模型的测试结果68
6.3.3训练后模型的测试结果68
6.4训练部分69
6.4.1全局常量69
6.4.2定义数据集69
6.4.3定义模型73
6.4.4初始化工具类73
6.4.5计算loss74
6.4.6训练75
6.5小结77
第7章LoRA Dream Booth78
7.1任务简介78
7.2数据集介绍79
7.3测试部分79
7.3.1测试函数79
7.3.2未训练模型的测试结果80
7.3.3训练后模型的测试结果80
7.4训练部分81
7.4.1全局常量81
7.4.2定义数据集81
7.4.3定义模型84
7.4.4初始化工具类87
7.4.5计算loss87
7.4.6训练88
7.5小结89
图像生成模型的历史发展篇
第8章AE模型93
8.1模型原理介绍93
8.2鲜花数据集介绍94
8.3定义数据集95
8.4定义神经网络模型98
8.4.1定义Block工具层98
8.4.2定义Encoder和Decoder100
8.5训练101
8.5.1训练前的准备工作101
8.5.2执行训练102
8.6测试104
8.6.1测试本地训练的模型104
8.6.2使用训练好的模型测试105
8.7小结105
第9章VAE模型106
9.1AE模型的缺陷106
9.2定义神经网络模型107
9.3训练108
9.3.1训练前的准备工作108
9.3.2执行训练109
9.4测试111
9.4.1测试本地训练的模型111
9.4.2使用训练好的模型测试111
9.5小结113
第10章DCGAN模型114
10.1模型原理介绍114
10.2定义神经网络模型115
10.2.1定义CLS模型115
10.2.2定义GEN模型116
10.3训练117
10.3.1训练前的准备工作117
10.3.2训练CLS模型的函数118
10.3.3训练GEN模型的函数119
10.3.4执行训练120
10.4测试122
10.4.1测试本地训练的模型122
10.4.2使用训练好的模型测试122
10.5小结123
第11章WGANGP模型124
11.1模型原理介绍124
11.2定义神经网络模型125
11.3训练126
11.3.1训练前的准备工作126
11.3.2训练CLS模型的函数127
11.3.3执行训练128
11.4测试130
11.4.1测试本地训练的模型130
11.4.2使用训练好的模型测试130
11.5小结131
第12章Diffusion模型132
12.1模型原理介绍132
12.2定义神经网络模型134
12.3定义图像生成函数142
12.4训练144
12.5测试146
12.6小结147
训练方法篇
第13章ControlNet以图生图151
13.1任务简介151
13.2数据集介绍153
13.3测试部分154
13.3.1测试函数155
13.3.2未训练模型的测试结果156
13.3.3训练后模型的测试结果158
13.4训练部分159
13.4.1全局常量159
13.4.2定义数据集159
13.4.3定义ControlNet模型162
13.4.4定义模型168
13.4.5初始化工具类169
13.4.6计算loss169
13.4.7训练171
13.5小结172
第14章Instruct Pix2Pix图像调整173
14.1任务简介173
14.2数据集介绍174
14.3测试部分175
14.3.1加载数据集175
14.3.2测试函数176
14.4训练部分179
14.4.1全局常量179
14.4.2定义数据集180
14.4.3定义模型181
14.4.4初始化工具类182
14.4.5计算loss183
14.4.6训练186
14.5小结187
第15章正、负样本混合训练188
15.1任务简介188
15.2数据集介绍188
15.3测试部分190
15.3.1配置环境190
15.3.2测试函数191
15.3.3未训练模型的测试结果191
15.3.4训练后模型的测试结果192
15.4训练部分193
15.4.1全局常量193
15.4.2定义数据集193
15.4.3定义模型200
15.4.4初始化工具类203
15.4.5计算loss203
15.4.6训练206
15.5小结207
以图生图模型的历史发展篇
第16章Pix2Pix模型211
16.1任务介绍211
16.2数据集介绍212
16.3定义数据集213
16.4定义神经网络模型216
16.4.1定义CLS模型217
16.4.2定义残差连接层217
16.4.3定义GEN模型218
16.5训练220
16.5.1训练前的准备工作220
16.5.2训练CLS的函数221
16.5.3训练GEN的函数222
16.5.4执行训练223
16.6测试226
16.6.1测试本地训练的模型226
16.6.2使用训练好的模型测试228
16.7小结228
第17章CycleGAN模型230
17.1模型原理介绍230
17.2数据集介绍231
17.3定义数据集232
17.4定义神经网络模型234
17.4.1定义CLS模型234
17.4.2定义GEN模型235
17.5训练237
17.5.1训练前的准备工作237
17.5.2训练CLS的函数238
17.5.3训练GEN的函数239
17.5.4执行训练242
17.6测试243
17.6.1测试本地训练的模型243
17.6.2使用训练好的模型测试244
17.7小结245
Diffusion模型篇
第18章风格迁移249
18.1模型原理介绍249
18.1.1针对单张图片的风格迁移249
18.1.2基于神经网络模型的风格迁移250
18.1.3风格迁移模型的训练方法250
18.1.4数据部分251
18.2定义神经网络模型252
18.2.1定义CLS模型254
18.2.2定义抽取内容特征的函数254
18.2.3定义抽取风格特征的函数255
18.2.4加载风格图片特征256
18.3训练257
18.3.1训练前的准备工作257
18.3.2执行训练257
18.4测试259
18.4.1测试本地训练的模型259
18.4.2使用训练好的模型测试260
18.5小结260
第19章手动构建Diffusion模型261
19.1模型原理介绍261
19.2Encoder模型263
19.2.1编码层263
19.2.2注意力层264
19.2.3编码器层266
19.2.4Encoder模型268
19.2.5载入参数268
19.2.6试算270
19.3VAE模型270
19.3.1残差连接层270
19.3.2注意力层272
19.3.3Pad工具层274
19.3.4VAE模型275
19.3.5载入参数278
19.3.6试算280
19.4UNet模型281
19.4.1模型结构281
19.4.2残差连接层282
19.4.3注意力层284
19.4.4Transformers层286
19.4.5down层289
19.4.6up层290
19.4.7UNet模型291
19.4.8载入参数296
19.4.9试算298
19.5训练299
19.5.1加载工具类299
19.5.2定义数据集300
19.5.3定义模型303
19.5.4计算loss304
19.5.5执行训练305
19.6测试306
19.6.1定义生成函数306
19.6.2定义测试函数308
19.6.3测试未训练的模型309
19.6.4测试训练好的模型310
19.7小结311