2023-06-05|閱讀時間 ‧ 約 7 分鐘

Stable Diffusion基礎 -- 局部重繪的應用

前言

本篇來講各種不同的局部重繪(Inpaint)設定適合用在哪些情況。
目前局部重繪提供四種不同的填充內容(Masked content):fill,original,latent noise,latent nothing,這四種方法填充的東西都不一樣,綜觀來說,在實際重繪時,他們各有不同的適用情況,下面是根據我本人的經驗歸納的用法:
  • fill:大規模置換
  • original:根據原圖做修正
  • latent noise:完全重繪
  • latent nothing:移除物品
下面就用一些例子來解釋實際碰上的情況與解法。

Masked content:fill

fill選項會將重繪區域的圖最大模糊化,只保留大致的結構跟色彩,所以在大規模置換物品時會用到(但其實,大部分情況用original就綽綽有餘,只有在一些區域巨大的地方會比較有用。)例如下面這個情況:角色正在走上樓梯,但由於角色佔比非常巨大,所以被切割成左右兩邊的樓梯變成了兩個毫無關聯的樓梯,不只是明暗面不同,連級數都不一樣:
fill範例,置換樓梯
fill範例,置換樓梯
這時候就要把左右兩邊的樓梯都選起來,然後用fill配上whole picture以及大約0.5的Denoising strength來修復,配上合適的提示詞,就有很大的機率在十張圖的範圍內算出被修復的樓梯。
fill範例設定
這種方法通常適用於各種同一結構體不對齊,或者被切割之後變成兩個不同物件的修復。

Masked content:original

original選項應該是最常用的,該選項完全不變動被選取的內容,只靠Denoising strength增加的噪點來修改圖像,所以在低Denosing strength時就可以得到很類似原圖的結構、色彩與風格。我在另一篇文章中大量運用了oirginal選項來改動畫作,可以當作參考:
Stable Diffusion練習,我們子孫的未來(一)
在本篇文章,我以改動角色的服裝為例,因為我想要將角色的裙子改顏色風格,但是不希望改變它的外型,所以可以將它的臀部以下的部分全部圈選起來,然後改變提示詞為(long blue dress with starry decoration and gem),配合ControlNet的Reference_only對標原始參考圖,加上大量的抽圖做出自己喜歡的裙子款式。
因為我沒有使用其他的ControlNet功能來固定角色的姿勢或邊緣線條,所以臀部與腳的姿勢也會一起變動。
original範例,置換裙子
在設定這邊,除了選取original之外,Inpaint area選擇Whole picture可以保證它整張圖光影與色調一致。同時使用Denosing strength在0.65,是能改變最多內容但勉強能保持結構不變的極限值。大約在抽了15張圖後找到自己喜歡的成果。
original範例設定
另外,在人體結構很清晰的情況下,還可以靠著ControlNet做出更強力但不影響人體結構的改動,詳情請參考:
Stable Diffusion進階 -- 穿衣換衣術

Masked content:latent noise

latent noise會在改動的範圍內依照seed的值撒上高斯分佈噪點,將選取範圍完全破壞掉,等於是重算被選取範圍,因此會有很大機率算出與周圍圖形完全無關的新東西,適合在重創意的情況下使用。下面的範例將左方圈選起來,然後使用提示詞(entry of a ball room)來重算該區域。
latent noise範例,由牆變門
設定上除了使用latent noise之外,Denoising strength通常要開到0.6以上,用比較強的力道來去噪,並且配上很高的Sampling steps(通常要超過30步),否則通常會得到很奇怪的圖形。
latent noise範例設定

Masked content:latent nothing

latent nothing是個很好玩的功能,就字面上的意思它是指將選取區的latent空間(一種原圖的高度空間縮小版)填上0。但是在實務上,它其實會計算被選取區域周圍的圖象,然後計算一個平均的顏色填充在裡面,很適合移除不要的物件。
下面這個範例,角色臀部上的金色刺繡條紋是我不需要的,所以選取了整個金色刺繡之後,確認選取範圍已經完整涵蓋所有金色像素之後,就可使用latent nothing來改圖了:
latent nothing範例,金邊變不見
除了latent nothing之外,提示詞保持不變(long blue dress with starry decoration and gem),並且用Denosing strength在0.65的高強度上計算,這次只需要算個5張圖就能得到很不錯的移除效果。
latent nothing範例設定

結語

Inpaint這個功能是一個非常重要的基本功能,配合上ControlNet,就能實現很多不可思議的修圖功能。甚至可以這樣說,只有用順了Inpaint以及ControlNet,才能擺脫AI算圖的不可預測性,駕馭AI服從於我們人類的創造力。

參考連結

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