Datawhale X 魔搭 AI夏令營-第四期(AIGC方向)-Task02-可圖Kolors-精讀程式碼 實戰進階

零度的python武器库發表於2024-08-14

往期學習Datawhale X 魔搭 AI夏令營-第四期(AIGC方向)-Task01-可圖Kolors-LoRA風格故事挑戰賽


本期學習的主要內容為:

  1. 使用阿里雲的“通義千問”大模型,來解釋並幫助我們讀懂Task1中的程式碼。
  2. 使用“通義千問”大模型來輔助設計生圖提示詞,並生成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精細化,並透過自己的調整,使生成影像接近理想的狀態。

相關文章