Datawhale×魔搭 AI夏令营 【2024年第四期】:AIGC学习笔记

743 阅读21分钟

AIGC学习笔记 aka 小白进阶攻略 o( ̄▽ ̄)ブ

简介:基于魔搭社区“可图Kolors-LoRA风格故事挑战赛”开展实践学习,从文生图实现方案逐渐进阶,教程偏重图像工作流、微调、图像优化等思路,最后选学AIGC应用方向、数字人技术等内容,从零入门AI生图原理&实践

赛题解读

  • 【报名】

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

    初赛:报名后——2024年8月31日23:59

    决赛:2024年9月5日答辩展示

  • 【任务】

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

    基于LoRA模型生成 8 张图片组成连贯故事,故事内容可自定义

  • 【评分】

    美学评分(小于阈值6的提交被视为无效,无法参与主观评分)

    ② 主观评分(技术运用40%、组图风格连贯性30%、整体视觉效果30%)

  • 【提交】

    ① 文件:训练的LoRA 模型文件、LORA 模型的介绍、使用该模型生成的至少8张图片和对应的prompt,确保可复现生成效果;

    ② 地址:魔搭模型库(LoRA模型上传,队伍名称-可图Kolors训练-xxxxxx),比赛品牌馆讨论区 (作品发布,天池平台报名队伍名称+LoRA模型链接地址+作品图(8图故事))

  • 【数据集】

    官方示例数据集;可自行寻找所需的数据集,训练LoRA模型。

Task1:初步尝试Baseline(8.8~8.10)

task1教程

(速通教程非常详细,小白也完成得极其流畅,感谢)

1.1 实践背景学习

一、文生图的发展

早期:规则和模板匹配

2000年代:概率图 & 统计模型 & 机器学习

2010年代:深度学习 & 卷积神经网络(CNN)& 生成对抗网络(GAN)

2020年代:大模型 & OpenAI的CLIP & DALL-E & Stable Diffusion

二、相关技术的理论知识

一个流程图 from Datawhale.png

  • 基础模型

以SD系列(Stable Diffusion)为主。

这个系列按照更新版本依次有 SD 1.x、SD 2.x、SD 1.5、SDXL 1.0、SDXL Turbo,其中,SDXL采用了一种名为“对抗性扩散蒸馏”(Adversarial Diffusion Distillation,ADD)的新技术,使得模型能够同时实现 ①高采样保真度 ②实时图像生成。SDXL Turbo效率更高,但目前未开放商业使用。

此外查阅Q&A文档,本次比赛提交时选用SD_1.5或SD_2.1已足够。

  • 微调模型

在基础模型上调出的LoRA、人物基础模型等。

LoRA(Low-Rank Adaptation,低秩适应)是一种轻量级的微调方法,并非指单一的具体模型。在Stable Diffusion这一文本到图像合成模型的框架下,Lora被用来对预训练好的大模型进行针对性优化,以实现对特定主题、风格或任务的精细化控制。

  • Prompt

一般写法:主体描述,细节描述,修饰词,艺术风格,艺术家。

关键词靠前的更重要。

分为正向prompt和负向prompt(不希望生成的内容)。

  • ComfyUI

一个工作流工具,直观的界面展示配置和训练过程。

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

(没用过,可以学习一下)

ComfyUI图 from Datawhale.png

  • ControlNet

一个参考图控制组件,附加到预训练的扩散模型(如Stable Diffusion模型)上的可训练神经网络模块。

扩散模型通常用于从随机噪声逐渐生成图像的过程,而ControlNet的作用在于引入额外的控制信号,使得用户能够精确控制图像生成的不同方面(如姿势关键点、分割图、深度图、颜色等)。

1.2 跑通 baseline

Step 1:云资源获取、环境配置等

开通阿里云PAI-DSW试用(5000个算力时/3个月,使用时好像按量计费?约7个/时,记得及时关掉!) → 魔搭社区注册并授权阿里云 → 在魔搭社区创建PAI实例 → 启动!

