今天來試用stable diffusion另一個好用的外掛,Segment Anything,對於我這種新手級使用者,最直接的就是去背。
它在Extensions的Avaiable中搜尋"sd-webui-segment-anything",安裝後還需要下載model,在GitHub的說明有提供。然後如它的說明可以放在extensions資料夾中的sd-webui-segment-anything/models/sam資料夾。我用Meta AI中間那個大小的,會爆顯存,但它有開用CPU的選項,開了就還可以用,真是太佛心了。
安裝後,在txt2img和img2img中,如同ControlNet,有個可點開的標籤。首先先來用它最單純的單一圖片模式,匯入想處理的圖片後,要在圖片上左鍵點擊提供正向prompt(會標記成黑色點)或右鍵點擊提供負向prompt(會標記成紅色點),至少要有一才能計算,例如我用之前的範例,在人像的右臂上點上一個黑點:
然後按下下面的"Preview Segmentation",它就會產生3個版本包含遮罩、黑白框,以及去背的結果:
而它的遮罩也可搭配提供給Inpaint upload和ControlNet使用,非常方便,我來試用個正反手的例子。
首先正手來換背景,如上已經Preview Segmentation後,勾選"Copy to Inpaint Upload & img2img ControlNet Inpainting",然後開第0個ControlNet用inpaint,再點Inpaint Upload,mask mode選"Inpaint not masked",Inpaint area選"Only masked",以及給上提字,例如這運動風人物比較適合出現在健身房,按生成就可以產生像下方結果。
反手來換掉人物,這邊ControlNet改開SoftEdge,然後權重要關小一點,不然衣服會因線條不容易更換樣式,同樣再點Inpaint Upload,mask mode選回"Inpaint masked",Inpaint area選"Only masked",以及給上提字,例如原本背景是在泳池邊比較適合泳裝,按生成就可以產生像下方結果,但在改比較大的情況下,在遮罩邊緣會有殘留像貼合線的東西,可以將輸出的圖,丟回img2img,再單跑過一次img2img就會修掉了(不開ControlNet和Inpaint upload),下方這是有再跑過,對比上面那張例子是沒有,但如果仔細看上方圖中人像的邊緣會有些不自然或說不連續的畫面,而下方這個原本的結果太明顯,所以一定需要重跑修過。
它還有進階的功能,讓我明天繼續。