Datawhale X 魔搭 AI夏令营:Task 1

一、文生图的基础知识

在这里插入图片描述

1. 提示词

对目标图片的一系列描述?(我看文中的描述得出的)有正向描述词反向提示词两种,前者是说明我们想要生成的内容,后者是表达我们不想要出现的内容。

2. LoRA

模型的一种微调方法:Low-Rank Adaptation,用于对已经训练好的模型进行更加精细的调整、优化。

3. ComfyUI

可视化工作流工具,简化和优化 AI 模型的配置和训练过程。

4. 参考图

引入额外的控制信号,使得用户能够更具体地指导图像生成的各个方面(如姿势关键点、分割图、深度图、颜色等)

类似于关键词?只是更加的确切。

二、模型代码

1. 依赖库

使用Data-JuicerDiffSynth-Studio,这两个库的作用如下:

  • Data-Juicer:数据处理和转换工具,旨在简化数据的提取、转换和加载过程
  • DiffSynth-Studio:高效微调训练大模型工具(这个或许就是LoRA部分所需要的吧

2. LoRA相关函数

def load_lora(model, lora_rank, lora_alpha, lora_path):
    lora_config = LoraConfig(
        r=lora_rank,
        lora_alpha=lora_alpha,
        init_lora_weights="gaussian",
        target_modules=["to_q", "to_k", "to_v", "to_out"],
    )
    model = inject_adapter_in_model(lora_config, model)
    state_dict = torch.load(lora_path, map_location="cpu")
    model.load_state_dict(state_dict, strict=False)
    return model

# Load LoRA
pipe.unet = load_lora(
    pipe.unet,
    lora_rank=16, # This parameter should be consistent with that in your training script.
    lora_alpha=2.0, # lora_alpha can control the weight of LoRA.
    lora_path="models/lightning_logs/version_0/checkpoints/epoch=0-step=500.ckpt"
)

这个函数用于配置LoRA适配器,并将其运用于模型,其中LoRA配置部分为:

lora_config = LoraConfig(
	r=lora_rank,
	lora_alpha=lora_alpha,
	init_lora_weights="gaussian",
	target_modules=["to_q", "to_k", "to_v", "to_out"],
)

这段代码我知道它在配置但是我不知道它在配置什么,喂给AI了我也没太看懂),AI的解释如下:


- **LoraConfig** 是一个配置对象,定义了 LoRA 适配器的参数。
- **r**: LoRA 的秩(rank),决定了适配器的低秩矩阵的维度。
- **lora_alpha**: LoRA 的缩放因子,用于调整适配器的影响力。
- **init_lora_weights**: 初始化 LoRA 权重的方法,这里选择的是高斯初始化(“gaussian”)。
- **target_modules**: 指定模型中需要插入 LoRA 适配器的层模块。在这里,这些模块是 `"to_q"`、`"to_k"`、`"to_v"` 和 `"to_out"`,通常这些模块是 Transformer 架构中的查询、键、值以及输出投影层。

model = inject_adapter_in_model(lora_config, model)则是将已经配置好的LoRA注入到模型中,最后将其模型计算权重加到CPU上后将配置好的模型进行返回。

3. 加载、管理模型

model_manager = ModelManager(torch_dtype=torch.float16, device="cuda",
                             file_path_list=[
                                 "models/kolors/Kolors/text_encoder",
                                 "models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors",
                                 "models/kolors/Kolors/vae/diffusion_pytorch_model.safetensors"
                             ])
pipe = SDXLImagePipeline.from_model_manager(model_manager)

这段代码创建一个 SDXLImagePipeline 对象,用于图像生成或处理任务,它将所有配置好的模型文件全部导入到这个pipe中,以便进行后续的操作。

4. 图像生成

最后就是使用类似的代码进行图像生成了:

torch.manual_seed(0)
image = pipe(
    prompt="二次元,一个金色长发女孩,在家中厨房忙碌,正在做饭,半身,白色长裙,还穿着粉色围裙",
    negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
    cfg_scale=4,
    num_inference_steps=50, height=1024, width=1024,
)
image.save("1.jpg")

之前提到过图像生成时需要的正向/反向提示词,在此处就出现了,就是此处的promptnegative_prompt,这个词应该是我们能够自己进行修改的。

三、对代码的疑惑

1. 还是不懂LoRA是如何工作、使用的,也就是不懂它的原理

2. 在导入模型的时候使用了safetensors文件,这个格式的文件我还没接触过,我对于该文件的存储内容完全不理解

四、最后

附上生成的结果图,只有图一是我修改了提示词的,我就只放这一张图吧,emm还行,挺好看:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

默示MoS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值