Datawhale X 魔搭 AI夏令营 Task1

打印 上一主题 下一主题

主题 504|帖子 504|积分 1512

Datawhale X 魔搭 AI夏令营 Task1


  • 赛事解读
  • AI文生图相关概念
  • 可图模子及微调简介
  • 魔搭零代码生图、微调工具先容
  • 魔搭AI生图相关应用先容
DataWhale开源构造网站主页:Datawhale
DataWhaleAI夏令营第四期AIGC方向学习手册:Docs
赛事链接:可图Kolors-LoRA风格故事挑战赛_创新应用大赛_天池大赛-阿里云天池的赛制
开通阿里云PAL-DSW免费试用

   链接:https://datawhaler.feishu.cn/sync/DkaqdtRoIsuiyAbDBoPcacKUned
  


在魔搭社区进行授权
   链接:https://www.modelscope.cn/my/mynotebook/authorization
  


报名赛事

   赛事链接:https://tianchi.aliyun.com/competition/entrance/532254
  点击报名比赛,即可报名成功


在魔搭社区创建PAL实例

   链接:https://www.modelscope.cn/my/mynotebook/authorization
  





成功在魔塔社区创建PAI示例

体验——跑通baseline

打开实例后进入Terminal
起首下载baseline文件
  1.    git lfs install
  2.    git clone https://www.modelscope.cn/datasets/maochase/kolors.git
复制代码

跟着其中的教程依次运行每一段代码
也可以直接点上方箭头主动运行代码:


如下是默认的输出效果部门截图:

调解prompt提示词生成新故事

八张图对应故事如下:
1、人鱼孤独地生活在静谧的深海
2、人鱼好奇陆地,决定游到岸边停留
3、岸边有一个女孩,人鱼和女孩聊天,成为朋侪,人鱼把贝壳项链送给她
4、每天清早人鱼为女孩唱歌
5、每天薄暮女孩为人鱼报告本日发生的新鲜事
6、女孩搬家了再也不会来海边了,人鱼孤独地等待
7、人鱼决定酿成人类来到岸上去探求女孩
8、人鱼找到了女孩并相爱

最后生成的新故事效果(第一次):

????这张属实有些惊悚了,,

前频频的生成效果八张图的人物长得各不相同,缺乏连续性,厥后同一了每张图的人物基本特征,加上划一的修饰词,如白色长发人鱼,玄色长发女孩,效果有所改善
最后一次调解效果:

baseline代码结构


  • 导入库:起首,代码导入了必要用到的库,包括 data-juicer 和微调的工具 DiffSynth-Studio
  • 数据集构建:下载数据集kolors,处理数据集
  • 模子微调:模子微调练习,以及加载练习后的模子
  • 图片生成:调用练习好的模子生成图片
代码详情
1、环境安装
安装了一系列所需的库,包括 simple-aesthetics-predictor、data-juicer、DiffSynth-Studio,以及一些深度学习相关的工具如 pytorch-lightning、peft 和 torchvision。这些库提供了数据处理、模子微调和图片生成所需的功能。
  1. !pip install simple-aesthetics-predictor
  2. !pip install -v -e data-juicer
  3. !pip uninstall pytorch-lightning -y
  4. !pip install peft lightning pandas torchvision
  5. !pip install -e DiffSynth-Studio
复制代码
2、下载数据集
使用 modelscope.msdatasets 从 AI-ModelScope 下载名为 lowres_anime 的数据集,并将其生存到本地。数据集中的每张图片都会被处理成 RGB 格式,并生存到指定的路径下。每张图片还会与一个简单的文本形貌(“二次元”)关联,并生成一个 JSONL 文件,包含这些元数据。
  1. #下载数据集
  2. from modelscope.msdatasets import MsDataset
  3. ds = MsDataset.load(
  4.     'AI-ModelScope/lowres_anime',
  5.     subset_name='default',
  6.     split='train',
  7.     cache_dir="/mnt/workspace/kolors/data"
  8. )
  9. import json, os
  10. from data_juicer.utils.mm_utils import SpecialTokens
  11. from tqdm import tqdm
  12. os.makedirs("./data/lora_dataset/train", exist_ok=True)
  13. os.makedirs("./data/data-juicer/input", exist_ok=True)
  14. with open("./data/data-juicer/input/metadata.jsonl", "w") as f:
  15.     for data_id, data in enumerate(tqdm(ds)):
  16.         image = data["image"].convert("RGB")
  17.         image.save(f"/mnt/workspace/kolors/data/lora_dataset/train/{data_id}.jpg")
  18.         metadata = {"text": "二次元", "image": [f"/mnt/workspace/kolors/data/lora_dataset/train/{data_id}.jpg"]}
  19.         f.write(json.dumps(metadata))
  20.         f.write("\n")
