" 絕不是簡單的摳圖。"
ControlNet 作者最新推出的一項研究受到了一波高度關注——
給一句 prompt,用 Stable Diffusion 可以直接生成單個或多個透明圖層(PNG)!
例如來一句:
頭發淩亂的女性,在卧室裏。
Woman with messy hair, in the bedroom.
可以看到,AI 不僅生成了符合 prompt 的完整圖像,就連背景和人物也能分開。
而且把人物 PNG 圖像放大細看,發絲那叫一個根根分明。
再看一個例子:
燃燒的柴火,在一張桌子上,在鄉下。
Burning firewood, on a table, in the countryside.
同樣,放大 " 燃燒的火柴 " 的 PNG,就連火焰周邊的黑煙都能分離出來:
這就是 ControlNet 作者提出的新方法——LayerDiffusion,允許大規模預訓練的潛在擴散模型(Latent Diffusion Model)生成透明圖像。
值得再強調一遍的是,LayerDiffusion 絕不是摳圖那麽簡單,重點在于生成。
正如網友所說:
這是現在動畫、視頻制作最核心的工序之一。這一步能夠過,可以說 SD 一緻性就不再是問題了。
還有網友以爲類似這樣的工作并不難,隻是 " 順便加個 alpha 通道 " 的事,但令他意外的是:
結果這麽久才有出來的。
那麽 LayerDiffusion 到底是如何實現的呢?
PNG,現在開始走生成路線了
LayerDiffusion 的核心,是一種叫做潛在透明度(latent transparency)的方法。
簡單來說,它可以允許在不破壞預訓練潛在擴散模型(如 Stable Diffusion)的潛在分布的前提下,爲模型添加透明度。
在具體實現上,可以理解爲在潛在圖像上添加一個精心設計過的小擾動(offset),這種擾動被編碼爲一個額外的通道,與 RGB 通道一起構成完整的潛在圖像。
爲了實現透明度的編碼和解碼,作者訓練了兩個獨立的神經網絡模型:一個是潛在透明度編碼器(latent transparency encoder),另一個是潛在透明度解碼器(latent transparency decoder)。
編碼器接收原始圖像的 RGB 通道和 alpha 通道作爲輸入,将透明度信息轉換爲潛在空間中的一個偏移量。
而解碼器則接收調整後的潛在圖像和重建的 RGB 圖像,從潛在空間中提取出透明度信息,以重建原始的透明圖像。
爲了确保添加的潛在透明度不會破壞預訓練模型的潛在分布,作者提出了一種 " 無害性 "(harmlessness)度量。
這個度量通過比較原始預訓練模型的解碼器對調整後潛在圖像的解碼結果與原始圖像的差異,來評估潛在透明度的影響。
在訓練過程中,作者還使用了一種聯合損失函數(joint loss function),它結合了重建損失(reconstruction loss)、身份損失(identity loss)和判别器損失(discriminator loss)。
它們的作用分别是:
重建損失:用于确保解碼後的圖像與原始圖像盡可能相似;
身份損失:用于确保調整後的潛在圖像能夠被預訓練的解碼器正确解碼;
判别器損失:則是用于提高生成圖像的真實感。
通過這種方法,任何潛在擴散模型都可以被轉換爲透明圖像生成器,隻需對其進行微調以适應調整後的潛在空間。
潛在透明度的概念還可以擴展到生成多個透明圖層,以及與其他條件控制系統結合,實現更複雜的圖像生成任務,如前景 / 背景條件生成、聯合圖層生成、圖層内容的結構控制等。
值得一提的是,作者還展示了如何把 ControlNet 引入進來,豐富 LayerDiffusion 的功能:
與傳統摳圖的區别
至于 LayerDiffusion 與傳統摳圖上的區别,我們可以簡單歸整爲以下幾點。
原生生成 vs. 後處理
LayerDiffusion 是一種原生的透明圖像生成方法,它直接在生成過程中考慮并編碼透明度信息。這意味着模型在生成圖像的同時就創建了透明度通道(alpha channel),從而産生了具有透明度的圖像。
傳統的摳圖方法通常涉及先生成或獲取一個圖像,然後通過圖像編輯技術(如色鍵、邊緣檢測、用戶指定的遮罩等)來分離前景和背景。這種方法通常需要額外的步驟來處理透明度,并且可能在複雜背景或邊緣處産生不自然的過渡。
潛在空間操作 vs. 像素空間操作
LayerDiffusion 在潛在空間(latent space)中進行操作,這是一個中間表示,它允許模型學習并生成更複雜的圖像特征。通過在潛在空間中編碼透明度,模型可以在生成過程中自然地處理透明度,而不需要在像素級别上進行複雜的計算。
傳統的摳圖技術通常在像素空間中進行,這可能涉及到對原始圖像的直接編輯,如顔色替換、邊緣平滑等。這些方法可能在處理半透明效果(如火焰、煙霧)或複雜邊緣時遇到困難。
數據集和訓練
LayerDiffusion 使用了一個大規模的數據集進行訓練,這個數據集包含了透明圖像對,使得模型能夠學習到生成高質量透明圖像所需的複雜分布。
傳統的摳圖方法可能依賴于較小的數據集或者特定的訓練集,這可能限制了它們處理多樣化場景的能力。
靈活性和控制
LayerDiffusion 提供了更高的靈活性和控制能力,因爲它允許用戶通過文本提示(text prompts)來指導圖像的生成,并且可以生成多個圖層,這些圖層可以被混合和組合以創建複雜的場景。
傳統的摳圖方法可能在控制方面更爲有限,尤其是在處理複雜的圖像内容和透明度時。
質量比較
用戶研究顯示,LayerDiffusion 生成的透明圖像在大多數情況下(97%)被用戶偏好,這表明其生成的透明内容在視覺上與商業透明資産相當,甚至可能更優。
傳統的摳圖方法可能在某些情況下無法達到同樣的質量,尤其是在處理具有挑戰性的透明度和邊緣時。
總而言之,LayerDiffusion 提供的是一種更先進且靈活的方法來生成和處理透明圖像。
它在生成過程中直接編碼透明度,并且能夠産生高質量的結果,這在傳統的摳圖方法中是很難實現的。
關于作者
正如我們剛才提到的,這項研究的作者之一,正是大名鼎鼎的 ControlNet 的發明人——張呂敏。
他本科就畢業于蘇州大學,大一的時候就發表了與 AI 繪畫相關的論文,本科期間更是發了 10 篇頂會一作。
目前張呂敏在斯坦福大學攻讀博士,但他爲人可以說是非常低調,連 Google Scholar 都沒有注冊。
就目前來看,LayerDiffusion 在 GitHub 中并沒有開源,但即便如此也擋不住大家的關注,已經斬獲 660 星。
畢竟張呂敏也被網友調侃爲 " 時間管理大師 ",對 LayerDiffusion 感興趣的小夥伴可以提前 mark 一波了。
參考鏈接:
[ 1 ] https://arxiv.org/abs/2402.17113
[ 2 ] https://twitter.com/op7418/status/1762729887490806159
[ 3 ] https://github.com/layerdiffusion/LayerDiffusion