Datawhale AI夏令营第四期 魔搭-AIGC方向 task02笔记

1:精读baseline

   这里我使用了ChatGPT 4o对吧baseline文件代码进行了解析(不知道为啥我的通义千问无法使用)。

GPT代码解析结果如下:

1. 环境设置与依赖安装

!pip install simple-aesthetics-predictor

!pip install -v -e data-juicer

!pip uninstall pytorch-lightning -y

!pip install peft lightning pandas torchvision

!pip install -e DiffSynth-Studio

  • !pip install simple-aesthetics-predictor: 安装一个名为 simple-aesthetics-predictor 的 Python 包,可能用于图像美学预测。
  • !pip install -v -e data-juicer: 安装 data-juicer 包,该包可能用于数据处理,-v 是显示详细信息的参数,-e 表示在编辑模式下安装。
  • !pip uninstall pytorch-lightning -y: 卸载 pytorch-lightning 包,-y 表示自动确认卸载。
  • !pip install peft lightning pandas torchvision: 安装一些库,如 peft (可能是某个轻量级的优化框架),lightning (用于训练深度学习模型),pandas (用于数据处理),torchvision (用于计算机视觉任务)。
  • !pip install -e DiffSynth-Studio: 安装 DiffSynth-Studio 包,可能用于合成或生成模型。

2. 数据加载与预处理

python

复制代码

from modelscope.msdatasets import MsDataset

ds = MsDataset.load(

    'AI-ModelScope/lowres_anime',

    subset_name='default',

    split='train',

    cache_dir="/mnt/workspace/kolors/data"

)

  • from modelscope.msdatasets import MsDataset: 从 modelscope.msdatasets 模块中导入 MsDataset 类,用于数据集加载。
  • ds = MsDataset.load(...): 加载名为 lowres_anime 的数据集,subset_name 为 default,split 为 train,数据缓存目录为 /mnt/workspace/kolors/data。这一步是为了获取低分辨率的动漫图像数据集。

3. 数据处理与保存

python

复制代码

import json, os

from data_juicer.utils.mm_utils import SpecialTokens

from tqdm import tqdm

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

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

        f.write(json.dumps(metadata))

        f.write("\n")

  • import json, os: 导入 json 和 os 模块,分别用于处理 JSON 数据和进行文件操作。
  • from data_juicer.utils.mm_utils import SpecialTokens: 从 data_juicer 包中导入 SpecialTokens 类,可能用于特殊标记的处理。
  • from tqdm import tqdm: 导入 tqdm,用于显示循环的进度条。
  • os.makedirs(...): 创建目录 ./data/lora_dataset/train 和 ./data/data-juicer/input,exist_ok=True 表示如果目录已存在,不会报错。
  • with open(...) as f:: 打开一个文件 ./data/data-juicer/input/metadata.jsonl 用于写入数据。
  • for data_id, data in enumerate(tqdm(ds)):: 遍历数据集 ds,使用 tqdm 显示进度。
  • image = data["image"].convert("RGB"): 将数据中的图像转换为 RGB 格式。
  • image.save(...): 将图像保存到指定路径。
  • metadata = {...}: 创建一个包含文本描述和图像路径的元数据字典。
  • f.write(json.dumps(metadata)): 将元数据转换为 JSON 格式并写入文件。

4. 配置文件的生成与数据过滤

python

复制代码

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

