一、文生图背景
文生图(Text-to-Image Generation)是一种通过文本生成图像的技术,其发展历程可以追溯到早期的计算机视觉和自然语言处理研究。文生图的概念最早出现于计算机视觉和图像处理的早期研究中。早期的图像生成技术主要依赖于规则和模板匹配,通过预定义的规则将文本转换为简单的图形。然而,由于计算能力和算法的限制,这一阶段的技术能力非常有限,生成的图像质量较低,应用场景也非常有限。
进入2000年代,随着统计模型和机器学习技术的发展,文生图技术开始得到更多关注。研究者们开始利用概率图模型和统计语言模型来生成图像。尽管这一阶段的技术在生成图像的多样性和质量上有了一定提升,但由于模型的复杂性和计算资源的限制,生成的图像仍然较为粗糙,不够逼真。
2010年代是文生图技术发展的一个重要转折点。随着深度学习,尤其是卷积神经网络(CNN)和生成对抗网络(GAN)的发展,文生图技术取得了突破性进展。2014年,Goodfellow等人提出的GAN模型通过生成器和判别器的对抗训练,极大地提升了图像生成的质量。随后,各类变种GAN模型被提出,如DCGAN、Pix2Pix等,使得文生图技术在生成逼真图像方面达到了前所未有的高度。
进入2020年代,大规模预训练模型如OpenAI的CLIP、DALL-E以及Stable Diffusion等的出现,标志着文生图技术进入了一个新的时代。CLIP通过大规模的文本和图像配对数据训练,能够理解和生成高度一致的文本和图像;DALL-E和Stable Diffusion进一步提升了生成图像的创意和细节表现能力,使得通过简单的文本描述生成高质量、复杂图像成为可能。
这些技术的应用范围从艺术创作、广告设计到辅助医疗诊断,展现了广泛的商业价值和社会影响力。
二、文生图基础知识
文生图主要以SD系列基础模型为主,以及在其基础上微调的lora模型和人物基础模型等。
接下来,我们简单了解下提示词、lora、ComfyUI和参考图控制这些知识点。
提示词
提示词很重要,一般写法:主体描述,细节描述,修饰词,艺术风格,艺术家
主体描述
主体准确,对主要对象或事件进行清楚描述,类似于一句话中的主谓宾,避免歧义。细节描述
细节丰富,包括场景、环境、服装、道具等各方面的细节,这些丰富的描述能够帮助模型更准确地捕捉需求。修饰词
修饰细节,使用准确丰富的修饰词可以使生成的图更生动。艺术风格
画风风格,添加如“digital painting”(数字绘画)或“oil painting”(油画)等描述词,可以显著改变输出图像的风格。提示词顺序及权重
提示词的顺序决定了其在生成图像中的权重,越靠前的词汇影响越大。同时,可以使用括号、冒号等符号调整每个提示词的权重,确保关键要素得到充分体现。正反向提示词
除了指明想要的内容,还应明确不希望出现的内容,如“low quality, worst quality, nsfw”等,这有助于优化生成结果。Lora
Stable Diffusion中的Lora(LoRA)模型是一种轻量级的微调方法,它代表了“Low-Rank Adaptation”,即低秩适应。Lora不是指单一的具体模型,而是指一类通过特定微调技术应用于基础模型的扩展应用。在Stable Diffusion这一文本到图像合成模型的框架下,Lora被用来对预训练好的大模型进行针对性优化,以实现对特定主题、风格或任务的精细化控制。
# 下载模型
from diffsynth import download_models
download_models(["Kolors", "SDXL-vae-fp16-fix"])
#模型训练
import os
cmd = """
python DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py \
--pretrained_unet_path models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors \
--pretrained_text_encoder_path models/kolors/Kolors/text_encoder \
--pretrained_fp16_vae_path models/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors \
--lora_rank 16 \
--lora_alpha 4.0 \
--dataset_path data/lora_dataset_processed \
--output_path ./models \
--max_epochs 1 \
--center_crop \
--use_gradient_checkpointing \
--precision "16-mixed"
""".strip()
os.system(cmd)
模型下载
从diffsynth
库中导入download_models
函数,然后调用该函数下载指定的模型。这里下载了两个模型,分别是"Kolors"和"SDXL-vae-fp16-fix"。
模型训练
首先导入os模块,然后定义一个字符串cmd,包含用于训练模型的命令行命令。使用os.system(cmd)执行这个命令调用DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py脚本来训练模型,同时传入一些参数,如预训练的UNet路径、文本编码器路径、预训练的FP16 VAE路径等。此外,还设置了LORA rank、LORA alpha、数据集路径、输出路径等参数。最后,设置了最大训练轮数、是否进行中心裁剪、是否使用梯度检查点以及精度等参数。
参数
python DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py
: 运行 Python 脚本 train_kolors_lora.py
,这个脚本负责模型的训练。
--pretrained_unet_path models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors
: 指定预训练的 UNet 模型路径。
--pretrained_text_encoder_path models/kolors/Kolors/text_encoder
: 指定预训练的文本编码器路径。
--pretrained_fp16_vae_path models/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors
: 指定预训练的 FP16 VAE 模型路径。
--lora_rank 16
: 设置 LoRA(Low-Rank Adaptation)的秩为 16。
--lora_alpha 4.0
: 设置 LoRA 的 alpha 值为 4.0。
--dataset_path data/lora_dataset_processed
: 指定处理过的训练数据集路径。
--output_path ./models
: 指定训练后的模型输出路径。
--max_epochs 1
: 设置最大训练轮次为 1。
--center_crop
: 指定使用中心裁剪。
--use_gradient_checkpointing
: 启用梯度检查点,以节省内存。
--precision "16-mixed"
: 使用 16 位混合精度进行训练,以优化计算性能和减少内存占用。
ComfUI
ComfyUI 是一个工作流工具,主要用于简化和优化 AI 模型的配置和训练过程。通过直观的界面和集成的功能,用户可以轻松地进行模型微调、数据预处理、图像生成等任务,从而提高工作效率和生成效果。
参考图控制
ControlNet是一种用于精确控制图像生成过程的技术组件。它是一个附加到预训练的扩散模型(如Stable Diffusion模型)上的可训练神经网络模块。扩散模型通常用于从随机噪声逐渐生成图像的过程,而ControlNet的作用在于引入额外的控制信号,使得用户能够更具体地指导图像生成的各个方面(如姿势关键点、分割图、深度图、颜色等)。
三、文生图实例展示
1.魔搭社区
链接:https://www.modelscope.cn/my/mynotebook/authorization
2.Baseline
拉取baseline
git lfs install
git clone https://www.modelscope.cn/datasets/maochase/kolors.git
baseline代码结构
导入库:首先,代码导入了需要用到的库,包括 data-juicer 和微调的工具 DiffSynth-Studio
数据集构建:下载数据集kolors,处理数据集
模型微调:模型微调训练,以及加载训练后的模型
图片生成:调用训练好的模型生成图片
3.体验AI文生图
调用训练好的模型,修改文字描述,即正向提示词和反向提示词。
torch.manual_seed(0)
image = pipe(
prompt="二次元,一个穿着紫色连衣裙的黑色长发女孩,坐在沙发上,手里拿着一张演唱会的宣传海报,渴望的眼神",
negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
cfg_scale=4,
num_inference_steps=50, height=1024, width=1024,
)
image.save("1.jpg")
得到的结果
最后将整个故事按顺序展示。
四、感想
通过本次学习,我学到了文生图的相关知识,了解使用的模型,并通过实践完成一组图片。但是通过结果可以看到,图片还是存在一些问题,例如第三张图片中的提示词是闭眼,但是结果依然是睁眼,后续可以对此进行调整改进。
总结
### 文章总结**一、文生图背景**
文生图技术经历了从早期依赖规则和模板匹配到现代深度学习模型的演进过程。2010年代后,随着CNN和GAN的发展,特别是GAN的提出,极大提高了图像生成的质量。进入2020年代,CLIP、DALL-E、Stable Diffusion等大规模预训练模型的出现,使文生图技术能够生成高质量、复杂且具有创意的图像,应用领域也不断扩展。
**二、文生图基础知识**
- **主要基础模型**:SD系列基础模型及其上的微调模型如Lora和人物基础模型。
- **提示词**:对于输入描述,重要的是主体、细节、修饰词、艺术风格和艺术家等关键元素,并能够通过权重调整和正反向提示词优化生成结果。
- **Lora模型**:通过特定微调技术应用于基础模型,实现对特定主题、风格或任务的精细化控制。文中介绍了Lora模型下载和训练的详细步骤及参数设置。
- **ComfyUI**:一个工作流工具,简化AI模型配置和训练流程,提升工作效率。
- **ControlNet**:用于精确控制图像生成的技术,通过引入控制信号指导图像生成的各个方面。
**三、文生图实例展示**
- 通过魔搭社区等平台展示文生图技术的实际应用。
- 通过Baseline示例,展示从数据获取、模型微调到图片生成的完整流程。
- 展示了调用训练模型修改文字描述生成图片的具体过程和结果。
**四、感想**
在文生图的学习与实践中,虽然能够生成一定质量的图片,但仍需对模型进行调整和优化以应对诸如“闭眼”提示词生成“睁眼”结果等问题,进一步提升生成图像的质量和精确度。