更新於 2023/07/10閱讀時間約 5 分鐘

如何用 Stable Diffusion + ControlNet 向外擴展圖片?| Outpainting

修圖的時候,有沒有遇過「如果當初再左邊一點就好了!」「如果當初廣角一點就好了!」以前只能想辦法手工 P 出來,但靠 Stable Diffusion + ControlNet 新推出的 Inpaint 模型,除了可以做圖片內修補外,也能往外擴展補完圖片 (outpaintng)!實在太強了!趕快來看看怎麼作吧!

目錄

準備素材

下載 ControlNet Inpaint Model
此作法需要用到 ControlNet 與 ControlNet Inpaint Model,還沒安裝 ControlNet 的話,可以到 Extension Tab ,在 Install from URL 輸入 https://github.com/Mikubill/sd-webui-controlnet.git 安裝 。詳細安裝步驟請參考 github 的 installation 章節。
ControlNet Inpaint Model 請到 HuggingFace 下載 control_v11p_sd15_inpaint.pth 和 control_v11p_sd15_inpaint.yaml 後,放入 stable-diffusion-webui\extensions\sd-webui-controlnet 資料夾內。
回到 StableDiffusion WebUI,重啟一下,如果有看到 ControlNet v1.1 區塊以及 Inpaint Model 就代表安裝完成!
註:若先前已經安裝過 ControlNet,務必更新到 ControlNet v1.1 以上才有 inpaint 功能!

準備實驗圖片
為了「對照」 Stable Diffusion 向外擴展的能力,我刻意使用完整的圖片作裁切去除兩側,留下中央部分給 AI 去補完,最後再與原圖做一番比較
裁切掉兩側的測試圖

使用 Interrogate 推理提示詞
為了讓出圖能夠更完善,可以使用 Stable Diffusion img2img tab 裡內建的 Interrogate CLIP 或 Interrogate DeepBooru 從圖面推理出提詞,再依情況人工修改,速度比較快。詳細步驟如下:
  1. 將圖片拖入 img2img tab 的 source 區塊
  2. 點擊右上方橘色 Interrogate CLIP 按鈕 (DeepBooru 也可以,會以關鍵字的方式產出)
  3. 等待一小段計算時間,推理出的提示詞會出現在 Positive Prompt 輸入框中
  4. 複製備用

使用 ControlNet Inpaint 來 Outpainting

基本 txt2img 設定
一切準備妥當,回到 Stable Diffusion txt2img tab 頁面開始實作:
  1. 貼上剛剛的 Prompt,並適當增加 Negative Prompt
  2. Sampling Method: 選擇 Euler a,因為算圖速度比較快,用來初步構圖
  3. Sampling Steps: 先用預設 20
  4. Width / Hight: 分別設定為 784, 512,數值可自由選擇,但為了讓他能夠作 outpainting,比例一定要和原圖不一樣!以範例來說,原圖是直幅,要讓他 outpainting 成橫幅,寬一定要設定比高來的多。
  5. 其他保留預設即可

ControlNet 設定
接下來重點是 ControlNet 的設定:
  1. 勾選 enable
  2. 將圖片拖到 source 區
  3. Preprocessor: 選擇 inpaint_only
  4. Model: 選擇 control_v11p_sd15_inpaint
  5. Resize Mode: 選擇 Resize and Fill,很重要!因為要讓他 fill 空白的部分,選錯就不會 outpainting!
延伸閱讀

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.