Datawhale X 魔搭 2024年AI夏令营第四期AIGC方向 Task01

cnblogs 2024-08-11 15:13:00 阅读 84

从零入门AI生图原理&实践是 Datawhale 2024 年 AI 夏令营第四期的学习活动(AIGC”方向),基于魔搭社区“可图Kolors-LoRA风格故事挑战赛”开展的实践学习——

    <li>适合想 入门并实践 AIGC文生图、工作流搭建、LoRA微调 的学习者参与li>

学习内容提要:从通过代码实现AI文生图逐渐进阶,教程偏重图像工作流、微调、图像优化等思路,最后会简单介绍AIGC应用方向、数字人技术(选学)


Datawhale学习手册置顶=>从零入门AI生图原理&实践

1. 赛题任务概述

参赛链接:可图Kolors-LoRA风格故事挑战赛

赛事目标:

    <li>参赛者需在可图Kolors 模型的基础上训练LoRA 模型,生成无限风格,如水墨画风格、水彩风格、赛博朋克风格、日漫风格......li>
  1. 基于LoRA 模型生成 8 张图片组成连贯故事,故事内容可自定义;基于8图故事,评估LoRA风格的美感度及连贯性 样例:偶像少女养成日记li>

赛事流程:

  • 初赛:报名后-2024年8月31日23:59
  • 决赛:2024年9月5日答辩展示,线上决出一二三等奖(评委主观评分)

2. task01-跑通baseline

2.1 比赛报名

点击参赛链接,同意协议后即可报名成功。

报名样例

2.2 创建阿里云PAI-DSW实例

每个新用户都有一个免费试用的机会=>阿里云免费试用链接

实例创建1

实例创建2

注意事项:

    <li>第③步务必选择第二个, 第一个的GPU的显存不够
  1. 如果创建后未找到实例,可能是现有的实例和新创建的实例不在同一地区,请点击新建实例上方的地区(图中为华东1(杭州))进行切换

2.3 baseline下载

<code> git lfs install

git clone https://www.modelscope.cn/datasets/maochase/kolors.git

创建终端

从git下载baseline

2.4 baseline部分代码解读

保存数据集中的图片及元数据

<code>os.makedirs("./data/lora_dataset/train", exist_ok=True)

os.makedirs("./data/data-juicer/input", exist_ok=True)

with open("./data/data-juicer/input/metadata.jsonl", "w") as f:

for data_id, data in enumerate(tqdm(ds)):

image = data["image"].convert("RGB")

image.save(f"/mnt/workspace/kolors/data/lora_dataset/train/{data_id}.jpg")

metadata = {"text": "二次元", "image": [f"/mnt/workspace/kolors/data/lora_dataset/train/{data_id}.jpg"]}

f.write(json.dumps(metadata))

f.write("\n")

我们将数据集保存为(text, image)的数据对并存储在jsonl文件中

JSONL文件(JSON Lines)是一种每行包含一个独立的 JSON 对象的文本文件格式。每行都是一个有效的 JSON 对象,使用换行符分隔

jsonl

其中text的中文"二次元"是用Unicode编码存储的

模型加载

# Load models

model_manager = ModelManager(

torch_dtype=torch.float16,

device="cuda",code>

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)

模型使用半精度浮点数(torch.float16),并指定了文本编码器、UNet 模型和 VAE 模型的权重文件

load_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",code>

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

model.load_state_dict(state_dict, strict=False)

return model

    <li>lora_rank: LoRA 中低秩矩阵的秩,决定了适配器的容量
  • lora_alpha: LoRA 的缩放因子,控制适配器的影响力
  • init_lora_weights:LoRA 适配器权重的初始化方法
  • target_modules:指定模型中的子模块注入 LoRA 适配器。通常是与注意力机制相关的层,如这里的to_q、to_k、to_v 和 to_out
  • inject_adapter_in_model:将 LoRA 适配器注入到模型中

2.5 prompt修改技巧

首先列出最希望图像中包含的核心元素(如风格,主要人物),把次要的细节或补充描述放在句子的后面,这样模型会先生成主元素,再填充细节。

以baseline中图二的prompt为例:

prompt例子

如果我们把主次交换后会出现什么情况?

图二 原始prompt

图二 修改prompt

修改prompt:<code>二次元,日系动漫,演唱会的舞台上衣着华丽的歌星们在唱歌,演唱会的观众席,人山人海,一个紫色短发小女孩穿着粉色吊带漏肩连衣裙坐在演唱会的观众席

由于主体信息的后移,主体信息将次体信息当作了背景信息,最终产生了主次融合后的结果

2.6 生成的一些结果


对于单个人物,由于有详细的描述可以达到较好的结果。但是对于群像图来说,因为我提供的prompt有限,生成的较为粗糙。

3.相关知识学习推荐

关于文生图技术研究的发展

对于文生图的发展,我们不必从头开始了解所有技术的详细过程,但是大致知道技术是如何发展的有助于我们更高的理解模型。

在DALL·E 2(内含扩散模型介绍)【论文精读】中,会介绍从GAN,到VAE,VQVAE,再到现在普遍使用的扩散模型(Diffusion)的技术改进思想(视频从28:00开始),十分推荐观看!



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。