当前位置: 首页 > article >正文

AIGC生图实战技巧分享

目录

引言

🍃安装与配置代码

🍃数据处理代码

🍃生图请求代码


引言

本文展示了 AIGC 生图相关的代码示例,包括安装与配置、数据处理以及生图请求等不同阶段的代码,清晰呈现了整个技术实现过程中代码层面的操作要点和逻辑

🍃安装与配置代码

在使用 AIGC 进行生图时,往往需要安装一些必要的库以及配置相关环境,以下是一些常见的 Python 代码示例及注释说明:


# 安装Data-Juicer库,用于处理数据集,比如数据的筛选、清洗等操作

!pip install -v -e data-juicer

# 安装DiffSynth-Studio库,可用于训练和生成图像等相关任务

!pip install -e DiffSynth-Studio

# 卸载pytorch-lightning,可能是为了避免版本兼容性问题,这里使用-y参数自动确认卸载

!pip uninstall pytorch-lightning -y

# 安装peft、lightning、pandas、torchvision这些库,分别用于模型训练、数据处理等不同方面

!pip install peft lightning pandas torchvision

上述代码中,pip 是 Python 中常用的包管理工具,通过它可以方便地安装、卸载各种库。比如 install 后面跟上库名就是安装相应的库,而 uninstall 则是卸载对应的库,-v -e 等参数可以根据具体需求调整安装的详细配置,像 -v 可以显示更详细的安装过程信息,-e 常用于以可编辑模式安装等情况。

在配置环境方面,例如你使用的是 StableDiffusion 模型,可能还需要配置相关的显卡环境(如果使用 GPU 加速),以下是简单示意(实际情况中可能要根据具体的操作系统、显卡型号等做更多调整):


import torch

# 检查是否可以使用GPU,如果有可用GPU则将后续运算放在GPU上执行(以cuda为例),这样可以加速生图过程

if torch.cuda.is_available():

device = torch.device("cuda")

else:

device = torch.device("cpu")

这段代码先是通过 torch.cuda.is_available() 函数来检测当前环境是否有可用的 GPU(这里以 cuda 作为 GPU 运算的相关配置示例,不同的 GPU 可能有不同的配置方式),如果有就将 device 设置为 cuda,后续的模型运算等操作就可以放在 GPU 上运行来提高速度;要是没有 GPU 可用,则会将 device 设置为 cpu,不过在 CPU 上运行可能会相对较慢,尤其是生成复杂、高分辨率的图像时。

🍃数据处理代码

下面为大家展示处理数据集相关的代码示例以及其逻辑解释:


# 从ModelScope仓库下载名为“lowres_anime”的数据集,并指定子集名称为default、分割为train,缓存目录设置为/mnt/workspace/kolors/data

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

# 创建用于保存图像和元数据的相关目录,如果目录已经存在则不会重复创建(exist_ok=True参数作用)

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

# 将数据集中的图像转换为RGB格式,这一步通常是为了后续处理的兼容性等考虑

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"]}

# 将元数据以json格式写入文件

f.write(json.dumps(metadata))

f.write("\n")

在上述代码中,首先通过 MsDataset.load 函数从特定仓库下载需要的数据集,这方便获取大量的图像数据用于后续的模型训练等操作。然后利用 os.makedirs 创建相应的目录来存放处理后的图像和元数据。在遍历数据集的过程中,将图像转换格式并保存,同时生成对应的元数据信息保存下来,这些元数据在后续的数据筛选以及模型训练中都能起到关键作用,例如模型可以根据元数据中的文本描述学习图像对应的特征等。

接着,还可能会有根据配置对数据进行筛选过滤的代码,示例如下:


# 配置Data-Juicer的相关参数,用于数据筛选过滤

data_juicer_config = """

# global parameters

project_name: 'data-process'

dataset_path: './data/data-juicer/input/metadata.jsonl'

np: 4

text_keys: 'text'

image_key: 'image'

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

"""

# 将配置信息写入到对应的yaml文件中

with open("data/data-juicer/data_juicer_config.yaml","w") as file:

file.write(data_juicer_config.strip())

# 运行Data-Juicer进行数据筛选,按照配置文件中的规则进行

