EasyPhoto 是一個基於 SD WebUI 的藝術照生成插件。支持低代碼操作、自定義風格,讓更多開發者靈活地開發自己的風格化藝術照生成應用。
項目地址: https://github.com/aigc-apps/sd-webui-EasyPhoto
背景介紹
最近,基於生成式AI技術批量產出真/像/美的個人寫真應用非常受歡迎。同時,隨着 Stable Diffusion 領域開源社區的快速發展,社區也湧現了類似 FaceChain 的開源項目,幫助開發者開發個性化的真人寫真生成應用。越來越多開發者對這個方向投來關注,希望得到更多靈活的開發方式。
EasyPhoto項目介紹
作爲FaceChain-Inpaint功能的開發團隊,我們快速上線了一款基於 SD WebUI 插件生態的個性化寫真生成開源插件 EasyPhoto。這款插件允許用戶通過上傳幾張同一個人的照片,快速訓練Lora模型,然後結合用戶自定義的模板圖片,生成 真/像/美的寫真圖片。
圖1
項目地址: https://github.com/aigc-apps/sd-webui-EasyPhoto
歡迎大家多多提ISSUE,一同優化,讓每個AIGCer都擁有自己的AI寫真相機!
原理介紹
AI真人寫真是一個基於 StableDiffusion和AI人臉相關技術,實現的定製化人像Lora模型訓練和指定圖像生成鏈路的集合,這裏我們簡單介紹我們在EasyPhoto中實現的相關技術,下圖是EasyPhoto的生成鏈路介紹,
圖2
EasyPhoto整體分爲訓練和推理兩個階段, 下文圖3詳細展示了訓練階段,上圖2展示了生成階段。
EasyPhoto生成
EasyPhoto生成採用基於開源模型StableDiffusion + 人物定製Lora的方式 + ControlNet 的方式完成藝術照生成
- 使用人臉檢測模型對輸入的指定模板進行人臉檢測(crop & warp)並結合數字分身進行模板替換。
- 採用FaceID模型挑選用戶輸入的最佳ID Photo和模板照片進行人臉融合(face fusion)。
- 使用融合後的圖片作爲基底圖片,使用替換後的人臉作爲control條件,加上數字分身對應的Lora,進行圖到圖局部重繪生成。
- 採用基於StableDiffusion + 超分的方式進一步在保持ID的前提下生成高清結果圖。
EasyPhoto訓練
圖3
EasyPhoto訓練採用了大量的人臉預處理技術,用於把用戶上傳的圖片進行篩選和預處理,並引入相關驗證和模型融合技術,參考圖3.
- 採用FaceID和圖像質量分數對所有圖片進行聚類和評分,篩選非同ID照片。
- 採用人臉檢測和主體分割,摳出1篩選後的人臉圖片進行人臉檢測摳圖,並分割去除背景。
- 採用美膚模型優化部分低質量人臉,推升訓練數據的圖片質量。
- 採用單一標註的方案,對處理後的訓練圖片進行打標,並使用相關的Lora 訓練。
- 訓練過程中採用基於FaceID的驗證步驟,間隔一定的step保存模型,並最後根據相似度融合模型。
我們將從在後續的章節簡單介紹涉及到的相關技術的原理,更多細節也歡迎大家參考Repo的代碼。(如果你已經對這一技術路線非常熟悉,歡迎直接跳到第三章 EasyPhoto & SDWebUI)
文圖生成(SD/Control/Lora)
StableDiffusion
StableDiffusion作爲Stability-AI開源圖像生成模型,通常分爲SD1.5/SD2.1/SDXL等版本, 是通過對海量的圖像文本(LAION-5B)對進行訓練結合文本引導的擴散模型(DiffusionModel),使用訓練後的模型,通過對輸入的文字進行特徵提取,引導擴散模型在多次的迭代中生成高質量且符合輸入語義的圖像。感興趣的同學可以參考 《stable diffusion原理解讀通俗易懂,史詩級萬字爆肝長文,..》, 下面的圖像就是 stablediffusion 官網 Repo 貼出來的他們的效果。
ControlNet/Lora
針對使用文本控制的StableDiffusion模型,如何對生成的圖像內容進行更好的控制,一直是學術界和工業界試圖解決的問題,本小節介紹的ControlNet和Lora就是常用的兩種技術。也是圖2中使用的部分技術,用於控制邊緣連貫性和指定ID生成。
ControlNet : 由《Adding Conditional Control to Text-to-Image Diffusion Models》提出的通過添加部分訓練過的參數,對StableDiffsion模型進行擴展,用於處理一些額外的輸入信號,例如骨架圖/邊緣圖/深度圖/人體姿態圖等等輸入,從而完成利用這些額外輸入的信號,引導擴散模型生成與信號相關的圖像內容。例如我們在官方 Repo 可以看到的,使用Canny邊緣作爲信號,控制輸出的小狗。
圖4
我們在圖2中看到 StableDiffusion有2個輸入,其中一個部分就是用於控制邊緣連貫性和臉型提示的ControlNet,我們使用了部分的Canny邊緣和OpenPose人體姿態。
Lora :由《LoRA: Low-Rank Adaptation of Large Language Models》 提出的一種基於低秩矩陣的對大參數模型進行少量參數微調訓練的方法,廣泛引用在各種大模型的下游使用中。AI真人寫真需要保證最後生成的圖像和我們想要生成的人是相像的,這就需要我們使用Lora 技術,對輸入的少量圖片,進行一個簡單的訓練,從而使得我們可以得到一個小的指定人臉(ID)的模型。當然這一技術也可以廣泛用於,風格,物品等其他指定形象的Lora模型訓練,大家可以在civitai.com等相關網頁上尋找自己想要的Lora模型。
人臉相關AI模型
針對AI寫真這一特定領域,如何使用盡量少的圖片,快速的訓練出又真實又相像的人臉Lora模型,是我們能夠產出高質量AI寫真的關鍵,網絡上也有大量的文章和視頻資料爲大家介紹如何訓練。這裏我們介紹一些在這個過程中,我們使用的開源AI模型,用於提升最後人臉Lora訓練的效果。
在這個過程中我們大量的使用了 ModelScope 和其他Github的開源模型,用於完成如下的人臉功能
人臉模型 | 模型卡片 | 功能 | 使用 |
FaceID | https://github.com/deepinsight/insightface | 對矯正後的人臉提取特徵,同一個人的特徵距離會更接近 | EasyPhoto圖片預處理,過濾非同ID人臉 EasyPhoto訓練中途驗證模型效果 EasyPhoto預測挑選基圖片 |
人臉檢測 | cv_resnet50_face | 輸出一張圖片中人臉的檢測框和關鍵點 | 訓練預處理,處理圖片並摳圖 預測定位模板人臉和關鍵點 |
人臉分割 | cv_u2net_salient | 顯著目標分割 | 訓練預處理,處理圖片並去除背景 |
人臉融合 | cv_unet-image-face-fusion | 融合兩張輸入的人臉圖像 | 預測,用於融合挑選出的基圖片和生成圖片,使得圖片更像ID對應的人 |
人臉美膚 | cv_unet_skin_retouching_torch | 對輸入的人臉進行美膚 | 訓練預處理:處理訓練圖片,提升圖片質量 預測:用於提升輸出圖片的質量。 |
EasyPhoto & SDWebUI
SDWebUI [Repo]是社區最常用的StableDiffusion開發工具,從年初開源至今,已在Github 擁有100k 的star,我們提到的文圖生成/ControlNet/Lora等功能,都被社區開發者貢獻到這一工具中,用於大家快速部署一個可以調試的文圖生成服務,所以我們也在SDWebUI下實現了EasyPhoto插件,將上述原理提到的 人臉預處理/訓練/藝術照生成全部集成到了這一插件中。
項目地址: https://github.com/aigc-apps/sd-webui-EasyPhoto
用戶可以參考SDWebUI的插件使用方式進行安裝使用。
EasyPhoto插件簡介
EasyPhoto是一款Webui UI插件,用於生成AI肖像畫,該代碼可用於訓練與用戶相關的數字分身。
- 建議使用 5 到 20 張肖像圖片進行訓練,最好是半身照片且不要佩戴眼鏡(少量可以接受)。
- 訓練完成後,EasyPhoto可以在推理部分生成圖像。
- EasyPhoto支持使用預設模板圖片與上傳自己的圖片進行推理。
圖1, 圖5這些是插件的生成結果,從生成結果來看,插件的生成效果還是非常不錯的:
圖5
每個圖片背後都有一個模板,EasyPhoto會對模板進行修改使其符合用戶的特徵。在EasyPhoto插件中,Inference側已經預置了一些模板,可以用插件預置的模板進行體驗;另外,EasyPhoto同樣可以自定義模板,在Inference側有另外一個tab頁面,可以用於上傳自定義的模板。如下圖所示。
圖6
而在Inference預測前,我們需要進行訓練,訓練需要上傳一定數量的用戶個人照片,訓練的產出是一個Lora模型。該Lora模型會用於Inference預測。
總結而言,EasyPhoto的執行流程非常簡單:1、上傳用戶圖片,訓練一個與用戶相關的Lora模型;2、選擇模板進行預測,獲得預測結果。
安裝方式一: SDWebUI界面安裝
網絡良好的情況下!!!在SDWebUI中跳轉到Extentions,然後選擇install from URL。輸入https://github.com/aigc-apps/sd-webui-EasyPhoto,點擊下方的install即可安裝。
在安裝過程中,會自動安裝依賴包,這個需要耐心等待一下。安裝完需要重啓WebUI。
圖7
安裝方式二:源碼安裝
如果你想要使用項目源碼安裝,直接進入到Webui的extensions文件夾,打開git工具,git clone即可。下載完成後,重新啓動webui,便會檢查需要的環境庫並且安裝。
圖8
其他安裝項:ControlNet
EasyPhoto需要SDWebUI支持ControlNet,具體使用的相關插件是Mikubill/sd-webui-controlnet。在使用 EasyPhoto 之前,您需要安裝這個軟件源。
- 此外,我們至少需要三個 Controlnets 用於推理。因此,您需要設置 Multi ControlNet: Max models amount (requires restart)。
圖9
EasyPhoto訓練
EasyPhoto訓練包含如下2個步驟 1. 上傳個人圖片 2. 調整訓練參數 3點擊訓練並設置ID, 整體界面如下
圖10
上傳訓練圖片
左邊是訓練圖片,點擊Upload Photos即可上傳圖片,點擊Clear Photos可以刪除已經上傳的圖片
調整訓練參數
上傳完圖片後,右邊是訓練參數,初次訓練可不做參數調整。
圖11
這裏我們也對參數進行一個介紹
參數名 | 含義 |
resolution | 訓練時喂入網絡的圖片大小,默認值爲512 |
validation & save steps | 驗證圖片與保存中間權重的steps數,默認值爲100,代表每100步驗證一次圖片並保存權重 |
max train steps | 最大訓練步數,默認值爲800 |
max steps per photos | 每張圖片的最大訓練數,默認爲200,與max train steps結合取小。 |
train batch size | 訓練的批次大小,默認值爲1 |
gradient accumulationsteps | 進行梯度累計,默認值爲4,train batch size=1的時候,每個step相當於喂入四張圖片 |
dataloader num workers | 數據加載的works數量,windows下不生效,因爲設置了會報錯,Linux正常設置 |
learning rate | 訓練Lora的學習率,默認爲1e-4 |
rank Lora | 權重的特徵長度,默認爲128 |
network alpha | Lora訓練的正則化參數,一般爲rank的二分之一,默認爲64 |
根據上述表格最終訓練步數的計算公式也比較簡單。
簡單來理解就是:圖片數量少的時候,訓練步數爲photo_num * max_steps_per_photos。圖片數量多的時候,訓練步數爲max_train_steps。
訓練&設置ID
完成設置後,點擊下方的開始訓練,此時需要在上方填入一下User ID,比如 用戶的名字,然後就可以開始訓練了。
圖12
觀察訓練
初次訓練時會從我們預備的oss(公用)上下載一部分預訓練模型的權重,我們耐心等待即可,下載進度需要關注終端。
圖13
訓練正常開始的相關log
圖14
終端顯示成這樣就已經訓練完了,最後這步是在計算驗證圖像與用戶圖像之間的人臉 ID 差距,從而實現 Lora 融合,確保我們的 Lora 是用戶的完美數字分身。
圖15
EasyPhoto預測
訓練完後,我們需要將tab頁轉到Inference。由於Gradio的特性,剛訓練好的模型不會自動刷新,可以點擊Used id旁的藍色旋轉按鈕進行模型刷新。
圖16
- 刷新完後選擇剛剛訓練的模型,然後選擇對應的模板即可開始預測。
- 初次預測需要下載一些modelscope的模型,耐心等待一下即可。
預置了部分模板,也可以切到upload image,直接自己上傳模板進行預測。然後我們就可以獲得預測結果了。
圖17
預測參數說明
關於預測界面的部分參數說明
參數名 | 含義 |
After Face Fusion Ratio | 第二次人臉融合的比例,越大代表越像 |
First Diffusion steps | 第一次Stable Diffusion的步數 |
First Diffusion denoising strength | 第一次Stable Diffusion重建的比例 |
Second Diffusion steps | 第二次Stable Diffusion的步數 |
Second Diffusion denoising strength | 第二次Stable Diffusion重建的比例 |
Crop Face Preprocess | 是否先裁剪人臉後再進行處理,適合大圖 |
Apply Face Fusion Before | 是否進行第一次人臉融合 |
Apply Face Fusion After | 是否進行第一次人臉融合 |
寫在最後
EasyPhoto全部使用來自開源社區的模型和相關技術,旨在探討StableDiffusion在AIGC X 真人寫真領域的技術和相關應用,文章所有涉及的圖片僅做演示使用,如有侵權請及時聯繫我們,也請大家引用時表明轉載!!!
作者 :bubbliiiing 、wuziheng
點擊立即免費試用雲產品 開啓雲上實踐之旅!
本文爲阿里雲原創內容,未經允許不得轉載