1. 簡介
上次更新時間:2023 年 10 月 12 日
產生圖像
Google 圖片是強大的 Google 大型語言模型,可根據文字描述產生寫實創意的圖片。Vertex AI 中的 Imagen 可讓使用者在幾秒內建構新一代 AI 產品,將使用者的想像力轉化為高品質的視覺資產。除了文字生成圖片外,這項功能也支援透過文字提示、圖片說明文字、圖像問答、主題與風格式圖像模型調整。
生成提示
如要使用 Imagen 建立圖片,您需要提供圖片的文字說明 (即提示),並使用生成的圖片。不過,如要生成高品質的擬真圖片,就必須提示專業知識。如果您想生成與特定業務領域 (例如零售、製造等) 相關的圖片,這也取決於網域。
整體方法大致上是
GRadio 使用者介面
GRadio 是開放原始碼的 Python 程式庫,可讓您使用幾行程式碼,快速為機器學習模型、任何 API 或甚至是任意 Python 函式建立簡單好用且可自訂的 UI 元件。您可以直接將 GRadio GUI 整合至 Jupyter 筆記本,或是透過連結與任何人分享。GRadio 支援多種媒體類型,包括文字、圖片、影片和音訊。此模式也提供許多預先建立的 UI 元件,例如輸入欄位、按鈕、滑桿和下拉式選單。
建構項目
在本程式碼研究室中,您將部署 GRadio 應用程式,如下所示:
- 使用關鍵字或詞組生成文字提示。也可以手動編輯產生的提示。
- 在 UI 中根據產生的提示生成圖片。
課程內容
- 如何透過程式輔助方式使用零樣本和少量樣本學習,透過程式輔助方式生成圖片專屬的提示,生成圖像。
- 如何透過 API 和提示使用 Imagen 模型產生圖片。
- 瞭解如何透過 Vertex AI Workbench 筆記本建構、部署及測試 GRadio 應用程式。
軟硬體需求
- 可存取 GCP 專案,例如「Cloud-llm-preview4」
- 具備建立 Vertex AI Workbench 的權限
- 已啟用 Vertex AI API。
- GRadio 的網路要求:筆記本執行個體存取公開網址
2. 開始設定
建立筆記本
- 登入專案
- 從左側導覽選單前往 Workbench
- 在「使用者管理的筆記本」下方,使用預設選項建立新的筆記本。
- 按一下「開啟 JUPYTERLAB」。設定完成後
注意事項:如果筆記本處於停止狀態,可能需要幾分鐘的時間才能啟動筆記本。
取得程式碼
我們已將程式碼檔案放在這裡。您可以在環境中匯入這個筆記本,並依原樣執行 (變更專案詳細資料除外)。
3. 執行程式碼
安裝/匯入必要的依附元件和程式庫
- 安裝 GRadio 應用程式
- 匯入 Vertex AI API,用於 Text-Bison 和圖像生成。
- 匯入所有其他必要程式庫。
使用 Text-Bison 產生提示
使用含有關鍵字和/或詞組的使用者輸入內容,也就是以半形逗號分隔的關鍵字或詞組清單,以描述要生成所需圖片的句子。
例如「人物角色」、「主旨」、「背景」、「照明」和其他說明。
產生提示的函式如下所示:
defPrompt_generation(人物 a,signal,theme, light, Quality, extra_desc):
model = TextGenerationModel.from_pretrained("text-bison")
response_few_shot = model.predict(
few_shot_prompt,
**parameters
)
response_single_shot = model.predict(
prompt,
**parameters
)
少量樣本和零樣本提示
「零樣本提示」是一種文字生成技術,不會提供生成文字的背景資訊或範例,這可能相當困難,因為模型必須依賴自身的知識來產生連貫且資訊豐富的文字。
不過,零樣本提示也可以很有創意,因為模型不受任何既有範例的限制。
「少量樣本提示」是一種文字生成技術,其中會提供少量樣本來生成文字。這可能比零樣本提示更簡單,因為模型對於生成內容有一些指引。不過,少量樣本提示可能也會受到限制,因為模型只能產生與範例類似的文字。
以下是少量樣本和零樣本提示的程式碼範例。
**# 程式碼中出現少量樣本提示**
multi_shot_prompt = f""" 你是撰寫圖像生成模型提示的專家,使用提供的詞組和關鍵字串連起來,並加入逼真的細節,生成合理又有意義的提示,可用於生成圖片。
input: people, gardening, house garden, colorful plants, Real, HD image, Photo.
output: A Photo of people gardening in a house garden landscape with few coloured flowering plants. Realistic FULL HD Images, Elegant and natural facial and eye features taken by professional photographer
input: plumber, faucet, kitchen, high quality, natural lighting, Photo
output: A Photo of a plumber fixing a faucet in the kitchen. High quality image with natural indoor lighting.
input: house and garden, halloween, warm lighting, high quality image, Sketch
output: A Sketch of Beautiful House and Garden with Halloween Decorations. Warm lighting, High Quality, 4K photograph taken by professional photographer from front.
input: nice living room, warm lighting,Professional Photographer from far, Photo
output: A photo of a Well designed Living Room. Warm lighting, High Quality, 4K photograph taken by Professional Photographer from far
input: {params_list_str}
output:
"""
# 用於程式碼的零樣本提示
prompt = f"""你是撰寫圖像生成模型提示的專家,幫我寫一份圖片生成模型專用的有意義的提示清單,內含「{params_list_str}」字詞。請記得在提示中加入這些字詞,並確保提示具有有意義的意義。"""
使用 Imagen 產生圖片
採用使用者輸入提示和排除提示(選用),動態饋給則與模型相同 (imagegeneration@002)。
def image_generation_result(input, negative_prompt):
input_prompt = input
model = ImageGenerationModel.from_pretrained("imagegeneration@002")
response = model.generate_images(
prompt=input_prompt,
number_of_images=4, #kept to static value of 4
negative_prompt=negative_prompt
)
內含以下程式碼,可根據使用者輸入提示和排除提示生成圖像。最後程式碼會使用 Text-bison 模型產生的提示。
from vertexai.preview.vision_models 匯入 ImageGenerationModel
def image_generation(input, negative_prompt):
input_prompt = input
model = ImageGenerationModel.from_pretrained("imagegeneration@002")
response = model.generate_images(
prompt=input_prompt,
number_of_images=4, #kept to static value of 4.. can be a max value of 8
negative_prompt=negative_prompt
)
images = response.images
return images
user_prompt = "Prompt:小女子展示,在一堆樹木中出售未經裝飾的「新鮮聖誕樹」。冷燈、高畫質且清晰的影像,由專業攝影師從遠處拍攝。」
negative_prompt =「失真且無突發的臉孔」
generate_images_list = image_generation(user_prompt,negative_prompt)
#show 一張生成圖像
generated_images_list[0].show()
輸出內容 -
4. 部署 GRadio 應用程式
GRadio 適用於前端,使用者可在使用者輸入關鍵字並生成結構化提示後,直接使用或進一步編輯這些提示,再輸入至 Imagen,根據輸入內容產生圖像。GRadio 是一種 Python 程式庫,可用來建立機器學習模型的使用者介面。就這個應用程式而言,Blocks 可用來為這個應用程式新增彈性和複雜的資料流程。Blocks 使用列和欄提供應用程式版面配置管理:
with gr.Blocks() 示範:
#Prompt Generation Part
with gr.Row():
with gr.Column(scale=1):
Persona = gr.Textbox(label="Persona", info = "Customer segment such as Plumber, Electrician etc.")
with gr.Column(scale=1):
Signals = gr.Textbox(label="Signals", info = "Main content of banner such as Faucet, Lamp etc.")
with gr.Column(scale=1):
Theme = gr.Textbox(label="Theme", info = "Context of the banner such as Halloween, Kitchen etc.")
with gr.Row():
with gr.Column(scale=1):
photo_modifiers = gr.Textbox(label="Photography Modifiers", info = "Photography specific modifiers and parameters such as Lighting(Dramatic/Natural/Warm/Cold), Camera Proximity etc.")
with gr.Column(scale=1):
quality_modifiers = gr.Textbox(label="Image Quality Modifier", info = "Quality Modifiers like high-quality, beautiful, stylized. 4K, HDR, By a professional etc")
with gr.Column(scale=1):
other_desc = gr.Textbox(label="Any Other Description", info = "Other Descriptions for Image such as Style (Painting/Photo/Sketch), Bakground/Foreground Context")
加入 gr.Row():
btn = gr.Button("Submit")
加入 gr.Row():
returned_prompts = gr.Textbox(label="Result Prompts", interactive = True)
btn.click(fn=prompt_generation, input=[Persona, Signals,Theme, photos_modifiers, Quality_modifiers, other_desc], outputs = return_prompts)
為了處理使用者的輸入和輸出內容,GRadio 提供多種元件,例如圖片、影片、滑桿、下拉式選單、Textbox、Radio 等選項。有了這些元件,開發人員就能靈活控管使用者輸入資料的方式,並提供給 Test-Bison、Imagen 或任何其他機器學習模型。
這項專案的應用程式使用 Blocks 建立而成,因此可增加彈性和複雜性
資料流向應用程式在《Addition to Blocks》中,多個 GRadio 元件
,其中包括:
- 適用於適當版面配置的列、欄。
- 按鈕、文字方塊、下拉式選單和滑桿可取得所需功能,且更容易使用
- 「Image」元件,用於顯示結果。
- 其他輔助程式 (例如 EventData、更新),以支援 UI 的動態變更。
以下程式碼片段可用來根據輸入內容和排除提示生成圖片:
#圖片產生部分
with gr.Row():
with gr.Column(scale=1):
image_prompt = gr.Textbox(label="Image Generation Prompt")
with gr.Accordion("Advanced options", open=False): #Let's hide the advanced options!
with gr.Row():
negative_prompt = gr.Textbox(label="Negative prompt", info = "Specify What not to Include in Image ex. Bad Quality Image")
with gr.Row():
with gr.Column(scale=1):
img_btn = gr.Button("Generate Images")
with gr.Row():
with gr.Column():
output_image_1 = gr.Image(label = "Result Image 1", visible = False)
with gr.Column():
output_image_2 = gr.Image(label = "Result Image 2", visible = False)
with gr.Row():
with gr.Column():
output_image_3 = gr.Image(label = "Result Image 3", visible = False)
with gr.Column():
output_image_4 = gr.Image(label = "Result Image 4", visible = False)
returned_prompts.select(populate_image_prompt, inputs = [returned_prompts], outputs = image_prompt)
img_btn.click(fn=image_generation_completion, inputs=[image_prompt,negative_prompt], outputs = [output_image_1,output_image_2,output_image_3,output_image_4])
如要執行並測試 GRadio 應用程式,只要輸入文字提示,然後按一下「產生」按鈕即可。Imagen 會依據提示生成圖片。你可以嘗試不同提示,瞭解 Imagen 可產生哪些類型的圖片。
以下是 GRadio 應用程式「生成提示」的螢幕截圖。
以下是 GRadio 應用程式「生成圖像」的螢幕截圖。
以下列舉幾個例子:
範例 1:
[左圖] 提示 (使用簡單的關鍵字做為提示):兩位朋友划船。
[右圖] 提示 (使用 Text-Bison 產生的提示):2 名年輕男性在船上釣魚的相片,四周環繞著深色樹林。男子身穿襯衫,站在船上。由專業攝影師拍攝的自然光線、高畫質 4K 相片。
範例 2:
[左圖] 提示 (使用簡單的關鍵字做為提示):聖誕樹
[右圖] 提示 (使用 Text-Bison 產生的提示):在裝飾燈和家具的房間中,使用聖誕樹。樹上裝飾著燈飾和裝飾品。牆壁位於窗戶附近,背景內有一面牆壁。由專業攝影師從遠處拍攝的,暖身、高畫質、高動態範圍相片。
5. 清除
如要清理資源
- 停止 gRadio 應用程式。
- 停止/刪除 Workbench 筆記本。
6. 恭喜
恭喜!您已成功使用 Google Text-Bison API 和 Imagen API,部署 GRadio 應用程式以建立提示和圖片。