Step 2:下载baseline文件、导入一些库等

打开后先git下载baseline文件,接着就是逐个运行python代码块(一个.ipynb文件)。

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

pip install了俩工具,分别是 ① Data-Juicer(数据处理和转换)、② DiffSynth-Studio(大模型微调训练)。

!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

Step 3:数据集下载和处理

小白...于是直接运行了orz,先跑通再说!

from modelscope.msdatasets import MsDataset
from data_juicer.utils.mm_utils import SpecialTokens

看最后保存的csv,似乎是给数据集的图片打了标签“二次元”,奠定风格。

Step 4:LoRA微调训练

依然直接运行,先跑通再说!用到SDXL-vae-fp16-fix(基准模型?)。

from diffsynth import download_models 
download_models(["Kolors", "SDXL-vae-fp16-fix"])

训练部分的代码注释说,改变 lora_rank(the dimension of the LoRA update matrices)可以调整参数量,于是从默认 16 改成 32 ,尝试一下;max_epochs从 1 改成 2 。

最后loss是0.053,训练速度不太快。

微调训练.png

Step 5:加载模型

先跑通再说...。要注意这块代码需与前设一致。

加载模型.png

Step 6:图片生成

我主要调整了随机数种子和prompt内容,每张图生成速度都是18s。prompt现在还没啥头绪和技巧,纯靠盲试,把重要的关键词往前放。

prompt举例.png

我生成的8图如下,故事还是官方示例的少女成长记哈哈哈。顺利跑通感觉不错,部分图片并没有达到预期,期待后续学习和改进!

story.jpg

Step 7:微调结果上传

在终端执行命令

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/story.jpg /mnt/workspace/kolors/output/

→ 打开output文件

→ 分别下载 .jpg 和 .ckpt (保存模型的权重和优化器的中间状态,文件较大) 文件

→ 上传魔搭模型库

创空间查看是否发布

操作流程 from Datawhale.png

必须记得回到魔搭--我的 notebook,关闭PAI实例!!

1.3 心得

由衷感谢Datawhale的教程和学习资源,让我初步了解文生图的基本技术、完整流程以及如何用代码实现AIGC,小白上手毫无压力!非常期待接下来的学习!

  • Q:如何改变微调的图片风格?

    A:我想到的是改变微调数据集的风格(a balance of high quality and more diversity,或许可以关注图片来源、主题、场景、人物、色彩...) & prompt工程(诸如思维链之类的,有待学习)。

  • 反思1:对LoRA技术原理、参数还不了解,微调的模型可能比较糙,需要精读代码来优化。

    以下来自CSDN:自然语言处理: 第十九章LoRA&QLoRA微调技巧

    rank :LoRA的低秩的秩的大小,rank越小低秩矩阵越简单,从而导致在适应过程中学习参数更少、训练速度更快、计算需求降低,但是捕获特定任务信息的能力会降低。rank需要在模型复杂性、适应能力以及欠拟合或过拟合的风险之间进行权衡。

    alpha :比例因子(通常设置为 1),用于在前向传播过程中将 LoRA 权重应用于预训练之中,以调整组合结果的大小(原始模型输出加上低秩适应)。这平衡了预训练模型的知识和新的特定于任务的适应。LoRA 权重的值越大,其影响就越大。

    dropout : 随机丢失

    q & k & v : 是否对自注意力的q & k & v 进行训练

    projection : 是否对投影层进行训练

    mlp : 是否线性层进行训练

    head : 是否输出头进行训练

  • 反思2:希望之后可以用到comfyUI工具。

Task2:精读baseline代码 + prompt练习(8.13~8.14)

2.1 魔搭社区的资源

魔搭社区 的各类AIGC工具:模型、数据集、开源内容...

image.png

Kolors(可图)模型:快手开源的文本到图像生成模型,中英双语

可图优质咒语书:中文prompt,600+风格

创意海报生成:AI背景图 + 艺术字设计 → 合成图片

