Datawhale X 魔搭 AI夏令营 第四期 AIGC task2

Part1:使用AI智能助手帮助阅读代码

使用操作指南

官方链接:https://tongyi.aliyun.com/qianwen/

step1注册账号

step2 功能模块

1.对话,支持文字输入,文件上传等模式,我们本次课程主要使用当前模块;

2.效率,各种学习办公小工具;

3.智能体,通义的智能体应用市场,大家可以根据自己的需求找到很多有意思的小应用。

part2:精读baseline

1.分析代码主体框架

        1.1对AI助手输入的prompt

                

你是一个优秀的python开发工程师,现在我们需要你帮我们分析这个代码的主体框架,你需要把代码按照工作流分成几部分,用中文回答我的问题。{此处替换代码}

        1.2得到输出

2,逐行分析代码

        2.1输入

                你是一个优秀的python开发工程师,现在我们需要你帮我们逐行分析这个代码,用中文回答我的问题。+代码

        2.2得到输出

3.利用注释读代码

        3.1输入

                你是一个优秀的python开发工程师,现在我们需要你帮我们逐行注释这个代码,用中文回答我的问题。

# 安装simple-aesthetics-predictor库,可能用于评估图像的美学特性
2!pip install simple-aesthetics-predictor
3
4# 以开发模式安装data-juicer库,-v参数表示详细模式
5!pip install -v -e data-juicer
6
7# 卸载pytorch-lightning库,-y参数表示自动确认卸载
8!pip uninstall pytorch-lightning -y
9
10# 安装peft、lightning、pandas和torchvision库
11!pip install peft lightning pandas torchvision
12
13# 以开发模式安装DiffSynth-Studio库
14!pip install -e DiffSynth-Studio
15
16# 导入MsDataset类,用于加载和操作数据集
17from modelscope.msdatasets import MsDataset
18
19# 加载名为AI-ModelScope/lowres_anime的数据集,subset_name和split参数指定数据集子集和分割类型,cache_dir指定缓存目录
20ds = MsDataset.load(
21    'AI-ModelScope/lowres_anime',
22    subset_name='default',
23    split='train',
24    cache_dir="/mnt/workspace/kolors/data"
25)
26
27# 导入json和os模块,用于处理JSON数据和操作系统相关操作
28import json, os
29
30# 导入tqdm模块,用于显示进度条
31from tqdm import tqdm
32
33# 导入SpecialTokens类,可能是用于处理特殊标记的类
34from data_juicer.utils.mm_utils import SpecialTokens
35
36# 创建两个目录,用于存放训练图像和data-juicer的输入数据
37os.makedirs("./data/lora_dataset/train", exist_ok=True)
38os.makedirs("./data/data-juicer/input", exist_ok=True)
39
40# 打开文件metadata.jsonl,用于写入图像和对应文本描述的元数据
41with open("./data/data-juicer/input/metadata.jsonl", "w") as f:
42    # 遍历数据集,使用tqdm显示进度
43    for data_id, data in enumerate(tqdm(ds)):
44        # 将图像转换为RGB模式
45        image = data["image"].convert("RGB")
46        
47        # 保存图像到指定目录,使用数据ID作为文件名
48        image.save(f"/mnt/workspace/kolors/data/lora_dataset/train/{data_id}.jpg")
49        
50        # 构造元数据字典,包含文本描述和图像路径
51        metadata = {"text": "二次元", "image": [f"/mnt/workspace/kolors/data/lora_dataset/train/{data_id}.jpg"]}
52        
53        # 将元数据写入文件,每条数据后换行
54        f.write(json.dumps(metadata))
55        f.write("\n")
56
57# 构建data_juicer的配置字符串,用于定义数据处理的参数
58data_juicer_config = """
59# 全局参数
60project_name: 'data-process'
61dataset_path: './data/data-juicer/input/metadata.jsonl'  # 数据集路径
62np: 4  # 并行处理数据的子进程数量
63
64text_keys: 'text'  # 文本字段的键
65image_key: 'image'  # 图像字段的键
66image_special_token: '<__dj__image>'  # 特殊标记,用于图像字段
67
68export_path: './data/data-juicer/output/result.jsonl'  # 输出文件路径
69
70# 处理计划
71# 包含一系列数据处理操作及其参数
72process:
73    - image_shape_filter:  # 图像尺寸过滤器
74        min_width: 1024  # 最小宽度
75        min_height: 1024  # 最小高度
76        any_or_all: any  # 任何单个维度满足条件即可
77    - image_aspect_ratio_filter:  # 图像宽高比过滤器
78        min_ratio: 0.5  # 最小宽高比
79        max_ratio: 2.0  # 最大宽高比
80        any_or_all: any  # 任何单个比率满足条件即可
81"""
82
83# 将data_juicer配置写入文件
84with open("data/data-juicer/data_juicer_config.yaml", "w") as file:
85    file.write(data_juicer_config.strip())
86
87# 使用dj-process命令处理数据,--config参数指定配置文件路径
88!dj-process --config data/data-juicer/data_juicer_config.yaml
89
90# 导入pandas库,用于数据处理
91import pandas as pd
92
93# 创建output/images目录,用于存放处理后的图像
94os.makedirs("./data/data-juicer/output/images", exist_ok=True)
95
96# 读取处理后的结果文件,提取文本和图像路径
97texts, file_names = [], []
98with open("./data/data-juicer/output/result.jsonl", "r") as f:
99    # 使用tqdm显示进度
100    for line in tqdm(f):
101        # 解析每一行JSON数据
102        metadata = json.loads(line)
103        
104        # 提取文本和图像路径
105        texts.append(metadata["text"])
106        file_names.append(metadata["image"][0])
107
108# 将提取的数据构造成DataFrame,并保存为CSV文件
109df = pd.DataFrame({"text": texts, "file_name": file_names})
110df.to_csv("./data/data-juicer/output/result.csv", index=False)
111
112# 显示DataFrame内容
113df
114
115# 导入CLIPModel和CLIPProcessor类,用于图像和文本的嵌入表示
116from transformers import CLIPProcessor, CLIPModel
117
118# 导入torch库,用于深度学习计算
119import torch
120
121# 从预训练模型加载CLIP模型
122model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
123
124# 从预训练模型加载CLIP处理器
125processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
126
127# 加载图像,使用DataFrame中的图像路径
128images = [Image.open(img_path) for img_path in df["file_name"]]
129
130# 使用处理器对图像和文本进行预处理
131inputs = processor(text=df["text"].tolist(), images=images, return_tensors="pt", padding=True)
132
133# 使用模型计算图像和文本的嵌入表示
134outputs = model(**inputs)
135
136# 获取图像-文本相似度得分
137logits_per_image = outputs.logits_per_image  
138
139# 应用softmax函数获取概率分布
140probs = logits_per_image.softmax(dim=1)
141
142# 显示概率分布
143probs
144
145# 导入Dataset和DataLoader类,用于构建数据集和数据加载器
146from torch.utils.data import Dataset, DataLoader
147
148# 定义自定义数据集类
149class CustomDataset(Dataset):
150    def __init__(self, df, processor):
151        # 初始化数据集属性
152        self.texts = df["text"].tolist()
153        self.images = [Image.open(img_path) for img_path in df["file_name"]]
154        self.processor = processor
155
156    # 返回数据集的长度
157    def __len__(self):
158        return len(self.texts)
159
160    # 根据索引返回数据集的一个样本
161    def __getitem__(self, idx):
162        inputs = self.processor(text=self.texts[idx], images=self.images[idx], return_tensors="pt", padding=True)
163        return inputs
164
165# 创建数据集实例
166dataset = CustomDataset(df, processor)
167
168# 创建数据加载器,用于批量加载数据
169dataloader = DataLoader(dataset, batch_size=8)
170
171# 遍历数据加载器中的批次,计算图像和文本的嵌入表示
172for batch in dataloader:
173    outputs = model(**batch)
174    logits_per_image = outputs.logits_per_image
175    probs = logits_per_image.softmax(dim=1)
176    # 打印概率分布
177    print(probs)
178
179# 导入torch库,用于深度学习计算
180import torch
181
182# 导入StableDiffusionPipeline类,用于图像生成
183from diffusers import StableDiffusionPipeline
184
185# 设置随机种子,确保结果可复现
186torch.manual_seed(1)
187
188# 从预训练模型加载StableDiffusionPipeline
189pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v-1-4", torch_dtype=torch.float16)
190
191# 将模型移动到CUDA设备
192pipe = pipe.to("cuda")
193
194# 定义生成图像的提示和负面提示
195prompt = "二次元,一个紫色长发小女孩穿着粉色吊带漏肩连衣裙,在练习室练习唱歌,手持话筒"
196negative_prompt = "丑陋、变形、嘈杂、模糊、低对比度"
197
198# 设置生成参数
199guidance_scale = 4
200num_inference_steps = 50
201
202# 使用管道生成图像
203image = pipe(
204    prompt=prompt,
205    negative_prompt=negative_prompt,
206    guidance_scale=guidance_scale,
207    num_inference_steps=num_inference_steps,
208    height=1024,
209    width=1024,
210).images[0]
211
212# 保存生成的图像
213image.save("example_image.png")
214
215# 显示图像
216image
217
218# 使用相同的流程生成更多的图像,并保存到文件
219# ...
220
221# 导入numpy和Image模块,用于图像处理
222import numpy as np
223from PIL import Image
224
225# 加载生成的图像,将其转换为NumPy数组
226images = [np.array(Image.open(f"{i}.jpg")) for i in range(1, 9)]
227
228# 将图像拼接成一个大的图像,并调整大小
229image = np.concatenate([
230    np.concatenate(images[0:2], axis=1),
231    np.concatenate(images[2:4], axis=1),
232    np.concatenate(images[4:6], axis=1),
233    np.concatenate(images[6:8], axis=1),
234], axis=0)
235image = Image.fromarray(image).resize((1024, 2048))
236
237# 显示最终拼接的图像
238image

 part3:基于话剧的连环画制作

1.准备数据

1.1 准备提示词,并输入

1.2得到回答

2.作图

2.1将得到的描述词写入task1中的baseline中,重新运行该项目

2.2得到绘得图像

part4:尝试scepterwebui

1.浅尝功能

魔搭社区

2.核心组件

GitHub - modelscope/scepter: SCEPTER is an open-source framework used for training, fine-tuning, and inference with generative models.GitHub - modelscope/scepter: SCEPTER is an open-source framework used for training, fine-tuning, and inference with generative models.

GitHub - modelscope/scepter: SCEPTER is an open-source framework used for training, fine-tuning, and inference with generative models.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值