高質量多視角圖像生成,完美復刻場景材質!SFU等提出MVDiffusion
逼真的圖像生成在虛擬現實、增強現實、視頻游戲和電影制作等領域有廣泛應用。
隨著擴散模型(Diffusion Models)在近兩年的快速發展,圖像生成取得了很大突破,從Stable Diffusion衍生出的一系列根據文本描述產生圖像的開源或商業模型已經對設計、游戲等領域產生了巨大影響。
然而,如何根據給定的文本或其他條件,產生高質量的多視角圖像(multiview images)仍然是一個挑戰,已有的方法在多視圖一致性上存在明顯的缺陷。
目前常見的方法可以大致分為兩類。
第一類方法致力于生成一個場景的圖片以及深度圖,并得到對應的mesh,如Text2Room,SceneScape——首先用Stable Diffusion生成第一張圖片,然后使用圖像扭轉(Image Warping)和圖像補全(image inpainting)的自回歸方式生成后續的圖片以及深度圖。
但是,這樣的方案容易導致錯誤在多張圖片的生成過程中逐漸累積,并且通常存在閉環問題(比如在相機旋轉一圈回到起始位置附近時,生成的內容與第一張圖片并不完全一致),導致其在場景規模較大或圖片間視角變化較大時的效果欠佳。
第二類方法通過拓展擴散模型的生成算法,并行生成多張圖片以產生比單張圖片更豐富的內容(如產生360度全景圖,或將一張圖片的內容向兩側無限外推),如MultiDiffusion和DiffCollage。但是,由于沒有考慮相機模型,這類方法的生成結果并不是真正的全景圖。
MVDiffusion的目標是產生內容上嚴格符合給定的相機模型,且全局語義統一的多視角圖片。其方法的核心思想是同步去噪(simultaneous denoising)和基于圖片之間對應關系(correspondence)的一致性學習。
論文鏈接:https://arxiv.org/abs/2307.01097
項目網站:https://mvdiffusion.github.io/
Demo: https://huggingface.co/spaces/tangshitao/MVDiffusion
代碼:https://github.com/Tangshitao/MVDiffusion
發表會議:NeurIPS(spotlight)
MVDiffusion的目標是產生內容高度一致且全局語義統一的多視角圖片,其方法的核心思想是同步去噪(simultaneous denoising)和基于圖片之間對應關系的全局意識(global awareness)。
具體地,研究人員對已有的文本-圖片擴散模型(如Stable Diffusion)進行拓展,首先讓其并行地處理多張圖片,并進一步在原本的UNet中加入額外的「Correspondence-aware Attention」機制來學習多視角間的一致性和全局的統一性。
通過在少量的多視角圖片訓練數據上進行微調,最后得到的模型能夠同步生成內容高度一致的多視角圖片。
MVDiffusion已經在三種不同的應用場景取得了良好的效果:
1. 根據文字生成多視圖以拼接得到全景圖;
2. 將透視圖像外推(outpainting)得到完整的360度全景圖;
3. 為場景生成材質(texture)。
應用場景展示
應用1:全景圖生成(根據文字)
以生成全景圖(panorama)為例,輸入一段描述場景的文字(prompt),MVDIffusion能生成一個場景的多視角圖片。
如輸入「This kitchen is a charming blend of rustic and modern, featuring a large reclaimed wood island with marble countertop, a sink surrounded by cabinets. To the left of the island, a stainless-steel refrigerator stands tall. To the right of the sink, built-in wooden cabinets painted in a muted」,能得到以下8張多視角圖片:
這8張圖片能夠拼接成一張全景圖:
MVDiffusion也支持為每張圖片提供不同的文字描述,但是這些描述之間需要保持語義上的一致性。
應用2:全景圖生成(根據一張透視圖像)
MVDiffusion能夠將一張透視圖像外推(outpainting)成完整的360度全景圖。
比,如輸入下面這張透視圖:
MVDiffusion能進一步生成下面的全景圖:
可以看到,生成的全景圖在語義上對輸入圖片進行了擴展,而且最左和最右的內容是相連的(沒有閉環問題)。
應用3:生成場景材質
給定一個無材質的場景mesh,MVDiffusion可以為其生成材質(texture)。
具體地,我們首先通過渲染mesh得到多視角的深度圖(depth map),通過相機位姿(pose)以及深度圖,我們可以獲得多視角圖片的像素之間的對應關系。
接著,MVDiffusion以多視角depth map作為條件,同步生成一致的多視角RGB圖片。
因為生成的多視角圖片能保持內容的高度一致,將它們再投回mesh,即可以得到高質量的帶材質的mesh(textured mesh)。
更多效果示例
全景圖生成
值得一提的是,在這個應用場景中,雖然訓練MVDiffusion時用到的多視角圖片數據都是來自室內場景的全景圖,風格單一。
但是,由于MVDiffusion沒有改變原本的Stable Diffusion的參數而只是訓練了新加入的Correspondence-aware Attention。
最后,模型依然能根據給定的文本產生各種不同風格的多視角圖片(如室外,卡通等)。
單視圖外推
場景材質生成
具體方法介紹我們將先介紹MVDiffusion在三個不同的任務中具體的圖片生成流程,最后再介紹方法的核心,「Correspondence-aware Attention」模塊。圖1:MVDiffusion概覽
1. 全景圖生成(根據文字)
MVDiffusion同步生成8張帶有重疊的圖片(perspective image),然后再將這8中圖片縫合(stitch)成全景圖。在這8張透視圖中,每兩張圖之間由一個3x3單應矩陣(homographic matrix)確定其像素對應關系。
在具體的生成過程中,MVDiffusion首先通過高斯隨機初始化生成8個視角的圖片。
然后,將這8張圖片輸入到一個具有多分支的Stable Diffusion預訓練Unet網絡中,進行同步去噪(denoising)得到生成結果。
其中UNet網絡中加入了新的「Correspondence-aware Attention」模塊(上圖中淡藍色部分),用于學習跨視角之間的幾何一致性,使得這8張圖片可以被拼接成一張一致的全景圖。
2. 全景圖生成(根據一張透視圖片)
MVDiffusion也可以將單張透視圖補全成全景圖。與全景圖生成相同,MVDiffusion將隨機初始化的8個視角圖片(包括透視圖對應的視角)輸入到多分支的Stable Diffusion Inpainting預訓練的UNet網絡中。
不同的是,Stable Diffusion Inpainting模型中的UNet通過額外的輸入掩碼(mask)來區分作為條件的圖片和將要生成的圖片。
對于透視圖所對應的視角,這個掩碼是1,這個分支的UNet會直接恢復該透視圖。對于其他視角,這個掩碼是0,對應分支的UNet會生成新的透視圖。
同樣地,MVDiffusion使用「Correspondence-aware Attention」模塊來學習生成圖片與條件圖片之間的幾何一致性與語義統一性。
3. 場景材質生成
MVDiffusion首先基于深度圖以及相機位姿生成一條軌跡上的RGB圖片,然后使用TSDF fusion將生成的RGB圖片與給定的深度圖合成mesh。
RGB圖片的像素對應關系可以通過深度圖和相機位姿得到。
與全景圖生成一樣,我們使用多分支UNet,并插入「Correspondence-aware Attention」來學習跨視角之間的幾何一致性。
4. Correspondence-aware Attention機制
「Correspondence-aware Attention」(CAA),是MVDiffusion的核心,用于學習多視圖之間的幾何一致性和語義統一性。
MVDiffusion在Stable Diffusion UNet中的每個UNet block之后插入「Correspondence-aware Attention」block。CAA通過考慮源特征圖和N個目標特征圖來工作。
對于源特征圖中的一個位置,我們基于目標特征圖中的對應像素及其鄰域來計算注意力輸出。
具體來說,對于每個目標像素t^l,MVDiffusion通過在(x/y)坐標上添加整數位移(dx/dy)來考慮一個K x K的鄰域,其中|dx|<K/2并且|dy|< K/2。
在實際使用中,MVDiffusion使用K=3,并選擇9點的鄰域來為全景圖提高質量,而對于受幾何條件限制的多視圖圖像生成,為了提升運行效率選擇使用K=1。
CAA模塊的計算遵循標準的注意力機制,如上圖的公式所示,其中W_Q、W_K和W_V是query、key和value矩陣的可學習權重;目標特征不位于整數位置,而是通過雙線性插值獲得的。
關鍵的區別是基于源圖像中的對應位置s^l與s之間的2D位移(全景)或1D深度誤差(幾何)向目標特征添加了位置編碼。
在全景生成中(應用1和應用2),這個位移提供了本地鄰域中的相對位置。
而在深度到圖像生成中(應用3),視差提供了關于深度不連續或遮擋的線索,這對于高保真圖像生成非常重要。
注意,位移是一個2D(位移)或1D(深度誤差)向量,MVDiffusion將標準頻率編碼應用于x和y坐標中的位移。