Datawhale×魔搭 AI夏令营 【2024年第四期】:AIGC学习笔记-2

157 阅读6分钟

AIGC学习笔记 · task2 o( ̄▽ ̄)ブ

PS:在上一篇文章继续更新的task笔记,只在app上可以看到(不知道为什么网页端看不到,在和平台技术人员沟通),所以单独发布了一篇。

Task2:精读baseline代码 + prompt练习(8.13~8.14)

2.1 魔搭社区的资源

魔搭社区 的各类AIGC工具:模型、数据集、开源内容...

image.png

Kolors(可图)模型:快手开源的文本到图像生成模型,中英双语

可图优质咒语书:中文prompt,600+风格

创意海报生成:AI背景图 + 艺术字设计 → 合成图片

研习社 · 魔搭社区:NLP、计算机视觉、多模态等学习资源

2.2 精读baseline代码

task2教程

① 主体框架

我使用GPT-4o来辅助理解,初步弄清其框架。

image.png

返回结果如下:

  • 1.依赖库的安装

安装代码运行所需的各种Python库和工具包,包括 simple-aesthetics-predictordata-juicerpeftlightningtorchvisionDiffSynth-Studio

  • 2.数据集加载和准备

ModelScope 加载低分辨率的动漫数据集,并将数据缓存到指定目录。

  • 3.数据预处理和存储

将数据集中的图像转换为RGB格式,并保存到本地。同时,生成对应的元数据文件 metadata.jsonl,用于描述图像与文本的映射关系。

  • 4.数据过滤与加工

使用 data-juicer 进行数据过滤和预处理,确保图像满足指定的尺寸和比例要求,并将处理后的结果保存到指定的文件中。

  • 5.数据重组织与最终保存

将经过处理后的图像和文本信息重新组织,并保存为metadata.csv文件,这个文件将作为后续训练时的数据集使用。

  • 6.模型下载与训练

下载所需的预训练模型。 通过指定的参数和路径进行LoRA的微调训练。

  • 7.模型加载与推理

加载训练后的LoRA模型,并将其应用于预训练的UNet模型中。通过这个步骤,模型可以结合LoRA进行推理和图像生成。

  • 8.图像生成与保存

使用训练好的模型根据输入的提示词生成图像,并将生成的图像保存到指定路径。代码中有多个相似的块,分别用于生成不同的图像。

② 逐行分析和我的收获

依然使用GPT-4o辅助学习,相较 ①主体框架 有种豁然开朗的感觉,学到了很多编程知识,知道怎么替换数据集,也搞明白了LoRA微调训练的核心环节和参数有哪些,比如rank、alpha、learning_rate、batch_size、epoch以及模型的不同layers(task1的疑问✔)。

  • 一个小发现:当我的prompt写成 “ 我对python一窍不通,请帮我逐行解析以下代码xxx ” ,GPT会更新它的记忆,为我输出更详细的内容。【与大模型友好沟通技能+1】

image.png

以下是我结合GPT-4o的回答,对baseline代码作出的详细注解。(第一次这么仔细地读代码orz,收获满满)

image.png

在阅读过程中,我最深的感触是这些文件名和文件路径,一不小心就会弄错和遗漏,或者彼此关系不明确。因此,我必须在一开始就做好清晰的规划,随时检查,以干净的架构来存储所有的过程文件。

另外,我发现代码对数据集的处理是比较细节的,既会过滤掉很多信息,也会保留很多特征,可能一点微小的规则变动都会影响最终成图的效果。把数据集整理成LoRA需要的格式也很必要。如果要提高模型输出能力,必须特别关注数据集的质量和处理方式。

2.3 Prompt 练习:基于话剧的连环画制作

① 创作故事和prompt

我的创作流程:

和LLM对话

→ 生成场景描述和prompt

→ 人工丰富细节并删除冗余

→ 用可灵AI/baseline等途径实战试验

→ 根据成图效果继续调整prompt

→ 直到满意

image.png

一开始GPT的输出很冗长,我申明了简约要求后,输出质量提高了很多。

此外,我在可灵官方的prompt指南里学习了5W1H方法,例如:一个戴着贝雷帽 [what] 的老画家 [who] ,站在画架前 [what] ,在黄昏时分 [when] 的花园里 [where] ,专心地作画 [why] ,印象派风格,柔和光影,近景 [how]

Prompt.png

类似的,我的场景一可以写成:一个黑色长发马尾少女,穿着浅蓝色毛衣和牛仔裤,坐在木质书桌前,专注地盯着书,眉头微皱,桌上堆满书本和笔记本,背景是昏黄灯光下的书架,手绘漫画风。

1.png

依次执行以上步骤后,我将最后的 场景 | 正向prompt | 负向prompt 信息汇总成了表格。

表1:无代码文生图用的prompt image.png

表2:代码文生图用的prompt image.png

② 无代码文生图

完整的故事生成如下,画面还是比较连续的~

image.png

不过我也发现很多需要解决的问题:

  • 让AI生图工具写字的效果很差;

  • AI不怎么喜欢画全身图;

  • 在多人物描述时,AI很容易把特征张冠李戴;

  • 提示词键入过多,许多效果反而不会呈现出来;

  • 画风依然不是很统一,细节处有许多破绽(比如书包、发圈、录取通知书的帽穗等)。

③ 用代码文生图

完整故事生成如下,很强烈的微调数据集风格(二次元),还需要继续学习改进~

image.png

一点思考:

  • 当场景比较复杂,prompt很多时,必须增加推理步骤num_inference_steps,否则会生成看起来显然没有画完的图。我最高调成了500。

  • 遇到了GPU显存不足的报错。向GPT以及助教请教,已顺利解决。

    解决办法Ⅰ:输入代码 import gcgc.collect()torch.cuda.empty_cache(),释放不用的显存,并通过命令!nvidia-smi随时查看GPU情况。

    解决办法Ⅱ:重启内核。

7912a86784528f02ff3e8104dd08c89.png

  • 图片风格不满意。我发现魔搭社区有很多方便好用的数据集,针对人物表情、姿势等都有,后续task中将改变数据集试一试。

  • 可灵AI无代码文生图的效果,比coding的画面细腻很多,也可以改换风格,速度也快。那对于普通应用者而言,用LoRA微调的优势到底体现在何处呢?