写过一篇 发表于 2024-8-23 21:58:01

Datawhale X 魔搭 AI夏令营 Task1

Datawhale X 魔搭 AI夏令营 Task1


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

   链接:https://datawhaler.feishu.cn/sync/DkaqdtRoIsuiyAbDBoPcacKUned
https://i-blog.csdnimg.cn/direct/2b8ccfc6c4ba4dd78b9e788eb50f301e.png
https://i-blog.csdnimg.cn/direct/174c165e8bf440c4afbc9f9b08894cfa.png
在魔搭社区进行授权
   链接:https://www.modelscope.cn/my/mynotebook/authorization
https://i-blog.csdnimg.cn/direct/379b8502719248be924340b06884b3fd.pnghttps://i-blog.csdnimg.cn/direct/ca07c20fafcf4d37864c1ede04c7da80.png
https://i-blog.csdnimg.cn/direct/806ac802ffaa4a7e8fa947e3cab1ee16.png
报名赛事

   赛事链接:https://tianchi.aliyun.com/competition/entrance/532254
点击报名比赛,即可报名成功
https://i-blog.csdnimg.cn/direct/ccbf01a2a43d45d196d4ad178dc62b16.png
https://i-blog.csdnimg.cn/direct/5a341987cef743b7889fd55b75e0cbcf.png
在魔搭社区创建PAL实例

   链接:https://www.modelscope.cn/my/mynotebook/authorization
https://i-blog.csdnimg.cn/direct/8eaae5290b9f4830b5f21ef84fecc5ed.png
https://i-blog.csdnimg.cn/direct/465c31f4918d4d5bbb9fffd7e30f2a23.png
https://i-blog.csdnimg.cn/direct/7bb28f6783b74f34883147e057b85dc9.png
https://i-blog.csdnimg.cn/direct/8802a71856f04954b11cd7faad6cf92e.png
https://i-blog.csdnimg.cn/direct/54c4e663ac7e4b9a933d573e07585c16.png
成功在魔塔社区创建PAI示例
https://i-blog.csdnimg.cn/direct/8f8cc40e8398466da4debc5982654623.png
体验——跑通baseline

打开实例后进入Terminal
起首下载baseline文件
   git lfs install
   git clone https://www.modelscope.cn/datasets/maochase/kolors.git
https://i-blog.csdnimg.cn/direct/5696bfc01f714c6ea6267be81186f3c2.png
跟着其中的教程依次运行每一段代码
也可以直接点上方箭头主动运行代码:
https://i-blog.csdnimg.cn/direct/7f66a44b9d0741fc8eecffd2f01813d7.png
https://i-blog.csdnimg.cn/direct/f71cf4aeccfa48a0bd428cfcd12a7653.png
如下是默认的输出效果部门截图:
https://i-blog.csdnimg.cn/direct/8f196e73d07c43878c8962fc94e29c40.png
调解prompt提示词生成新故事

八张图对应故事如下:
1、人鱼孤独地生活在静谧的深海
2、人鱼好奇陆地,决定游到岸边停留
3、岸边有一个女孩,人鱼和女孩聊天,成为朋侪,人鱼把贝壳项链送给她
4、每天清早人鱼为女孩唱歌
5、每天薄暮女孩为人鱼报告本日发生的新鲜事
6、女孩搬家了再也不会来海边了,人鱼孤独地等待
7、人鱼决定酿成人类来到岸上去探求女孩
8、人鱼找到了女孩并相爱
https://i-blog.csdnimg.cn/direct/3ba5fcd195fa45ddb4abb800c042626f.png
最后生成的新故事效果(第一次):
https://i-blog.csdnimg.cn/direct/97d288631dc34b76bb35f349397600f7.png
????这张属实有些惊悚了,,
https://i-blog.csdnimg.cn/direct/d7e7393e02c9440bae55d6820877b4ce.png
前频频的生成效果八张图的人物长得各不相同,缺乏连续性,厥后同一了每张图的人物基本特征,加上划一的修饰词,如白色长发人鱼,玄色长发女孩,效果有所改善
最后一次调解效果:
https://i-blog.csdnimg.cn/direct/673128de66314f23a0d0f810da1e1f70.jpeg
baseline代码结构


[*]导入库:起首,代码导入了必要用到的库,包括 data-juicer 和微调的工具 DiffSynth-Studio
[*]数据集构建:下载数据集kolors,处理数据集
[*]模子微调:模子微调练习,以及加载练习后的模子
[*]图片生成:调用练习好的模子生成图片
代码详情
1、环境安装
安装了一系列所需的库,包括 simple-aesthetics-predictor、data-juicer、DiffSynth-Studio,以及一些深度学习相关的工具如 pytorch-lightning、peft 和 torchvision。这些库提供了数据处理、模子微调和图片生成所需的功能。
!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
2、下载数据集
使用 modelscope.msdatasets 从 AI-ModelScope 下载名为 lowres_anime 的数据集,并将其生存到本地。数据集中的每张图片都会被处理成 RGB 格式,并生存到指定的路径下。每张图片还会与一个简单的文本形貌(“二次元”)关联,并生成一个 JSONL 文件,包含这些元数据。
#下载数据集
from modelscope.msdatasets import MsDataset

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
from tqdm import tqdm

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.write(json.dumps(metadata))
      f.write("\n")
