qidao123.com技术社区-IT企服评测·应用市场

标题: Datawhale X 魔搭 AI夏令营 AIGC Task2条记 [打印本页]

作者: 千千梦丶琪    时间: 2024-8-25 21:11
标题: Datawhale X 魔搭 AI夏令营 AIGC Task2条记
对于task2里的这几句话本人照旧十分赞成的
定期关注AI生图的最新能力情况都十分告急:

⁠‬​​​​⁠‬‍‬​‌​​‌‬​‬‌​‍‬​​​​‍​⁠⁠​​​⁠Task2:精读代码,实战进阶 - 飞书云文档 (feishu.cn)
https://datawhaler.feishu.cn/wiki/KxI2wIeAJiRQWhkRt9dcqlNVnFR
通义千问

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

如下就是根据通义千问举行的问答1



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

2. 数据集加载与预处置惩罚
这部分代码从 ModelScope 中加载了一个名为 lowres_anime 的数据集,并将其转换为实用于后续处置惩罚的格式。
主要操纵:

3. 数据过滤与处置惩罚
这一部分使用 data-juicer 工具对数据举行进一步的处置惩罚,比方过滤掉不符合要求的图像(如尺寸过小或宽高比不符合)。
主要操纵:

4. 数据分析与特性提取
在这一步骤中,使用 CLIP 模子来计算文本和图像之间的相似度,并创建一个 PyTorch 数据集用于后续训练或其他处置惩罚。
主要操纵:

5. 图像生成
末了,使用 diffusers 库中的 StableDiffusionPipeline 生成一系列基于不同提示的图像。
主要操纵:

6. 图像拼接展示
末了一段代码是将之前生成的所有图像拼接在一起形成一个大图,并调整巨细以便展示。
主要操纵:

整个流程包罗情况搭建、数据集加载与预处置惩罚、数据过滤与处置惩罚、数据分析与特性提取、图像生成以及最终的图像展示。
逐行解释代码

如下就是根据通义千问举行的问答2


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

2. 数据集加载与预处置惩罚
  1. 1from modelscope.msdatasets import MsDataset
  2. 2
  3. 3ds = MsDataset.load(
  4. 4    'AI-ModelScope/lowres_anime',
  5. 5    subset_name='default',
  6. 6    split='train',
  7. 7    cache_dir="/mnt/workspace/kolors/data"
  8. 8)
复制代码

  1. 1import json, os
  2. 2from data_juicer.utils.mm_utils import SpecialTokens
  3. 3from tqdm import tqdm
  4. 4
  5. 5os.makedirs("./data/lora_dataset/train", exist_ok=True)
  6. 6os.makedirs("./data/data-juicer/input", exist_ok=True)
  7. 7with open("./data/data-juicer/input/metadata.jsonl", "w") as f:
  8. 8    for data_id, data in enumerate(tqdm(ds)):
  9. 9        image = data["image"].convert("RGB")
  10. 10        image.save(f"/mnt/workspace/kolors/data/lora_dataset/train/{data_id}.jpg")
  11. 11        metadata = {"text": "二次元", "image": [f"/mnt/workspace/kolors/data/lora_dataset/train/{data_id}.jpg"]}
  12. 12        f.write(json.dumps(metadata))
  13. 13        f.write("\n")
复制代码

3. 数据过滤与处置惩罚
  1. 1data_juicer_config = """
  2. 2# global parameters
  3. 3project_name: 'data-process'
  4. 4dataset_path: './data/data-juicer/input/metadata.jsonl'  # path to your dataset directory or file
  5. 5np: 4  # number of subprocess to process your dataset
  6. 6
  7. 7text_keys: 'text'
  8. 8image_key: 'image'
  9. 9image_special_token: '<__dj__image>'
  10. 10
  11. 11export_path: './data/data-juicer/output/result.jsonl'
  12. 12
  13. 13# process schedule
  14. 14# a list of several process operators with their arguments
  15. 15process:
  16. 16    - image_shape_filter:
  17. 17        min_width: 1024
  18. 18        min_height: 1024
  19. 19        any_or_all: any
  20. 20    - image_aspect_ratio_filter:
  21. 21        min_ratio: 0.5
  22. 22        max_ratio: 2.0
  23. 23        any_or_all: any
  24. 24"""
  25. 25with open("data/data-juicer/data_juicer_config.yaml", "w") as file:
  26. 26    file.write(data_juicer_config.strip())
  27. 27
  28. 28!dj-process --config data/data-juicer/data_juicer_config.yaml
复制代码

