冬雨财经 发表于 2024-9-1 14:27:25

Datawhale AI夏令营第四期魔搭-AIGC文生图方向Task1笔记

Datawhale AI夏令营第四期魔搭-AIGC文生图方向Task1笔记

   作者: 福州大学 牢记我是一个温柔的刀客
2024/8/10
从零入门AI生图原理&实践 是 Datawhale 2024 年 AI 夏令营第四期的学习活动(“AIGC”方向),基于魔搭社区“ 可图Kolors-LoRA风格故事挑战赛 ”开展的实践学习——


[*]适合想 入门并实践 AIGC文生图、工作流搭建、LoRA微调 的学习者参加
学习内容提要:从文生图实现方案逐渐进阶,教程偏重图像工作流、微调、图像优化等思绪,末了会简朴先容AIGC应用方向、数字人技能(选学)
1 赛题解读

https://i-blog.csdnimg.cn/direct/9405c524c4c84053af320e0054318b55.png#pic_center
2 文生图的汗青

文生图(Text-to-Image Generation)是一种通过文本天生图像的技能,其发展历程可以追溯到早期的盘算机视觉和天然语言处置处罚研究。这一技能的汗青可以分为几个关键阶段:
https://i-blog.csdnimg.cn/direct/646ff12f7fef4f0b8222d97b771cb9d6.png#pic_center
3 文生图底子知识先容

文生图重要以SD系列底子模型为主,以及在其底子上微调的lora模型和人物底子模型等。
https://i-blog.csdnimg.cn/direct/9357891164854dd8b313ee0e12913505.png#pic_center
接下来,我们简朴相识下提示词、lora、ComfyUI和参考图控制这些知识点。
提示词

提示词很重要,一样平常写法:主体描述,细节描述,修饰词,艺术风格,艺术家
   举个例子:
【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 fingersLora

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

ComfyUI 是一个工作流工具,重要用于简化和优化 AI 模型的配置和练习过程。通过直观的界面和集成的功能,用户可以轻松地举行模型微调、数据预处置处罚、图像天生等任务,从而进步工作效率和天生效果。
在ComfyUI平台的前端页面上,用户可以基于节点/流程图的界面设计并执行AIGC文生图或者文生视频的pipeline。
https://i-blog.csdnimg.cn/direct/7228d9e323804f8f8dd420967a811074.png#pic_center
参考图控制

ControlNet是一种用于精确控制图像天生过程的技能组件。它是一个附加到预练习的扩散模型(如Stable Diffusion模型)上的可练习神经网络模块。扩散模型通常用于从随机噪声逐渐天生图像的过程,而ControlNet的作用在于引入额外的控制信号,使得用户可以或许更具体地引导图像天生的各个方面(如姿势关键点、分割图、深度图、颜色等)。
https://i-blog.csdnimg.cn/direct/2867a635f2d4455c8e6549f3a5a00b3d.png#pic_center
4 baseline初体验

step0:开通阿里云PAI-DSW试用

https://free.aliyun.com/?productCode=learn
获得强盛的算力以实现机器学习!
开通免费试用 https://i-blog.csdnimg.cn/direct/2d139c4d8db84b398d9a2cdf6a8edb90.png#pic_center
在魔搭社区举行授权 https://www.modelscope.cn/my/mynotebook/authorization
https://i-blog.csdnimg.cn/direct/48b91f1b9a7c47eb8e2c73c09e4c9206.png#pic_center
step1: 报名赛事

https://tianchi.aliyun.com/competition/entrance/532254
https://i-blog.csdnimg.cn/direct/40c6c2eae0ee4c99adb7b65401d848d6.png#pic_center
Step2:在魔搭社区创建PAI实例!

https://www.modelscope.cn/my/mynotebook/authorization
https://i-blog.csdnimg.cn/direct/378f7a3563a74dd9aeeb47a4e72f64c0.png#pic_center
https://i-blog.csdnimg.cn/direct/cd37779cc51249e9a54f5cc5672efe50.png#pic_center
https://i-blog.csdnimg.cn/direct/8e97d23403fa416fb2fb36943ec02e65.png#pic_center
Step3:30 分钟体验一站式 baseline!