研习社 · 魔搭社区:NLP、计算机视觉、多模态等学习资源

2.2 精读baseline代码

task2教程

① 主体框架

我使用GPT-4o来辅助理解,初步弄清其框架。

image.png

返回结果如下:

  • 1.依赖库的安装

安装代码运行所需的各种Python库和工具包,包括 simple-aesthetics-predictordata-juicerpeftlightningtorchvisionDiffSynth-Studio

  • 2.数据集加载和准备

ModelScope 加载低分辨率的动漫数据集,并将数据缓存到指定目录。

  • 3.数据预处理和存储

将数据集中的图像转换为RGB格式,并保存到本地。同时,生成对应的元数据文件 metadata.jsonl,用于描述图像与文本的映射关系。

  • 4.数据过滤与加工

使用 data-juicer 进行数据过滤和预处理,确保图像满足指定的尺寸和比例要求,并将处理后的结果保存到指定的文件中。

  • 5.数据重组织与最终保存

将经过处理后的图像和文本信息重新组织,并保存为metadata.csv文件,这个文件将作为后续训练时的数据集使用。

  • 6.模型下载与训练

下载所需的预训练模型。 通过指定的参数和路径进行LoRA的微调训练。

  • 7.模型加载与推理

加载训练后的LoRA模型,并将其应用于预训练的UNet模型中。通过这个步骤,模型可以结合LoRA进行推理和图像生成。

  • 8.图像生成与保存

使用训练好的模型根据输入的提示词生成图像,并将生成的图像保存到指定路径。代码中有多个相似的块,分别用于生成不同的图像。

② 逐行分析和我的收获

依然使用GPT-4o辅助学习,相较 ①主体框架 有种豁然开朗的感觉,学到了很多编程知识,知道怎么替换数据集,也搞明白了LoRA微调训练的核心环节和参数有哪些,比如rank、alpha、learning_rate、batch_size、epoch以及模型的不同layers(task1的疑问✔)。

  • 一个小发现:当我的prompt写成 “ 我对python一窍不通,请帮我逐行解析以下代码xxx ” ,GPT会更新它的记忆,为我输出更详细的内容。【与大模型友好沟通技能+1】

    image.png

以下是我结合GPT-4o的回答,对baseline代码作出的详细注解。(第一次这么仔细地读代码orz,收获满满)

image.png

在阅读过程中,我最深的感触是这些文件名和文件路径,一不小心就会弄错和遗漏,或者彼此关系不明确。因此,我必须在一开始就做好清晰的规划,随时检查,以干净的架构来存储所有的过程文件。

另外,我发现代码对数据集的处理是比较细节的,既会过滤掉很多信息,也会保留很多特征,可能一点微小的规则变动都会影响最终成图的效果。把数据集整理成LoRA需要的格式也很必要。如果要提高模型输出能力,必须特别关注数据集的质量和处理方式。

2.3 Prompt 练习:基于话剧的连环画制作

① 创作故事和prompt

我的创作流程:

和LLM对话

→ 生成场景描述和prompt

→ 人工丰富细节并删除冗余

→ 用可灵AI/baseline等途径实战试验

→ 根据成图效果继续调整prompt

→ 直到满意

image.png

一开始GPT的输出很冗长,我申明了简约要求后,输出质量提高了很多。

此外,我在可灵官方的prompt指南里学习了5W1H方法,例如:一个戴着贝雷帽 [what] 的老画家 [who] ,站在画架前 [what] ,在黄昏时分 [when] 的花园里 [where] ,专心地作画 [why] ,印象派风格,柔和光影,近景 [how]

Prompt.png

类似的,我的场景一可以写成:一个黑色长发马尾少女,穿着浅蓝色毛衣和牛仔裤,坐在木质书桌前,专注地盯着书,眉头微皱,桌上堆满书本和笔记本,背景是昏黄灯光下的书架,手绘漫画风。

1.png

依次执行以上步骤后,我将最后的 场景 | 正向prompt | 负向prompt 信息汇总成了表格。

