千千梦丶琪 发表于 2024-8-25 21:11:19

Datawhale X 魔搭 AI夏令营 AIGC Task2条记

对于task2里的这几句话本人照旧十分赞成的
定期关注AI生图的最新能力情况都十分告急:


[*] 对于平凡人来说,可以避免被常见的AI生图场景诱骗,偶然也可以通过相干工具绘图
[*] 对于创作者来说,通过AI生图的工具可以提效,快速制作自己所需要的内容
[*] 对于技术人来说,相识AI生图的能力的玩法,可以更好地针对自己的业务举行开发和使用,乃至攻克难题开发更实用的工具
⁠‬​​​​⁠‬‍‬​‌​​‌‬​‬‌​‍‬​​​​‍​⁠⁠​​​⁠Task2:精读代码,实战进阶 - 飞书云文档 (feishu.cn)https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8https://datawhaler.feishu.cn/wiki/KxI2wIeAJiRQWhkRt9dcqlNVnFR
通义千问

然后我们使用通义千问举行我们的代码解读
如何使用通义千问呢?
起首我们需要链接到通义千问
通义tongyi.ai_你的全能AI助手 (aliyun.com)https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8https://tongyi.aliyun.com/qianwen/?sessionId=0823c3da49cc4cb08da81e2676df5c88连接到通义千问,然后就可以根据task2中在通义千问中如何举行代码解释的提问,如:
1.你是一个优秀的python开发工程师,如今我们需要你帮我们分析这个代码的主体框架,你需要把代码按照工作流分成几部分,用中文回答我的问题{代码段}
或者
2.你是一个优秀的python开发工程师,如今我们需要你帮我们逐行分析这个代码,用中文回答我的问题。{代码段}
分析代码的主体框架

如下就是根据通义千问举行的问答1
https://i-blog.csdnimg.cn/direct/a804f09c658e4bfda6b1a99a5227b8a8.png


1. 情况准备与依靠安装
这一部分包罗了使用 pip 命令来安装或卸载所需的Python包。这些命令通常在脚本的开始部分实行以确保所有必须的库都已安装。
主要操纵:


[*]安装 simple-aesthetics-predictor, data-juicer, peft, lightning, pandas, torchvision 和 DiffSynth-Studio。
[*]卸载并重新安装 pytorch-lightning。
2. 数据集加载与预处置惩罚
这部分代码从 ModelScope 中加载了一个名为 lowres_anime 的数据集,并将其转换为实用于后续处置惩罚的格式。
主要操纵:


[*]加载 lowres_anime 数据集。
[*]遍历数据集中的每个样本,将图像保存到磁盘上,并构建一个包含图像路径和文本形貌的元数据文件。
3. 数据过滤与处置惩罚
这一部分使用 data-juicer 工具对数据举行进一步的处置惩罚,比方过滤掉不符合要求的图像(如尺寸过小或宽高比不符合)。
主要操纵:


[*]编写配置文件以定义数据处置惩罚规则。
[*]使用 data-juicer 对数据集举行处置惩罚,输出经过筛选后的结果。
4. 数据分析与特性提取
在这一步骤中,使用 CLIP 模子来计算文本和图像之间的相似度,并创建一个 PyTorch 数据集用于后续训练或其他处置惩罚。
主要操纵:


[*]读取处置惩罚过的数据,并使用 CLIP 模子计算文本与图像间的相似度。
[*]创建一个 CustomDataset 类来封装数据集,并使用 DataLoader 举行批处置惩罚。
5. 图像生成
末了,使用 diffusers 库中的 StableDiffusionPipeline 生成一系列基于不同提示的图像。
主要操纵:


[*]初始化 StableDiffusionPipeline。
[*]根据不同的提示生成图像,并保存到磁盘上。
6. 图像拼接展示
末了一段代码是将之前生成的所有图像拼接在一起形成一个大图,并调整巨细以便展示。
主要操纵:


[*]将多个生成的图像加载为 NumPy 数组。
[*]将这些数组按行和列拼接起来形成一个大图像,并调整其巨细。
整个流程包罗情况搭建、数据集加载与预处置惩罚、数据过滤与处置惩罚、数据分析与特性提取、图像生成以及最终的图像展示。
逐行解释代码

