--- tags: NTUST title: 初次嘗試 Dreambooth --- <style> #doc{ font-size:18px; line-height:1.7; } </style> ## Dreambooth 以及與 Lora 的粗淺效果比較 Dreambooth 是 google 於 2022 年提出用於對 diffusion model 做 finetune 的技術,且號稱只需要 3~5 張圖片就有一定的效果,剛好在之前也已經有人將它做成 stable diffusion webui 的 extension 了,想說來試試看它的效果🤔。 <div style="text-align:center; font-size:14px"> ![](https://hackmd.io/_uploads/HkzHe7uka.png =90%x) 只需要提供大約3~5張特定物體的圖片,Dreambooth 能有效學習該物體的特徵 </div> ### 在 Dreambooth 之前... 在之前小弟我用 stable diffusion 時,從網路上抓了一些各方面都畫的不錯的模型後,如比較有名的像是:AbyssOrangeMix、Toonyou 之類的,**通常**都不能直接畫出你想要的角色。比如說我想畫一張手遊天尊--蔚藍檔案裡面的角色"天童愛麗絲",用網路上找到的模型 輸入角色名字 *prompt : blue archive , tentou arisu*,興奮地等待生圖,結果: <div style="text-align:center;"> ![](https://hackmd.io/_uploads/H1BxRyz1T.png =30%x) </div> ... 這...這是誰,這不是愛麗絲阿 ಥ_ಥ ! ~~反倒比較像是隔壁星穹鐵道的黑塔~~ 不過這當然也合理,訓練素材百百種,二次元紙片人更是多倒數不清,模型訓練時為了保持語意清晰也不太會加入角色名字。但是,如果你輸入一些非常有名,且已經出現很久的角色名字例如 *hatsune miku* ,有機會從大模型之中直接白嫖到你要的角色。 <div style="text-align:center; font-size:14px"> ![](https://hackmd.io/_uploads/HJ84WGzJa.png =30%x) prompt : (masterpiece, best quality, ultra-detailed, highres), depth_of_field, perfect face, hatsune miku , 1girl, high lighted, full_body, standing, shiny </div> ### 在 Dreambooth 之後... 無法準確畫出想要的角色該怎麼辦 ? 通常這時候我們可以使用 Lora 模型來去輔助指定。儘管現在有諸如 Civitai,hugging face 等用於專門分享模型的網站,上面已經有許多知名角色的 Lora,但對於一些比較冷門,或甚至是自創的角色可能就有點困難。 當然你也可以自己訓練一個 Lora ,一個 Lora 模型的大小通常是在100~200MB左右,訓練時所需要的 VRAM 要 8GB 以上;另一方面 Dreambooth 是由現有的大模型去做 finetune,輸出的也會是一個大模型,至於模型大小的規律小弟目前還不太清楚@@,以我的訓練結果為例: - 原模型2GB,輸入圖片21張做 150 個 epoch,**沒有**勾選 half model 練完後變 3.7 GB 另外訓練時所需要的 VRAM 要 12GB 以上。 那麼,同樣都能繪製特定物件,Lora 跟 Dreambooth 的成效差距如何呢? ### Lora 與 Dreambooth 的效果對比... 為了比較的公平性: - 使用 Lora 的模型與 Dreambooth finetune 前的模型我們選相同的,這邊我用的是 AbyssOrangeMix3_aom3a1b - 使用相同的訓練資料集 - 使用相同的 prompt - 其他如 CGF scale,圖片 size 等參數均相同 <div style="text-align:center; font-size:14px;"> ![](https://lh6.googleusercontent.com/RdhoekIC3_luzs8rNagbDfDByHyvp_Da3IrWgXYGM0glN9mtsi96MQ2FWTInzJveNwgEQSArI5nJ1Z6B-3CsYEKPJMq9Jpai3W1WEXicf43B5drdSOIxF310kFphLQA4_FjjUw63bPsFC8SY__YtsXfG=s2048 =70%x) 輸入的訓練資料集,512x512 的圖片 21 張 </div> ### 效果 #### 單純繪製同一人物 使用 prompt: (masterpiece, best quality, ultra-detailed, highres), depth\_of\_field, perfect face,  1girl,  hight lighted, neon lighting ,  full_body, standing,  shiny , flower in hair <div style="display: flex;"> <div style="text-align:center; font-size:18px; padding: 15px; width: 50%; "> <img src="https://lh4.googleusercontent.com/HdBq74J6GWX1dyqAyvpEG_E7Hv-pgGTx7ZTdMtATl2gwlbppKTRxRhGqju2iosaXudgHLlVAUTcofxEAcxHdoeOtNOF20fzm3SXUl5GnVaiMiaW93jNtSPpEsI0Q99n5uLIdfPKgO9rxZI_cCtby6TWD=s2048" alt="Image 1"> Lora </div> <div style="text-align:center; font-size:18px; padding: 15px; width: 50%; "> <img src="https://lh3.googleusercontent.com/h7JiRxAg82nqSTNWfMX-SbopkgyO7VXZlRFcezIwXHE1lNUSQybFPIoJIaWT-LalOxdYP7RSGULU2PWHiZNx0YrFnI_eM1xuEqkTP41NmF2ecc0e_BDRTkD6U_TI_Ce_VmC3ezi0SyL-VrXsILHN6O92=s2048" alt="Image 2"> Dreambooth </div> </div> Dreambooth 的輸出更加多樣,且與 原素材相差較遠 #### 指定背景 使用 prompt: (masterpiece, best quality, ultra-detailed, highres), depth\_of\_field, perfect face,  1girl,  hight lighted, **in forest** ,full_body, standing,  shiny , flower in hair <div style="display: flex;"> <div style="text-align:center; font-size:18px; padding: 15px; width: 50%; "> <img src="https://lh4.googleusercontent.com/VDrJIDDpDy6hLhOtUO0w9KDZ1asVCzg6jjMl6rwIkGdXf5NErgsHM7xixyd0sgwZs6lOzAfN5THjeAFku30Lst9dfQaPg2dXWQVa6ls5Z46RzZR_c6KmEWF3EIChftAWDBbKmmUarXRF90zlNYgRzIUg=s2048" alt="Image 1"> Lora </div> <div style="text-align:center; font-size:18px; padding: 15px; width: 50%; "> <img src="https://lh4.googleusercontent.com/UtM6I9zOTENFG3bogowrw0zjZpLvO75G4BDshHOiMnuWJGk4RwUtrNY738msZEKl5JcdompmWpuECJ7ky2mrh679jLVK0abZJ4KmBTjXgAAJjgNsc1dhWoERGXw4vEo7rFHby5TMHM6t4DjUqWmKmfqg=s2048" alt="Image 2"> Dreambooth </div> </div> Lora 無法有效修改背景,輸出全都是和訓練資料集相同的白背景 #### 配件修改 使用 prompt: (masterpiece, best quality, ultra-detailed, highres), depth\_of\_field, perfect face, 1girl, **red ribbon**,  hight lighted, in forest , full_body, standing,  shiny <div style="display: flex;"> <div style="text-align:center; font-size:18px; padding: 15px; width: 50%; "> <img src="https://lh4.googleusercontent.com/Cz-Jvklse6dbp_d-knmiHtvVfzowuS0L6ihxk9mONA8PCMopRmauLeOSfAGewaWjuK1m-WHsWvWE9xDdj5OhXfoCJ6L7KjbC1RWjJK6W_kB7TBtAmdGG_p-MQQsn5uXVmJIy41_E29hRoE0e8zXxdJmi=s2048" alt="Image 1"> Lora </div> <div style="text-align:center; font-size:18px; padding: 15px; width: 50%; "> <img src="https://lh4.googleusercontent.com/7-K0DYY6aLM26KjKr3Y59j_0Xc-iZZWBYnru65BOM4Pu2rUJVsOIugetUJb70sGbJp2B5kS7Fo6lf2S7A4DXuwoexeKRnBiUZsk1KWLymL4sxN18ipBj7cGxq5D3eavk5-cTkYzJ2BdelaI-WY7NirQu=s2048" alt="Image 2"> Dreambooth </div> </div> Lora 的輸出還是非常相似,且不能做出較精準的配件修改 --- 可以看到在相同訓練素材之下 Lora 的成果很容易與訓練資料集相似,另一方面 Dreambooth 能夠更好的抓住重點,畫面中的非主體所造成的語意偏移(language drift)也有明顯改善。換句話說,Dreambooth 能夠更好的理解,需要記憶的主體是什麼,不會連著其他非主體(如:背景)產生錯誤的認知。 ### 額外加碼測試角色套用 Dreambooth 更準確的理解主體,也意謂著當我們需要修改圖片時,就更加 flexible,這邊嘗試使用 img2img 的功能,將另外一位角色的圖修改成我們要的樣子,單純使用 img2img 不太容易控制輸出的輪廓,所以以下的輸出圖均**有搭配 controlNet 輔助**。 使用 prompt: (masterpiece, best quality, ultra-detailed, highres), depth\_of\_field, perfect face,  1girl, hight lighted, full_body, standing, shiny <div style="display: flex;"> <div style="text-align:center; font-size:18px; padding: 15px; width: 33%;"> <img src="https://lh5.googleusercontent.com/7dJXGPsuG50LFJoD6wtbnJ1Roo9-HpEwY6MVA35VYj3kUs9W_fNROkPJhkQtGReHU_EfhY65DRpBknWRX8ZH1x9j73a0PUE4M3kjRRQQc066hTIGZevirb-FIJ34TaGCmMGtWYYP3I8s-1hdFKyBiXQH=s2048" alt="Image 1"> </div> <div style="text-align:center; font-size:18px; padding: 15px; width: 33%;"> <img src="https://lh5.googleusercontent.com/VF-PQo-5q_g-_6gXQfWC92vHkXxv2vttvoKeVOpzKGbFFtgv3LLx3pvZayHIFTT-k2z9AL6aJxEecLaCYQoFzc9GOMQMEF2zqlGQd5Qy3KAlJ74TK3uJZDXJNChn_gby8JbGZEIJoX5NlTPtvhxiCLmM=s2048" alt="Image 2"> </div> <div style="text-align:center; font-size:18px; padding: 15px; width: 33%;"> <img src="https://lh5.googleusercontent.com/rGBaY1ZrRs7cJ6DJ4lGTRcxhEJZPlsxuAgXgBDF4jZ3hwlTWT9NBy7WqwAIstl0E8dg_gBOHbduK62uC5WsgLgm8mIL1e5ryzlWjBvNwexfla2fSDd2GJxN-HwFB0ekOEmKLxXNNElpeaAAPdwCa_Yap=s2048" alt="Image 3"> </div> </div> <div style="display: flex;"> <p style="text-align:center; font-size:18px; padding: 15px; width: 33%;"> 原圖 + conrtolNet </p> <p style="text-align:center; font-size:18px; padding: 15px; width: 33%;"> Lora </p> <p style="text-align:center; font-size:18px; padding: 15px; width: 33%;"> Dreambooth </p> </div> Lora 有明顯原素材的痕跡,且畫面有點撕裂效果不太好,當然我們可以將 Lora 單獨的權重調低,減少它對畫面造成的不協調感,但這同時也會使我們想要的角色特徵減少,甚至消失。而 Dreambooth 除了手持槍以及右手的部分出現錯誤,其他則是很好地將角色的特徵融合進原圖中,~~還順便換了套衣服非常有趣~~。 最後放上一些同樣也是角色套用的結果: <div style="display: flex;"> <div style="text-align:center; padding: 15px; width: 50%;"> <img src="https://hackmd.io/_uploads/HkSikc_1T.jpg" alt="Image 1"> </div> <div style="text-align:center; padding: 15px; width: 50%;"> <img src="https://hackmd.io/_uploads/BkX91cdy6.png" alt="Image 2"> </div> </div> <div style="display: flex;"> <p style="text-align:center; font-size:18px; width: 50%;"> 原圖 + conrtolNet </p> <p style="text-align:center; font-size:18px; width: 50%;"> Dreambooth </p> </div> --- <div style="display: flex;"> <div style="text-align:center; padding: 15px; width: 50%;"> <img src="https://hackmd.io/_uploads/SJa91c_JT.jpg" alt="Image 1" style="height:400px"> </div> <div style="text-align:center; padding: 15px; width: 50%;"> <img src="https://hackmd.io/_uploads/r17jbc_kT.png" alt="Image 2"style="height:400px"> </div> </div> <div style="display: flex;"> <p style="text-align:center; font-size:18px; width: 50%;"> 原圖 + conrtolNet </p> <p style="text-align:center; font-size:18px; width: 50%;"> Dreambooth </p> </div> --- <div style="display: flex;"> <div style="text-align:center; padding: 15px; width: 50%;"> <img src="https://hackmd.io/_uploads/SJwcNq_ka.jpg" alt="Image 1"style="height:400px"> </div> <div style="text-align:center; padding: 15px; width: 50%;"> <img src="https://hackmd.io/_uploads/SyzcN5u16.png" alt="Image 2"style="height:400px"> </div> </div> <div style="display: flex;"> <p style="text-align:center; font-size:18px; width: 50%;"> 原圖 + conrtolNet </p> <p style="text-align:center; font-size:18px; width: 50%;"> Dreambooth </p> </div> :邦邦喀邦~愛麗絲已成功模仿出大家了