表1:无代码文生图用的prompt image.png

表2:代码文生图用的prompt image.png

② 无代码文生图

  • SCEPTER Studio (效果太感人了就不放了)

  • 可灵大模型 (kuaishou.com)

    完整的故事生成如下,画面还是比较连续的~

    image.png

    不过我也发现很多需要解决的问题:

    • 让AI生图工具写字的效果很差;

    • AI不怎么喜欢画全身图;

    • 在多人物描述时,AI很容易把特征张冠李戴;

    • 提示词键入过多,许多效果反而不会呈现出来;

    • 画风依然不是很统一,细节处有许多破绽(比如书包、发圈、录取通知书的帽穗等)。

③ 用代码文生图

完整故事生成如下,强烈的微调数据集风格(二次元),还需要继续学习改进~

image.png

一点思考:

  • 当场景比较复杂,prompt很多时,必须增加推理步骤num_inference_steps,否则会生成看起来显然没有画完的图。我最高调成了500。

  • 遇到了GPU显存不足的报错。向GPT以及助教请教,已顺利解决。

    • 解决办法Ⅰ:输入代码 import gcgc.collect()torch.cuda.empty_cache(),释放不用的显存,并通过命令!nvidia-smi随时查看GPU情况。

    • 解决办法Ⅱ:重启内核。

    7912a86784528f02ff3e8104dd08c89.png

  • 图片风格不满意。我发现魔搭社区有很多方便好用的数据集,针对人物表情、姿势等都有,后续task中将改变数据集试一试。

  • 可灵AI无代码文生图的效果,比coding的画面细腻很多,也可以改换风格,速度也快。那对于普通应用者而言,用LoRA微调的优势到底体现在何处呢?

Task3:ComfyUI & 微调 & 数据集(8.16~8.17)

3.1 学习ComfyUI的使用

① 理论知识

ComfyUI 是 GUI(Graphical User Interface,图形用户界面)的一种,是基于节点工作的用户界面,核心模块由模型加载器、提示词管理器、采样器、解码器构成。

Stable Diffusion的基本原理是将一个原本的噪声信号(初始图像)变为无噪声的信号(人可以理解的图像),其中的降噪过程涉及到多次采样

image.png

  • seed:控制噪声产生的随机种子
  • control_after_generate:控制seed在每次生成后的变化
  • steps:降噪的迭代步数,越多则信号越精准,相对的生成时间也越长
  • cfg(classifier free guidance):prompt对于最终生成图像的影响有多大,值越高越严格
  • scheduler:降噪参数
  • denoise:多少内容会被噪声覆盖

② 实操体验

完成了task1的学习期待✔。首先需要在GPU环境下新建一个空白实例,可能是为了避免和之前的task的依赖产生冲突。

