Datawhale X 魔搭 AI夏令营 - AIGC文生图方向Task1笔记

今天做的是AIGC文生图方向的 task 1 ,整理了一下思路

 task 1 背景知识

1 . 文生图的历史

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

发展阶段

发展介绍

早期探索

(20世纪60年代-20世纪90年代)

      文生图的概念最早出现于计算机视觉和图像处理的早期研究中。

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

基于统计模型的方法

(2000年代)

       进入2000年代,随着统计模型和机器学习技术的发展,文生图技术开始得到更多关注。

       研究者们开始利用概率图模型和统计语言模型来生成图像。尽管这一阶段的技术在生成图像的多样性和质量上有了一定提升,但由于模型的复杂性和计算资源的限制,生成的图像仍然较为粗糙,不够逼真。

深度学习的崛起

(2010年代)

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

大规模预训练模型

(2020年代)

       进入2020年代,大规模预训练模型如OpenAI的CLIP、DALL-E以及Stable Diffusion等的出现,标志着文生图技术进入了一个新的时代。

       CLIP通过大规模的文本和图像配对数据训练,能够理解和生成高度一致的文本和图像;DALL-E和Stable Diffusion进一步提升了生成图像的创意和细节表现能力,使得通过简单的文本描述生成高质量、复杂图像成为可能。

       这些技术的应用范围从艺术创作、广告设计到辅助医疗诊断,展现了广泛的商业价值和社会影响力。

更多关于文生图的技术演变,可以参考下面的PPT

https://www.yuque.com/office/yuque/0/2024/pptx/1169882/1720431794935-a1a33ec5-e784-4b6e-9664-8f459e2c7413.pptx?from=https%3A%2F%2Fwww.yuque.com%2F2ai%2Fmodel%2Fgutsk9ezeymuebq9

 2 . 文生图基础知识介绍

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

 

提示词

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

举个例子

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

 拓展:

关于标签:

① 分割符号 :标签之间使用逗号进行分割。这样做有助于区分不同的标签,并告诉系统如何解析和理解标签。

② 关键词顺序 :将重要的关键词放在前面,因为它们的权重会更高,系统会优先识别和处理这些关键词。这尤其适用于描述图像主体或重要元素的标签。

③ 调整标签顺序 :如果发现某些关键词没有得到充分识别,可以尝试将其提前放置,以提高其识别概率。

标签的描述顺序:
        内容性的tag通常用于描述图像内容特征,具体的描述内容会根据不同的场景和需求而定。例如,在描述人物写实的场景中,可以按照以下顺序进行描述:

    人物和表情:人物的外貌特征、面部表情等。
     服装特征:人物所穿着的服装样式、颜色等。
     场景环境:人物所处的场景背景、环境特征。
     镜头:图像的拍摄角度、视角等。
     灯光:图像的光线照射情况。
     画面细节:画面质量、自动提取的细节(auto details in instant details)。
     渲染器引擎:Octane Render、Unity的CG渲染。
     画面的风格:插画风格、油画风格、写实风格
     其他元素细节:描述与人物或场景相关的其他细节,如道具、背景元素等。

Lora

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

拓展:

LORA详解(史上最全)_lora模型-CSDN博客

【AIGC】深入理解 LORA模型-CSDN博客

ComfyUI

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

 

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

拓展:

ComfyUI搭建使用教程-CSDN博客

ComfyUI 详细入门基础教程之(一):安装与常用插件-CSDN博客

ComfyUI 详细入门基础教程之(二):文生图基础流程-CSDN博客

 

参考图控制

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

参考图控制类型

简介

示例

OpenPose姿势控制

输入是一张姿势图片(或者使用真人图片提取姿势)作为AI绘画的参考图,输入prompt后,之后AI就可以依据此生成一副相同姿势的图片;

Canny精准绘制

输入是一张线稿图作为AI绘画的参考图,输入prompt后,之后AI就可以根据此生成一幅根据线稿的精准绘制

Hed绘制

Hed是一种可以获取渐变线条的线稿图控制方式,相比canny更加的灵活。

深度图Midas

输入是一张深度图,输入prompt后,之后AI就可以根据此生成一幅根据深度图的绘制。

颜色color控制