!dj-process --config data/data-juicer/data_juicer_config.yaml

这里的配置文件中定义了如 image_shape_filter(图像尺寸过滤规则,要求图像最小宽度和高度达到一定像素值)、image_aspect_ratio_filter(图像长宽比的过滤规则,限定长宽比的范围)等条件,然后通过 dj-process 命令结合配置文件对已有的数据集进行筛选,最终筛选通过的数据索引信息会保存在指定的 result.jsonl 文件中,后续就可以基于这些筛选后的数据进行进一步的操作,比如训练模型等。

🍃生图请求代码

以下是实际发起生图请求的代码示例以及相关参数意义和返回结果处理方式的说明。

以 StableDiffusion 模型为例:


import torch

from diffusers import StableDiffusionPipeline

# 加载预训练的StableDiffusion模型,这里从指定路径加载(示例路径,实际根据自己的模型保存位置调整)

pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")

# 将模型移动到GPU上运行(如果有可用GPU且配置正确),加速生图过程

pipe = pipe.to("cuda")

# 定义输入的提示词,也就是描述想要生成图像内容的文本,例如这里描述生成一幅海边日落的图像

prompt = "A beautiful sunset over the ocean"

# 调用模型的生成函数,传入提示词,生成图像,返回的images是一个包含生成图像的列表(这里通常只取第一个图像)

image = pipe(prompt).images[0]

# 保存生成的图像到本地文件,这里命名为sunset_image.png,可以根据需要修改文件名和保存路径

image.save("sunset_image.png")

在上述代码中:

  • prompt 参数的意义是给模型提供生成图像的引导信息,模型会根据这个文本描述尽力去生成符合要求的图像,文本描述越详细准确,生成的图像往往越符合预期,比如可以描述图像中的主体、场景、颜色、风格等元素。
  • pipe(prompt).images[0] 这部分是发起生图请求并获取生成的图像,pipe 就是之前加载好并配置好的模型对象,调用它并传入 prompt 就会触发模型根据提示词进行图像生成,返回的结果中 images 是一个列表,通常情况下我们取第一个元素也就是 images[0] 作为最终生成的图像。
  • 最后通过 image.save("sunset_image.png") 对生成的图像进行保存,方便后续查看和使用,如果需要对图像做进一步的处理(比如用图像编辑软件打开进行细节调整、格式转换等),就可以找到保存的这个文件进行操作。

不同的模型在生图请求代码上可能会有一些细节差异,但大致的流程都是先加载模型、配置好环境(如放到 GPU 上运行等),然后传入合适的提示词来生成图像,最后对生成的图像进行相应的处理和保存。


http://www.kler.cn/a/468705.html

相关文章:

  • Visual studio code编写简单记事本exe笔记
  • 【前端下拉框】获取国家国旗
  • Sql中WITH的作用
  • Linux下编译安装PETSc
  • 如何配置【Docker镜像】加速器+【Docker镜像】的使用
  • 安卓漏洞学习(十七):维京海盗-Strandhogg漏洞
  • iptable限制多个端口出站
  • C++直接内存管理new和delete
  • Kubernetes——part4-1 Kubernetes集群 服务暴露 Nginx Ingress Controller
  • frameworks 之 WallpaperManagerService 壁纸管理
  • spring mvc源码学习笔记之三
  • c语言的文件操作与文件缓冲区
  • 抖音生活服务2024年覆盖线下商家门店超610万,交易额同比提升81%
  • LeetCode 0732.我的日程安排表 III:线段树
  • [GCC]代码演示-Wl,-rpath-link链接时库搜索路径
  • 力扣hot100——动态规划 多维动态规划
  • 手动安装 Maven 依赖到本地仓库
  • Nginx:限流限速
  • 美食烹饪互动平台
  • 深入理解静态库与动态库
  • Go语言的 的并发编程(Concurrency)核心知识
  • PTA6-18 数字校验
  • MySQL和Hive中的行转列、列转行
  • Nginx——负载均衡与缓存(四/五)
  • 【开源免费】基于SpringBoot+Vue.JS海滨学院班级回忆录系统(JAVA毕业设计)
  • WIN10系统查看连接的无线网密码