复制代码
3、处理数据集,生存数据处理效果
这一部门使用了 data-juicer 来处理下载的数据集。设置文件 data_juicer_config.yaml 指定了数据处理的全局参数和一系列过滤器操作,包括图像尺寸和长宽比的过滤。处理后的数据被生存到一个新的 JSONL 文件中,并转换为得当模子练习的数据格式。最终效果以 CSV 文件的形式生存,包含图像文件名及其对应的文本形貌。
  1. data_juicer_config = """
  2. # global parameters
  3. project_name: 'data-process'
  4. dataset_path: './data/data-juicer/input/metadata.jsonl'  # path to your dataset directory or file
  5. np: 4  # number of subprocess to process your dataset
  6. text_keys: 'text'
  7. image_key: 'image'
  8. image_special_token: '<__dj__image>'
  9. export_path: './data/data-juicer/output/result.jsonl'
  10. # process schedule
  11. # a list of several process operators with their arguments
  12. process:
  13.     - image_shape_filter:
  14.         min_width: 1024
  15.         min_height: 1024
  16.         any_or_all: any
  17.     - image_aspect_ratio_filter:
  18.         min_ratio: 0.5
  19.         max_ratio: 2.0
  20.         any_or_all: any
  21. """
  22. with open("data/data-juicer/data_juicer_config.yaml", "w") as file:
  23.     file.write(data_juicer_config.strip())
  24. !dj-process --config data/data-juicer/data_juicer_config.yaml
  25. import pandas as pd
  26. import os, json
  27. from PIL import Image
  28. from tqdm import tqdm
  29. texts, file_names = [], []
  30. os.makedirs("./data/lora_dataset_processed/train", exist_ok=True)
  31. with open("./data/data-juicer/output/result.jsonl", "r") as file:
  32.     for data_id, data in enumerate(tqdm(file.readlines())):
  33.         data = json.loads(data)
  34.         text = data["text"]
  35.         texts.append(text)
  36.         image = Image.open(data["image"][0])
  37.         image_path = f"./data/lora_dataset_processed/train/{data_id}.jpg"
  38.         image.save(image_path)
  39.         file_names.append(f"{data_id}.jpg")
  40. data_frame = pd.DataFrame()
  41. data_frame["file_name"] = file_names
  42. data_frame["text"] = texts
  43. data_frame.to_csv("./data/lora_dataset_processed/train/metadata.csv", index=False, encoding="utf-8-sig")
  44. data_frame
复制代码
4、lora微调
代码下载了预练习模子 Kolors 和 SDXL-vae-fp16-fix,并使用这些模子进行 LoRA(Low-Rank Adaptation)微调。微调通过一个命令行脚本完成,脚本指定了练习时的参数,包括 LoRA 的 rank 和 alpha 值,数据集路径,以及输出模子生存路径等。
  1. # 下载模型
  2. from diffsynth import download_models
  3. download_models(["Kolors", "SDXL-vae-fp16-fix"])
  4. #模型训练
  5. import os
  6. cmd = """
  7. python DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py \
  8.   --pretrained_unet_path models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors \
  9.   --pretrained_text_encoder_path models/kolors/Kolors/text_encoder \
  10.   --pretrained_fp16_vae_path models/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors \
  11.   --lora_rank 16 \
  12.   --lora_alpha 4.0 \
  13.   --dataset_path data/lora_dataset_processed \
  14.   --output_path ./models \
  15.   --max_epochs 1 \
  16.   --center_crop \
  17.   --use_gradient_checkpointing \
  18.   --precision "16-mixed"
  19. """.strip()
  20. os.system(cmd)
