---
# System prepended metadata

title: 一個 Dreambooth 以及與 Lora 的粗淺效果比較
tags: [NTUST]

---

---
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>
    
    ：邦邦喀邦~愛麗絲已成功模仿出大家了