Datawhale X 魔塔 AI夏令营第四期-AIGC文生图方向 Task1笔记

一、文生图背景

        文生图(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代码结构

  1. 导入库:首先,代码导入了需要用到的库,包括 data-juicer 和微调的工具 DiffSynth-Studio

  2. 数据集构建:下载数据集kolors,处理数据集

  3. 模型微调:模型微调训练,以及加载训练后的模型

  4. 图片生成:调用训练好的模型生成图片

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")

得到的结果

最后将整个故事按顺序展示。

四、感想

        通过本次学习,我学到了文生图的相关知识,了解使用的模型,并通过实践完成一组图片。但是通过结果可以看到,图片还是存在一些问题,例如第三张图片中的提示词是闭眼,但是结果依然是睁眼,后续可以对此进行调整改进。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值