更新於 2023/05/20閱讀時間約 12 分鐘

讓AI幫你成為超級英雄 — 談怎麼用自己的照片來做AI繪圖

Under the sea - using self-trained LORA
Under the sea - using self-trained LORA
看到AI的繪圖,大家心裡頭的感受是什麼? 這個問題我也問了很多身邊的同事,有些人覺得AI繪畫非常的酷炫,有些人覺得將來設計師不用幹了,也有一些人看到AI繪畫真人的時候覺得以後都無法判斷什麼照片是真的是假的了。 試用AI繪圖的時候,你心裡頭的感覺又是怎麼樣子的呢?我想大部分的人應該都是覺得這個東西超酷的,所以開始玩,但是過了一陣子以後呢靈感枯竭,想說AI繪圖大概就是這個樣子吧。
今天我這邊提供大家一個方法,讓大家可以自己成為這些AI繪圖的主角,也就是在AI裡面建立屬於你自己個人的模型。那麼AI繪圖對你來說不僅僅只是AI繪圖而已,而是可以把你或是家人朋友帶入各式各樣的角色裡面成為海報的主角,成為故事的主角,這個東西保證大家沒有這麼容易玩膩。大家可能比較少在英文網站以外的地方看到這類的教學,這是因為這部分的訓練的的確比較有一些技術的門檻,我這邊會嘗試用比較簡單的方式讓大家可以一個步驟一個步驟照著做,就能夠達到我們想要達到的結果。
這邊也跟大家先說明一下,唯一的一個需求就是你的電腦需要有獨立顯示卡,至少6GB的VRAM,其實如果沒有獨立顯示卡那麼也有其他的方法可以克服,這個我會補充在其他篇的文章之中。
AI訓練的方式呢,有分好多種。至少就有Dreambooth Checkpoint, LORA, textual inversion 跟 Hypernetworks. 我這篇先介紹的是LORA的方法,如果養有時間就會再另外撰寫一篇使用Checkpoint的方式。 LORA的方式好處是訓練出來的結果可以搭配各式各樣的Model使用,我個人測試的結果可以捕捉的到神韻,但是又可以產出非常有美術風格的產品,如果你的目的是要訓練一個人物的肖像的話,那麼我認為LORA應該是最推薦的做法,因為Checkpoint訓練不易且很容易改變整個出圖的風格跟細緻度,訓練不好非常可能會降低圖片的品質,Textual Inversion跟Hypernetwork則是比較輕量化,比較適合做風格或是細節的調整。
訓練自己的一個LORA真的不是一件容易的事情,為了能讓大家也能跟著實作,我們把產出自己的LORA Model這件事情拆解成為底下六個步驟
1. 收集好訓練用的圖片 2. 預先處理圖片 3. 安裝訓練用的程式 4. 設定訓練用的參數 5. 開始訓練 6. 測試訓練出來的結果
首先我們來進行第一步,收集好訓練用的圖片,我想絕大多數人都會先從訓練自己的模型,或是替身邊親密的家人建立模型開始,我自己也是先從這邊開始玩,這邊特別感謝痔瘡手術女醫師-鍾雲霓提供照片讓我們這個blog作為範本,所以我們全部文章的照片都會以鍾醫師作為範本來練習(各位如果不想用家人的話,也可以用stable diffusion資料庫裏面沒有的名人來做練習)。 玩到上癮以後就可以開始鑽研怎樣把圖片產生的更有美感,更有變化的。 所以我們的範例就先從訓練人臉開始,收集人臉照片當然是第一步了,我自己到目前為止的訓練心得大概如下 1. 收集能夠清晰看到臉部的照片,至少15張,數量多的話更好,我自己是用25張左右下去訓練 2. 可以的話能夠有多版本的角度,還有不同表情會更好 3. 為了避免AI訓練的時候混淆,儘量照片裡面不要有其他的人臉存在 這些照片,可以的話稍微經過裁切處理,這邊不用太要求,只要清晰,然後人物的臉很清楚就好了。
接下來就是第二步,要來預先處理圖片,可以請大家直接到以下這個網站 https://www.birme.net/?target_width=512&target_height=512
將圖片在Birme做裁切以及Resize
把照片一口氣全部上傳上去,然後每一張圖片都可以選擇要裁切的部分,選好以後按下右邊的Save Files就可以一口氣下載了。我這邊的範例是裁切成512x512,因為我有很多人臉解析度都沒有太高,如果大家有高解析度,清晰的人臉,那不妨考慮裁切成768x768等更高的解析度的照片。 下載下來的照片,要麻煩大家做特殊的處理,首先是要設計一個Keyword, 這個Keyword就是將來AI繪圖軟體聽到這個單字的時候,就知道要畫這個特定的你訓練過的人物,這就是好像跟AI約好一個魔法單字一樣,他聽到這個魔法單字就把你畫出來。而且這個keyword不可以是已知的單字,否則AI就會把你這個特定的人物跟他已知的物體搞混了。舉例來說,我這邊選的Keyword 是”sksxandra” 這個不存在的單字。
我們需要依照特殊的結構,來擺放這些裁切好的圖片檔案,首先請大家用Key word 為資料夾名稱建立一個資料夾,然後裡面依序開三個資料夾,分別為image, model, log這三個名字如圖
訓練用資料夾架構
接下來進入到image這個資料夾裡面,創造一個資料夾,名稱是100_keyword,請大家把keyword換成自己的keyword以我們例子來說我就創建了100_sksxandra這個資料夾
放實際上的圖片的資料夾
最後,把你剛剛下載下來裁切好的圖片都放到這個100_keyword資料夾裡面。最後呢,需要把這些圖片檔都更名成為類似的檔名,這步該怎麼做呢? 教大家一個簡單的方法,把資料夾裡面的檔案都全選起來,直接按滑鼠右鍵更改名字,打上你的keyword,voila! 就會發現windows自動幫你把每個檔名都改好了!
Batch rename your jpg files
接下來是第三步驟,需要去安裝我們訓練Model用的程式,這邊請容許我耍個懶,請大家參考這位大大的文章 日後我應該也會補充一篇文章,說明該怎麼簡單無痛的安裝這個軟體。
接下來是第四個步驟,需要依靠這個軟體來產生所謂的文字說明檔案。 請大家到Kohya-ss安裝的資料夾裡面點擊gui.bat 看到如下的畫面的時候,打開你的瀏覽器(Chrome/Edge/Safari都可以),然後鍵入這個畫面上寫的URL http://127.0.0.1:7860/ 就可以看到Kohya-ss的執行畫面了
Kohya-ss GUI
首先在最上方的tab選擇Utilties 這個按鈕,然後第二層選Captioning, 第三層選BLIP Caption. 下方的Image folder 選擇你剛剛存放影像的那個位置,然後在下方的prefix to add to BLIP cation請記得打上你的keyword,就可以開始Caption images! 第一次用的時候可能會發現視窗會自動下載很多程式安裝,會需要不少時間,但是第二次使用以後很快就會完成了。完成以後就會發現原本放圖片的資料夾多了很多的txt檔案,這些檔案就是告訴AI,到底每一張圖片裡面是什麼,這樣AI才可以清楚辨別要學習的人物,還有不相干的背景是什麼。 到這邊我們才算真正替AI準備好了要學習用的資料集(datasets)。大家可以回頭複習一下我這篇文章,有說明AI怎麼學習產生圖片的。這個資料夾裡面就是一張照片搭配一張說明,讓AI可以看著圖看著文字敘述,去學習怎麼產生這個圖片裡面的人物。
第五個步驟,終於準備就緒,要來訓練我們自己的data了,這時候我們到Kohya_ss的網頁之中,選擇Dreambooth LORA這個Tab,如下圖一般到這個頁面,把Image folder選擇我們剛剛創建的那個image 資料夾(要注意,是上一層的資料夾,不是真正放檔案的100_keyword資料夾), output folder選擇剛剛創建的model 資料夾, log folder選擇我們剛剛創建的 log那個資料夾,如下圖
LORA training folder正確的方法
接下來要設定訓練用的參數,滑鼠點選隔壁的training parameter頁面更改一些參數,以下是個人建議的參數,把精度都改成fp16或是bf16, Number of CPU thread per core 設成2, 下面的兩個參數Network Rank改成256, Network Alpha改成64,最後就可以按下最下方的按鈕Train Model開始下去訓練了。如果剛剛你的照片解析度最高有到達768 pixel的,那麼下方的Max resolution記得改成768,768。(如果顯示卡記憶體更大的,就可以挑戰更大的訓練照片,應該效果會更佳,以6G VRAM來說,可能只能負擔512,512)
Training Parameters
實際上訓練的時間每張顯示卡不太一樣,以我個人的電腦RTX3070Ti 來說大概需要15分鐘的時間可以完成訓練,完成後大家會看到model這個資料夾裡面有一個 keyword.safetensor 這個檔案,這個檔案就是大家的心血結晶了! (以我的例子而言 就是sksxandra.safetensor這個檔案)
最後一個步驟當然就是要去Stable diffusion裡面去測試自己的心血結晶,首先要請各位把這個keyword.safetensor這個檔案放到 [stable diffusion安裝資料夾]\models\Lora 這邊,然後launch stable diffusion Automatic 1111 UI。
那麼,要怎麼使用自己剛剛辛苦training 出來的LORA呢? 很簡單就是在automatic 1111 UI中點擊下圖 Generate 大按鈕底下的這個圖示(如我紅框框起來處),然後選擇LORA(藍色框框處),然後找到自己剛剛放進去的Lora點擊一下,就會發現Prompt 裡面自動加入了lora:keyword:1 (以我的例子是加入了lora:sksxandra:1,這就代表Lora會有作用了!
How to use Lora in stable diffusion
這時候先用簡單的Prompt測試一下,以我剛剛的簡單prompt : a beautiful woman wearing white T-shirt, lora:sksxandra:1會得到大概是這樣的圖案
a beautiful woman wearing white T-shirt, SD 1.5 base model
呃...好吧確實人物神韻有到,可以看的出來真的有訓練出來了,但是圖片不夠美麗。接下來當然就是可以去調整prompt內容,並且搭配漂亮的Base Model把照片變得更漂亮。怎麼樣下好的Prompt這足足可以寫好多篇文章,我後面肯定會帶到的。 另外一提 lora:keyword:1這個1的數字就是權重,大部分的時候1這個數字都有點太高,大家可以嘗試看看0.9~0.6 之間去玩玩看,看看人物的臉變化如何,應該就可以玩出心得來。
最後,再把自己過去用得比較得意的一些prompt拿來套這個Lora 試試看是否有抓到神韻。LORA的最大好處,就是可以任意的跟所有的ckpt model搭配,而且過去你用得很開心的prompt都可以直接拿來套用,只要在prompt尾端加上lora:keyword:權重就可以了。 底下這張就是完全一樣的prompt : a beautiful woman wearing white T-shirt, lora:sksxandra:1搭配一個很棒的ckpt model dreamshaper5的結果
a beautiful woman wearing white T-shirt, SD 1.5 dreamshaper 5 model
底下就是我這個範例套上很好的Model再搭配過去一些比較成功的prompt產出的結果,可以看到的LORA確實是有效的,只要搭配成功的Prompt跟Base model,一樣可以得到令人驚豔的效果的!
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.