如下就是根据通义千问举行的问答2
https://i-blog.csdnimg.cn/direct/709caf5b26154d09850d30cea173a74f.png

1. 情况准备与依靠安装
1!pip install simple-aesthetics-predictor
2!pip install -v -e data-juicer
3!pip uninstall pytorch-lightning -y
4!pip install peft lightning pandas torchvision
5!pip install -e DiffSynth-Studio

[*]第一行安装 simple-aesthetics-predictor 包。
[*]第二行以可编辑模式 (-e) 安装 data-juicer 并显示详细信息 (-v)。
[*]第三行卸载 pytorch-lightning。
[*]第四行安装 peft (可能是指 peft 或者其他库的缩写), lightning (可能是 pytorch-lightning 的最新版本), pandas, 和 torchvision。
[*]第五行以可编辑模式安装 DiffSynth-Studio。
2. 数据集加载与预处置惩罚
1from modelscope.msdatasets import MsDataset
2
3ds = MsDataset.load(
4    'AI-ModelScope/lowres_anime',
5    subset_name='default',
6    split='train',
7    cache_dir="/mnt/workspace/kolors/data"
8)

[*]导入 MsDataset 类。
[*]加载 lowres_anime 数据集,并指定子集名称为 default,数据集切分为训练集,缓存目录为 /mnt/workspace/kolors/data。
1import json, os
2from data_juicer.utils.mm_utils import SpecialTokens
3from tqdm import tqdm
4
5os.makedirs("./data/lora_dataset/train", exist_ok=True)
6os.makedirs("./data/data-juicer/input", exist_ok=True)
7with open("./data/data-juicer/input/metadata.jsonl", "w") as f:
8    for data_id, data in enumerate(tqdm(ds)):
9      image = data["image"].convert("RGB")
10      image.save(f"/mnt/workspace/kolors/data/lora_dataset/train/{data_id}.jpg")
11      metadata = {"text": "二次元", "image": }
12      f.write(json.dumps(metadata))
13      f.write("\n")

[*]导入 json, os 模块,SpecialTokens 类,和进度条库 tqdm。
[*]创建两个目录,如果它们已经存在则不会报错。
[*]遍历数据集,将每张图片转换为 RGB 模式,并保存至指定目录。
[*]构建一个 JSONL 文件,此中每一行包含一个 JSON 对象,该对象形貌了一张图片的路径和一个固定的笔墨标签 "二次元"。
3. 数据过滤与处置惩罚
1data_juicer_config = """
2# global parameters
3project_name: 'data-process'
4dataset_path: './data/data-juicer/input/metadata.jsonl'# path to your dataset directory or file
5np: 4# number of subprocess to process your dataset
6
7text_keys: 'text'
8image_key: 'image'
9image_special_token: '<__dj__image>'
10
11export_path: './data/data-juicer/output/result.jsonl'
12
13# process schedule
14# a list of several process operators with their arguments
15process:
16    - image_shape_filter:
17      min_width: 1024
18      min_height: 1024
19      any_or_all: any
20    - image_aspect_ratio_filter:
21      min_ratio: 0.5
22      max_ratio: 2.0
23      any_or_all: any
24"""
25with open("data/data-juicer/data_juicer_config.yaml", "w") as file:
26    file.write(data_juicer_config.strip())
27
28!dj-process --config data/data-juicer/data_juicer_config.yaml

[*]定义一个 YAML 配置文件,用于指定命据处置惩罚的细节,包罗数据源路径、输出路径、过滤器设置等。
[*]写入配置文件到磁盘。
[*]调用 data-juicer 的命令行工具来处置惩罚数据。
4. 数据分析与特性提取
1import pandas as pd
2import os, json
3from PIL import Image
4from tqdm import tqdm
5
6texts, file_names = [], []
7
8os.makedirs("./data/data-juicer/output/images", exist_ok=True)
9
10with open("./data/data-juicer/output/result.jsonl", "r") as f:
11    for line in tqdm(f):
12      metadata = json.loads(line)
13      texts.append(metadata["text"])
14      file_names.append(metadata["image"])
15
16df = pd.DataFrame({"text": texts, "file_name": file_names})
17df.to_csv("./data/data-juicer/output/result.csv", index=False)
18
19df

