修圖的時候,有沒有遇過「如果當初再左邊一點就好了!」「如果當初廣角一點就好了!」以前只能想辦法手工 P 出來,但靠 Stable Diffusion + ControlNet 新推出的 Inpaint 模型,除了可以做圖片內修補外,也能往外擴展補完圖片 (outpaintng)!實在太強了!趕快來看看怎麼作吧!
目錄
準備素材
下載 ControlNet Inpaint Model
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 從圖面推理出提詞,再依情況人工修改,速度比較快。詳細步驟如下:
- 將圖片拖入 img2img tab 的 source 區塊
- 點擊右上方橘色 Interrogate CLIP 按鈕 (DeepBooru 也可以,會以關鍵字的方式產出)
- 等待一小段計算時間,推理出的提示詞會出現在 Positive Prompt 輸入框中
- 複製備用
使用 ControlNet Inpaint 來 Outpainting
基本 txt2img 設定
一切準備妥當,回到 Stable Diffusion txt2img tab 頁面開始實作:
- 貼上剛剛的 Prompt,並適當增加 Negative Prompt
- Sampling Method: 選擇 Euler a,因為算圖速度比較快,用來初步構圖
- Sampling Steps: 先用預設 20
- Width / Hight: 分別設定為 784, 512,數值可自由選擇,但為了讓他能夠作 outpainting,比例一定要和原圖不一樣!以範例來說,原圖是直幅,要讓他 outpainting 成橫幅,寬一定要設定比高來的多。
- 其他保留預設即可
ControlNet 設定
接下來重點是 ControlNet 的設定:
- 勾選 enable
- 將圖片拖到 source 區
- Preprocessor: 選擇 inpaint_only
- Model: 選擇 control_v11p_sd15_inpaint
- Resize Mode: 選擇 Resize and Fill,很重要!因為要讓他 fill 空白的部分,選錯就不會 outpainting!
延伸閱讀