精读baseline
分析代码的主体结构
输入问题
返回结果
这段代码主要完成以下几个任务:
1. 安装和卸载依赖包
- 安装 `simple-aesthetics-predictor`, `data-juicer`, `peft`, `lightning`, `pandas`, `torchvision` 和 `DiffSynth-Studio` 这些Python库。
- 卸载 `pytorch-lightning` 并重新安装。
2. 加载数据集
- 使用 ModelScope 加载名为 `AI-ModelScope/lowres_anime` 的数据集,并将其存储到指定路径 `/mnt/workspace/kolors/data` 下。
3. 处理图像数据
- 创建文件夹用于存放处理后的训练图像和 `data-juicer` 的输入与输出。
- 遍历数据集中的每条记录,将图像转换为 RGB 格式并保存,同时构建包含图像路径和文本描述的元数据,并写入 JSONL 文件。
4. 配置并运行 Data-Juicer
- 定义一个 YAML 配置文件来指定 `data-juicer` 的参数,包括数据集路径、过滤条件等。
- 使用 `dj-process` 命令行工具处理数据集,执行图像尺寸和长宽比过滤。
5. 准备训练数据
- 读取经过 `data-juicer` 处理后的输出文件,提取文本描述和图像路径,并创建 DataFrame。
- 将处理好的数据以 CSV 格式保存,并使用 DataFrame 显示结果。
6. 计算图像与文本相似性
- 使用 CLIP 模型计算图像和文本之间的相似性分数。
- 创建一个自定义的 PyTorch 数据集类,并使用 DataLoader 来批量处理数据。
- 对于每个批次的数据,使用 CLIP 模型计算图像和文本之间的相似性,并输出概率。
7. 生成图像
- 使用 `StableDiffusionPipeline` 从预训练模型 `CompVis/stable-diffusion-v-1-4` 生成一系列基于不同提示(prompt)的图像。
- 设置相同的随机种子以确保生成过程可复现,并保存生成的图像。
- 最后将生成的图像拼接在一起并展示。
整个流程涉及数据集的加载、图像处理、数据清洗、特征提取以及使用扩散模型生成新的图像。这样的流程通常用于图像生成任务,特别是针对特定风格或主题的图像生成。
逐行解释代码
输入问题
返回结果
这段代码主要分为几个部分:安装依赖包、数据处理和准备、模型加载与使用、以及图像生成。下面将按顺序逐行解释。
安装依赖包
首先通过 !pip
命令安装了一系列 Python 库:
-
!pip install simple-aesthetics-predictor
: 安装了一个用于预测美学的简单工具。 -
!pip install -v -e data-juicer
: 以可编辑模式 (-e
) 安装data-juicer
并显示详细信息 (-v
)。 -
!pip uninstall pytorch-lightning -y
: 卸载pytorch-lightning
,并自动确认 (-y
)。 -
!pip install peft lightning pandas torchvision
: 安装peft
,lightning
,pandas
, 和torchvision
。 -
!pip install -e DiffSynth-Studio
: 以可编辑模式安装DiffSynth-Studio
。
数据集加载
接着加载了一个名为 lowres_anime
的数据集:
-
from modelscope.msdatasets import MsDataset
: 导入了 ModelScope 的数据集模块。 -
使用
MsDataset.load
加载了lowres_anime
数据集,并指定子集名称为default
,数据集分割为train
,并设置缓存目录为/mnt/workspace/kolors/data
。
数据处理
这部分代码处理了数据集中的图片和对应的文本描述:
-
创建了两个目录用于存放处理后的数据。
-
遍历数据集中的每个样本,将图像转换为 RGB 模式并保存到文件系统中,同时构造元数据并写入 JSONL 文件。
-
定义了一个配置字符串,该配置用于
data-juicer
处理数据集,包括过滤规则和输出路径等。 -
将配置写入一个 YAML 文件。
-
运行
dj-process
命令来处理数据集。
数据集后处理
这部分对经过 data-juicer
处理的数据进行了进一步的整理:
-
读取处理后的结果文件
result.jsonl
,提取文本和图片路径信息。 -
使用
pandas
创建 DataFrame 并将其保存为 CSV 文件。
CLIP 模型使用
接下来是使用 CLIP 模型来计算图像和文本之间的相似度:
-
加载了预训练的 CLIP 模型及其处理器。
-
加载了图像数据,并使用 CLIP 处理器进行预处理。
-
使用 CLIP 模型计算了图像和文本之间的相似度得分。
自定义数据集类
这部分定义了一个自定义的数据集类,用于 PyTorch DataLoader:
-
定义了
CustomDataset
类,它继承自torch.utils.data.Dataset
。 -
实现了数据集的初始化、获取长度和获取项的方法。
-
使用
CustomDataset
创建了一个数据集实例,并使用DataLoader
来加载数据。 -
对于数据集中的每个批次,使用 CLIP 模型计算图像和文本之间的相似度得分。
图像生成
最后,这部分使用 StableDiffusionPipeline
来根据不同的提示生成图像:
-
加载了预训练的 Stable Diffusion 模型。
-
设置了随机种子确保生成图像的一致性。
-
根据多个提示生成了图像,并保存到了文件系统。
最终图像组合
这部分将生成的图像合并成一个大的图像:
-
将生成的图像加载为 NumPy 数组。
-
按照特定的布局将这些图像拼接在一起。
-
将最终的 NumPy 数组转换为 PIL 图像对象,并调整大小。
实战--基于话剧的连环画制作
提示词
提示词准备
提示词整理
图片编号 | 场景描述 | 正向提示词 | 反向提示词 |
图片1 | 女主正在上课 | 古风,水墨画,一个黑色长发少女,身穿淡青色长袍,坐在教室里,手握毛笔,专注地聆听老师讲解,上半身。 | 丑陋,变形,嘈杂,模糊,低对比度 |
图片2 | 开始睡着了 | 古风,水墨画,一个黑色长发少女,身穿淡青色长袍,头枕手臂,靠在书桌上,渐渐入睡,上半身。 | |
图片3 | 进入梦乡,梦到自己站在路旁 | 古风,水墨画,一个黑色长发少女,身穿淡青色长袍,站在幽静的林间小道旁,仰望天空,仿佛在期待着什么,全身。 | |
图片4 | 王子骑马而来 | 古风,水墨画,一个黑色长发少女,身穿淡青色长袍,站在幽静的林间小道旁,远处一位英俊的青年骑着白马缓缓而来,全身。 | |
图片5 | 两人相谈甚欢 | 古风,水墨画,一个黑色长发少女,身穿淡青色长袍,与一位英俊的青年,坐在石桌旁,彼此谈笑风生,上半身。 | |
图片6 | 一起坐在马背上 | 古风,水墨画,一个黑色长发少女,身穿淡青色长袍,与一位英俊的青年,并肩坐在马背上,驰骋在田野之中,全身。 | |
图片7 | 下课了,梦醒了 | 古风,水墨画,一个黑色长发少女,身穿淡青色长袍,从梦中醒来,坐在教室里,揉揉眼睛,上半身。 | |
图片8 | 又回到了学习生活中 | 古风,水墨画,一个黑色长发少女,身穿淡青色长袍,坐在教室里,手握毛笔,低头认真书写,上半身。 |