一、对于文生图科技发展的一些个人见解
1.文生图技术的发展对艺术设计及一些想做艺术设计的人来说,是一个提高生产力的工具,也是一个走进平面设计与艺术设计的一条道路。不仅为专业的人提高了效率,也为经验不足的人提供了一定的保障。
对所有人来说,定期关注AI生图的最新能力情况都十分重要:
-
对于普通人来说,可以避免被常见的AI生图场景欺骗,偶尔也可以通过相关工具绘图
-
对于创作者来说,通过AI生图的工具可以提效,快速制作自己所需要的内容
-
对于技术人来说,了解AI生图的能力的玩法,可以更好地针对自己的业务进行开发和使用,甚至攻克难题开发更实用的工具
但是,一个新生的高科技技术带来的影响肯定是两方面的。正面影响肯定是解放生产力、提高生产力;负面影响正如Task02开篇所述,它可以达到以假乱真的效果,这样一来的后果是一些不法分子会用来生成一些恐吓图片来进行敲诈勒索威胁人们的人身安全。就像AI换脸一样会带来工程伦理方面的问题。对于这些科技生成的照片要进行照片自身的水印处理,标注出处为AI生成图片,才能保证人们不受此侵害。像下面这样的报道也是屡见不鲜,所以相关部门制定相关法规对AI生图范围与用途是及其重要的。
2.对于目前的文生图技术还不能达到零瑕疵的效果,比如手部细节,与任人物主题接触的物体细节,身体动作细节度不能高精度,高准确度的实现。比如我想生成穿着24号湖人紫金球衣的少年,就不能很好的完成。如下图所示:
秋衣颜色不正,湖人字体Lakers为很好体现出来。像这样的图片细节瑕疵是普遍存在的。
二、通过通义千问分析详解代码:
1.安装依赖
首先,程序使用一系列 pip
命令安装所需的Python库。
simple-aesthetics-predictor
:用于预测图像的美学得分。data-juicer
:一个用于数据处理的工具。pytorch-lightning
:一个用于简化PyTorch模型训练的库。peft
、lightning
、pandas
、torchvision
:与深度学习和数据处理相关的库。DiffSynth-Studio
:一个深度学习图像合成库。
!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
2.数据加载
使用 modelscope.msdatasets
中的 MsDataset
类加载数据集。
from modelscope.msdatasets import MsDataset
ds = MsDataset.load(
'AI-ModelScope/lowres_anime',
subset_name='default',
split='train',
cache_dir="/mnt/workspace/kolors/data"
)
3.数据预处理
创建保存图像和元数据的目录,遍历数据集,将图像保存为RGB格式的JPEG文件,并将包含文本和图像路径的元数据写入JSON文件。
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)):
# ...(保存图像和写入元数据的代码)
4.配置和运行数据榨汁器
定义了一个YAML配置文件,用于设置数据榨汁器的参数,如项目名称、数据集路径、导出路径等。然后运行 dj-process
命令行工具,根据配置文件处理数据。
data_juicer_config = """# 配置文件内容"""
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
5.加载和处理数据
使用 pandas
读取处理后的数据,并将文本和图像文件名保存到CSV文件。
texts, file_names = [], []
# ...(读取JSONL文件和保存DataFrame到CSV的代码)
df = pd.DataFrame({"text": texts, "file_name": file_names})
df.to_csv("./data/data-juicer/output/result.csv", index=False)
6.使用CLIP模型
加载CLIP模型和处理器,对图像和文本进行处理,获取图像和文本的相似度分数。
from transformers import CLIPProcessor, CLIPModel
# ...(加载模型和处理器的代码)
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)
probs = logits_per_image.softmax(dim=1)
7.定义自定义数据集和数据加载器
定义了一个自定义的 Dataset
类,用于封装数据加载逻辑,并使用 DataLoader
进行批量加载。
from torch.utils.data import Dataset, DataLoader
# ...(CustomDataset类的定义)
dataset = CustomDataset(df, processor)
dataloader = DataLoader(dataset, batch_size=8)
for batch in dataloader:
# ...(模型预测的代码)
8.使用稳定扩散模型生成图像
使用 diffusers
库中的 StableDiffusionPipeline
加载稳定扩散模型,根据文本提示生成图像,并保存。
import torch
from diffusers import StableDiffusionPipeline
# ...(加载和配置模型的代码)
prompt = "..."
image = pipe(prompt=prompt, ...)
image.save("example_image.png")
9.拼接图像
将多张图像拼接在一起,形成一张长图。
images = [np.array(Image.open(f"{i}.jpg")) for i in range(1, 9)]
image = np.concatenate([
# ...(拼接图像的代码)
], axis=0)
image = Image.fromarray(image).resize((1024, 2048))
这个程序展示了如何使用深度学习模型进行图像和文本的处理,以及如何生成和拼接图像。程序中使用的技术包括数据预处理、模型加载、预测、图像生成和图像处理。
具体的代码详解通过老师的讲解、教案的阅读与通义千问的回答已基本了解,这里对代码的理解再不做过多赘述。
三、利用通义千问进行连环画提示词的生成
1.通义千问使用
作为一个重度AI助手使用者,各大公司的AI-GPT都有涉猎,所以直接就能使用,比较熟悉。通义千问的优点是对前面提问的记忆储存效果较好,后续不用反复提示。下图是通义千问使用界面:
2.通过通义千问进行prompt与反向prompt生成。
提示词:你是一个文生图专家,我们现在要做一个实战项目,就是要编排一个文生图话剧 话剧由8张场景组成,你需要输出每张图片的生图提示词 具体的场景 1、女主正在上课 2、开始睡着了 3、进入梦乡,梦到自己站在路旁 4、王子骑马而来 5、两人相谈甚欢 6、一起坐在马背上 7、下课了,梦醒了 8、又回到了学习生活中 生图提示词要求 1、风格为古风 2、根据场景确定是使用全身还是上半身 3、人物描述 4、场景描述 5、做啥事情 例子: 古风,水墨画,一个黑色长发少女,坐在教室里,盯着黑板,深思,上半身,红色长裙
生成的prompt如下表所示:
图片编号 | 场景描述 | 正向提示词 | 反向提示词 |
图片1 | 女主正在上课 | 古风,水墨画,一位黑色长发少女,穿着蓝色汉服,坐在古色古香的教室里,桌上摆放着笔墨纸砚,目光专注地盯着前方的黑板,似乎在深思,上半身 | 丑陋,变形,嘈杂,模糊,低对比度 |
图片2 | 开始睡着了 | 古风,水墨画,同一位黑色长发少女,穿着蓝色汉服,教室里,桌上散落着笔墨纸砚,轻轻靠在桌子上,开始打盹,上半身 | 丑陋,变形,嘈杂,模糊,低对比度 |
图片3 | 进入梦乡,梦到自己站在路旁 | 古风,水墨画,同一位黑色长发少女,穿着蓝色汉服,站在一条古道旁,四周是茂密的竹林,眼神迷茫,似乎正沉浸在梦境之中,全身 | 丑陋,变形,嘈杂,模糊,低对比度 |
图片4 | 王子骑马而来 | 古风,水墨画一位英俊的少年穿着白色长袍,骑着一匹白色的骏马,古道上,周围有竹林和松树,骑马缓缓接近少女,全身 | 丑陋,变形,嘈杂,模糊,低对比度 |
图片5 | 两人相谈甚欢 | 古风,水墨画,少女与少年,穿着古代服饰 ,古道旁,阳光透过树叶洒落,两人面对面站立交谈,面带微笑,全身 | 丑陋,变形,嘈杂,模糊,低对比度 |
图片6 | 一起坐在马背上 | 古风,水墨画,少女与少年,穿着古代服饰 古道上,周围有竹林和松树,两人并肩坐在马背上,少年在前,少女在后,马儿正缓缓前行,全身 | 丑陋,变形,嘈杂,模糊,低对比度 |
图片7 | 下课了,梦醒了 | 古风,水墨画,黑色长发少女,穿着蓝色汉服,古色古香的教室里,周围的同学陆续离开,惊醒过来,眼神迷茫,似乎刚从梦中醒来,上半身 | 丑陋,变形,嘈杂,模糊,低对比度 |
图片8 | 又回到了学习生活中 | 古风,水墨画,黑色长发少女,穿着蓝色汉服,教室里,同学们认真读书写字,正在专心致志地看书或写字,上半身 | 丑陋,变形,嘈杂,模糊,低对比度 |
3.按照提示词在网站运行程序生成图片。有连环画那股味了。嘿嘿
四、其他软件生图对比测试
使用与第一张图相同的prompt,在几个软件生成图片作对比;
torch.manual_seed(0)
image = pipe(
prompt="女主正在上课 古风,水墨画,一位黑色长发少女,穿着蓝色汉服,坐在古色古香的教室里,桌上摆放着笔墨纸砚,目光专注地盯着前方的黑板,似乎在深思,上半身",
negative_prompt="丑陋、变形、嘈杂、清晰、低对比度",
cfg_scale=4,
num_inference_steps=50, height=1024, width=1024,
)
image.save("1.jpg")
1.我手机自带VIVO的蓝心大模型
2.阿里云-天池文生图
相比于各个平台风格各有不同。
五、总结
生成的连环画图片栩栩如生,但是细节方面不够完美,期待Task03的baseline02。使得生成的图像完美又生动。