Datawhale X 魔搭AI夏令营 第四期 AIGC文生图方向 Task2笔记 ...

打印 上一主题 下一主题

主题 538|帖子 538|积分 1614

这次的笔记重要是连合了AI来辅助学习和生成提示词,和前次Task1的笔记一样,笔者会先过一遍流程,在文末再补充相应的理论知识。


通义千问(如果已经有习惯的大语言模型可以跳过这一段)

通义千问是由阿里云开辟的人工智能助手,这里给出链接,大家可以自行体验一下,这里我们重要用到对话模块:



利用AI明白baseline的代码

我们可以用AI对话来明白代码,这里不对代码进行具体说明,只记录如何用AI提问和利用AI来生成提示词的一些本领。
起首我们把baseline中的所有代码整理出来,代码结构如下:
  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
  6. from modelscope.msdatasets import MsDataset
  7. ds = MsDataset.load(
  8.     'AI-ModelScope/lowres_anime',
  9.     subset_name='default',
  10.     split='train',
  11.     cache_dir="/mnt/workspace/kolors/data"
  12. )
  13. import json, os
  14. from data_juicer.utils.mm_utils import SpecialTokens
  15. from tqdm import tqdm
  16. os.makedirs("./data/lora_dataset/train", exist_ok=True)
  17. os.makedirs("./data/data-juicer/input", exist_ok=True)
  18. with open("./data/data-juicer/input/metadata.jsonl", "w") as f:
  19.     for data_id, data in enumerate(tqdm(ds)):
  20.         image = data["image"].convert("RGB")
  21.         image.save(f"/mnt/workspace/kolors/data/lora_dataset/train/{data_id}.jpg")
  22.         metadata = {"text": "二次元", "image": [f"/mnt/workspace/kolors/data/lora_dataset/train/{data_id}.jpg"]}
  23.         f.write(json.dumps(metadata))
  24.         f.write("\n")
  25. data_juicer_config = """
  26. # global parameters
  27. project_name: 'data-process'
  28. dataset_path: './data/data-juicer/input/metadata.jsonl'  # path to your dataset directory or file
  29. np: 4  # number of subprocess to process your dataset
  30. text_keys: 'text'
  31. image_key: 'image'
  32. image_special_token: '<__dj__image>'
  33. export_path: './data/data-juicer/output/result.jsonl'
  34. # process schedule
  35. # a list of several process operators with their arguments
  36. process:
  37.     - image_shape_filter:
  38.         min_width: 1024
  39.         min_height: 1024
  40.         any_or_all: any
  41.     - image_aspect_ratio_filter:
  42.         min_ratio: 0.5
  43.         max_ratio: 2.0
  44.         any_or_all: any
  45. """
  46. with open("data/data-juicer/data_juicer_config.yaml", "w") as file:
  47.     file.write(data_juicer_config.strip())
  48. !dj-process --config data/data-juicer/data_juicer_config.yaml
  49. import pandas as pd
  50. import os, json
  51. from PIL import Image
  52. from tqdm import tqdm
  53. texts, file_names = [], []
  54. os.makedirs("./data/data-juicer/output/images", exist_ok=True)
  55. with open("./data/data-juicer/output/result.jsonl", "r") as f:
  56.     for line in tqdm(f):
  57.         metadata = json.loads(line)
  58.         texts.append(metadata["text"])
  59.         file_names.append(metadata["image"][0])
  60. df = pd.DataFrame({"text": texts, "file_name": file_names})
  61. df.to_csv("./data/data-juicer/output/result.csv", index=False)
  62. df
  63. from transformers import CLIPProcessor, CLIPModel
  64. import torch
  65. model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
  66. processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
  67. images = [Image.open(img_path) for img_path in df["file_name"]]
  68. inputs = processor(text=df["text"].tolist(), images=images, return_tensors="pt", padding=True)
  69. outputs = model(**inputs)
  70. logits_per_image = outputs.logits_per_image  # this is the image-text similarity score
  71. probs = logits_per_image.softmax(dim=1)  # we can take the softmax to get the probabilities
  72. probs
  73. from torch.utils.data import Dataset, DataLoader
  74. class CustomDataset(Dataset):
  75.     def __init__(self, df, processor):
  76.         self.texts = df["text"].tolist()
  77.         self.images = [Image.open(img_path) for img_path in df["file_name"]]
  78.         self.processor = processor
  79.     def __len__(self):
  80.         return len(self.texts)
  81.     def __getitem__(self, idx):
  82.         inputs = self.processor(text=self.texts[idx], images=self.images[idx], return_tensors="pt", padding=True)
  83.         return inputs
  84. dataset = CustomDataset(df, processor)
  85. dataloader = DataLoader(dataset, batch_size=8)
  86. for batch in dataloader:
  87.     outputs = model(**batch)
  88.     logits_per_image = outputs.logits_per_image
  89.     probs = logits_per_image.softmax(dim=1)
  90.     print(probs)
  91. import torch
  92. from diffusers import StableDiffusionPipeline
  93. torch.manual_seed(1)
  94. pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v-1-4", torch_dtype=torch.float16)
  95. pipe = pipe.to("cuda")
  96. prompt = "二次元,一个紫色长发小女孩穿着粉色吊带漏肩连衣裙,在练习室练习唱歌,手持话筒"
  97. negative_prompt = "丑陋、变形、嘈杂、模糊、低对比度"
  98. guidance_scale = 4
  99. num_inference_steps = 50
  100. image = pipe(
  101.     prompt=prompt,
  102.     negative_prompt=negative_prompt,
  103.     guidance_scale=guidance_scale,
  104.     num_inference_steps=num_inference_steps,
  105.     height=1024,
  106.     width=1024,
  107. ).images[0]
  108. image.save("example_image.png")
  109. image
  110. from PIL import Image
  111. torch.manual_seed(1)
  112. image = pipe(
  113.     prompt="二次元,日系动漫,演唱会的观众席,人山人海,一个紫色短发小女孩穿着粉色吊带漏肩连衣裙坐在演唱会的观众席,舞台上衣着华丽的歌星们在唱歌",
  114.     negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
  115.     cfg_scale=4,
  116.     num_inference_steps=50, height=1024, width=1024,
  117. )
  118. image.save("1.jpg")
  119. torch.manual_seed(1)
  120. image = pipe(
  121.     prompt="二次元,一个紫色短发小女孩穿着粉色吊带漏肩连衣裙坐在演唱会的观众席,露出憧憬的神情",
  122.     negative_prompt="丑陋、变形、嘈杂、模糊、低对比度,色情擦边",
  123.     cfg_scale=4,
  124.     num_inference_steps=50, height=1024, width=1024,
  125. )
  126. image.save("2.jpg")
  127. torch.manual_seed(2)
  128. image = pipe(
  129.     prompt="二次元,一个紫色短发小女孩穿着粉色吊带漏肩连衣裙坐在演唱会的观众席,露出憧憬的神情",
  130.     negative_prompt="丑陋、变形、嘈杂、模糊、低对比度,色情擦边",
  131.     cfg_scale=4,
  132.     num_inference_steps=50, height=1024, width=1024,
  133. )
  134. image.save("3.jpg")
  135. torch.manual_seed(5)
  136. image = pipe(
  137.     prompt="二次元,一个紫色短发小女孩穿着粉色吊带漏肩连衣裙,对着流星许愿,闭着眼睛,十指交叉,侧面",
  138.     negative_prompt="丑陋、变形、嘈杂、模糊、低对比度,扭曲的手指,多余的手指",
  139.     cfg_scale=4,
  140.     num_inference_steps=50, height=1024, width=1024,
  141. )
  142. image.save("4.jpg")
  143. torch.manual_seed(0)
  144. image = pipe(
  145.     prompt="二次元,一个紫色中等长度头发小女孩穿着粉色吊带漏肩连衣裙,在练习室练习唱歌",
  146.     negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
  147.     cfg_scale=4,
  148.     num_inference_steps=50, height=1024, width=1024,
  149. )
  150. image.save("5.jpg")
  151. torch.manual_seed(1)
  152. image = pipe(
  153.     prompt="二次元,一个紫色长发小女孩穿着粉色吊带漏肩连衣裙,在练习室练习唱歌,手持话筒",
  154.     negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
  155.     cfg_scale=4,
  156.     num_inference_steps=50, height=1024, width=1024,
  157. )
  158. image.save("6.jpg")
  159. torch.manual_seed(7)
  160. image = pipe(
  161.     prompt="二次元,紫色长发少女,穿着黑色连衣裙,试衣间,心情忐忑",
  162.     negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
  163.     cfg_scale=4,
  164.     num_inference_steps=50, height=1024, width=1024,
  165. )
  166. image.save("7.jpg")
  167. torch.manual_seed(0)
  168. image = pipe(
  169.     prompt="二次元,紫色长发少女,穿着黑色礼服,连衣裙,在台上唱歌",
  170.     negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
  171.     cfg_scale=4,
  172.     num_inference_steps=50, height=1024, width=1024,
  173. )
  174. image.save("8.jpg")
  175. import numpy as np
  176. from PIL import Image
  177. images = [np.array(Image.open(f"{i}.jpg")) for i in range(1, 9)]
  178. image = np.concatenate([
  179.     np.concatenate(images[0:2], axis=1),
  180.     np.concatenate(images[2:4], axis=1),
  181.     np.concatenate(images[4:6], axis=1),
  182.     np.concatenate(images[6:8], axis=1),
  183. ], axis=0)
  184. image = Image.fromarray(image).resize((1024, 2048))
  185. image
