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

本篇笔记主要用于对AIGC方面知识点的一些记录和个人对代码的逐步理解。

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进一步提升了生成图像的创意和细节表现能力,使得通过简单的文本描述生成高质量、复杂图像成为可能。

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

 

3. 文生图基础知识介绍:

 文生图主要以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

Lora:

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

ComfyUI:

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

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

 

参考图控制方式:

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

OpenPose姿势控制

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

 

 

 

Canny精准绘制

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

 

 

 

 

Hed绘制

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

 

 

 

深度图Midas

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

 

 

 

颜色color控制

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

 

 

3.代码解析:

安装 Data-Juicer 和 DiffSynth-Studio

!pip install simple-aesthetics-predictor
# simple-aesthetics-predictor:其是一个用于预测图像美学质量的Python库
# 通常使用深度学习模型来分析图像,并给出一个美学评分,反映图像的视觉吸引力

!pip install -v -e data-juicer
# Data-Juicer:数据处理和转换工具,旨在简化数据的提取、转换和加载过程

!pip uninstall pytorch-lightning -y

!pip install peft lightning pandas torchvision
# 更新lightning —— 以前称为pytorch-lightning
# lightning:其是一个用于加速和简化PyTorch代码的深度学习框架
# 它提供了一种结构化的方式来组织PyTorch代码,使得代码更加模块化和易于维护
# pandas:用于数据操作和分析
# torchvision:提供与PyTorch深度学习框架一起使用的计算机视觉工具

!pip install -e DiffSynth-Studio
# DiffSynth-Studio:高效微调训练大模型工具

概述: Data-Juicer 是一个用于数据清洗和准备的开源工具,旨在帮助用户快速、高效地处理和分析数据。它支持多种数据源,如CSV、Excel、数据库等,并提供了一系列的数据清洗功能。

           DiffSynth-Studio 是一个用于差异合成(Difference Synthesis)的工具,它允许用户通过合成不同数据源之间的差异来创建新的数据集。这种技术通常用于数据增强,特别是在机器学习中,可以帮助提高模型的泛化能力。

 

下载数据集:

from modelscope.msdatasets import MsDataset
# modelscope 是一个开源的人工智能平台,提供了丰富的预训练模型、数据集、工具和示例

ds = MsDataset.load(
    'AI-ModelScope/lowres_anime',
    subset_name='default', 
    split='train', 
    cache_dir="/mnt/workspace/kolors/data"
)
# 从modelscope平台加载名称为'AI-ModelScope/lowres_anime'的数据集的子集'default'的'train'部分

加载数据集:

import pandas as pd
import os, json
from PIL import Image
from tqdm import tqdm
# PIL.Image: 用于图像处理。

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")
# 将上一个代码段处理的结果(储存在'result.jsonl'内)重新存储在'image_path'当中
# 保存图片文本字段的键和存储的图片地址在'texts'和’file_names'中
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
# 将 file_names 和 texts 列表添加到 DataFrame 中,分别作为 file_name 和 text 列
# DataFrame可以理解为表格

保存数据集的元数据及图片:

data_juicer_config = """
# global parameters 全局变量
project_name: 'data-process'
dataset_path: './data/data-juicer/input/metadata.jsonl'  # 数据集路径
np: 4  # 子进程数量,用于并行处理数据集

text_keys: 'text' # 文本字段的键,设置为text
image_key: 'image' # 图像字段的键,设置为image
# 上一个代码段中写入字典(metadata)中设置键 - 值
image_special_token: '<__dj__image>' # 图像特殊标记

export_path: './data/data-juicer/output/result.jsonl' # 导出的结果文件路径

# 处理计划
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())
# 将配置内容写入一个YAML文件
!dj-process --config data/data-juicer/data_juicer_config.yaml
# 运行dj-process命令处理数据集,并指定使用生成的配置文件

下载模型:

from diffsynth import download_models

download_models(["Kolors", "SDXL-vae-fp16-fix"])
# 下载模型至'kolors'目录下的'models'文件夹下

运行结果:

一开始,跑出了预期的效果,但是改了几次prompt,图与图之间的关联性瞬间差了许多。(还在研究)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值