Datawhale X 魔搭 AI夏令营 AIGC方向 Task01

赛题介绍

可图Kolors-LoRA风格故事挑战赛_创新应用大赛_天池大赛-阿里云天池的团队 (aliyun.com)

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

  2. 基于LoRA模型生成 8 张图片组成连贯故事,故事内容可自定义;基于8图故事,评估LoRA风格的美感度及连贯性

样例展示:偶像少女养成日记

评分标准

本次比赛通过客观评分判断提交作品的有效性,但最终评分以主观评分为准。

主观评分

评审标准从技术运用(40%)、组图风格连贯性(30%)、整体视觉效果(30%)几方面进行评判投票。

客观评分

美学分数仅作评价提交是否有效的标准,其中美学分数小于6(的提交被视为无效提交,无法参与主观评分。

美学分数可以使用以下代码获得:

pip install simple-aesthetics-predictor

import torch, os
from PIL import Image
from transformers import CLIPProcessor
from aesthetics_predictor import AestheticsPredictorV2Linear
from modelscope import snapshot_download


model_id = snapshot_download('AI-ModelScope/aesthetics-predictor-v2-sac-logos-ava1-l14-linearMSE', cache_dir="models/")
predictor = AestheticsPredictorV2Linear.from_pretrained(model_id)
processor = CLIPProcessor.from_pretrained(model_id)
device = "cuda"
predictor = predictor.to(device)


def get_aesthetics_score(image):
    inputs = processor(images=image, return_tensors="pt")
    inputs = {k: v.to(device) for k, v in inputs.items()}
    with torch.no_grad():
        outputs = predictor(**inputs)
    prediction = outputs.logits
    return prediction.tolist()[0][0]


def evaluate(folder):
    scores = []
    for file_name in os.listdir(folder):
        if os.path.isfile(os.path.join(folder, file_name)):
            image = Image.open(os.path.join(folder, file_name))
            scores.append(get_aesthetics_score(image))
    if len(scores) == 0:
        return 0
    else:
        return sum(scores) / len(scores)


score = evaluate("./images")
print(score)

需提交训练的LoRA 模型文件、LORA 模型的介绍、以及使用该模型生成的至少8张图片和对应 prompt以便复现结果。

Baseline跑通

参考教程:Docsicon-default.png?t=N7T8https://datawhaler.feishu.cn/wiki/CMYkwKow0ihxOikg1G9cd9Zhnng?from=from_copylink

环境搭建

魔搭社区个人云账号授权,绑定阿里云账号,创建实例:

启动实例,在终端使用 git clone 命令克隆baseline项目。

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

Baseline运行

运行第一个代码块,安装 Data-Juicer 和 DiffSynth-Studio

安装完成后需要重启kernel

之后按照代码顺序依次运行每个代码块,进行数据集下载、LoRA微调、加载LoRA权重、图片生成,最终得到生成的图像。

模型加载和图像生成代码:

'''
模型加载
'''
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"
)
'''
图像生成
'''
torch.manual_seed(0)
image = pipe(
    prompt="二次元,一个紫色短发小女孩,在家中沙发上坐着,双手托着腮,很无聊,全身,粉色连衣裙",
    negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
    cfg_scale=4,
    num_inference_steps=50, height=1024, width=1024,
)
image.save("1.jpg")

在图像生成时可以修改prompt和negative_prompt

prompt是正向提示词,描述想要生成的图片应该包含的内容

negative_prompt是反向提示词,表示不希望生成的图片的内容

模型发布

使用Bash命令将输出的图片和微调的模型权重复制到output文件夹下:

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/

下载图片和LoRA权重,在魔搭中创建模型,上传图片和LoRA权重并发布。

注意模型的中文名称需要遵循格式:队伍名称-可图Kolors训练-xxxxxx

到这里Baseline就跑完了,整个流程大约1h左右,中间没有遇到报错,十分顺利。

最后不要忘记关闭实例,否则不会停止扣费。

一些想法

1. 除LoRA微调外,是否可以增加一些额外模块来提升模型性能。

2. 生成图像时,模型似乎只根据输入的prompt和negative_prompt,连贯性仅由文字内容体现。能否提取历史生成图片的信息,将它作为先验知识引导之后的图片生成?这样生成图片的连贯性应该会有提升。

3.数据集获取,除了当前风格,是否还可以采用其他风格的数据集进行微调。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值