用多個(gè)底模微調(diào)LoRA,提高LoRA泛化性

LoRA模型的泛化性是指,在模型A上訓(xùn)練的LoRA,拿到模型B、C、D.....上,依然能夠出符合該LoRA主題的圖片,甚至還能夠根據(jù)這些模型的風(fēng)格對(duì)圖片進(jìn)行合理的調(diào)整。泛化性是評(píng)價(jià)一個(gè)LoRA模型好壞的重要因素,泛化性好的LoRA可以大幅減輕大家出圖的工作量。
以下是泛化性不足的一個(gè)例子:同一個(gè)雷電將軍的LoRA,在Counterfeit模型上能夠出正常的圖,而在revAnimated模型上生成的臉質(zhì)量卻不太好。


下面用我的理解來(lái)說(shuō)明為什么會(huì)出現(xiàn)LoRA泛化性不足的問(wèn)題。當(dāng)前社區(qū)流行的所有模型,都是從Stable Diffusion基礎(chǔ)模型上微調(diào)或混合而來(lái)的。微調(diào)或混合的次數(shù)越多,模型之間的權(quán)重就越疏遠(yuǎn)。這就有點(diǎn)像人類(lèi)的親屬關(guān)系,一個(gè)人總是和近親有很多相似點(diǎn),而和遠(yuǎn)親則不太相似。
所以,LoRA在它的底模及底模的近親上會(huì)表現(xiàn)得比較好,而對(duì)底模的遠(yuǎn)親則表現(xiàn)得比較差。
下面舉了一個(gè)例子,由SD基礎(chǔ)模型通過(guò)微調(diào)和混合的方式衍生出一系列模型,并最終用其中一個(gè)模型訓(xùn)練LoRA α,如下圖所示:

LoRA α采用模型G作為底模,可以預(yù)見(jiàn)它將在血緣關(guān)系較近的模型G、F、D上表現(xiàn)不錯(cuò),而在血緣關(guān)系較遠(yuǎn)的模型H、J、E上表現(xiàn)得比較差。
那么,如何讓我們訓(xùn)練的LoRA α 能夠很好地泛化到模型H 和模型J 中呢?我的解決方案是用模型G 和模型H 聯(lián)合訓(xùn)練LoRA α。這樣LoRA α 學(xué)到的概念必然是模型G和模型H都能識(shí)別的,并且能被它們的近親(模型F、D、E、J等)識(shí)別,實(shí)現(xiàn)很好的泛化性。

實(shí)現(xiàn)方案:在訓(xùn)練階段,將LoRA的權(quán)重分別施加給兩個(gè)底模,然后使用這兩個(gè)底模交替進(jìn)行推理和反向傳播,更新LoRA的權(quán)重。
具體實(shí)驗(yàn):底模采用GhostMix v2.0,第二底模采用revAnimated v1.22,總共迭代了大約1000步。代碼細(xì)節(jié)就不貼了,直接看看最終的結(jié)果吧。
單底模(GhostMix v2.0)訓(xùn)練LoRA,在revAnimated模型上的表現(xiàn)

雙底模(GhostMix v2.0 + revAnimated v1.22)訓(xùn)練LoRA,在revAnimated模型上的表現(xiàn)

單底模(GhostMix v2.0)訓(xùn)練LoRA,在Counterfeit模型上的表現(xiàn)

雙底模(GhostMix v2.0 + revAnimated v1.22)訓(xùn)練LoRA,在Counterfeit模型上的表現(xiàn)

單底模(GhostMix v2.0)訓(xùn)練LoRA,在‘啥玩意兒完?duì)僮庸棚L(fēng)’模型上的表現(xiàn)

雙底模(GhostMix v2.0 + revAnimated v1.22)訓(xùn)練LoRA,在‘啥玩意兒完?duì)僮庸棚L(fēng)’模型上的表現(xiàn)

個(gè)人點(diǎn)評(píng):在第二底模(revAnimated v1.22)上的表現(xiàn),雙底模LoRA明顯優(yōu)于單底模LoRA。而在其他2個(gè)非底模模型(Counterfeit,‘啥玩意兒完?duì)僮庸棚L(fēng)’)上,雙底模LoRA表現(xiàn)出了稍好的泛化性能,體現(xiàn)在人物及衣著特征更加還原。當(dāng)然,覺(jué)得追求還原更重要,還是追求風(fēng)格遷移更重要,這個(gè)就看個(gè)人審美見(jiàn)仁見(jiàn)智了。
另外,GhostMix本身就是一個(gè)泛化性能很好的底模,如果換成其他底模(比如anything模型),單底模的泛化性不足的問(wèn)題會(huì)更加突出,采用多底模訓(xùn)練的優(yōu)勢(shì)會(huì)更加明顯。