复制代码
5、加载微调好的模子
使用 ModelManager 来管理和加载模子,并通过 inject_adapter_in_model 函数将 LoRA 参数注入到模子中。最终的模子包括了 text_encoder、unet 和 vae,这些模子组件分别负责文本编码、图像生成和变分自编码器操作。
  1. from diffsynth import ModelManager, SDXLImagePipeline
  2. from peft import LoraConfig, inject_adapter_in_model
  3. import torch
  4. def load_lora(model, lora_rank, lora_alpha, lora_path):
  5.     lora_config = LoraConfig(
  6.         r=lora_rank,
  7.         lora_alpha=lora_alpha,
  8.         init_lora_weights="gaussian",
  9.         target_modules=["to_q", "to_k", "to_v", "to_out"],
  10.     )
  11.     model = inject_adapter_in_model(lora_config, model)
  12.     state_dict = torch.load(lora_path, map_location="cpu")
  13.     model.load_state_dict(state_dict, strict=False)
  14.     return model
  15. # Load models
  16. model_manager = ModelManager(torch_dtype=torch.float16, device="cuda",
  17.                              file_path_list=[
  18.                                  "models/kolors/Kolors/text_encoder",
  19.                                  "models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors",
  20.                                  "models/kolors/Kolors/vae/diffusion_pytorch_model.safetensors"
  21.                              ])
  22. pipe = SDXLImagePipeline.from_model_manager(model_manager)
  23. # Load LoRA
  24. pipe.unet = load_lora(
  25.     pipe.unet,
  26.     lora_rank=16, # This parameter should be consistent with that in your training script.
  27.     lora_alpha=2.0, # lora_alpha can control the weight of LoRA.
  28.     lora_path="models/lightning_logs/version_0/checkpoints/epoch=0-step=500.ckpt"
  29. )
复制代码
6、图片生成
代码界说了一个生成图像的提示(prompt),并通过 SDXLImagePipeline 进行推理。生成的图像根据提示生成,并生存在本地。整个过程使用了随机种子以确保可重复性。
  1. torch.manual_seed(0)
  2. image = pipe(
  3.     prompt="二次元,一个紫色短发小女孩,在家中沙发上坐着,双手托着腮,很无聊,全身,粉色连衣裙",
  4.     negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
  5.     cfg_scale=4,
  6.     num_inference_steps=50, height=1024, width=1024,
  7. )
  8. image.save("1.jpg")
复制代码
文生图相关知识

文生图主要以SD系列底子模子为主,以及在其底子上微调的lora模子和人物底子模子等。

提示词

提示词很紧张,一般写法:主体形貌,细节形貌,修饰词,艺术风格,艺术家
   举个例子
  【promts】Beautiful and cute girl, smiling, 16 years old, denim jacket, gradient background, soft colors, soft lighting, cinematic edge lighting, light and dark contrast, anime, super detail, 8k
  【负向prompts】 (lowres, low quality, worst quality:1.2), (text:1.2), deformed, black and white,disfigured, low contrast, cropped, missing fingers
  Lora

Stable Diffusion中的Lora(LoRA)模子是一种轻量级的微调方法,它代表了“Low-Rank Adaptation”,即低秩顺应。Lora不是指单一的具体模子,而是指一类通过特定微调技能应用于底子模子的扩展应用。在Stable Diffusion这一文本到图像合成模子的框架下,Lora被用来对预练习好的大模子进行针对性优化,以实现对特定主题、风格或使命的精细化控制。
ComfyUI

ComfyUI 是一个工作流工具,主要用于简化和优化 AI 模子的设置和练习过程。通过直观的界面和集成的功能,用户可以轻松地进行模子微调、数据预处理、图像生成等使命,从而进步工作效率和生成效果。

在ComfyUI平台的前端页面上,用户可以基于节点/流程图的界面设计并实行AIGC文生图大概文生视频的pipeline。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

写过一篇

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表