目录
Datawhale X 魔搭 AI夏令营第四期-AIGC文生图方向 Task2:精读代码,实战进阶 0.0 一些link 0.1 任务内容 0.2 AI生图 0.3 **Kolors(可图)模型** 1.1 精读baseline——从零入门AI生图 1.2 通义千问理解代码框架 1.3 通义千问逐行理解代码 2.1 实战演练一一基于话剧的连环画制作 提示词准备 2.2 润色提示词,生成prompt 2.3 一键运行baseline出图 2.4 记得关闭节点 3.1 scepter webUI私有部署Datawhale X 魔搭 AI夏令营第四期-AIGC文生图方向
Datawhale AI 夏令营(第四期)官网
Task2:精读代码,实战进阶
0.0 一些link
Task2打卡链接:
电脑端打开 https://linklearner.com/activity/14/10/32
学习手册:
https://datawhaler.feishu.cn/wiki/UM7awcAuQicI4ukd2qtccT51nug
Q&A:
https://datawhaler.feishu.cn/wiki/K6b1woVtlizjV0klBBgc6ZJUnie
https://v00u9dpku63.feishu.cn/docx/CmVddNV0eoK6nCxjbmScrmTBn7d
0.1 任务内容
对baseline的代码有一个更加细致的理解,然后我们会学习如何借助AI来提升我们的自学习能力,从而帮助大家在后面的学习工作中如何从容迎接各种挑战。授人以鱼不如授人以渔,你可以从中学大模型的提问技巧来实现快速学习,学会如何制作一个话剧连环画。
0.2 AI生图
Deepfake技术
Deepfake是一种使用人工智能技术生成的伪造媒体,特别是视频和音频,它们看起来或听起来非常真实,但实际上是由计算机生成的。这种技术通常涉及到深度学习算法,特别是生成对抗网络(GANs),它们能够学习真实数据的特征,并生成新的、逼真的数据。
从零入门CV图像竞赛(Deepfake攻防)
AI生图的历史
AI生图模型属于多模态机器学习模型,通过海量的图库和文本描述的深度神经网络学习,最终的目标是可以根据输入的指示(不管是文本还是图片还是任何)生成符合语义的图片。
最早的AI生图可追溯到20世纪70年代,当时由艺术家哈罗德·科恩(Harold Cohen)发明AARON,可通过机械臂输出作画。
现代的AI生图模型大多基于深度神经网络基础上训练,最早可追溯到2012年吴恩达训练出的能生成“猫脸”的模型。
它使用卷积神经网络(CNN)训练,证明了深度学习模型能够学习到图像的复杂特征。
2015年,谷歌推出了“深梦”(Deep Dream)图像生成工具,类似一个高级滤镜,可以基于给定的图片生成梦幻版图片。
2021 年 1 月 OpenAI 推出DALL-E模型(一个深度学习算法模型,是GPT-3 语言处理模型的一个衍生版本),能直接从文本提示“按需创造”风格多样的图形设计。
通过学习大量画家的作品,AI生图模型 往往可以照猫画虎绘制出类似的画作,在2022年8月,AI生图真正走进了大众的视野,让各个领域无法忽视。
当时让AI生图破圈的是AI绘画作品《太空歌剧院》,该作品在美国科罗拉多州举办的新兴数字艺术家竞赛中获得了比赛“数字艺术/数字修饰照片”类别一等奖,引起了当时“艺术家们 Not Happy”的社会舆论。
难点和挑战
画手
AI味
。。。
通俗来说,AI生图模型获得图片生成能力主要是通过 学习 图片描述 以及 图片特征,尝试将这两者进行一一对应,存储在自己的记忆里。
在我们需要的时候,通过输入的文字,复现出来对应的图片特征,从而生成了我们需要的图片。
辨识AI图
观察图片的细节。仔细检查人物的面部特征,尤其是眼睛和嘴巴 检查光线和阴影。分析图片中的光源是否一致,阴影的方向是否与光源相符,是否存在不自然的光线或阴影 分析像素。放大图片,寻找是否有模糊或像素化的部分。 注意背景。检查背景中是否有不协调的元素,比如物体边缘是否平滑,背景中是否有不自然的重复模式。而这些细节上的AI特性,也许就是我们在某些特定场景下需要解决的挑战。
0.3 Kolors(可图)模型
Kolors是一个基于潜扩散的大规模文本转图像生成模型,由快手Kolors团队开发。经过数十亿对文本-图像对的训练,Kolors 在视觉质量、复杂语义准确性以及中英文字符的文本渲染方面与开源和专有模型相比都表现出显着优势。此外,Kolors支持中文和英文输入,在理解和生成中文特定内容方面表现出强大的表现。
代码开源链接:https://github.com/Kwai-Kolors/Kolors
模型开源链接:https://modelscope.cn/models/Kwai-Kolors/Kolors
技术报告链接:https://github.com/Kwai-Kolors/Kolors/blob/master/imgs/Kolors_paper.pdf
魔搭研习社最佳实践说明:https://www.modelscope.cn/learn/575?pid=543
1.1 精读baseline——从零入门AI生图
今天尝试让AI助手(通义千问)从两个角度帮助我们:
https://tongyi.aliyun.com/qianwen/?st=null&sessionId=786fe10e8466431885f8ab4afc407920
baseline框架
baseline
!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
from modelscope.msdatasets import MsDataset
ds = MsDataset.load(
'AI-ModelScope/lowres_anime',
subset_name='default',
split='train',
cache_dir="/mnt/workspace/kolors/data"
)
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")
data_juicer_config = """
# global parameters
project_name: 'data-process'
dataset_path: './data/data-juicer/input/metadata.jsonl' # path to your dataset directory or file
np: 4 # number of subprocess to process your dataset
text_keys: 'text'
image_key: 'image'
image_special_token: '<__dj__image>'
export_path: './data/data-juicer/output/result.jsonl'
# process schedule
# a list of several process operators with their arguments
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())
!dj-process --config data/data-juicer/data_juicer_config.yaml
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
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 # this is the image-text similarity score
probs = logits_per_image.softmax(dim=1) # we can take the softmax to get the probabilities
probs
from torch.utils.data import Dataset, DataLoader
class CustomDataset(Dataset):
def __init__(self, df, processor):
self.texts = df["text"].tolist()
self.images = [Image.open(img_path) for img_path in df["file_name"]]
self.processor = processor
def __len__(self):
return len(self.texts)
def __getitem__(self, idx):
inputs = self.processor(text=self.texts[idx], images=self.images[idx], return_tensors="pt", padding=True)
return inputs
dataset = CustomDataset(df, processor)
dataloader = DataLoader(dataset, batch_size=8)
for batch in dataloader:
outputs = model(**batch)
logits_per_image = outputs.logits_per_image
probs = logits_per_image.softmax(dim=1)
print(probs)
import torch
from diffusers import StableDiffusionPipeline
torch.manual_seed(1)
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v-1-4", torch_dtype=torch.float16)
pipe = pipe.to("cuda")
prompt = "二次元,一个紫色长发小女孩穿着粉色吊带漏肩连衣裙,在练习室练习唱歌,手持话筒"
negative_prompt = "丑陋、变形、嘈杂、模糊、低对比度"
guidance_scale = 4
num_inference_steps = 50
image = pipe(
prompt=prompt,
negative_prompt=negative_prompt,
guidance_scale=guidance_scale,
num_inference_steps=num_inference_steps,
height=1024,
width=1024,
).images[0]
image.save("example_image.png")
image
from PIL import Image
torch.manual_seed(1)
image = pipe(
prompt="二次元,日系动漫,演唱会的观众席,人山人海,一个紫色短发小女孩穿着粉色吊带漏肩连衣裙坐在演唱会的观众席,舞台上衣着华丽的歌星们在唱歌",
negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
cfg_scale=4,
num_inference_steps=50, height=1024, width=1024,
)
image.save("1.jpg")
torch.manual_seed(1)
image = pipe(
prompt="二次元,一个紫色短发小女孩穿着粉色吊带漏肩连衣裙坐在演唱会的观众席,露出憧憬的神情",
negative_prompt="丑陋、变形、嘈杂、模糊、低对比度,色情擦边",
cfg_scale=4,
num_inference_steps=50, height=1024, width=1024,
)
image.save("2.jpg")
torch.manual_seed(2)
image = pipe(
prompt="二次元,一个紫色短发小女孩穿着粉色吊带漏肩连衣裙坐在演唱会的观众席,露出憧憬的神情",
negative_prompt="丑陋、变形、嘈杂、模糊、低对比度,色情擦边",
cfg_scale=4,
num_inference_steps=50, height=1024, width=1024,
)
image.save("3.jpg")
torch.manual_seed(5)
image = pipe(
prompt="二次元,一个紫色短发小女孩穿着粉色吊带漏肩连衣裙,对着流星许愿,闭着眼睛,十指交叉,侧面",
negative_prompt="丑陋、变形、嘈杂、模糊、低对比度,扭曲的手指,多余的手指",
cfg_scale=4,
num_inference_steps=50, height=1024, width=1024,
)
image.save("4.jpg")
torch.manual_seed(0)
image = pipe(
prompt="二次元,一个紫色中等长度头发小女孩穿着粉色吊带漏肩连衣裙,在练习室练习唱歌",
negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
cfg_scale=4,
num_inference_steps=50, height=1024, width=1024,
)
image.save("5.jpg")
torch.manual_seed(1)
image = pipe(
prompt="二次元,一个紫色长发小女孩穿着粉色吊带漏肩连衣裙,在练习室练习唱歌,手持话筒",
negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
cfg_scale=4,
num_inference_steps=50, height=1024, width=1024,
)
image.save("6.jpg")
torch.manual_seed(7)
image = pipe(
prompt="二次元,紫色长发少女,穿着黑色连衣裙,试衣间,心情忐忑",
negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
cfg_scale=4,
num_inference_steps=50, height=1024, width=1024,
)
image.save("7.jpg")
torch.manual_seed(0)
image = pipe(
prompt="二次元,紫色长发少女,穿着黑色礼服,连衣裙,在台上唱歌",
negative_prompt="丑陋、变形、嘈杂、模糊、低对比度",
cfg_scale=4,
num_inference_steps=50, height=1024, width=1024,
)
image.save("8.jpg")
import numpy as np
from PIL import Image
images = [np.array(Image.open(f"{i}.jpg")) for i in range(1, 9)]
image = np.concatenate([
np.concatenate(images[0:2], axis=1),
np.concatenate(images[2:4], axis=1),
np.concatenate(images[4:6], axis=1),
np.concatenate(images[6:8], axis=1),
], axis=0)
image = Image.fromarray(image).resize((1024, 2048))
image
1.2 通义千问理解代码框架
你是一个优秀的python开发工程师,现在我们需要你帮我们分析这个代码的主体框架,你需要把代码按照工作流分成几部分,用中文回答我的问题。{此处替换前面的代码}
结果:
环境准备:安装必要的库。
数据集加载与预处理:加载数据集并进行初步处理。
数据处理与过滤:使用data-juicer工具进行数据的进一步处理。
特征提取与相似度计算:使用CLIP模型计算图像和文本之间的相似度。
数据集构建与加载:构建自定义数据集并使用PyTorch DataLoader进行加载。
图像生成:使用StableDiffusionPipeline生成新的图像。
图像展示:合并并展示生成的图像。
帮我画一张代码工作流程图
但是框架图画不出来
1.3 通义千问逐行理解代码
你是一个优秀的python开发工程师,现在我们需要你帮我们逐行分析这个代码,用中文回答我的问题。{此处替换前面的代码}
结果:
第一部分:安装与卸载Python包
!pip install simple-aesthetics-predictor: 这一行命令用来安装simple-aesthetics-predictor这个Python包。
!pip install -v -e data-juicer: 安装data-juicer包,并且以可编辑模式 (-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包。
帮我给代码逐行加上中文注释
# 安装Python包
# !pip install simple-aesthetics-predictor
# 以可编辑模式安装data-juicer包
# !pip install -v -e data-juicer
# 卸载pytorch-lightning包
# !pip uninstall pytorch-lightning -y
# 安装多个Python包
# !pip install peft lightning pandas torchvision
# 以可编辑模式安装DiffSynth-Studio包
# !pip install -e DiffSynth-Studio
# 从ModelScope加载数据集
from modelscope.msdatasets import MsDataset
# 加载名为"AI-ModelScope/lowres_anime"的数据集
ds = MsDataset.load(
'AI-ModelScope/lowres_anime', # 数据集的名字
subset_name='default', # 子集名称
split='train', # 分割类型(这里是训练集)
cache_dir="/mnt/workspace/kolors/data" # 缓存目录
)
# 导入所需模块
import json, os
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")
# 定义数据处理配置
data_juicer_config = """
# 全局参数
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处理数据
# !dj-process --config data/data-juicer/data_juicer_config.yaml
# 导入Pandas和其他所需模块
import pandas as pd
import os, json
from PIL import Image
from tqdm import tqdm
# 创建目录用于存放输出图像
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])
# 创建DataFrame并保存为CSV文件
df = pd.DataFrame({"text": texts, "file_name": file_names})
df.to_csv("./data/data-juicer/output/result.csv", index=False)
# 显示DataFrame的内容
df
# 加载CLIP模型和处理器
from transformers import CLIPProcessor, CLIPModel
import torch
# 加载预训练的CLIP模型
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
# 加载预训练的CLIP处理器
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
# 从DataFrame中加载图像
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 torch.utils.data import Dataset, DataLoader
class CustomDataset(Dataset):
def __init__(self, df, processor):
# 初始化数据集
self.
2.1 实战演练一一基于话剧的连环画制作 提示词准备
我的提示词草稿:
你是一个文生图专家,我们现在要做一个实战项目,就是要编排一个文生图话剧
话剧由8张场景图片生成,你需要输出每张图片的生图提示词
具体的场景图片
1、一个红色的机械机器人坐在一家餐厅里,机器人没有嘴,汉堡掉落在地上,旁边一个人类男人正在看它
2、机器人回到家中很失落地坐在沙发上
3、机器人在卫生间照镜子看到一个人类男人
4、机器人进了一家机器人改造工厂
5、它躺在改造的车床上,露出幸福的表情,脑海中想象着美味的汉堡
6、刚刚出现在镜子中的人类男人走出工厂
7、人类男人走进一家汉堡店
8、男人坐在一家汉堡店里,旁边一个红色的机械机器人正看着掉在地上的汉堡,这个机器人没有嘴巴
生图提示词要求
1、二次元,未来感
2、根据场景确定是使用全身还是上半身
3、人物描述
4、场景描述
5、做啥事情
例子:
二次元,未来感,一个红色的机械机器人,没有嘴巴,坐在餐厅里,盯着掉在地上的汉堡,旁边一个人类男人正在看它
通义返回的提示词:
好的,基于您的要求,这里是每一张场景图片的生图提示词:
场景一:
二次元,未来感,一个全身的红色机械机器人坐在餐厅的一角,机器人没有嘴巴,一个汉堡掉落在它的脚边,旁边站着一位好奇地看着机器人的男性人类。
场景二:
二次元,未来感,失落表情的红色机械机器人坐在客厅的沙发上,仅展示上半身,背景是简洁的未来风格家居环境。
场景三:
二次元,未来感,红色机械机器人站在卫生间的大镜子前,镜子里映出一个微笑的人类男性,只展示机器人的上半身和镜子中的倒影。
场景四:
二次元,未来感,红色机械机器人站在一家高科技风格的机器人改造工厂门口,展示机器人全身,工厂内部可见各种机器人零件与先进设备。
场景五:
二次元,未来感,红色机械机器人躺在改造工厂内的车床上,脸上带着幸福的表情,背景是忙碌的机器人技术员和闪烁的霓虹灯,机器人脑海中的幻想呈现出一个巨大的汉堡。
场景六:
二次元,未来感,之前出现在镜子里的人类男性走出改造工厂的大门,展示其全身,背景是工厂的外墙和城市的未来景色。
场景七:
二次元,未来感,这位人类男性走进一家装饰有未来科技元素的汉堡店,展示其上半身,背景是汉堡店的柜台和菜单。
场景八:
二次元,未来感,人类男性坐在汉堡店里,旁边站着一个没有嘴巴的红色机械机器人,机器人正注视着掉在地上的汉堡,只展示机器人和男性的上半身,背景是店内顾客和其他细节。
2.2 润色提示词,生成prompt
润色后的prompt:
prompt="二次元,未来感,一个全身的红色机械机器人坐在餐厅的一角,机器人没有嘴巴,一个汉堡掉落在它的脚边,它看着周围吃汉堡的人类。",
negative_prompt="丑陋、色情、变形、嘈杂、模糊、低对比度",
prompt="二次元,未来感,没有嘴巴的红色机械机器人坐在家中的餐桌边,餐桌上有一个盘子,盘子里放着一些干电池,机器人看着盘子。",
negative_prompt="丑陋、色情、变形、嘈杂、模糊、低对比度",
prompt="二次元,未来感,没有嘴巴的红色机械机器人在书房里打开电脑,电脑屏幕显示出了一个人类男性的身体,机器人看着电脑屏幕,展示机器人背影。",
negative_prompt="丑陋、色情、变形、嘈杂、模糊、低对比度",
prompt="二次元,未来感,没有嘴巴的红色机械机器人站在一家机器人改造工厂门口,展示机器人全身背影,工厂内部可见各种机器人零件与先进设备。",
negative_prompt="丑陋、色情、变形、嘈杂、模糊、低对比度",
prompt="二次元,未来感,没有嘴巴的红色机械机器人躺在改造工厂内的车床上,他闭上眼镜,背景是忙碌的机器人技术员和闪烁的霓虹灯,机器人脑海中的幻想呈现出一个巨大的汉堡。",
negative_prompt="丑陋、色情、变形、嘈杂、模糊、低对比度",
prompt="二次元,未来感,之前出现在镜子里的人类男性走出改造工厂的大门,展示其全身,背景是机器人改造工厂的外墙和城市的未来景色。",
negative_prompt="丑陋、色情、变形、嘈杂、模糊、低对比度",
prompt="二次元,未来感,这位人类男性走进一家汉堡店,脑海中的幻想呈现出一个巨大的汉堡,展示人类全身。",
negative_prompt="丑陋、色情、变形、嘈杂、模糊、低对比度",
prompt="二次元,未来感,一名人类男性坐在汉堡店里,手里拿着一个汉堡,汉堡店里坐满了各种形态的机器人正在吃汉堡。",
negative_prompt="丑陋、色情、变形、嘈杂、模糊、低对比度",
2.3 一键运行baseline出图
链接:https://www.modelscope.cn/my/mynotebook/authorization
故事线基本能体现出来:
2.4 记得关闭节点
3.1 scepter webUI私有部署
魔搭社区提供的体验地址里面缺失了微调模型的功能,如果大家希望能使用secpter完整的功能,我们可以将其私有部署到我们自己的服务器。
魔搭体验网址:https://www.modelscope.cn/studios/iic/scepter_studio
github地址:https://github.com/modelscope/scepter
可以通过官方readme文件中的教程进行操作
SCEPTER是一个开源代码存储库,致力于生成训练、微调和推理,包括一系列下游任务,如图像生成、传输、编辑。SCEPTER集成了流行的社区驱动实现以及阿里巴巴集团同益实验室的专有方法,为AIGC领域的研究人员和从业者提供了一个全面的工具包。这个多功能的库旨在促进生成模型快速发展领域的创新和加速发展。
用AI优化了一下提示词,并翻译成为了英文:
A crimson mechanical robot, lacking a mouth, sits in a corner of a bustling restaurant. A burger falls near its feet as it observes the humans around it enjoying their meals.
The mouthless crimson mechanical robot sits at a dining table at home, gazing at a plate of dry batteries set before it.
In a study, the crimson mechanical robot opens a computer, revealing an image of a human male’s body on the screen. The robot studies the display, and the scene shows its back.
The crimson mechanical robot stands at the entrance to a robot modification factory, its full silhouette framed by the doorway. Inside, the factory is filled with various robot parts and advanced machinery.
Lying on a workbench within the factory, the crimson robot closes its eyes. In the background, robotic technicians bustle about under the glow of neon lights, while in the robot’s imagination, a colossal burger looms large.
The human male who had appeared in a mirror earlier steps out of the factory’s main doors, his entire figure now visible against the backdrop of the factory’s exterior and the futuristic city beyond.
This human male enters a burger joint, his mind conjuring up an image of a massive burger. His entire form is shown as he walks in.
Inside the burger shop, a human male sits at a table, holding a burger. Around him, various robots of different shapes and sizes are also dining on burgers.
在示例网站尝试使用“霓虹朋克”风格进行了微调与生成:
总结