4. 数据分析与特性提取
  1. 1import pandas as pd
  2. 2import os, json
  3. 3from PIL import Image
  4. 4from tqdm import tqdm
  5. 5
  6. 6texts, file_names = [], []
  7. 7
  8. 8os.makedirs("./data/data-juicer/output/images", exist_ok=True)
  9. 9
  10. 10with open("./data/data-juicer/output/result.jsonl", "r") as f:
  11. 11    for line in tqdm(f):
  12. 12        metadata = json.loads(line)
  13. 13        texts.append(metadata["text"])
  14. 14        file_names.append(metadata["image"][0])
  15. 15
  16. 16df = pd.DataFrame({"text": texts, "file_name": file_names})
  17. 17df.to_csv("./data/data-juicer/output/result.csv", index=False)
  18. 18
  19. 19df
复制代码

  1. 1from transformers import CLIPProcessor, CLIPModel
  2. 2import torch
  3. 3
  4. 4model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
  5. 5processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
  6. 6
  7. 7images = [Image.open(img_path) for img_path in df["file_name"]]
  8. 8inputs = processor(text=df["text"].tolist(), images=images, return_tensors="pt", padding=True)
  9. 9
  10. 10outputs = model(**inputs)
  11. 11logits_per_image = outputs.logits_per_image  # this is the image-text similarity score
  12. 12probs = logits_per_image.softmax(dim=1)  # we can take the softmax to get the probabilities
  13. 13
  14. 14probs
复制代码

5. 创建 PyTorch 数据集
  1. 1from torch.utils.data import Dataset, DataLoader
  2. 2
  3. 3class CustomDataset(Dataset):
  4. 4    def __init__(self, df, processor):
  5. 5        self.texts = df["text"].tolist()
  6. 6        self.images = [Image.open(img_path) for img_path in df["file_name"]]
  7. 7        self.processor = processor
  8. 8
  9. 9    def __len__(self):
  10. 10        return len(self.texts)
  11. 11
  12. 12    def __getitem__(self, idx):
  13. 13        inputs = self.processor(text=self.texts[idx], images=self.images[idx], return_tensors="pt", padding=True)
  14. 14        return inputs
  15. 15
  16. 16dataset = CustomDataset(df, processor)
  17. 17dataloader = DataLoader(dataset, batch_size=8)
  18. 18
  19. 19for batch in dataloader:
  20. 20    outputs = model(**batch)
  21. 21    logits_per_image = outputs.logits_per_image
  22. 22    probs = logits_per_image.softmax(dim=1)
  23. 23    print(probs)
复制代码

6. 图像生成
  1. 1import torch
  2. 2from diffusers import StableDiffusionPipeline
  3. 3
  4. 4torch.manual_seed(1)
  5. 5pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v-1-4", torch_dtype=torch.float16)
  6. 6pipe = pipe.to("cuda")
  7. 7
  8. 8prompt = "二次元,一个紫色长发小女孩穿着粉色吊带漏肩连衣裙,在练习室练习唱歌,手持话筒"
  9. 9negative_prompt = "丑陋、变形、嘈杂、模糊、低对比度"
  10. 10guidance_scale = 4
  11. 11num_inference_steps = 50
  12. 12
  13. 13image = pipe(
  14. 14    prompt=prompt,
  15. 15    negative_prompt=negative_prompt,
  16. 16    guidance_scale=guidance_scale,
  17. 17    num_inference_steps=num_inference_steps,
  18. 18    height=1024,
  19. 19    width=1024,
  20. 20).images[0]
  21. 21
  22. 22image.save("example_image.png")
  23. 23image
复制代码

接下来的部分重复了图像生成的过程,但每次使用不同的提示。
7. 图像拼接展示
  1. 1import numpy as np
  2. 2from PIL import Image
  3. 3
  4. 4images = [np.array(Image.open(f"{i}.jpg")) for i in range(1, 9)]
  5. 5image = np.concatenate([
  6. 6    np.concatenate(images[0:2], axis=1),
  7. 7    np.concatenate(images[2:4], axis=1),
  8. 8    np.concatenate(images[4:6], axis=1),
  9. 9    np.concatenate(images[6:8], axis=1),
  10. 10], axis=0)
  11. 11image = Image.fromarray(image).resize((1024, 2048))
  12. 12image
复制代码

通义千问提示词生成

场景1:女主正在上课

场景2:开始睡着了

场景3:进入梦乡,梦到自己站在路旁

场景4:王子骑马而来

场景5:两人相谈甚欢

场景6:一起坐在马背上

场景7:下课了,梦醒了

场景8:又回到了学习生存中


 从图片可以看出第一幅图和第八幅图的服饰没太大区别,但第二幅图与第七幅图的区别相差较大。
星火对代码的解释



 
下面是对代码的详细解释:
 星火提示词生成

 

 由此看得出星火提示词的形貌词较少导致了图片之间的区别照旧挺大的,提示词照旧需要举行详细的形貌
 修改后的提示词



 修改后发现效果还行,就是对于第六张图的青年的脸的处置惩罚并欠好。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4