git lfs install
git clone https://www.modelscope.cn/datasets/maochase/kolors_test_comfyui.git
mv kolors_test_comfyui/* ./
rm -rf kolors_test_comfyui/
mkdir -p /mnt/workspace/models/lightning_logs/version_0/checkpoints/
mv epoch=0-step=500.ckpt /mnt/workspace/models/lightning_logs/version_0/checkpoints/   

下载后执行 ComfyUI.ipynb 所有代码,点开链接就能进入ComfyUI界面。运行过程中,我遇到了下载反复中断、打不开ComfyUI等问题,尝试重启kernel、换谷歌浏览器、新建实例、挂代理等方法之后顺利解决。感谢答疑群和助教老师们,越来越不怕bug啦~

image.png

加载工作流脚本文件(kolors_example.json),输入正向和负向prompt,一键生成图片。ComfyUI将整个流程可视化了出来,我能很明确地看到代码框架以及运行到哪一部分(有绿色的进度条),对于修改调整模型来说是很方便的。

image.png

也可以加载带LoRA的工作流脚本(kolors_with_lora_example.json),把之前task1训练的LoRA参数传上去再生图片,非常用户友好的操作界面!

image.png

3.2 LoRA参数微调

在之前精读baseline代码的时候,我已经了解了很多LoRA微调时的参数含义,并且自己尝试调整过rank、max_epoch等数值的大小,然而最终模型成图的效果并没有显著改变。

参数名称参数值说明
pretrained_unet_pathmodels/kolors/Kolors/unet/diffusion_pytorch_model.safetensors指定预训练UNet模型的路径
pretrained_text_encoder_pathmodels/kolors/Kolors/text_encoder指定预训练文本编码器的路径
pretrained_fp16_vae_pathmodels/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors指定预训练VAE模型的路径
lora_rank16设置LoRA的秩(rank),影响模型的复杂度和性能
lora_alpha4设置LoRA的α值,控制微调的强度,α越大则LoRA对基础模型的影响越大
dataset_pathdata/lora_dataset_processed指定用于训练的数据集路径
output_path./models指定训练完成后保存模型的路径
max_epochs1设置最大训练轮数
center_crop启用中心裁剪,用于图像预处理
use_gradient_checkpointing启用梯度检查点,节省显存
precision"16-mixed"设置训练时的精度

目前觉得,可以调整的参数有:lora_ranklora_alphamax_epochs。可图比赛官方给出了一些提高图像质量的经验,应该可以借鉴。还需要进一步探索参数的最优组合。

image.png

3.3 如何构建微调数据集

同样是在精读代码的时候,我发现数据集从选取到处理都非常重要,也占据整个工作流的一大部分。

  • 选取方面,baseline是低像素的二次元风格,与我的预期并不符合,所以我想在魔搭社区里找别的数据集。(以下是教程里整理的数据来源,先存着以后应该有用!)

    • 公开的数据平台
      • 魔搭社区
      • ImageNet:广泛用于分类任务
      • Open Images:由Google维护,带有标签的图片
      • Flickr:特别是Flickr30kK和Flickr8K数据集,常用于图像描述任务
      • CelebA:人脸图像数据集
      • LSUN :包含各种场景类别
    • API或爬虫
      • Unsplash、Pexels等
    • 数据合成
      • 利用现有的图形引擎(如Unity、Unreal Engine)或特定软件
    • 数据增强
      • 旋转、翻转、缩放、颜色变换等方式
    • 购买或定制
  • 处理方式方面,除了利用data-juicer进行图像尺寸、宽高比的过滤,可图比赛官方还给出了利用美学打分进行筛选的方法,应该可以借鉴。

    image.png

汇总起来,可以考虑应用场景、数据类型、数据质量、数据数量这4个角度来构建一个高质量的数据集。

LoRA微调数据集的考虑角度.png

3.4 最后一次作品

在baseline的基础代码上,结合这几天学到的知识与思考,增加了一些代码模块。作为入门初学者,收获满满~

① 微调数据集来源

出于时间和能力的考量,我选用了魔搭社区的开源数据集 文生图风格定制数据集(from IIC) 中的水彩画风格子集。

dataset_style = 'Watercolor' # 在此处修改风格即可

from modelscope.msdatasets import MsDataset
ds = MsDataset.load(
    'iic/style_custom_dataset', subset_name = dataset_style, split='train',
    cache_dir="/mnt/workspace/kolors/my_data"
)

② 数据处理

在baseline基础上,新增美学评分步骤,并丰富文本描述。

  • 美学评分模型由可图比赛官方提供。

    !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)
    
    from PIL import Image
    
    for i in range(30):
        image = Image.open(f'{target_directory}/{i}.jpg')
        score = get_aesthetics_score(image)
        print('picture ',i,': ',score,end='\t')
        if (i+1) % 2 == 0:
            print()
    
    print('---------- Average aesthetics score: ',evaluate(target_directory),' ----------')
    

    依次输出每张图片的美学分数,平均分为6.29,达到比赛要求(6分以上)。

    image.png

  • baseline中微调数据集的文本描述全部是“二次元”,很简略。我选用的数据集中每张图片都有短文本提示词,我以 prompt + style 的形式,构建文本描述(text),作为LoRA的输入。示例如下。

    file_nametext
    0.jpga watercolor painting of a child with blue hair, watercolor style
    1.jpgan old man in a white hat is shown in this watercolor painting, watercolor style
    2.jpga watercolor painting of a chinese building, watercolor style
    3.jpga painting of a woman carrying a child, watercolor style
    4.jpga painting of a woman with black and white watercolor, watercolor style

③ LoRA参数

  • 最重要的秩和正则化参数:LoRA的原理是将原本大参数矩阵分解为两个低秩矩阵A(m×r)& B(r×n),再乘以缩放因子 α / r作为权重输出,故rank和alpha应该是一起调整的。依据大赛官方给出的风格化训练建议,我设定rank为16,α 相应调大成8。

  • 其他训练架构类参数:在baseline参数基础上进行调整,并新增steps_per_epochrandom_flip参数,前者与 max_epochs 一起控制训练步长,后者为随机旋转以提高泛化能力。

    参数
    lora_rank16
    lora_alpha8
    max_epochs5
    steps_per_epoch200
    precision16-mixed
    center_cropTrue
    random_flipTrue
    use_gradient_checkpointingTrue

④ 故事和prompt

  • 场景一:少女画家缺少灵感

    水彩画,{红色长发少女躺在家里的床上,神色苦恼,手上拿着画笔,全身图,冷色调},美丽,绘画性强,细节丰富,纹理鲜明,艺术感十足。

  • 场景二:背着画架出门采风

    水彩画 ,{穿浅蓝色长裙、戴贝雷帽、红色长发的少女背着画架出门采风,阳光明媚,四周绿意盎然},美丽,绘画性强,细节丰富,纹理鲜明,艺术感十足。

  • 场景三:在湖边专心作画

    水彩画,{穿浅蓝色长裙、戴米色贝雷帽、红色长发的少女在湖边专心作画,充满活力},美丽,绘画性强,细节丰富,纹理鲜明,艺术感十足。

  • 场景四:在樱花树下睡着

    水彩画,{穿浅蓝色长裙、戴米色贝雷帽、红色长发的少女在樱花树下躺着睡觉,花瓣飘落},美丽,绘画性强,细节丰富,纹理鲜明,艺术感十足。

  • 场景五:一只小猫从树林窜出

    水彩画,{一只猫从树林窜出,穿浅蓝色长裙、戴米色贝雷帽、红色长发的少女转头看向小猫,眼神好奇},美丽,绘画性强,细节丰富,纹理鲜明,艺术感十足。

  • 场景六:小猫与少女一起回家

    水彩画,{穿浅蓝色长裙、戴米色贝雷帽、红色长发的少女与小猫一起走在回家的路上,夕阳余晖洒满道路,充满活力},美丽,绘画性强,细节丰富,纹理鲜明,艺术感十足。

  • 场景七:少女和小猫在家吃饭

    水彩画,{红色长发的16岁少女在家里的餐桌旁吃饭,桌上有只猫,晚上,充满活力},美丽,绘画性强,细节丰富,纹理鲜明,艺术感十足。

  • 场景八:画了小猫特写,满意睡觉

    水彩画,{红色长发的少女在床上睡觉,神色幸福,手上拿着猫的画像,低饱和度,冷色调},美丽,绘画性强,细节丰富,纹理鲜明,艺术感十足。

  • NEGATIVE PROMPT:丑陋、变形、嘈杂、模糊、低对比度、照片、逼真

⑤ 成图

将训练好的LoRA参数保存为epoch=4-step=1000.ckpt文件,加载到ComfyUI界面,生成图片。可调整的采样器参数有 seedstepscontrol_after_generate(在循环中持续改变随机数种子以得到不同输出),cfg

image.png

⑥ 作品链接

队伍:咕噜咕噜嗝

LoRA模型:www.modelscope.cn/models/luuu…

作品:可图Kolors-LoRA风格故事挑战赛 · 魔搭社区 (modelscope.cn)