[*]导入 pandas 用于数据处置惩罚,再次导入 os, json 和 tqdm。
[*]读取处置惩罚后的数据,并将其转换为 DataFrame。
[*]保存 DataFrame 到 CSV 文件。
1from transformers import CLIPProcessor, CLIPModel
2import torch
3
4model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
5processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
6
7images = ]
8inputs = processor(text=df["text"].tolist(), images=images, return_tensors="pt", padding=True)
9
10outputs = model(**inputs)
11logits_per_image = outputs.logits_per_image# this is the image-text similarity score
12probs = logits_per_image.softmax(dim=1)# we can take the softmax to get the probabilities
13
14probs

[*]导入 CLIPProcessor 和 CLIPModel 用于文本-图像匹配任务。
[*]加载预训练的 CLIP 模子和处置惩罚器。
[*]读取图像,构建输入数据,计算文本与图像的相似度得分。
[*]计算概率分布。
5. 创建 PyTorch 数据集
1from torch.utils.data import Dataset, DataLoader
2
3class CustomDataset(Dataset):
4    def __init__(self, df, processor):
5      self.texts = df["text"].tolist()
6      self.images = ]
7      self.processor = processor
8
9    def __len__(self):
10      return len(self.texts)
11
12    def __getitem__(self, idx):
13      inputs = self.processor(text=self.texts, images=self.images, return_tensors="pt", padding=True)
14      return inputs
15
16dataset = CustomDataset(df, processor)
17dataloader = DataLoader(dataset, batch_size=8)
18
19for batch in dataloader:
20    outputs = model(**batch)
21    logits_per_image = outputs.logits_per_image
22    probs = logits_per_image.softmax(dim=1)
23    print(probs)

[*]定义一个自定义的数据集类 CustomDataset,继续自 torch.utils.data.Dataset。
[*]实现 __init__, __len__, 和 __getitem__ 方法。
[*]创建数据集实例和数据加载器。
[*]遍历数据加载器,计算每个批次的相似度得分。
6. 图像生成
1import torch
2from diffusers import StableDiffusionPipeline
3
4torch.manual_seed(1)
5pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v-1-4", torch_dtype=torch.float16)
6pipe = pipe.to("cuda")
7
8prompt = "二次元,一个紫色长发小女孩穿着粉色吊带漏肩连衣裙,在练习室练习唱歌,手持话筒"
9negative_prompt = "丑陋、变形、嘈杂、模糊、低对比度"
10guidance_scale = 4
11num_inference_steps = 50
12
13image = pipe(
14    prompt=prompt,
15    negative_prompt=negative_prompt,
16    guidance_scale=guidance_scale,
17    num_inference_steps=num_inference_steps,
18    height=1024,
19    width=1024,
20).images
21
22image.save("example_image.png")
23image

[*]导入 torch 和 StableDiffusionPipeline。
[*]设置随机种子以保证结果的一致性。
[*]加载预训练的 Stable Diffusion 模子。
[*]设置模子运行在 GPU 上。
[*]生成一张图像,并保存到磁盘。
接下来的部分重复了图像生成的过程,但每次使用不同的提示。
7. 图像拼接展示
1import numpy as np
2from PIL import Image
3
4images =
5image = np.concatenate([
6    np.concatenate(images, axis=1),
7    np.concatenate(images, axis=1),
8    np.concatenate(images, axis=1),
9    np.concatenate(images, axis=1),
10], axis=0)
11image = Image.fromarray(image).resize((1024, 2048))
12image

[*]导入 numpy 和 PIL.Image。
[*]加载之前生成的图像,将它们组合成一个大的图像。
[*]调整巨细并展示。
通义千问提示词生成

场景1:女主正在上课


[*]古风,工笔画,一个黑色长发少女,坐在课堂里,专心听讲,上半身,身穿蓝色绣花长袍。
场景2:开始睡着了


[*]古风,淡墨渲染,一个黑色长发少女,趴在书桌上,开始瞌睡,上半身,身穿蓝色绣花长袍。
场景3:进入梦乡,梦到自己站在路旁


[*]古风,细腻工笔,一个黑色长发少女,站在幽静的小道旁,眺望远方,全身,身穿蓝色绣花长袍,背景是竹林与石桥。
场景4:王子骑马而来


