單圖秒變3D對象,還可交互實時編輯!Stability AI中科大校友新作
近日,Stability AI發布消息,公開3D重建新方法SPAR3D的設計原理、代碼、模型權重等。
SPAR3D可在一秒內從單張圖像生成3D物體的完整結構并且可以實時編輯。
文章亮點:
- 新方法SPAR3D實現了實時編輯,在不到一秒內可從單圖完成3D對象的結構生成。
- SPAR3D將點云采樣與網格生成技術相結合,可以完全的控制3D對象。
- 第一階段主要依賴擴散模型生成稀疏點云數據,第二階段主要靠Transformer生成網格。
- 不確定性集中在點采樣階段,提高了計算效率。
- 用實驗證明了,新方法主要依賴輸入圖像重建正面,依賴點云生成背面。
- 基準測試,比SPAR3D快的沒它好,比它好的沒它快。
- 使用Stability AI Community License,可以免費商用。
論文鏈接:https://arxiv.org/pdf/2501.04689
項目鏈接:https://spar3d.github.io/
架構設計
整個過程分為兩個階段:
- 點云生成階段:專門的點擴散模型生成詳細的點云,捕捉物體的基本結構。
- 網格生成階段:三平面Transformer在處理原始圖像特征的同時處理點云,生成高分辨率的三平面數據。利用三平面數據進行3D重建,準確捕捉源圖像的幾何形狀、紋理和光照。
圖1:SPAR3D雙階段架構圖
雙階段架構
新方法結合了基于回歸建模的精確性與生成技術的靈活性,實現了精確的重建和全面的控制。
新方法是「既要也要」:既要享受擴散模型分布學習的好處,又要避免輸出保真度低和計算效率低的問題。
第一階段使用擴散模型生成稀疏點云。然后是網格劃分階段,將點云轉化為高度精細的網格。
主要想法是將不確定性建模集中到第一階段,在這一階段,點云的低分辨率允許快速迭代采樣。
隨后的網格劃分階段,利用局部圖像特征將點云轉換為高輸出保真度的詳細網格。
利用點云降低網格劃分的不確定性,進一步促進了反渲染的無監督學習,從而減少了紋理中的烘托照明。
關鍵設計
關鍵的設計選擇是使用點云來連接兩個階段。
為確保快速重構,中間表示只有足夠輕量級才能高效完成生成任務。但是,它也要為網格劃分階段提供足夠的指導。
這是因為點云可能是計算效率最高的三維表示方法,因為所有信息比特都被用來表示曲面。
此外,缺乏連通性通常被認為是點云的缺點。現在卻變成了兩階段方法進行編輯的優勢。
當背面與用戶預期不一致時,可以輕松地對低分辨率點云進行局部編輯,而不必擔心拓撲結構(見下圖)。
圖2:局部編輯
將編輯后的點云送入網格劃分階段,可生成更符合用戶要求的網格。比如在上圖中,通過在點云中修改了人物鼻子長度,之后輸出的網格后人物鼻子也變長了。
點采樣階段
點采樣階段生成稀疏點云,作為網格劃分階段的輸入。
在點采樣階段,點擴散模型會根據輸入圖像學習點云的條件分布。
由于點云的分辨率較低,這一階段的計算效率較高。
之后的網格劃分階段將采樣點云轉換為與可見表面對齊的高精細網格。
點采樣的不確定性降低,有利于了在網格劃分階段以無監督方式學習材質和光照。
最后,使用稀疏點云作為中間表示,SPAR3D可以實現人工編輯。
此階段包括:點擴散框架、去噪器設計和反照率點云。
點擴散框架
該框架基于去噪擴散概率模型。其中包括兩個過程:
1)前向過程,在原始點云中添加噪聲。
2)后向過程,去噪器學習如何去除噪音。
在推理(inference)階段,使用去噪擴散隱式模型(Denoising diffusion implicit models,DDIM)生成點云樣本,并使用無分類器擴散指導(Classifier-free diffusion guidance,CFDG)改進抽樣的保真度。
去噪器設計
使用與Point-E類似的Transformer去噪器,將噪聲點云線性映射到一組點token中。
使用DINOv2將輸入圖像編碼為條件token。
然后將條件和點token串聯起來,作為Transformer的輸入,用來預測每個點上添加的噪聲。
反照率點云
在網格劃分階段,新方法同時估算幾何體、材質和光照。
然而,這種分解本身就很模糊,因為相同的輸入圖像可以被多種光照和反照率組合解釋。
如果只在網格劃分階段學習,非常難這種高度不確定的分解。
因此,在點采樣階段,通過擴散模型直接生成反照率點云,減少了不確定性。
將反照率點云采樣輸入到后續的網格生成階段,大大降低了反渲染的不確定性,并使分解學習穩定了下來。
網格生成階段
網格生成階段根據輸入圖像和點云生成紋理網格。
網格模型的主干是一個大型三平面Transformer,它能根據圖像和點云條件預測三平面特征。
在訓練過程中,會將幾何圖形和材質輸入可微分渲染器,以便應用渲染損失來監督新模型。
三平面Transformer
新方法的三平面Transformer由三個子模塊組成:點云編碼器、圖像編碼器和Transformer主干網絡。
Transformer編碼器將點云編碼為一組點token。由于點云的分辨率較低,每個點都可以直接映射為一個token。
新模型的圖像編碼器是DINOv2,它可以生成局部圖像嵌入。
三平面Transformer采用了與PointInfinity和SF3D相似的設計。
這種設計可以生成384×384高分辨率的三平面圖。
表面估計
為了估計幾何形狀,使用淺層MLP對三平面進行查詢,以生成密度值。
使用可變行進四面體(Deep marching tetrahedra,DMTet)將隱式密度場轉換為顯式曲面。
此外,還使用兩個MLP頭來預測點偏移和表面法線以及密度。
這兩個屬性減少了行進四面體所帶來的假象,使局部表面更加平滑。
材質和光照度估算
反向渲染,與幾何圖形一起聯合估計材質(反照率、金屬和粗糙度)和光照。
利用RENI++基于學習的光照先驗建立了光照估計器。
RENI++最初是一個用于HDR照明生成的無條件生成模型,因此需要學習編碼器,將三平面特征映射到RENI++的潛空間中。
這樣,就能估算出輸入圖像中的環境光照度。
反照率是通過與幾何類似的三平面來估算的,其中淺層MLP可預測每個三維位置的反照率值。
對于金屬和粗糙度,采用SF3D,并通過貝塔先驗學習以概率方法進行估計。
并用AlphaCLIP代替SF3D的CLIP編碼器,利用前景物體遮罩來緩解這一問題。
可微渲染
新方法實現了一個可微渲染器(renderer),它能根據預測的環境貼圖、PB材質和幾何體表面渲染圖像(見圖3)。
圖3:可微分著色器
作者向可微網格光柵器(rasterizer)添加了可微著色器(shader)。
由于使用RENI++重構環境貼圖,因此需要明確整合傳入的輻照度。
在此,使用了蒙特卡羅積分法。
由于在訓練過程中樣本數較少,采用了平衡啟發式的多重重要度采樣(Multiple Importance Sampling,MIS),以減少整合方差。
此外,為了更好地模擬之前工作中通常忽略的自遮擋(self-occlusion)現象,利用可見度測試,更好地模擬了陰影。
作者從實時圖形學中汲取靈感,將可見度測試建模為一種屏幕空間方法。圖4是該測試的示意圖。
圖4:陰影建模
具體來說沿著MIS提出的所有采樣方向,在6個步驟內進行短距離(0.25)的光線步進,并將位置投影回圖像空間。如果當前光線的深度比深度圖中采樣到的值更遠,則該光線會被標記為陰影光線。
損失函數
新模型的主要損失函數是渲染損失,它用于比較來自新視角的渲染結果與真實圖像(GT)。
具體來說,渲染損失是以下幾項的線性組合:1)渲染圖像與GT圖像之間的L2距離,2)通過LPIPS測量的渲染圖像與GT圖像之間的感知距離,3)渲染的透明度與GT前景遮罩(mask)之間的L2距離。
除了渲染損失外,還遵循SF3D并應用網格與著色正則化,分別對表面光滑度和逆向渲染進行正則化。
交互式編輯
兩階段設計的一個獨特優勢是,它自然支持對生成的網格中的不可見區域進行交互式編輯。
在大多數情況下,可見表面由輸入圖像決定,并保持高度精確,而未知表面主要基于采樣點云,可能與用戶意圖不一致。
在這種情況下,可以通過改變點云來編輯網格的未知表面。
如果只考慮編輯,點云可能是最靈活的三維表示方法之一,因為沒有拓撲約束。
由于點云分辨率較低,編輯點云非常高效和直觀。
用戶可以輕松刪除、復制、拉伸或重新著色點云中的點。
高效網格模型能夠在0.3秒內生成調整后的網格,因此這一過程具有相當高的交互性。
實驗結果
這部分包含了定量比較、定性結果、編輯效果和實驗分析。文中也討論了消融實驗。
定量比較
在GSO和Omniobject3D數據集上定量比較了SPAR3D與其他基準方法。
如表1和表2所示,SPAR3D在這兩個數據集的大多數指標上顯著優于所有其他回歸或生成基準方法。
SPAR3D也是可以做到1秒內完成重建的模型之一,每個物體的推理速度為0.7秒,顯著快于基于3D或多視圖的擴散方法。
簡而言之,比SPAR3D快的沒它好,比它好的沒它快。
定性結果
純回歸方法如SF3D或TripoSR重建的網格與輸入圖像對齊良好,但背面往往不夠精確且過度平滑。
基于多視圖擴散的方法,如LGM、CRM和InstantMesh,在背面展示了更多的細節。然而,合成視角中的不一致性導致了明顯的偽影,整體效果更差。
純生成方法如Shap-E和LN3Diff能夠生成銳利的表面。然而,許多細節是錯誤的虛擬幻象,未能準確地遵循輸入圖像,且可見表面重建得也不正確。
與先前的工作相比,SPAR3D生成的網格不僅忠實地再現了輸入圖像,還展現了生成得當的遮擋部分,細節合理。
作者進一步展示了SPAR3D在自然圖像上的定性結果。
這些圖像通過文本-圖像模型生成,或來自ImageNet驗證集。高質量的重建網格展示了SPAR3D的強泛化能力。
編輯效果
使用顯式點云作為中間表示,能夠實現對生成網格的交互式編輯。
用戶可以通過操控點云輕松地改變網格的不可見表面。
在圖7中,展示了一些使用SPAR3D進行編輯的示例,用戶可以通過添加主要物體部件來改進重建,或改善不理想的生成細節。
圖7:編輯效果
在左側的兩個例子中,通過復制現有點云,為馬克杯添加了把手,為大象添加了尾巴。在右側的兩個例子中,通過移動或刪除點云,修復了不完美之處,并改善了網格的局部細節。所有編輯耗時不到一分鐘。
實驗分析
為了進一步了解SPAR3D的工作原理,作者設計了新的實驗。
設計SPAR3D時的核心假設是:兩階段設計有效地將單目三維重建問題中的不確定部分(背面建模)和確定部分(可見表面建模)分開。
理想情況下,網格化階段應主要依賴輸入圖像重建可見表面,同時依賴點云生成背面表面。
為了驗證這一假設,作者設計了一個實驗,特意使用與輸入圖像沖突的點云。
在圖8中,將一只松鼠的輸入圖像和一匹馬的點云輸入網格模型。
圖8:正面看像松鼠,側面看像馬。
如圖所示,重建的網格在可見表面上與松鼠圖像很好地對齊,而背面表面則主要遵循點云。這一結果驗證了假設。
在圖像和點云沖突的情況下,模型根據圖像重建可見表面,同時根據點云生成背面表面。
作者介紹
另外值得一提的是本文第一作者是中科大校友。
Zixuan Huang,伊利諾伊大學香檳分校在讀博士,在Stable AI主導了此次工作。
之前,在威斯康星大學麥迪遜分校獲得計算機科學碩士學位,在中國科學技術大學獲得學士學位。