通过参考图控制和颜色控制,实现更加精准和个性化的图像生成效果。

 

 task 1 

step 0 : Task 1 学习规划

 

 下面 step 1 ~ step 3 同 Datawhale AI夏令营第四期魔搭-大模型应用开发方向Task1笔记  ,做过的可以转至 step 4 

 (个人  Datawhale AI夏令营第四期魔搭-大模型应用开发方向Task1笔记 链接:Datawhale AI夏令营第四期魔搭-大模型应用开发方向Task1笔记-CSDN博客

step 1 : 开通​​​​​​阿里云PAI-DSW试用

链接:阿里云免费试用 - 阿里云

 

步骤如下: 

1 . 点击上方链接

2 . 登录

3 . 按下述 ① ②  步骤操作

 

 4 . 阿里云 PAI-DSW 免费试用开通完成

step 2 : 在魔搭社区进行授权

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

 新用户需要先注册 & 绑定阿里云账号(可能伴有阿里云账号的实名认证)

新用户需要先注册 & 绑定阿里云账号的步骤如下:

 

在魔塔社区进行授权步骤如下:

( 如果这一步授权失败,可跳过此步骤,继续往下进行)

 

 

step 3 :  在魔搭社区创建PAI实例

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

 

 步骤如下:

  点击终端

到这里就可以进行 step 4 了,如果 在魔搭无法授权 或 点击【打开】无法打开,可到阿里云控制台创建 & 打开实例 ,步骤如下:

 1 . 打开阿里云控制台

 

2 . 创建实例 

 3 . 打开实例

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

到这个界面即为打开实例成功 

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

步骤如下:

 

 step 4 : 报名赛事

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

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

 

 step 5 : baseline 初体验

 1 . 下载baseline文件

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

 复制代码粘贴至终端,回车运行

 

 

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

 

3 . 安装环境,然后重启kernel

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

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

(过程时间较长,耐心等待)

step 6 : 微调结果上传魔搭

链接: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

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

5 . 来到创空间,查看自己的模型是否发布

step 7 : 关闭PAI实例

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

 

 task 1 个人出图

 

 

 

task 1 知识拓展

1 . baseline代码的大致结构

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

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

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

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

代码详情

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

2 . 零代码文生图Lora模型训练

       魔搭平台现推出的零代码图像模型训练工具,您只需提供几张图片,即可训练出专属的lora风格模型,并直接使用该模型生成新的图片。让我们一键开始使用魔搭的图像模型训练工具

训练步骤如下:

Step 1 :给你的模型起个专属的名字,并且上传训练图片数据集,开始训练

 Step 2 :训练完成后,点击训练完成的模型,使用生成图片

Step 3 :使用你微调出来的模型,进行图片生成

注意:

       该模型训练工具上传的图片数量最多128张,相比于代码开发的模式,有一定的限制。故在模型效果上比我们上边代码生成的结果差。

 3 . 魔搭热门文生图AI应用集锦

文生图领域,好用的工具:

更多好玩有用的AI应用,可以去魔搭AIGC专区自己探索

工具类型

应用名称

应用简介

基础图片生成工具

FLUX文生图模型体验空间

       该应用由阿里muse团队推出,是目前最强的开源文生图模型之一,在文字生成、复杂指令遵循和人手生成上具备优势。

可图文生图

       可图是快手开源的一种名为Kolors(可图)的文本到图像生成模型,该模型具有对英语和汉语的深刻理解,并能够生成高质量、逼真的图像。

生成效果接近Midjourney-v6 水平,而且可输入长达256 tokens的文本,最重要的可以渲染中文

Stable Diffusion XL 1.0

       所有文生图应用的祖师爷,不必多说,YYDS。继SDXL 0.9的有限、仅供研究发布之后,SDXL的完整版本是目前最好的开源图像生成模型。

办公提效工具

锦书 - 创新艺术字

       创意艺术字生成。通过自定义的概念,对文字进行变形和纹理生成,构建富有创意的个性化字形和纹理。

创意海报生成

       做海报不求人!创意海报生成,自由设计,瞬间点亮创意生活。

拓展:文生图大模型合集与效果对比:【文生图系列】文生图大模型合集与效果对比_文生图模型-CSDN博客 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值