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

一、赛题解读

(一)可图Kolors-LoRA风格故事挑战赛

1.赛事链接:

https://tianchi.aliyun.com/s/ce4dc8bf800db1e58d51263ff357d28f

2.赛事任务:

1)参赛者需在可图Kolors 模型的基础上训练LoRA 模型,生成无限风格,如水墨画风格、水彩风格、赛博朋克风格、日漫风格......

2)基于LoRA模型生成 8 张图片组成连贯故事,故事内容可自定义;基于8图故事,评估LoRA风格的美感度及连贯性样例:偶像少女养成日记

3.评分规则介绍:

1)主观评分:由评委对参赛作品进行投票,评审标准可以从技术运用(40%)、组图风格连贯性(30%)、整体视觉效果(30%)几方面进行评判投票。

2)客观评分:美学分数仅作评价提交是否有效的标准,其中美学分数小于6(阈值可能根据比赛的实际情况调整,解释权归主办方所有)的提交被视为无效提交,无法参与主观评分。

此外,评委会核实选手上传的模型文件,赛选手需提交训练的LoRA 模型文件、LORA 模型的介绍、以及使用该模型生成的至少8张图片和对应 prompt,以便评委能够复现生成效果,对于生成效果明显无法复现的,取消获奖资格。

4.任务提交格式说明:

选手在天池平台后,需在魔搭平台上提交作品。步骤如下:

1)将训练好的LoRA 模型上传到魔搭模型库

LoRA模型命名为:队伍名称-可图Kolors训练-xxxxxx

LoRA 上传地址:https://modelscope.cn/models/create?template=text-to-image-lora  

2)作品发布在比赛品牌馆讨论区,https://modelscope.cn/brand/view/Kolors?branch=0&tree=11发布标题格式为:天池平台报名队伍名称+LoRA模型链接地址+作品图(8图故事)

(二)文生图的历史  

        文生图(Text-to-Image Generation)是一种通过文本生成图像的技术,其发展历程可以追溯到早期的计算机视觉和自然语言处理研究。这一技术的历史可以分为几个关键阶段:

1.早期探索(20世纪60年代-20世纪90年代)

        文生图的概念最早出现于计算机视觉和图像处理的早期研究中。早期的图像生成技术主要依赖于规则和模板匹配,通过预定义的规则将文本转换为简单的图形。然而,由于计算能力和算法的限制,这一阶段的技术能力非常有限,生成的图像质量较低,应用场景也非常有限。

2.基于统计模型的方法(2000年代)

        进入2000年代,随着统计模型和机器学习技术的发展,文生图技术开始得到更多关注。研究者们开始利用概率图模型和统计语言模型来生成图像。尽管这一阶段的技术在生成图像的多样性和质量上有了一定提升,但由于模型的复杂性和计算资源的限制,生成的图像仍然较为粗糙,不够逼真。

3.深度学习的崛起 (2010年代)

        2010年代是文生图技术发展的一个重要转折点。随着深度学习,尤其是卷积神经网络(CNN)和生成对抗网络(GAN)的发展,文生图技术取得了突破性进展。2014年,Goodfellow等人提出的GAN模型通过生成器和判别器的对抗训练,极大地提升了图像生成的质量。随后,各类变种GAN模型被提出,如DCGAN、Pix2Pix等,使得文生图技术在生成逼真图像方面达到了前所未有的高度。

4.大规模预训练模型(2020年代)

        进入2020年代,大规模预训练模型如OpenAI的CLIP、DALL-E以及Stable Diffusion等的出现,标志着文生图技术进入了一个新的时代。CLIP通过大规模的文本和图像配对数据训练,能够理解和生成高度一致的文本和图像;DALL-E和Stable Diffusion进一步提升了生成图像的创意和细节表现能力,使得通过简单的文本描述生成高质量、复杂图像成为可能。这些技术的应用范围从艺术创作、广告设计到辅助医疗诊断,展现了广泛的商业价值和社会影响力。

(三)文生图基础知识介绍

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

接下来,我们简单了解下提示词、lora、ComfyUI和参考图控制这些知识点。

1.提示词

        提示词很重要,一般写法:主体描述,细节描述,修饰词,艺术风格,艺术家

        举个例子:

·【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

2.Lora

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

3.ComfyUI

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

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