3、处理数据集,生存数据处理效果
这一部门使用了 data-juicer 来处理下载的数据集。设置文件 data_juicer_config.yaml 指定了数据处理的全局参数和一系列过滤器操作,包括图像尺寸和长宽比的过滤。处理后的数据被生存到一个新的 JSONL 文件中,并转换为得当模子练习的数据格式。最终效果以 CSV 文件的形式生存,包含图像文件名及其对应的文本形貌。
data_juicer_config = """
# global parameters
project_name: 'data-process'
dataset_path: './data/data-juicer/input/metadata.jsonl'# path to your dataset directory or file
np: 4# number of subprocess to process your dataset

text_keys: 'text'
image_key: 'image'
image_special_token: '<__dj__image>'

export_path: './data/data-juicer/output/result.jsonl'

# process schedule
# a list of several process operators with their arguments
process:
    - image_shape_filter:
      min_width: 1024
      min_height: 1024
      any_or_all: any
    - image_aspect_ratio_filter:
      min_ratio: 0.5
      max_ratio: 2.0
      any_or_all: any
"""
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


import pandas as pd
import os, json
from PIL import Image
from tqdm import tqdm


texts, file_names = [], []
os.makedirs("./data/lora_dataset_processed/train", exist_ok=True)
with open("./data/data-juicer/output/result.jsonl", "r") as file:
    for data_id, data in enumerate(tqdm(file.readlines())):
      data = json.loads(data)
      text = data["text"]
      texts.append(text)
      image = Image.open(data["image"])
      image_path = f"./data/lora_dataset_processed/train/{data_id}.jpg"
      image.save(image_path)
      file_names.append(f"{data_id}.jpg")
data_frame = pd.DataFrame()
data_frame["file_name"] = file_names
data_frame["text"] = texts
data_frame.to_csv("./data/lora_dataset_processed/train/metadata.csv", index=False, encoding="utf-8-sig")
data_frame
4、lora微调
代码下载了预练习模子 Kolors 和 SDXL-vae-fp16-fix,并使用这些模子进行 LoRA(Low-Rank Adaptation)微调。微调通过一个命令行脚本完成,脚本指定了练习时的参数,包括 LoRA 的 rank 和 alpha 值,数据集路径,以及输出模子生存路径等。
# 下载模型
from diffsynth import download_models
download_models(["Kolors", "SDXL-vae-fp16-fix"])

#模型训练
import os

cmd = """
python DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py \
--pretrained_unet_path models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors \
--pretrained_text_encoder_path models/kolors/Kolors/text_encoder \
--pretrained_fp16_vae_path models/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors \
--lora_rank 16 \
--lora_alpha 4.0 \
--dataset_path data/lora_dataset_processed \
--output_path ./models \
--max_epochs 1 \
--center_crop \
--use_gradient_checkpointing \
--precision "16-mixed"
""".strip()

os.system(cmd)
5、加载微调好的模子
使用 ModelManager 来管理和加载模子,并通过 inject_adapter_in_model 函数将 LoRA 参数注入到模子中。最终的模子包括了 text_encoder、unet 和 vae,这些模子组件分别负责文本编码、图像生成和变分自编码器操作。
from diffsynth import ModelManager, SDXLImagePipeline
from peft import LoraConfig, inject_adapter_in_model
import torch


def load_lora(model, lora_rank, lora_alpha, lora_path):
    lora_config = LoraConfig(
      r=lora_rank,
      lora_alpha=lora_alpha,
      init_lora_weights="gaussian",
      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")
    model.load_state_dict(state_dict, strict=False)
    return model


# Load models
model_manager = ModelManager(torch_dtype=torch.float16, device="cuda",
                           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)

# Load LoRA
pipe.unet = load_lora(
    pipe.unet,
    lora_rank=16, # This parameter should be consistent with that in your training script.
    lora_alpha=2.0, # lora_alpha can control the weight of LoRA.
    lora_path="models/lightning_logs/version_0/checkpoints/epoch=0-step=500.ckpt"
)
6、图片生成
代码界说了一个生成图像的提示(prompt),并通过 SDXLImagePipeline 进行推理。生成的图像根据提示生成,并生存在本地。整个过程使用了随机种子以确保可重复性。
torch.manual_seed(0)
image = pipe(
    prompt="二次元,一个紫色短发小女孩,在家中沙发上坐着,双手托着腮,很无聊,全身,粉色连衣裙",
    negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
    cfg_scale=4,
    num_inference_steps=50, height=1024, width=1024,
)
image.save("1.jpg")
文生图相关知识

文生图主要以SD系列底子模子为主,以及在其底子上微调的lora模子和人物底子模子等。
https://i-blog.csdnimg.cn/direct/43652e278caa428596fac66255d6d6c6.png
提示词

提示词很紧张,一般写法:主体形貌,细节形貌,修饰词,艺术风格,艺术家
   举个例子
【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 模子的设置和练习过程。通过直观的界面和集成的功能,用户可以轻松地进行模子微调、数据预处理、图像生成等使命,从而进步工作效率和生成效果。
https://i-blog.csdnimg.cn/direct/d7a681e2b2d84855b6976c942b7becd5.png
在ComfyUI平台的前端页面上,用户可以基于节点/流程图的界面设计并实行AIGC文生图大概文生视频的pipeline。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Datawhale X 魔搭 AI夏令营 Task1