复制代码
-如果你想明白代码的主体架构,可以这么问
   “你是一个优秀的python开辟工程师,现在我们需要你帮我们分析这个代码的主体框架,你需要把代码按照工作流分成几部门,用中文回答我的问题。{此处更换前面的代码}”
  -如果你想明白每一行代码的具体寄义,可以这么问
   “你是一个优秀的python开辟工程师,现在我们需要你帮我们逐行分析这个代码,用中文回答我的问题。{此处更换前面的代码}”
  
接下来是我认为比较当前比较实用的——如何利用AI来生成提示词
同上,我们可以这么问AI:
   你是一个文生图专家,我们现在要做一个实战项目,就是要编排一个文生图话剧
话剧由8张场景图片生成,你需要输出每张图片的生图提示词

具体的场景图片(自行更换)
1、女主正在上课
2、开始睡着了
3、进入梦境,梦到自己站在路旁
4、王子骑马而来
5、两人相谈甚欢
6、一起坐在马背上
7、下课了,梦醒了
8、又回到了学习生存中

生图提示词要求(自行更换)
1、风格为古风
2、根据场景确定是利用浑身照旧上半身
3、人物描述
4、场景描述
5、做啥事情

例子:(自行更换)
古风,水墨画,一个黑色长发少女,坐在课堂里,盯着黑板,深思,上半身,赤色长裙
  (这里也给出笔者用AI生成的提示词跑出来的图 basementpeople/huangliangyimeng-LoRA,我认为比Task1里我自己跑出来的图更好很多)

浅尝scepter webui

魔搭体验网址



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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

民工心事

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表