[*]古风,线条流通,一个英俊的青年骑着白马缓缓而来,少女静静等待,全身,少女身穿蓝色绣花长袍,青年身着白色锦衣,背景是桃花盛开的小径。
场景5:两人相谈甚欢


[*]古风,色彩鲜明,少女与青年并肩而坐于亭中,攀谈甚欢,上半身,少女身穿蓝色绣花长袍,青年身着白色锦衣,背景是精致的亭台楼阁。
场景6:一起坐在马背上


[*]古风,线条流通,少女与青年共乘一匹白马,两人并肩而笑,全身,少女身穿蓝色绣花长袍,青年身着白色锦衣,背景是蜿蜒的山路与远山。
场景7:下课了,梦醒了


[*]古风,淡墨渲染,一个黑色长发少女,睁开双眼,从梦中醒来,上半身,身穿蓝色绣花长袍,背景是课堂内的书桌与同学。
场景8:又回到了学习生存中


[*]古风,过细刻画,一个黑色长发少女,坐在书桌前,认真读誊写字,上半身,身穿蓝色绣花长袍,背景是书架与课堂的窗户。
https://i-blog.csdnimg.cn/direct/0a9e19906dda48aa98855c702d355e25.pnghttps://i-blog.csdnimg.cn/direct/9b39f16b2f5e4dbb9b07de119dac2213.png
 从图片可以看出第一幅图和第八幅图的服饰没太大区别,但第二幅图与第七幅图的区别相差较大。
星火对代码的解释

https://i-blog.csdnimg.cn/direct/d669c0a556d3443aa45a599175d8c3f8.png
https://i-blog.csdnimg.cn/direct/acef9acc526048dcab957f46fdf79c04.png
 
下面是对代码的详细解释:

[*] 安装所需的Python库:

[*]!pip install simple-aesthetics-predictor:安装simple-aesthetics-predictor库,用于推测图像的审美特性。
[*]!pip install -v -e data-juicer:安装data-juicer库,用于处置惩罚和转换数据集。
[*]!pip uninstall pytorch-lightning -y:卸载pytorch-lightning库。
[*]!pip install peft lightning pandas torchvision:安装peft、lightning、pandas和torchvision库,这些库在后续的处置惩罚中会用到。
[*]!pip install -e DiffSynth-Studio:安装DiffSynth-Studio库,这是一个用于生成动漫风格图片的工具。

[*] 从ModelScope下载数据集:

[*]使用MsDataset.load()方法从ModelScope下载名为"AI-ModelScope/lowres_anime"的数据集。
[*]将下载的数据集转换为实用于Diffusion Studio的数据格式。

[*] 准备数据:

[*]创建一个名为"lora_dataset/train"的文件夹,用于存储转换后的图像。
[*]创建一个名为"data/data-juicer/input"的文件夹,用于存储元数据文件。
[*]遍历数据集,将每个图像转换为RGB格式,并将其保存到"lora_dataset/train"文件夹中。同时,为每个图像创建一个包含文本提示和图像路径的元数据字典,并将这些字典写入一个名为"metadata.jsonl"的文件。

[*] 配置data-juicer:

[*]创建一个名为"data/data-juicer/data_juicer_config.yaml"的配置文件,用于指定命据处置惩罚流程。
[*]配置文件中定义了全局参数、输入输出路径、处置惩罚操纵等。

[*] 使用data-juicer处置惩罚数据:

[*]运行!dj-process --config data/data-juicer/data_juicer_config.yaml命令,根据配置文件处置惩罚数据。

[*] 读取处置惩罚后的数据:

[*]读取"data/data-juicer/output/result.jsonl"文件中的数据,提取文本提示和图像路径。
[*]将这些数据存储在一个名为"df"的Pandas DataFrame中,并将其导出为CSV文件。

[*] 使用CLIP模子计算相似度得分:

[*]加载预训练的CLIP模子和处置惩罚器。
[*]使用CLIP模子计算每个图像与给定文本提示之间的相似度得分。

[*] 自定义数据集类:

[*]创建一个名为CustomDataset的类,继续自torch.utils.data.Dataset。
[*]在这个类中,定义如何获取图像和文本数据,以及如何处置惩罚它们。

