赞
踩
随着人工智能技术的飞速发展,文本到图像的生成(Text-to-Image Generation, T2I)技术取得了显著进展。快手近期开源的Kolors(可图)模型,以其卓越的中英文文本理解和高质量图像生成能力,受到了广泛关注。
本实验旨在利用魔搭(ModelScope)工具链提供的强大支持,基于Kolors模型进行微调训练,以生成具有特定风格和连贯性的八图故事。
开通阿里云魔搭社区交互式建模PAI-DSW,获取免费算力支持。或者在魔搭社区进行授权,并选择魔塔平台免费实例。
然后新建终端,粘贴以下代码
git lfs install
git clone https://www.modelscope.c在这里插入代码片n/datasets/maochase/kolors.git
等待一分钟后,单击运行第一个代码块
[第一步:安装 ]
!pip install simple-aesthetics-predictor
!pip install -v -e data-juicer
!pip uninstall pytorch-lightning -y
!pip install peft lightning pandas torchvision
!pip install -e DiffSynth-Studio
等待以上安装包完成后,点击按钮以重启环境
下载Kolors模型及其权重文件(可通过GitHub或Huggingface等平台获取)。
准备或收集用于微调的数据集,包括不同风格的图像及其对应的文本描述。
依次执行下载数据集、数据处理
第二步:下载数据集
# 从modelscope库的msdatasets模块中导入MsDataset类
from modelscope.msdatasets import MsDataset
# 使用MsDataset类的load方法加载名为'AI-ModelScope/lowres_anime'的数据集
# subset_name='default' 指定了数据集的子集名称,但在这个例子中,由于split已经明确指定为'train',
# 所以这个参数可能是可选的,具体取决于MsDataset的实现
# split='train' 指定了要加载的数据集分割为训练集
# cache_dir="/mnt/workspace/kolors/data" 指定了数据集的缓存目录,用于存储下载的数据集
ds = MsDataset.load(
'AI-ModelScope/lowres_anime', # 数据集名称
subset_name='default', # 数据集子集名称(可能是可选的)
split='train', # 数据集分割(训练集)
cache_dir="/mnt/workspace/kolors/data" # 缓存目录
)
import json, os from data_juicer.utils.mm_utils import SpecialTokens # 导入SpecialTokens from tqdm import tqdm # 导入tqdm库,用于显示进度条 # 创建数据存储目录 os.makedirs("./data/lora_dataset/train", exist_ok=True) os.makedirs("./data/data-juicer/input", exist_ok=True) # 打开一个文件用于写入JSON Lines格式的元数据 with open("./data/data-juicer/input/metadata.jsonl", "w") as f: # 这里使用tqdm来显示处理进度 for data_id, data in enumerate(tqdm(ds)): # 每个数据项包含一个名为'image'的PIL图像对象,将其转换为RGB模式 image = data["image"].convert("RGB") # 保存转换后的图像到指定的训练数据集目录 # 图像文件将被保存为JPG格式,并且文件名是基于其索引的 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"]} # 将元数据字典转换为JSON字符串,并写入文件 # 每个元数据项后面都添加了一个换行符,以符合JSON Lines格式 f.write(json.dumps(metadata)) f.write("\n")
## 第三步:数据处理 data_juicer_config = """ # 全局参数 project_name: 'data-process' # 项目名称 dataset_path: './data/data-juicer/input/metadata.jsonl' # 数据集文件的路径 np: 4 # 用于处理数据集的子进程数量 # 文本和图像的关键字配置 text_keys: 'text' # JSONL中包含文本数据的键 image_key: 'image' # JSONL中包含图像路径的键 image_special_token: '<__dj__image>' # 处理结果的导出路径 export_path: './data/data-juicer/output/result.jsonl' # 处理流程 process: - image_shape_filter: # 图像形状过滤器 min_width: 1024 # 最小宽度 min_height: 1024 # 最小高度 any_or_all: any # 'any'表示满足任一条件即可,'all'表示必须满足所有条件 - image_aspect_ratio_filter: # 图像长宽比过滤器 min_ratio: 0.5 # 最小长宽比 max_ratio: 2.0 # 最大长宽比 any_or_all: any # 同上,控制长宽比过滤器的逻辑 """ # 将配置信息写入YAML文件 with open("data/data-juicer/data_juicer_config.yaml", "w") as file: file.write(data_juicer_config.strip()) # 写入配置信息,并去除可能存在的首尾空白字符 # !dj-process --config data/data-juicer/data_juicer_config.yaml # 使用Data Juicer工具处理数据
使用魔搭提供的工具链,加载Kolors模型并设置微调参数。
利用准备好的数据集进行模型训练。
# 导入os模块,用于执行系统命令 import os # 定义一个多行字符串,其中包含要执行的命令行指令 cmd = """ # 使用python命令执行DiffSynth-Studio项目中的train_kolors_lora.py脚本 python DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py \ # 指定预训练的U-Net模型路径,该模型是扩散模型的一部分 --pretrained_unet_path models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors \ # 指定预训练的文本编码器路径,用于将文本转换为模型可理解的向量 --pretrained_text_encoder_path models/kolors/Kolors/text_encoder \ # 指定预训练的fp16 VAE(变分自编码器)模型路径,用于图像的压缩和解压 --pretrained_fp16_vae_path models/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors \ # 设置LoRA的秩(rank),这是一个重要的超参数,影响LoRA的容量和泛化能力 --lora_rank 16 \ # 设置LoRA的alpha值,这个值控制LoRA层对原始模型输出的影响程度 --lora_alpha 4.0 \ # 指定训练数据集的路径 --dataset_path data/lora_dataset_processed \ # 指定模型输出路径 --output_path ./models \ # 设置训练的最大轮次(epochs) --max_epochs 1 \ # 使用中心裁剪作为数据预处理的一部分 --center_crop \ --use_gradient_checkpointing \ # 设置训练精度为混合精度16位,以加速训练并减少内存消耗 --precision "16-mixed" """.strip() os.system(cmd)
编写自定义的故事大纲,包括八个关键情节或场景。
根据故事大纲,为每个场景编写详细的文本描述。
使用微调后的模型,根据文本描述生成对应的图像。
艾文的日常清晨:晨光透过窗帘缝隙,照在艾文沉睡的脸庞上。他缓缓睁开眼,迎接新的一天,眼中闪烁着对新开始的好奇与期待。
艾文在市集:艾文穿梭在熙熙攘攘的市集中,周围是五彩斑斓的摊位和琳琅满目的商品。他停下脚步,与一位商贩交谈,挑选着新鲜的水果和当地的特色手工艺品。
艾文与老友重逢:在市集的一角,艾文意外遇见了多年未见的老友杰克。两人紧紧握手,眼中满是重逢的喜悦。他们决定找一个安静的地方叙旧。
艾文与老友的计划:咖啡馆内,艾文和杰克面对面坐着,桌上摊开着一张泛黄的地图。杰克神秘地向艾文透露了一个关于古老宝藏的秘密,两人眼中闪烁着对冒险的渴望。
艾文准备出发:清晨,艾文站在家门口,背着装满必需品的行囊。他回头望了一眼熟悉的小镇,然后毅然决然地踏上了寻宝之旅。
艾文在丛林中:茂密的丛林中,艾文手持砍刀,小心翼翼地开路前行。汗水浸湿了他的衣衫,但他眼神坚定,不畏艰难。
艾文发现宝藏:经过漫长的探索,艾文终于来到了一个隐秘的山洞。在洞的最深处,他发现了那个传说中的宝藏——一箱闪闪发光的金币和宝石。他脸上露出了难以置信的笑容。
艾文与宝藏归来:艾文带着宝藏回到了小镇,成为了镇上的英雄。但他深知,这次旅程的真正收获是与老友的深厚情谊和面对困难时的勇气。他站在夕阳下,望着远方,心中充满了对未来的无限憧憬。
在本次实验中,我亲身体验了LoRA技术的魅力,掌握了其在图像生成任务中的应用。我学会了如何将多个预训练模型集成到训练流程中,并通过调整LoRA的秩和alpha值来优化模型性能。同时,我也深入了解了数据预处理、模型评估以及计算资源优化的重要性。通过这次实验,我不仅加深了对深度学习技术的理解,还锻炼了问题解决和调试的能力。这些宝贵的经验和技能将对我未来的学习和研究产生积极的影响。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。