ControlNet 的出現,讓 Stable Diffusion 的影像生成過程更加可控,並能有效保留輸入圖片的結構和細節。選擇合適的 ControlNet 模型至關重要,例如 Canny 模型適用於保留邊緣資訊,而 SoftEdge 模型則更擅長捕捉紋理細節。搭配提示詞使用,能更精準地控制生成影像的內容和風格。同時,Segment Anything Model (SAM) 提供了強大的影像分割功能,能自動分割影像元素,並與 ControlNet 結合使用,進一步提升影像生成的精細度和靈活性。在 AUTOMATIC1111 介面中使用 SAM 需要安裝特定的擴充套件,並下載 SAM 模型權重檔案。

使用ControlNet精準控制圖片生成

在利用Stable Diffusion進行圖片生成時,ControlNet提供了一種強大的工具,能夠對生成的圖片進行更精確的控制。透過使用ControlNet,可以有效地將輸入圖片的結構和細節保留到生成的圖片中,從而實作更高水準的圖片一致性和可控性。

ControlNet模型選擇的重要性

選擇適合的ControlNet模型對於生成理想的圖片至關重要。不同的模型在保留輸入圖片細節的程度上有所不同。例如,使用Canny模型(如control_v11p_sd15_canny)可以有效地保留圖片的邊緣資訊,而SoftEdge模型則能夠捕捉到更豐富的紋理和細節。根據具體的任務需求,選擇一個合適的模型可以更好地實作預期的效果。

舉例來說,如果想要將一張貓的圖片轉換成獅子,使用SoftEdge模型可能會因為保留過多的細節而導致轉換效果不佳,此時可以嘗試使用其他更合適的模型。與所有Stable Diffusion相關的技術一樣,找到最佳的模型和引陣列合需要不斷的實驗和嘗試。

使用ControlNet進行圖片生成

ControlNet支援使用簡單的提示詞,甚至可以在沒有提示詞的情況下執行。它能夠根據輸入的圖片生成高度一致的輸出結果。使用者可以輸入一個通用的提示詞,如「專業、詳細、高品質的圖片」,來獲得一個不錯的輸出結果。然而,大多數情況下,使用者會希望改變圖片的某些方面,因此需要輸入完整的提示詞。生成的圖片將同時符合提示詞和ControlNet的輸出結果,透過調整相關引數,可以獲得更好的效果。

Segment Anything Model(SAM)技術詳解

在處理AI生成的圖片時,能夠自動分割出特定的人物、物件或元素是一個非常有價值的功能。例如,將一個人的影像與背景分開,以便在該人物後面重新繪製新的背景。使用傳統的手動方法不僅耗時,而且容易出錯。因此,利用AI模型自動進行影像分割就顯得尤為重要。

SAM模型的強大功能

由Meta開源釋出在GitHub上的Segment Anything Model(SAM)是目前最受歡迎和最強大的影像分割模型之一。SAM經過1100萬張圖片和11億個遮罩的訓練,能夠根據使用者輸入(點選新增一到三個點)推斷出遮罩應該在哪裡,或者自動為圖片中的所有元素建立遮罩。這些遮罩可以被匯出,用於後續的圖片修復、ControlNet處理或作為基礎圖片。

在AUTOMATIC1111中使用SAM

在AUTOMATIC1111介面中使用SAM需要安裝sd-webui-segment-anything擴充套件。具體步驟如下:

  1. 導航到Extensions標籤,點選「Available」子標籤。
  2. 點選「Load from」按鈕。
  3. 在搜尋框中輸入「sd-webui-segment-anything」以找到該擴充套件。
  4. 點選右側的Install按鈕進行安裝。
  5. WebUI將下載必要的檔案並在本地安裝SAM。

如果遇到問題,可以嘗試以下替代方法:

  1. 導航到「Extensions」標籤,點選「Install from URL」子標籤。
  2. 在Git儲存函式庫的URL欄位中貼上擴充套件的連結:https://github.com/continue-revolution/sd-webui-segment-anything。
  3. 點選Install按鈕。
  4. WebUI將下載並安裝SAM所需的檔案。

此外,還需要下載SAM模型的權重檔案(例如1.25 GB的sam_vit_l_0b3195.pth),並將其放入stable-diffusion-webui/sd-webui-segment-anything/models/sam資料夾中。

操作SAM進行影像分割