[*] 创建数据加载器:

[*]使用DataLoader类创建一个数据加载器,用于批量加载数据。

[*] 使用Diffusion Studio生成图片:

[*]加载预训练的稳定扩散模子(StableDiffusionPipeline)。
[*]根据给定的文本提示(prompt)和负面提示(negative_prompt),生成一组二次元动漫风格的图片。
[*]设置Guidance scale和Number of inference steps参数,控制生成过程的细节程度。
[*]将生成的图片保存到当地文件系统中。

[*] 整合生成的图片:

[*]将所有生成的图片归并成一个大图,并将其调整为符合的尺寸。

 星火提示词生成

 

[*]古风,水墨画,一个黑色长发少女,坐在课堂里,专心听讲,上半身,蓝色学生装。
[*]古风,水墨画,一个黑色长发少女,在课堂的座位上开始打瞌睡,全身,蓝色学生装。
[*]古风,水墨画,一个黑色长发少女,站在一条古道旁,全身,穿着梦幻般的长裙。
[*]古风,水墨画,一位英俊的青年骑马而来,全身,身着富丽的古装。
[*]古风,水墨画,两人面临面站立,相谈甚欢,全身,青年穿着富丽的古装,少女穿着梦幻般的长裙。
[*]古风,水墨画,两人一起坐在马背上,全身,青年身着富丽的古装,少女穿着梦幻般的长裙。
[*]古风,水墨画,一个黑色长发少女,坐在课堂的座位上,梦醒了,上半身,蓝色学生装。
[*]古风,水墨画,一个黑色长发少女,坐在课堂里,回归学习生存,上半身,蓝色学生装。
https://i-blog.csdnimg.cn/direct/fa615ada7e6c4b58b4a64d0ac69e73f6.pnghttps://i-blog.csdnimg.cn/direct/c1676c9e04ee4dc78adef167bef6eb00.png
 由此看得出星火提示词的形貌词较少导致了图片之间的区别照旧挺大的,提示词照旧需要举行详细的形貌
 修改后的提示词



[*] 古风,水墨画,一个黑色长发少女,坐在课堂里的第一排,专心听讲,手中拿着条记录着老师的讲解,上半身,穿着一件蓝色的学生装,背景是一片模糊的黑板和粉笔字。
[*] 古风,水墨画,一个黑色长发少女,在课堂的座位上开始打瞌睡,头微微下垂,全身,穿着蓝色的学生装,附近是同学们忙碌的身影和散落的册本。
[*] 古风,水墨画,一个黑色长发少女,站在一条蜿蜒的古道旁,全身,穿着一袭飘逸的梦幻般的长裙,附近是青山绿水和飞鸟掠过的景象。
[*] 古风,水墨画,一位英俊的青年骑马而来,马匹健壮,全身,青年身着富丽的古装,头戴玉冠,手持马鞭,背景是落日余晖下的古城外貌。
[*] 古风,水墨画,两人面临面站立,相谈甚欢,全身,青年穿着富丽的古装,腰间佩剑,少女穿着梦幻般的长裙,手中捧着一本书,背景是一片花海和远处的亭台楼阁。
[*] 古风,水墨画,两人一起坐在马背上,全身,青年身着富丽的古装,少女穿着梦幻般的长裙,他们手牵手,马儿清闲地行走在一条小径上,附近是翠绿的竹林和流水潺潺。
[*] 古风,水墨画,一个黑色长发少女,坐在课堂的座位上,梦醒了,上半身,蓝色学生装,她揉了揉眼睛,附近是同学们依旧笃志苦读的场景。
[*] 古风,水墨画,一个黑色长发少女,坐在课堂里,回归学习生存,上半身,穿着蓝色的学生装,她认真地翻阅着册本,旁边是一杯冒着热气的茶和窗外飘进的几片落叶。
https://i-blog.csdnimg.cn/direct/91958937ece647c282e5fc1fc2bb7463.pnghttps://i-blog.csdnimg.cn/direct/db18d70c81bd4d8eada7dfa129f793ce.png
 修改后发现效果还行,就是对于第六张图的青年的脸的处置惩罚并欠好。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Datawhale X 魔搭 AI夏令营 AIGC Task2条记