datawhaleAIGC笔记第一节

从零入门AI生图原理&实践 是 Datawhale 2024 年 AI 夏令营第四期的学习活动(“AIGC”方向),基于魔搭社区可图Kolors-LoRA风格故事挑战赛开展的实践学习——

  • 适合想 入门并实践 AIGC文生图、工作流搭建、LoRA微调 的学习者参与

学习内容提要:从通过代码实现AI文生图逐渐进阶,教程偏重图像工作流、微调、图像优化等思路,最后会简单介绍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进一步提升了生成图像的创意和细节表现能力,使得通过简单的文本描述生成高质量、复杂图像成为可能。

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

更多关于文生图的技术演变,大家可以参考学习下面的视频 & PPT。

暂时无法在飞书文档外展示此内容

课件PPT入口

  1. 文生图基础知识介绍

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

接下来,我们简单了解下提示词、lora、ComfyUI和参考图控制这些知识点。

提示词

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

举个例子

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控制

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

现在,让我们来开展实践吧!开始通过代码完成模型微调&AI生图实践!

进阶知识提要

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

刚刚我们体验了lora风格模型训练的全流程,现在给大家介绍一款界面化模型训练工具。无需任何代码,即可完成模型微调。

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

训练步骤如下:

注意📢:

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

  2. 数据集例子使用了的“/mnt/workspace/kolors/data/lora_dataset/train/”文件夹中的部分图片,大家也可以自行选择一下其他的图片。

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

现在我们来看看在文生图领域,有哪些好用的工具:

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

工具类型

应用名称

应用简介

体验效果

体验直达地址

更多内容详见

基础图片生成工具

FLUX文生图模型体验空间

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

https://www.modelscope.cn/studios/muse/flux_dev

消费级显卡,17G显存,玩转图像生成模型FLUX.1!

可图文生图

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

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

https://www.modelscope.cn/studios/AI-ModelScope/Kolors

AI绘画社区新成员:快手开源可图文生图模型,支持双语,可写中文!

Stable Diffusion XL 1.0

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

https://www.modelscope.cn/studios/AI-ModelScope/Stable_Diffusion_XL_1.0

办公提效工具

锦书 - 创新艺术字

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

七夕在即,给正在学习的大家说声:七夕节快乐!!!

https://modelscope.cn/studios/WordArt/WordArt/summary

创意海报生成

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

咱就是说给夏令营生成一个海报,太酷了

https://modelscope.cn/studios/iic/PosterGenius/summary

  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

  1. 下载数据集

 

#下载数据集 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. 处理数据集,保存数据处理结果

 

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

  1. 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)

  1. 加载微调好的模型

 

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

  1. 图片生成

 

torch.manual_seed(0) image = pipe( prompt="二次元,一个紫色短发小女孩,在家中沙发上坐着,双手托着腮,很无聊,全身,粉色连衣裙", negative_prompt="丑陋、变形、嘈杂、模糊、低对比度", cfg_scale=4, num_inference_steps=50, height=1024, width=1024, ) image.save("1.jpg")

参考资料

  1. AIGC专题视频课程:https://space.bilibili.com/1069874770/channel/collectiondetail?sid=3369551

  2. AIGC专题品牌馆:https://www.modelscope.cn/topic/cf0de97eb6284e16812d7c54fbe29fe7/pub/summary

  3. 模型训练入口:https://modelscope.cn/aigc/modelTraining

更多QA详见 QA & 其他彩蛋

有任何想法都可以在学习群里交流或在  QA & 其他彩蛋-模板 进行填写哟~

本教程主要由 @飞书用户327 、@飞书用户896 写作贡献,

融合了多位助教的内测体验和宝贵建议。

如果你觉得对你有价值和启发,请在下面点赞和评论哟~

另外别忘了写笔记打卡呀!!~

及时思考、沉淀和产出能让你的学习事半功倍!

注:本文采用 署名—非商业性使用—相同方式共享 4.0 协议国际版许可协议进行许可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值