安裝完成後,重啟AUTOMATIC1111。在Img2Img標籤中,可以找到SAM擴充套件。上傳一張圖片,點選圖片以選擇提示點,這些提示點將作為使用者輸入幫助SAM模型確定需要分割的部分。點選Preview可以預覽將要建立的遮罩,並根據需要新增或移除提示點,直到遮罩正確為止。

當遮罩準備就緒後,確保選中「Copy to Inpaint Upload & img2img ControlNet Inpainting」選項,然後點選「Switch to Inpaint Upload」按鈕。切換到Inpainting標籤後,可以使用SAM生成的遮罩進行圖片生成,而無需再次上傳圖片或遮罩。

SAM使用範例程式碼

# 以下是一個簡化的範例,展示如何使用SAM進行影像分割
import cv2
import numpy as np
from segment_anything import SamPredictor, sam_model_registry

# 載入SAM模型
sam = sam_model_registry["vit_l"](checkpoint="sam_vit_l_0b3195.pth")
predictor = SamPredictor(sam)

# 載入圖片
image = cv2.imread("input_image.jpg")
predictor.set_image(image)

# 定義提示點
input_points = np.array([[100, 100], [200, 200]])  # 示例座標
input_labels = np.array([1, 1])  # 示例標籤

# 進行影像分割
masks, _, _ = predictor.predict(
    point_coords=input_points,
    point_labels=input_labels,
    multimask_output=True,
)

# 處理分割結果
for i, mask in enumerate(masks):
    cv2.imwrite(f"mask_{i}.png", mask * 255)

內容解密:

此範例程式碼展示瞭如何使用SAM模型進行影像分割。首先,需要載入SAM模型和輸入圖片。然後,定義提示點和對應的標籤。接著,利用SAM模型的predict方法生成遮罩。最後,將生成的遮罩儲存為圖片檔案。

Mermaid流程圖:SAM操作流程

  graph LR
    D[D]
    A[上傳圖片] --> B[選擇提示點]
    B --> C[預覽遮罩]
    C --> D{遮罩正確?}
    D -- 是 --> E[切換到Inpaint Upload]
    D -- 否 --> B
    E --> F[在Inpainting標籤中生成圖片]

此圖示展示了使用SAM進行影像分割的主要步驟,包括上傳圖片、選擇提示點、預覽遮罩、調整提示點直到遮罩正確,以及最終在Inpainting標籤中生成圖片。

圖表翻譯: 此Mermaid流程圖清晰地展示了使用SAM進行影像分割的操作流程。首先,上傳需要處理的圖片。接著,透過點選圖片選擇提示點,以幫助SAM模型理解需要分割的部分。預覽生成的遮罩,如果遮罩不符合預期,可以繼續調整提示點,直到獲得滿意的結果。最後,將遮罩應用於Inpaint Upload,並在Inpainting標籤中進行進一步的圖片處理和生成。

以DreamBooth微調技術提升Stable Diffusion模型效能

隨著人工智慧技術的發展,像Midjourney和Stable Diffusion這樣的生成模型已經展現出強大的影像生成能力。然而,這些模型並非萬能,尤其是在處理複雜影像任務時。為了提升影像生成的品質和靈活性,Meta開發了一種獨立的影像分割模型,能夠將影像元素分解成不同的遮罩(masks),對這些元素進行單獨處理後再聚合,生成更為複雜的影像。

DreamBooth微調技術簡介

訓練一個基礎的Stable Diffusion模型需要耗費大量的資源,據報導原始模型的訓練成本約為60萬美元,使用了總計15萬GPU小時。對於大多陣列織來說,從零開始訓練自己的基礎模型是不可行的。然而,利用DreamBooth技術,可以在現有的Stable Diffusion模型基礎上進行微調,使其理解新的概念,而無需從頭開始訓練。

DreamBooth技術由Ruiz等人於2022年提出,能夠在短時間內(約45分鐘到1小時,使用1個GPU)對模型進行微調,生成一個新的2GB模型檔案,用於替換AUTOMATIC1111中的基礎Stable Diffusion模型。這種方法大大節省了時間和資源。

使用DreamBooth模型

目前有多個根據DreamBooth的模型可供下載,例如在Hugging Face和Civitai等網站上。這些模型可以直接下載並放入stable-diffusion-webui/models/Stable-diffusion/資料夾中,用於AUTOMATIC1111。

使用DreamBooth模型時,通常需要在提示詞(prompt)中包含特定的詞彙或標記(token),以觸發模型生成特定風格或主題的影像。例如,使用Inkpunk Diffusion模型時,需要在提示詞中包含nvinkpunk這個詞。

