前置知识
指导手册里写得很详细,这里写一些最开始阅读时没有完全理解的点
生成对抗网络(GAN)
生成对抗网络(Generative Adversarial Network, GAN)是由两部分组成的深度学习模型:生成器(Generator)和判别器(Discriminator)。生成器尝试生成逼真的图像,而判别器则试图分辨这些图像是真实的还是生成的。在训练过程中,生成器不断改进以欺骗判别器,判别器也不断提高识别能力,最终导致生成器能够生成非常逼真的图像。
大规模预训练模型
CLIP:通过大规模的文本和图像配对数据训练,CLIP能理解文本和图像之间的复杂关系。它能够在提供文本描述的情况下找到与之高度一致的图像,或者反过来生成匹配描述的图像。
DALL-E:DALL-E是基于Transformer的模型,能够通过文本描述生成非常详细且富有创意的图像。这是因为它在大量图像-文本对上预训练,从而学会了如何将语言中的细微之处转换为视觉元素。
Stable Diffusion:Stable Diffusion是基于扩散模型的一种生成模型,通过多步迭代将随机噪声逐渐转变为符合文本描述的图像。它在图像生成的细节表现上更为出色,并且通过预训练和优化在生成质量和速度上都表现出色。
扩散模型所用的去噪过程:
LoRA
Low-Rank Adaptation (LoRA) 是一种用于大规模预训练模型的轻量级微调技术,旨在以较低的计算成本和较少的参数调整,实现对模型在特定任务或风格上的定制化优化。
LoRA 的核心思想是通过低秩分解来对预训练模型的权重矩阵进行调整。具体来说,它引入了两个低秩矩阵,使得在微调过程中不需要直接调整模型中的所有权重,而是通过调整这两个低秩矩阵来实现参数的适应性更新。
baseline一站式实现过程
指导手册写得特别好,这里还是补充自己阅读时注意到的几个点。
下载baseline文件
git lfs install
这是 Git Large File Storage(Git LFS)的一个命令,用于安装和配置 Git LFS。Git LFS 是一个扩展 Git 的工具,用于处理大文件和二进制文件的版本控制。它特别适合管理那些无法高效存储在传统 Git 仓库中的大文件(如图像、视频、模型文件等)。
安装环境,然后重启kernel
!pip install simple-aesthetics-predictor
!pip install -v -e data-juicer
!pip uninstall pytorch-lightning -y
!pip install peft lightning pandas torchvision
!pip install -e DiffSynth-Studio
Data-Juicer 是一个数据处理和特征工程工具,旨在自动化和简化数据预处理过程,提高数据科学项目的效率。
- 可以自动化许多数据处理任务,包括数据清洗、缺失值填补、异常值检测等,减少了人工干预的需求
- 提供特征选择和特征生成的功能,帮助用户从原始数据中提取有用的信息,以提升模型的性能
- 支持各种数据转换操作,如数据标准化、归一化、编码等,以使数据适合于机器学习模型的输入要求
- 提供数据可视化功能
DiffSynth-Studio 是一个用于生成模型的开发工具,提供了构建、训练和优化生成模型的功能,适合用于图像生成、数据合成等任务。
- 提供了构建和训练生成模型的工具,如 GANs 等。用户可以使用这些工具创建复杂的生成模型,用于图像生成、数据合成等任务
- 允许用户对生成模型进行合成、优化和调试,提供灵活的配置选项以调整模型的超参数和结构
接着重启 kernel,释放内存资源,避免可能的内存泄漏或资源不足问题。
调整prompt
首先是手册中讲到的关于 prompt 的设置:
提示词很重要,一般写法:主体描述,细节描述,修饰词,艺术风格,艺术家
一开始我想生成一个新的8图故事,于是我让 ChatGPT 给我生成了一个简单的草稿,举其中两个例子如下:
男孩独自坐在一片湖边,湖面平静如镜,倒映着他的身影。他低着头,手里拿着一块石子,若有所思地看着湖面。
男孩站在湖边,重新振作起来,眼中闪烁着坚定的光芒。天空中出现彩虹,他面向前方,胸有成竹地握紧了剑。
无脑更换 prompt 后发现生成的图片中有很多问题,一个是各图片中的男孩形象差距较大,另一个是很多细节(如彩虹、若有所思、坚定)未能明显表示。
学习原本的 prompt 后我作出修改:
- 每个 prompt 开头都设置为“二次元,黑色短发男孩,白T恤”,确保形象统一
- 采用描述性的词语或短语,尽量使用短句,避免很多描述的堆积
关于“negative_prompt”,暂时还没有很学会,于是先统一设置为““丑陋、变形、嘈杂、模糊、低对比度”。
这样生成的8图好了很多,但还是有一些问题,主要体现在图片中有多个人物的情况。比如我开始想设置成“男孩回乡,背影,村民向他跑来欢呼”,但生成的图片里村民们也都是背影(笑)。我猜测是要给不同人物各自设置特征,不然会用前一个人物的特征。做了一点尝试但村民那个生成的还是有点……奇怪(遗憾放弃),另一个“男孩和老者”的还可以:
二次元,黑色短发男孩,白T恤,森林深处,充满期待,和白发苍苍的老者面对面,老者穿着长袍,手持一根法杖,比男孩略高,温和地微笑着
以下是我的8图,讲述了一个男孩学剑的成长经历:
总结
目前能得到一个看得出来讲述完整故事的8图,但是有一些细节未连贯(如男孩的剑),还有是背景环境不够丰富,好几张像男孩的大头贴,接下来的学习继续调整