4.参考图控制

        ControlNet是一种用于精确控制图像生成过程的技术组件。它是一个附加到预训练的扩散模型(如Stable Diffusion模型)上的可训练神经网络模块。扩散模型通常用于从随机噪声逐渐生成图像的过程,而ControlNet的作用在于引入额外的控制信号,使得用户能够更具体地指导图像生成的各个方面(如姿势关键点、分割图、深度图、颜色等)。

二、小白零基础30分钟速通指南

(一)报名赛事

赛事链接:https://tianchi.aliyun.com/competition/entrance/532254

(二)开通阿里云PAI-DSW试用

(非新用户可跳过)

步骤一:开通免费试用

链接:https://free.aliyun.com/?productCode=learn

阿里云免费试用 - 阿里云

步骤二:在魔搭社区进行授权

链接:魔搭社区

ps.如果第二步授权失败,可跳过此步骤,继续往下进行

(三)在魔搭社区创建PAI实例

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

魔搭社区(👈或直接点击这个)

步骤三——当步骤二失败时

如果在魔搭无法授权或点击【打开】无法打开,可到阿里云控制台创建 & 打开实例。

步骤三——当步骤二成功时:

ps.此处的【新建实例】与魔搭的【创建实例】效果相同,如果魔搭处无法执行,也可以从此处创建。

额度过期者看此处!

        如果之前试用的额度已经过期,可使用魔搭的免费Notebook实例。

(四)30 分钟体验一站式 baseline

1.下载baseline文件

·所需命令(复制即可):

git lfs install

git clone https://www.modelscope.cn/datasets/maochase/kolors.git

2.进入文件夹,打开baseline文件

3.安装环境

安装 Data-Juicer 和 DiffSynth-Studio:

        Data-Juicer:数据处理和转换工具,旨在简化数据的提取、转换和加载过程

        DiffSynth-Studio:高效微调训练大模型工具

4.重启kernel

5.调整prompt,设置你想要的图片风格,依次修改8张图片的描述。

正向描述词:你想要生成的图片应该包含的内容

反向提示词:你不希望生成的图片的内容

6.依次顺序运行剩余的代码块,点击代码框左上角执行按钮,最终获得图片

下面的代码块按照功能主要分成这几类:

        (1)使用Data-Juicer处理数据,整理训练数据文件

        (2)使用DiffSynth-Studio在基础模型上,使用前面整理好的数据文件进行训练微调

        (3)加载训练微调后的模型

        (4)使用微调后的模型,生成用户指定的prompt提示词的图片

(五)微调结果上传魔搭

链接:https://www.modelscope.cn/models/create

https://www.modelscope.cn/models/create

1.移动结果文件

创建terminal,粘贴如下命令,回车执行(注意!要求一行一行的粘贴代码)

mkdir /mnt/workspace/kolors/output & cd

cp /mnt/workspace/kolors/models/lightning_logs/version_0/checkpoints/epoch\=0-step\=500.ckpt /mnt/workspace/kolors/output/

cp /mnt/workspace/kolors/1.jpg /mnt/workspace/kolors/output/

2.下载结果文件

双击进入output文件夹,分别下载两个文件到本地

3.创建并上传模型所需内容

点击魔搭社区,创建模型,中文名称建议格式:队伍名称-可图Kolors训练-xxxxxx

这样就算创建完成并发布在创空间讨论区了。

4.来到魔搭社区,查看自己的模型是否发布

(六)关闭PAI实例!!!!

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

魔搭社区

运行完成后,别忘了回到魔搭,【关闭】实例,否则会一直消耗你的试用额度!

每小时消耗大概7个试用额度!(总共5000个,有效期三个月)

MORE KNOWLEDGE——来了解一下baseline代码的大致结构

1.简要概述代码做了什么

(1)导入库:首先,代码导入了需要用到的库,包括 data-juicer 和微调的工具 DiffSynth-Studio

(2)数据集构建:下载数据集kolors,处理数据集

(3)模型微调:模型微调训练,以及加载训练后的模型

(4)图片生成:调用训练好的模型生成图片

2.代码详情

(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"/mnt/workspace/kolors/data/lora_dataset/train/{data_id}.jpg"]}
        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"][0])
        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")

参考资料

AIGC专题视频课程:https://space.bilibili.com/1069874770/channel/collectiondetail?sid=3369551

AIGC专题品牌馆:https://www.modelscope.cn/topic/cf0de97eb6284e16812d7c54fbe29fe7/pub/summary

模型训练入口:https://modelscope.cn/aigc/modelTraining

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值