首页 > 其他分享 >Datawhale AI夏令营第四期魔搭- AIGC文生图方向 task01笔记

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

时间:2024-08-10 21:24:56浏览次数:15  
标签:文生 data AIGC AI models path kolors lora model

   同学你是否对ai生成图方面感兴趣,同学你想不想进步,同学不要再刷抖音看有声小说里面ai美女了,来吧和我一起探索ai扩图在暑假里面卷鼠他们,重生之我在暑假学AIGC文生图校花开始倒追我现在开始(要是想看专业关于概念或者别的历程之类的,还是跳过我这篇吧,主要我本人也不太喜欢那么死板的概念,我也记不住)。

  咳咳(敲小黑板),首先我们面对赛题可图Kolors——Lora风格故事挑战赛咱们抛开别的不说,面对丰厚的奖品,你是否已经非常心动,那么开始咱们的逆袭之路。

一、算法平台

  抛开文生图的各种算法,各种经历进化史,我们敲代码需要一个便宜又实惠的平台,自己电脑跑可能要到明年了。这一步非常重要,不然你会像我一样付出45.08的惨痛教训,我就是没看这一步,感觉跟诈骗一样,莫名其妙就扣我这么多钱。

    接下来就是免费使用环节开通阿里云PAI—DSW试用进入网页之后选择左下角第一个的免费试用,因为我已经买过付过费了所以是选购更多规格这个样子,你们要是第一次登陆就会有个立刻使用。点完这个之后继续点立刻试用,然后完成就行了。

  然后在魔塔社区进行授权,当然都是要先登陆的宝。点击个人云账户授权实例,然后从左边开始的第一个的去授权,因为我是做完之后才写的笔记,稍微不一样。之后估计会有阿里云的工作人员给你打电话,就顺着说了解大模型的就好了,点完授权之后,复制他给你的数字,接着点授权,然后粘贴,返回之后点击从左边开始的第二个的去授权,然后就可以了。

    那个赛事的链接已经在上面挂着了,很容易报名的就不多讲解了。

  然后就是开启平台,有个简单的直接免费的36个小时和我下图选的一样选择方式二然后点启动,也可以选另一个如下图。

   就按照我下面的图把第一个启动,第二个关闭,开着都是浪费算力的,呜呜呜呜呜,谁能赔我45.08啊,我真是个好人给你们强调强调。然后你们做完之后一定要记得关闭,重要的事说三遍,一定要关闭,一定要关闭,一定要关闭。

二、代码

   开启之后就进入下面那个界面了,然后打开终端第三行第一个白色的那个Terminal。

  进入之后输入这个命令,然后回车,如果鼠标粘贴不了,那就ctrl+v,因为我就是鼠标粘贴不了。估计还要等个两分钟不急。

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

 然后点击左边的kolors文件,点击baseline这个文件,把上面的!pip的代码全部运行一下,就是第一行的,那个开始按钮,。

  运行完之后,点击上面的第三个按钮,点完就是重启了,然后点击第四个那个就是全部运行,运行比较慢要有耐心。

  哦对,如果你想要修改图片的内容可以翻翻代码最下面那个文字描述,就可以修改生成的图片。

三、上传模型

     运行完之后点击file,点新建,然后点击终端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/

  之后点击kolors里面的output文件,把里面的两个文件都下载了,在下载的时候不能把那个实例或者那个关闭了,不然下载不了,因为我就这样干了,最后又重新运行一遍,无语死我了,啊啊啊啊。

  然后点击魔塔,模型名字就是xxx——LoRA,中文名就是队伍名—可图Kolors训练—xxx,然后选择公开模型,下面那个选1.5就可以了。之后在创空间搜索你的名字点模型,就可以知道发没发成功了,然后一定要记得关闭一定要记得关闭一定要记得关闭。

四、拓展知识

    我看这边有个零代码生成图片,这是网址。原谅我夹带私货,没错官宣了,玩恋与深空,做幸福女人,秦彻贼帅的好吧。感觉他运行着挺慢的,慢慢等待........但效果还是比上面的代码要差点意思的。(所以为什么我就放了一张男女抱着的照片就是非法了,投诉,这必须需要改改)

   怎么说呢这很难评,看来抽象也是一种艺术,果然世界上不能没有画师太太 ,嗯也可能是我的问题我说的太少了太抽象了,对比一下太抽象了,我明明传进去那么好看的图。