"""

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

    file.write(data_juicer_config.strip())

  • data_juicer_config = """...""": 定义一个多行字符串 data_juicer_config,这是 data-juicer 工具的配置文件内容。
  • with open(...) as file:: 打开 data_juicer_config.yaml 文件,用于写入配置内容。
  • file.write(data_juicer_config.strip()): 将配置内容写入文件并去除首尾空白字符。

5. 执行数据处理

python

复制代码

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

  • !dj-process --config data/data-juicer/data_juicer_config.yaml: 使用 dj-process 命令运行 data-juicer 的数据处理工具,按照之前定义的配置文件 data_juicer_config.yaml 执行数据过滤和处理。

6. 处理结果并保存为 CSV 文件

python

复制代码

import pandas as pd

import os, json

from PIL import Image

from tqdm import tqdm

texts, file_names = [], []

os.makedirs("./data/data-juicer/output/images", exist_ok=True)

with open("./data/data-juicer/output/result.jsonl", "r") as f:

    for line in tqdm(f):

        metadata = json.loads(line)

        texts.append(metadata["text"])

        file_names.append(metadata["image"][0])

df = pd.DataFrame({"text": texts, "file_name": file_names})

df.to_csv("./data/data-juicer/output/result.csv", index=False)

df

  • import pandas as pd: 导入 pandas,用于数据操作和分析。
  • import os, json: 再次导入 os 和 json 模块。
  • from PIL import Image: 从 PIL (Python Imaging Library) 导入 Image 类,用于图像处理。
  • from tqdm import tqdm: 再次导入 tqdm,用于显示进度条。
  • texts, file_names = [], []: 初始化两个空列表,分别存储文本和文件名。
  • os.makedirs(...): 创建一个目录,用于存储输出的图像。
  • with open(...) as f:: 打开处理后的 JSON 文件。
  • for line in tqdm(f):: 遍历 JSON 文件中的每一行数据,显示进度条。
  • metadata = json.loads(line): 将每一行数据解析为 JSON 格式。
  • texts.append(metadata["text"]): 将文本信息添加到 texts 列表中。
  • file_names.append(metadata["image"][0]): 将图像文件路径添加到 file_names 列表中。
  • df = pd.DataFrame(...): 使用 pandas 创建一个数据框 df,包含 text 和 file_name 两列。
  • df.to_csv(...): 将数据框保存为 CSV 文件 result.csv。
  • df: 显示数据框内容。

7. 使用 CLIP 模型进行图像与文本相似度分析

python

复制代码

from transformers import CLIPProcessor, CLIPModel

import torch

model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")

processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")

images = [Image.open(img_path) for img_path in df["file_name"]]

inputs = processor(text=df["text"].tolist(), images=images, return_tensors="pt", padding=True)

outputs = model(**inputs)

logits_per_image = outputs.logits_per_image

probs = logits_per_image.softmax(dim=1)

probs

  • from transformers import CLIPProcessor, CLIPModel: 从 transformers 库中导入 CLIPProcessor 和 `CLIP

2:实战演练

      这里实战演练,我选择了自己很喜欢的一本科幻小说中的名场面《三体》中三体人的水滴探测器毁灭地球宇宙防卫舰队的故事。我选择了将这个片段丢给ChatGPT让他给我总结8个场面的提示词。

以下是GPT的回答:

最后我根据Task02的教学文档,让GPT仿照整理出来场景表格。

最后如愿得到了关于这个情节的8个提示词。

图片1

场景描述:水滴在太空中出现

  • 正向提示词:科幻,宇宙,深空,星空背景,一个银白色的完美球体——水滴,表面光滑如镜,反射微弱星光,小巧但充满力量,具有威胁性的气息。
  • 反向提示词:模糊,低对比度,噪点,变形,杂乱

图片2

场景描述:人类舰队整齐排列,准备迎敌

  • 正向提示词:科幻,宇宙,庞大的太空战舰,排列整齐,背景为黑暗的宇宙和闪烁的星光,舰队指挥官紧张地盯着前方的水滴,战斗气氛紧张。
  • 反向提示词:破损,变形,杂乱,暗淡,低质量

图片3

场景描述:水滴高速冲向人类舰队

  • 正向提示词:科幻,宇宙,银白色的水滴以难以置信的速度向人类舰队冲来,模糊的星光背景,人类战舰发射激光和导弹,水滴无视攻击,保持完整和光滑。
  • 反向提示词:模糊,失焦,失控,低对比度,杂乱

图片4

场景描述:水滴无视所有攻击,继续前进

  • 正向提示词:科幻,宇宙,水滴穿越激光网和导弹阵,表面依旧光滑如镜,背景中的战舰火力全开,但对水滴无效,显得无比渺小和无力。
  • 反向提示词:破碎,变形,低对比度,暗淡,模糊

图片5

场景描述:水滴突破舰队防线,接近指挥舰

  • 正向提示词:科幻,宇宙,水滴接近人类舰队指挥舰,水滴的表面清晰映出指挥舰和远处的星辰,紧张感弥漫,末日氛围扑面而来。
  • 反向提示词:失焦,低对比度,模糊,杂乱,无序

图片6

场景描述:水滴瞬间摧毁指挥舰,引发舰队连锁爆炸

  • 正向提示词:科幻,宇宙,水滴穿透指挥舰,巨大的火球在太空中爆发,碎片四散,整个舰队被毁灭性的打击摧毁,背景为明亮的爆炸光芒和黑暗的宇宙。
  • 反向提示词:模糊,低质量,暗淡,失控,杂乱

图片7

场景描述:宇宙中的废墟,曾经的辉煌舰队变为残骸

  • 正向提示词:科幻,宇宙,废墟漂浮在无尽的星空中,残破的战舰碎片散落四周,背景为沉寂的星空,气氛压抑和沉重。
  • 反向提示词:变形,杂乱,模糊,低对比度,噪点

图片8

场景描述:水滴离开,消失在宇宙深处

  • 正向提示词:科幻,宇宙,水滴在远处的宇宙中逐渐消失,背景为无尽的星海和寂静的深空,水滴的表面仍然光滑无暇,带着毁灭的使命离去。
  • 反向提示词:模糊,低对比度,噪点,变形,杂乱

在我将这些正向提示词和反向提示词输入到baseline文件中。

执行后得到的结果并不如意。这是我第一次得到的AI图。

那么很显然这个AI图片与原著的描述差距是很大的。但是我观察这些图片,发现是正向提示词以及反向提示词不够细节,不够全面。于是我总结了图片中的问题,发给GPT让其完善提示词。

于是GPT帮我重新改善了提示词。

我在baseline重新替换新的提示词然后得到了以下的结果

这里其中的一些图片生成还是不错的,不过还是有很多的问题。比如水滴的形状是银白色,无比光滑的水滴形状的小型飞行器。这里可以看出AI生图的效果还是比较一般。但是由于本人的时间关系我就没有继续调试探索。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值