Datawhale X 魔搭 AI夏令营-第四期(AIGC方向)-Task02-可图Kolors-精读代码 实战进阶
往期学习: Datawhale X 魔搭 AI夏令营-第四期(AIGC方向)-Task01-可图Kolors-LoRA风格故事挑战赛
本期学习的主要内容为:
- 使用阿里云的“通义千问”大模型,来解释并帮助我们读懂Task1中的代码。
- 使用“通义千问”大模型来辅助设计生图提示词,并生成8图话剧。
下面分部分讲解我的学习过程:
一、使用通义千问辅助读懂Task1中的代码
先贴通义千问链接:https://tongyi.aliyun.com/qianwen/
这一部分我分别进行了五次尝试,下面是对应的prompts:
Prompt01:你是一个优秀的python开发工程师,现在我们需要你帮我们分析这个代码的主体框架,你需要把代码按照工作流分成几部分,用中文回答我的问题。{贴上代码}
Answer01 如下。可以看到,它对代码中所包含的主要工作流程进行了准确的概括说明。
Prompt02:你是一个优秀的python开发工程师,现在我们需要你帮我们逐行分析这个代码,用中文回答我的问题。{贴上代码}
Answer02 如下。可以看到,相比Answer01中概括的工作流程,Answer02它按步骤对代码给出了更为细致的说明。
Prompt03:你是一个优秀的python开发工程师,现在我们需要你帮我们逐行分析这个代码,每一行代码都增加上中文语义备注。{贴上代码}
Answer03 如下。可以看到,它对代码进行了细致的逐行解释,但它没有达到我预期的效果,即返回带注释的代码。
Prompt04:你是一个优秀的python开发工程师,现在我们需要你帮我们逐行分析下面的代码,每一行代码都增加上中文语义备注,并返回带有中文注释的代码。{贴上代码}
Answer04 如下。可以看到,它实现了返回带注释代码的效果,这对于程序员来说有更强的易读性。
Prompt05:我对其中的{目标代码}还是不太理解,给我再详细介绍一下。
Answer05 如下。可以看到,在这个prompt中,我对AI进行了追问,要求它对某一块代码进行更细致的解释。通义千问对这块代码做了非常细致的解释。
二、基于话剧的连环画制作
通过使用通义千问大模型,来生成8图连环画话剧的生图提示词,我给的提示词如下:
你是一个文生图专家,我们现在要做一个实战项目,就是要编排一个文生图话剧 话剧由8张场景图片生成,你需要输出每张图片的生图提示词 具体的场景图片 1、女主在实验台上醒来 2、发现自己被改造成了机器人 3、观察四周,发现周围都是与自己一模一样的机器人 4、女主逃出实验室,发现外面是一个庞大的赛博朋克都市 5、女主找到自己原来的家,已经变成废墟,空无一人 6、女主回想起来,自己和家人遭遇了车祸 7、女主发现自己的身体现在灵活度很高、力量很大 8、女主下定决心,要回实验室找回自己的家人 生图提示词要求 1、风格为赛博朋克风格 2、根据场景确定是使用全身还是上半身 3、人物描述 4、场景描述 5、做啥事情 例子: 赛博朋克风,一个白色短发少女,躺在冰冷的实验台上,睁开眼睛,眼神空洞,上半身,机械躯干
以下为通义千问给出的回答:
提示词
基于通义千问给出的回答,在魔搭提供的免费实例上再次运行Task1中的baseline,并进一步调整,最终的生图提示词如下:序号 | 故事描述 | 正向提示词 | 反向提示词 |
1 |
女主在实验台上醒来
|
生物力学赛博朋克。一个白色短发少女,躺在冰冷的实验台上,睁开眼睛,眼神空洞,上半身特写,背景是昏暗的实验室,充满未知的设备。控制论、人机融合、反乌托邦、有机与人工的结合、黑暗、复杂、高度详细 |
自然,色彩鲜艳,变形,素描,低对比度,水彩 |
2 |
发现自己被改造成了机器人
|
生物力学赛博朋克。一个白色短发的女性机器人,站在镜子前观察自己的身体,镜子里反射出她带有机械臂和裸露电路的身体,全身展示,实验室背景,表情疑惑且略带恐惧。控制论、人机融合、反乌托邦、有机与人工的结合、黑暗、复杂、高度详细 | 自然,色彩鲜艳,变形,素描,低对比度,水彩 |
3 |
观察四周,发现周围都是与自己一模一样的机器人
|
生物力学赛博朋克。一个白色短发的女性机器人,环视四周,周围站着许多与她外观相同的机器人,全身展示,实验室背景,表情困惑。控制论、人机融合、反乌托邦、有机与人工的结合、黑暗、复杂、高度详细 | 自然,色彩鲜艳,变形,素描,低对比度,水彩 |
4 |
女主逃出实验室,发现外面是一个庞大的赛博朋克都市
|
生物力学赛博朋克。一个白色短发的女性机器人,从破旧的实验室门里跑出来,背后是灯火辉煌、高楼林立的都市夜景,全身展示,紧张而好奇的表情。控制论、人机融合、反乌托邦、有机与人工的结合、黑暗、复杂、高度详细 | 自然,色彩鲜艳,变形,素描,低对比度,水彩 |
5 |
女主找到自己原来的家,已经变成废墟,空无一人
|
生物力学赛博朋克。一个白色短发的女性机器人,站在被破坏的城市废墟之中,面前是她曾经的家,现在已成为一片废墟,全身展示,表情悲伤。控制论、人机融合、反乌托邦、有机与人工的结合、黑暗、复杂、高度详细 | 自然,色彩鲜艳,变形,素描,低对比度,水彩 |
6 |
女主回想起来,自己和家人遭遇了车祸
|
生物力学赛博朋克。一个白色短发的女性机器人,站在车祸现场的回忆之中,旁边是翻倒的车辆残骸,上半身特写,眼神中带着痛苦和回忆。控制论、人机融合、反乌托邦、有机与人工的结合、黑暗、复杂、高度详细 | 自然,色彩鲜艳,变形,素描,低对比度,水彩 |
7 |
女主发现自己的身体现在灵活度很高、力量很大
|
生物力学赛博朋克。一个白色短发的女性机器人,在空旷的仓库内测试自己的身体能力,展示她的灵活性和力量,全身展示,背景是废弃仓库,表情自信且惊讶。控制论、人机融合、反乌托邦、有机与人工的结合、黑暗、复杂、高度详细 | 自然,色彩鲜艳,变形,素描,低对比度,水彩 |
8 |
女主下定决心,要回实验室找回自己的家人
|
生物力学赛博朋克。一个白色短发的女性机器人,站在实验室入口处,眼神坚定地看向内部,全身展示,背景是阴暗的实验室入口,表情坚决。控制论、人机融合、反乌托邦、有机与人工的结合、黑暗、复杂、高度详细 | 自然,色彩鲜艳,变形,素描,低对比度,水彩 |
生成结果与评分
pip install simple-aesthetics-predictor import torch, os from PIL import Image from transformers import CLIPProcessor from aesthetics_predictor import AestheticsPredictorV2Linear from modelscope import snapshot_download model_id = snapshot_download('AI-ModelScope/aesthetics-predictor-v2-sac-logos-ava1-l14-linearMSE', cache_dir="models/") predictor = AestheticsPredictorV2Linear.from_pretrained(model_id) processor = CLIPProcessor.from_pretrained(model_id) device = "cuda" predictor = predictor.to(device) def get_aesthetics_score(image): inputs = processor(images=image, return_tensors="pt") inputs = {k: v.to(device) for k, v in inputs.items()} with torch.no_grad(): outputs = predictor(**inputs) prediction = outputs.logits return prediction.tolist()[0][0] def evaluate(folder): scores = [] for file_name in os.listdir(folder): if os.path.isfile(os.path.join(folder, file_name)): image = Image.open(os.path.join(folder, file_name)) scores.append(get_aesthetics_score(image)) if len(scores) == 0: return 0 else: return sum(scores) / len(scores) score = evaluate("./images") print(score)
可以看到,生成图像的质量不错,但是内容形式较为单调,没有很好地表达我的故事内容。
使用美学评分的结果为:6.50
二、然后,我使用通义千问给出的生成提示词来进行生成,结果如下:
使用美学评分的结果为:6.40
可以看到,生成图像的内容更加符合我给出的故事描述,这是因为通义千问根据我的描述给出了更细化的生成提示词。
但是美学评分没有提升,反而有略微下降。这可能说明提示词的精细化主要提升了对故事剧情的表现力,而并没有起到提升质量的效果。
三、试用scepter webui
浅试了一下scepter webui的生成效果,发现生成结果并不稳定,会生成不相关风格的图片。可能原因是没有在相应数据集上进行微调训练。生成结果如下:
总结
作为一个计算机专业的学生,在平时编程时会接触一些比较复杂难懂的代码,如果仅凭自己一行行去阅读代码是很费时费力的,还有可能产生误解。
通过使用AI大语言模型来了解代码工作流程、获取代码解释,对于快速理解代码功能、帮助自己初步读懂代码,是非常有帮助的。
并且,可以通过精细化调整prompts,并明确表达自己的要求,来使回答更接近自己想要的状态。
对于文生图任务,我们也可以通过给出概括的描述,而让大语言模型来为我们将prompts精细化,并通过自己的调整,使生成图像接近理想的状态。