其他的还有阿里muse研究的FLUX快手研究的文生图等等,有兴趣可以点进去玩玩。

 五、分析优化

  咳咳(敲小黑板了),来众所周知第一步肯定是要导包了。这步是肯定不需要再优化的。

!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

  那么就该导入数据了,下面下载数据集,因为这个数据集不是我找的是自带的,我就没有再次修改了,你们可以修改或者再添加数据集,更进一步优化。

#下载数据集
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")

  有了数据集,那么就要把数据集转化为机器能够看懂的数据,并且数据集还有些需要处理的地方,所以这就是机器学习里面的数据预处理。

  那么对于数据预处理这方面,可以从下面几个方面对代码进行优化:

  1、可以批量处理,加快模型的图形处理速度。

   2、直接构架DataFarme模型,在读取时时候构建模型

import pandas as pd
import os
import json
from PIL import Image
from tqdm import tqdm
from multiprocessing import Pool

# 定义处理每个数据项的函数
def process_data(data_item):
    data_id, data = data_item
    text = data["text"]
    image = Image.open(data["image"][0])
    image_path = f"./data/lora_dataset_processed/train/{data_id}.jpg"
    image.save(image_path)
    return (f"{data_id}.jpg", text)

# 写入配置文件
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
"""

config_file_path = "data/data-juicer/data_juicer_config.yaml"
os.makedirs(os.path.dirname(config_file_path), exist_ok=True)

with open(config_file_path, "w") as file:
    file.write(data_juicer_config.strip())

# 运行数据处理命令
os.system(f"dj-process --config {config_file_path}")

# 创建数据目录
os.makedirs("./data/lora_dataset_processed/train", exist_ok=True)

# 读取 JSONL 文件并解析
with open("./data/data-juicer/output/result.jsonl", "r") as file:
    data_list = [(i, json.loads(line)) for i, line in enumerate(file)]

# 使用并行处理优化图像保存和数据处理
with Pool() as pool:
    results = list(tqdm(pool.imap(process_data, data_list), total=len(data_list)))

# 创建 DataFrame
file_names, texts = zip(*results)
data_frame = pd.DataFrame({"file_name": file_names, "text": texts})

# 保存到 CSV 文件
data_frame.to_csv("./data/lora_dataset_processed/train/metadata.csv", index=False, encoding="utf-8-sig")

  在下载和训练模型方面有如下优化:

1、使用subprocess代替原来的可以提供更好的功能

2、使用函数封装

3、添加错误处理

4、目录检查

import os
import subprocess
from diffsynth import download_models

def download_and_prepare_models():
    """下载所需的模型。"""
    try:
        download_models(["Kolors", "SDXL-vae-fp16-fix"])
    except Exception as e:
        print(f"Error downloading models: {e}")
        raise

def train_model():
    """执行模型训练。"""
    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"
    ]

    try:
        result = subprocess.run(cmd, check=True, text=True, capture_output=True)
        print(result.stdout)
    except subprocess.CalledProcessError as e:
        print(f"Error during model training: {e.stderr}")
        raise

def ensure_directories_exist():
    """确保必要的目录存在。"""
    os.makedirs("models", exist_ok=True)
    os.makedirs("data/lora_dataset_processed", exist_ok=True)

if __name__ == "__main__":
    ensure_directories_exist()
    download_and_prepare_models()
    train_model()

在加载和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):
    try:
        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="cuda" if torch.cuda.is_available() else "cpu")
        model.load_state_dict(state_dict, strict=False)
        
        return model
    except Exception as e:
        print(f"Error loading LoRA weights: {e}")
        raise

# Load models with proper device and dtype
model_manager = ModelManager(
    torch_dtype=torch.float16, 
    device="cuda" if torch.cuda.is_available() else "cpu",
    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 into the model
pipe.unet = load_lora(
    pipe.unet,
    lora_rank=16,
    lora_alpha=2.0,
    lora_path="models/lightning_logs/version_0/checkpoints/epoch=0-step=500.ckpt"
)

  下面是优化之后出来的图像,我懒得改文字了就还是原来的文字描述。

  虽然感觉和原来差不多,AI每次生成的图片也是不一样的,这要做对比的话还是要靠大家了,我主要害怕我那个免费的又要用完了,等我课下研究研究,再发出来,我是真被那个45.08狠狠的伤到了,呜呜呜。下面放几张我做出来的好看图,应该能过审吧,不至于不过审吧。感觉有点眼熟有人知道是哪个动漫里有这个类似画面吗,有了给我说说。

  最后祝大家七夕快乐 。祝大家都可以找到对象,而不是像我一样七夕还在敲代码。

标签:文生,data,AIGC,AI,models,path,kolors,lora,model
From: https://blog.csdn.net/weixin_73773376/article/details/141094091

相关文章

  • openai 的各个模型比较(关于英语句子解析)
    最近在使用chatgpt帮助学习英语,主要是进行语法分析和难点解释。为了找到最适合的模型,我比较了多个模型的回答。语法分析问题这是我在实际中理解有困难的句子,尽管比较简短,但从内容上理解,它涉及了倒装。各个模型回答gpt-3.-5-turbo-1106是经过微调的3.5-turbogpt-4o-m......
  • MySQL高级知识-----Explain
    Explainexplain(执行计划),使用explain关键字可以模拟优化器执行sql查询语句,从而知道MySQL是如何处理sql语句。explain主要用于分析查询语句或表结构的性能瓶颈。1.explain的作用通过explain+sql语句可以知道如下内容:1.表的读取顺序。(对应id)......
  • 矢量图形设计软件:Illustrator 2024(AI)中文激活版(附安装包)
    一、简介AdobeIllustrator是一款专业的矢量图形编辑软件,主要用于:图形设计:包括标志设计、图标设计、插画创作、海报设计等。排版印刷:用于制作宣传册、书籍排版、名片等需要高质量输出的印刷品。网页设计元素:创建适合网页使用的矢量图形元素和界面设计。艺术创作:许多艺术家利......
  • CF1969F-Card Pairing【dp】
    正题题目链接:https://www.luogu.com.cn/problem/CF1969F题目大意有一个长度为\(n\)的卡牌序列\(a\),每张牌是\(1\simk\)中的一个类型,你先取出序列里的前\(k\)张牌,然后你每次可以选择两张牌打出然后再抽两张牌,如果类型一样就加一分。求打完所有牌你最多能加多少分。......
  • 吴恩达深度学习deeplearning.ai学习笔记(二)2.6 2.7 2.8 2.9 2.10
    2.6动量梯度下降法这种算法运行速度总是快于标准的梯度下降算法,基本思想是计算梯度的指数加权平均数并利用该梯度来更新你的权重;假设你要优化一个下图的成本函数,红点是最小值,假设从一点开始进行梯度下降法,如果进行梯度下降法的第一次迭代,无论是batch还是mini-batch,可能都会......
  • 面完 AIGC 大模型算法岗,心态崩了。。。
    最近这一两周看到不少互联网公司都已经开始秋招提前批了。不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC在变少,岗位要求还更高了。最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解惑答疑,分享技术面试中的那些弯弯绕绕。总结链接如下:《大模......
  • 以DenseNet为例进行AI算法部署集成
    以DenseNet为例进行AI算法部署集成AI越用越广,但落地使用的时候各种bug多多,这里提供一些离线集成的导引方便大家学习,后面也会尝试更新一些webapi的集成方式,请期待后续的博客简单性能表格下列表格为一些简单的部署数据搜集,通过部署器进行离线集成,可以看到可以大大降低资源......
  • 免费好用!用AI做海报太高效了!阿里ModelScope这款AI创意海报生成工具,连专业设计都在用!(附
    大家好,我是程序员X小鹿,前互联网大厂程序员,自由职业2年+,也一名AIGC爱好者,持续分享更多前沿的「AI工具」和「AI副业玩法」,欢迎一起交流~今天是七夕,大家都怎么过呢?(画了张图,送给单身的朋友)今天分享一个免费的、可以快速制作七夕等各种节日海报AI工具——它就是魔搭......
  • portainer控制多个docker
    打开docker的远程访问(参考下方博客)觉得不安全可以配置使用TLS加密https://www.cnblogs.com/hongdada/p/11512901.html使用新版本portainer和我这个操作相同最后需要点击左上角Home切换Docker......
  • AI 与 新生产要素
    AI大模型通过提升生产要素的产出效率,显著提高了数据要素在生产要素组合中的地位。数据已成为数字经济时代的新型生产要素,AI大模型通过改变数据生成方式和企业经营决策驱动方式,进一步增强了数据要素的流通性和价值创造能力。在生产函数中,AI大模型的应用对经济增长的影响呈发散态势,......