1.下载baseline文件:(约莫需要两分钟)
git lfs install
git clone https://www.modelscope.cn/datasets/maochase/kolors.git
https://i-blog.csdnimg.cn/direct/36ea9da21d744d4ab022223ac3ab87b5.png#pic_center
2.进入文件夹,打开baseline文件:
https://i-blog.csdnimg.cn/direct/b8f17eb8974c4d4185f577cd4b0032aa.png#pic_center
3.安装情况,然后重启kernel:
https://i-blog.csdnimg.cn/direct/a9d85bcbb4784cab941f16628f7033ce.png#pic_center
4.调解prompt,设置你想要的图片风格,依次修改8张图片的描述(可选)
https://i-blog.csdnimg.cn/direct/c4847507c5394fcdb0fda2c3ade7992c.png#pic_center
5.依次顺序运行剩余的代码块,点击代码框左上角执行按钮,最终获得图片(约莫需要20分钟)
https://i-blog.csdnimg.cn/direct/afd892ef1a1841b2b9e371e7b79abab9.png#pic_center
step4: 微调结果上传魔搭

https://www.modelscope.cn/models/create
1.移动结果文件
   创建terminal,粘贴如下下令,回车执行
1 mkdir /mnt/workspace/kolors/output & cd
2 cp /mnt/workspace/kolors/models/lightning_logs/version_0/checkpoints/epoch\=0-step\=500.ckpt /mnt/workspace/kolors/output/
3 cp /mnt/workspace/kolors/1.jpg /mnt/workspace/kolors/output/
https://i-blog.csdnimg.cn/direct/0098fec888d6465190cd029661eefaac.png#pic_center
2.下载结果文件
   双击进入output文件夹,分别下载两个文件到当地
https://i-blog.csdnimg.cn/direct/af56189a18f14f009b9304a5c17aec00.png#pic_center
3.创建并上传模型所需内容
https://i-blog.csdnimg.cn/direct/49d88f35b8844d4fa18513e4f21d22c3.png#pic_center
4.来到创空间,查察本身的模型是否发布
https://i-blog.csdnimg.cn/direct/d91cbcc8b37a4c4999a6d5c0c4c78bc3.png#pic_center
恭喜你,至此你已完成AIGC方向LoRA模型的微调,并成功天生了八张图片,组成一个温馨有意义的小故事,接下来,我们关注一下技能层面,即盘算机是怎样做到文生图的.
5.代码解读

https://i-blog.csdnimg.cn/direct/bd6707dba0ba48e4b21318f80e142f1b.png#pic_center
1.情况安装
!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.下载数据集
#下载数据集
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_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微调
# 下载模型
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.加载微调好的模型
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.图片天生
torch.manual_seed(0)
image = pipe(
    prompt="二次元,一个紫色短发小女孩,在家中沙发上坐着,双手托着腮,很无聊,全身,粉色连衣裙",
    negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
    cfg_scale=4,
    num_inference_steps=50, height=1024, width=1024,
)
image.save("1.jpg")
6.微调结果示例:

微调过程:
https://i-blog.csdnimg.cn/direct/5c2d23116bae45ceb61e92cb69cff95c.png#pic_center
https://i-blog.csdnimg.cn/direct/4cab3fbc56534d41aeb2845e660a2226.png#pic_center
末了一块代码的意思是让这八块图拼成一个四行两列的小拼图:
import numpy as np
from PIL import Image


images =
image = np.concatenate([
    np.concatenate(images, axis=1),
    np.concatenate(images, axis=1),
    np.concatenate(images, axis=1),
    np.concatenate(images, axis=1),
], axis=0)
image = Image.fromarray(image).resize((1024, 2048))
image
结果展示:
https://i-blog.csdnimg.cn/direct/e0f45662b82f4b3c965fdefd328adc4b.jpeg#pic_center
https://i-blog.csdnimg.cn/direct/307deef27505482e8d70518c7c603a67.jpeg#pic_center
https://i-blog.csdnimg.cn/direct/40a4dd1f1e624ab4b9f70272396af7a3.jpeg#pic_center
https://i-blog.csdnimg.cn/direct/a57cdad5847c4befbe88c71e0355f2f7.jpeg#pic_center
https://i-blog.csdnimg.cn/direct/e943ff23de83403bbe2b0f10468b380e.jpeg#pic_center
https://i-blog.csdnimg.cn/direct/1759d203620f443398c5cfe713c44c5b.jpeg#pic_center
https://i-blog.csdnimg.cn/direct/371ee94f71e84e2a9556c0cde8e4902e.jpeg#pic_center
https://i-blog.csdnimg.cn/direct/48758b0fe0fd4b01a5ce94b8014bc13e.jpeg#pic_center
         感谢观看,点个关注,主页有更多人工智能干货哦~      
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Datawhale AI夏令营第四期魔搭-AIGC文生图方向Task1笔记