程式碼範例:使用DreamBooth模型

# 使用Inkpunk Diffusion模型生成影像
prompt = "skateboarding in Times Square nvinkpunk"
# 設定影像大小為512x512
image_size = (512, 512)
# 生成影像
image = generate_image(prompt, image_size)

內容解密:

  1. prompt變數:定義了生成影像的提示詞,包括了nvinkpunk這個特定詞彙,以觸發Inkpunk Diffusion模型的風格。
  2. image_size變數:設定了生成影像的大小,由於Inkpunk Diffusion模型根據Stable Diffusion v1.5,因此設定為512x512。
  3. generate_image函式:這是一個假設的函式,用於根據提示詞和影像大小生成影像。實際使用時,需要呼叫相應的Stable Diffusion模型API或函式。

微調DreamBooth模型的最佳實踐

許多人在使用AI模型時會犯的一個錯誤是,認為有一個模型可以解決所有問題。實際上,有很多創意模型可供選擇,通常針對特定任務進行訓練會比使用通用的基礎模型獲得更好的結果。大多數實踐者從Stable Diffusion XL等基礎模型開始,但很快就會嘗試使用更小、更高效的模型(如v1.5)來微調自己的模型。

Shivam Shrirao的程式函式庫是訓練DreamBooth模型的首選方法,該程式函式庫使用了Hugging Face的diffusers函式庫。接下來將解釋如何在Google Colab中使用該程式碼。

程式碼範例:安裝必要的函式庫

# 安裝必要的函式庫
!wget -q https://github.com/ShivamShrirao/diffusers/raw/main/examples/dreambooth/train_dreambooth.py
!wget -q https://github.com/ShivamShrirao/diffusers/raw/main/scripts/convert_diffusers_to_original_stable_diffusion.py
%pip install -qq git+https://github.com/ShivamShrirao/diffusers
%pip install -q -U --pre triton
%pip install -q accelerate transformers ftfy bitsandbytes==0.35.0 gradio natsort safetensors xformers

內容解密:

  1. !wget命令:下載DreamBooth訓練指令碼和轉換指令碼。
  2. %pip install命令:安裝必要的Python套件,包括diffusers、triton、accelerate等。
  3. 版本控制:特別指定了bitsandbytes的版本為0.35.0,以確保相容性。

設定輸出目錄

為了儲存訓練好的模型權重,需要設定輸出目錄。建議將模型儲存到Google Drive,以便更可靠地下載大檔案(4-5 GB)。

程式碼範例:設定輸出目錄

# 設定輸出目錄
save_to_gdrive = False
if save_to_gdrive:
    from google.colab import drive
    drive.mount('/content/drive')
    
MODEL_NAME = "runwayml/stable-diffusion-v1-5"
OUTPUT_DIR = "stable_diffusion_weights/ukj"
if save_to_gdrive:
    OUTPUT_DIR = "/content/drive/MyDrive/" + OUTPUT_DIR
else:
    OUTPUT_DIR = "/content/" + OUTPUT_DIR
print(f"[*] Weights will be saved at {OUTPUT_DIR}")
!mkdir -p $OUTPUT_DIR

內容解密:

  1. save_to_gdrive變數:決定是否將模型權重儲存到Google Drive。
  2. MODEL_NAME變數:指定了基礎模型的名稱,這裡使用的是"runwayml/stable-diffusion-v1-5"。
  3. OUTPUT_DIR變數:設定了輸出目錄的路徑,如果save_to_gdrive為True,則儲存到Google Drive,否則儲存到Colab的預設路徑。
  4. !mkdir -p $OUTPUT_DIR命令:建立輸出目錄,如果目錄已存在則不執行任何操作。

隨著生成式AI技術的不斷發展,未來可能會出現更多高效的微調方法和更強大的基礎模型。這將進一步降低創作者的使用門檻,提升創作效率,並推動AI輔助創作在更多領域的應用。同時,如何平衡模型的創作能力和可控性,將是未來研究的重要方向。

參考資料

  • Ruiz, N., Li, Y., Jampani, V., Wei, Y., Rubinstein, M., & Isola, P. (2022). DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation.
  • Hugging Face Diffusers Library: https://github.com/huggingface/diffusers

透過本文的介紹,希望讀者能夠對DreamBooth微調技術有更深入的瞭解,並能夠在實際應用中靈活運用這一技術,提升自己的創作效率和影像生成品質。