首页 > 其他分享 >Datawhale x魔搭AI夏令营:AIGC文生图

Datawhale x魔搭AI夏令营:AIGC文生图

时间:2024-08-11 23:24:41浏览次数:18  
标签:文生 data image AIGC AI juicer path model lora

学习链接:Datawhale

什么是LoRA?

Stable diffusion 提供了中的Lora(LoRA)模型是一种轻量级的微调方法,即“Low-Rank Adaptation”(低秩适应)。LoRA也不是指单一的具体模型,而是指一类通过特定微调技术应用于基础模型的扩展应用。

在Stable Diffusion模型的应用中,LoRA被用作一种插件,允许用户在不修改SD模型的情况下,利用少量数据训练出具有特定画风、IP或人物特征的模型。这种技术在社区使用和个人开发者中非常受欢迎。例如,可以通过LoRA模型改变SD模型的生成风格,或者为SD模型添加新的人物。

Baseline跑通流程

1. 安装 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

Data-Juicer的核心是其包含超过80个高度系统化且可复用的算子(operators),这些算子构成了强大的数据处理工具箱,允许用户灵活地对数据进行清洗、生成、分析与转换。值得注意的是,它支持通过配置文件实现流程自动化,减少了手动编码的需求,大大提升了效率。此外,采用高效的并行处理框架,如Aliyun-PAI、Ray、Slurm和CUDA,Data-Juicer优化了资源利用,加快了数据处理速度,降低了计算成本。
DiffSynth-Studio 是一个创新的扩散引擎,专门设计用于实现图片和视频的风格转换。它通过先进的机器学习技术,为用户提供了一种全新的创作方式,使得风格转换变得更加高效和直观。该工具的目标用户群体广泛,包括但不限于艺术家、设计师、视频编辑者和AI爱好者。无论是专业人士还是业余爱好者,都能在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

第四步:训练模型
  下载模型

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)
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"
)

标签:文生,data,image,AIGC,AI,juicer,path,model,lora
From: https://blog.csdn.net/acknowledgment/article/details/141113281

相关文章

  • AI Python for Beginners-Andrew吴恩达-study notes(2)
    1Introduction    itisbelievedthatwiththehelpofAIchatbotwecanlearnpythonmoreeasilyanditwillbeamazingtoautomatetasksusingPython2 CompletingatasklistwithAI2.1List①listisasinglevariableoftype thatholdsm......
  • LangChain 安全特性全解析与实践指南
    LangChain安全特性全解析与实践指南引言在人工智能的浪潮中,LangChain以其卓越的能力,成为开发大型语言模型(LLM)应用程序的佼佼者。然而,随着技术的发展,安全问题逐渐浮出水面。本文将深入探讨LangChain的安全特性,并提供详细的代码示例和最佳实践,以确保开发者能够在保障安全......
  • D - Square Pair
    原题链接题解多想几种暴力1.遍历所有数对:\(O(n^2)\)2.求有多少数对其乘积为平方数\(\to\)求有多少平方数能被数对乘积:\(O(n^2)\)3.如果两个数的乘积为平方数,代表他们的质因数,要么都是奇数,要么都是偶数:\(O(?)\)4.如果\(a\timesb\)是完全平方数,代表\(a\timesb\)......
  • 解密AI的未来:决策式AI与生成式AI的深度解析
    在当今科技飞速发展的时代,人工智能(AI)已成为各行各业的热议话题。尤其是决策式AI和生成式AI,这两种技术各具特色,却又相辅相成。本文将深入探讨这两种AI的定义、应用及其未来发展趋势,带你一探究竟!一、什么是决策式AI?决策式AI是指能够通过分析数据和信息,帮助用户做出明智决策的人......
  • 洛谷 P1560 [USACO5.2]蜗牛的旅行Snail Trails(c++)
    describe蜗牛在制定今天的旅游计划,有n个景点可选,它已经把这些景点按照顺路游览的顺序排成一排了,每个地方有相应的景观,这里用一个整数表示。蜗牛希望选取连续的一段景点,还要选出来的每一个景点的景观都不同,问它最多能选出多少个景点进行旅游。#include<iostream>#inc......
  • DataWhale-2024夏令营第四期-从零入门AI生图原理&实践-学习笔记
    DataWhale-2024夏令营第四期-从零入门AI生图原理&实践-学习笔记Datawhale(linklearner.com)学习链接AI生图基础知识一、文生图(Text-to-ImageGeneration)历史随着深度学习的发展,近些年来越来越多的AI生图效果通过大语言模型得到了一定的提升。文生图的历史:文生图的概念最......
  • Windows平台Hyper-V下使用iKuai作为主路由实现网口桥接
    Windows平台Hyper-V下使用iKuai作为主路由实现网口桥接问题背景在使用iKuai作为主路由时,可能会遇到后添加的虚拟端口下的设备无法联网的问题,这可能是iKuai的一个bug。解决方案以下是解决Windows平台Hyper-V下iKuai主路由网口桥接问题的步骤:确定主要网卡:观察并确定网桥使用的......
  • 解决pip无法更新问题的简单方法:WARNING: You are using pip version 20.2.1; however,
    用pip安装python应用的程序包时,也遇到了同样的问题,pip无法正常更新,因此就不能用pip下载安装程序包了。需要必须把pip更新到最新的状态后,才能使用pip的便捷功能。当时网上搜搜答案解决了,没有记录下来。今天使用pip使,又遇到了同样的问题,依然是网上一顿搜,试了各种方法,才成功安装好了......
  • 从英特尔错失AI机遇看未来生活的启示与行动指南
    题目:从英特尔错失AI机遇看未来生活的启示与行动指南引言在科技日新月异的今天,每一个决策都可能成为影响企业乃至整个行业走向的关键。英特尔错失投资OpenAI的机遇,不仅揭示了企业在面对新兴技术时的战略短视,也为我们的生活和工作带来了深刻的启示。本文旨在探讨这一事件背后的......
  • Datawhale X 魔搭 AI夏令营-AIGC文生图-task1-笔记
    目录1赛题解读2文生图的历史3文生图基础知识介绍3.1提示词3.2 Lora3.3 ComfyUI3.4 参考图控制4实践-通过代码完成模型微调&AI生图-Test4.1 体验baseline4.2上传至魔搭社区4.3尝试baseline-改了prompt很幸运能够发现这样一个宝藏!“从零入门AI生图原......