Quantcast
Channel: 電腦王
Viewing all articles
Browse latest Browse all 5910

OpenAI文字繪製3D模型再升級,數秒內就能完成建模,比Point·E更好用

$
0
0
近日,OpenAI 研究團隊升級了 3D 生成模型,全新推出了 Shap・E,它是一個用於合成 3D 資產的條件生成式模型。5efc8244a6c7065987fb6ba78086d79d

此次,與點雲顯示生成模型 Point・E 相比,OpenAI 新推出的條件生成式 3D 模型 Shap-E 建模了高維度、多示圖的輸出空間,收斂更快,並且達到了相當或更好的樣本品質。 

生成式 AI 大模型是 OpenAI 發展的重點,目前已經推出過文字繪製圖像模型 DALL-E 和 DALL-E 2,以及今年初基於文字產生 3D 模型的 POINT-E。 

近日,OpenAI 研究團隊升級了 3D 生成模型,全新推出了 Shap・E,它是一個用於合成 3D 資產的條件生成式模型。目前相關模型權重、推理程式碼和樣本已開源。 

OpenAI文字繪製3D模型再升級,數秒內就能完成建模,比Point·E更好用

我們先來看一下產生的效果。與根據文字繪製圖像類似,Shap・E 生成的 3D 物體模型主打「天馬行空」。例如,一個看起來像香蕉的飛機: 

OpenAI文字繪製3D模型再升級,數秒內就能完成建模,比Point·E更好用

看起來像一棵樹的椅子: 

OpenAI文字繪製3D模型再升級,數秒內就能完成建模,比Point·E更好用

 

還有經典例子,像酪梨的椅子: 

OpenAI文字繪製3D模型再升級,數秒內就能完成建模,比Point·E更好用

當然也可以繪製一些常見物體的3D模型,例如一碗蔬菜: 

OpenAI文字繪製3D模型再升級,數秒內就能完成建模,比Point·E更好用

 

甜甜圈: 

OpenAI文字繪製3D模型再升級,數秒內就能完成建模,比Point·E更好用

本文提出的 Shap・E 是一種在 3D 隱式函數空間上的潛擴散模型,可以算繪成 NeRF 和紋理網格。在給定相同的資料集、模型架構和訓練計算的情況下,Shap・E 更優於同類顯示生成模型。研究者發現純文字條件模型可以生成多樣化、有趣的物體,更彰顯了生成隱式表徵的潛力。 

OpenAI文字繪製3D模型再升級,數秒內就能完成建模,比Point·E更好用

不同於3D生成模型上產生單一輸出表示的工作,Shap-E 能夠直接生成隱式函數的參數。訓練 Shap-E 分為兩個階段:首先訓練編碼器,該編碼器將 3D 資產確定性地映射到隱式函數的參數中;其次在編碼器的輸出上訓練條件擴散模型。當在配對 3D 和文本資料的大型資料集上進行訓練時, 該模型能夠在幾秒鐘內產生複雜而多樣的 3D 資產。與點雲顯示生成模型 Point・E 相比,Shap-E 建模了高維度、多示圖的輸出空間,收斂更快,並且達到了相當或更好的樣本品質。 

研究背景 

本文聚焦兩種用於 3D 表示的隱式神經表示(INR): 

  • NeRF 一個 INR,它將 3D 場景表示為將座標和視向映射到密度和 RGB 顏色的函數;
  • DMTet 及其擴展 GET3D 表示一個紋理 3D 網格,它作為函數將座標映射到顏色、符號距離和頂點偏移的。這種 INR 能夠以可微的方式構建 3D 三角網格,然後算繪為可微的柵格化庫。 

雖然 INR 靈活而富有表現力,但為資料集中每個樣本獲取 INR 的成本高昂。此外每個 INR 可能有許多數值參數,在訓練下游生成模型時可能會帶來難題。透過使用具有隱式解碼器的自動編碼器來解決這些問題,可以獲得較小的潛在表示,它們直接用現有生成技術進行建模。另外還有一種替代方法,就是使用元學習創建一個共用大部分參數的 INR 資料集,然後在這些 INR 的自由參數上訓練擴散模型或歸一化流。也有人提出,基於梯度的元學習可能並不必要,相反應該直接訓練 Transformer 編碼器,產生以 3D 物件多個視圖為條件的 NeRF 參數。 

研究者將上述幾種方法結合並拓展,最終得到了 Shap・E,並成為用於各種複雜 3D 隱式表示的條件生成模型。首先透過訓練基於 Transformer 的編碼器來為 3D 資產生成 INR 參數,然後在編碼器的輸出上訓練擴散模型。與先前的方式不同,生成同時表示 NeRF 和網格的 INR,允許它們以多種方式算繪或導入下游 3D 應用。 

當在數百萬個 3D 資產的資料集上訓練時,本文模型能夠在文本 prompt 的條件下產生多種可識別的樣本。與最近提出的顯示 3D 生成模型 Point・E 相比,Shap-E 收斂得更快。在相同的模型架構、資料集和條件作用機制的情況下,它能獲得相當或更好的結果。 

方法概覽 

研究者首先訓練編碼器產生隱式表示,然後在編碼器產生的潛在表示上訓練擴散模型,主要分為以下兩步完成:  

  1. 訓練一個編碼器,在給定已知 3D 資產的密集顯示表示的情況下,產生隱式函數的參數。編碼器產生 3D 資產的潛在表示後線性投影,以獲得多層感知器(MLP)的權重;
  2. 將編碼器應用於資料集,然後在潛在資料集上訓練擴散先驗。該模型以圖像或文本描述為條件。 

研究者在一個大型的 3D 資產資料集上使用相應的算繪、點雲和文本標題訓練所有模型。 

3D 編碼器 

編碼器架構如下圖 2 所示。 

OpenAI文字繪製3D模型再升級,數秒內就能完成建模,比Point·E更好用

潛在擴散 

生成模型採用基於 transformer 的 Point・E 擴散架構,但是使用潛在向量序列取代點雲。潛在函數形狀序列為 1024×1024,並作為 1024 個 token 序列輸入 transformer,其中每個 token 對應于 MLP 權重矩陣的不同行。因此,該模型在計算上大致相當於基礎 Point・E 模型(即具有相同的上下文長度和寬度)。在此基礎上增加了輸入和輸出通道,能在更高維度的空間中生成樣本。 

實驗結果 

編碼器評估 

研究者在整個編碼器訓練過程中跟蹤兩個基於算繪的指標。首先評估重建圖像和真實算繪圖像之間的峰值訊噪比(PSNR)。此外,為了衡量編碼器捕獲 3D 資產語義相關細節的能力,對最大 Point・E 模型產生的網格進行編碼,重新評估重建 NeRF 和 STF 算繪的 CLIP R-Precision。 

下表 1 跟蹤了這兩個指標在不同訓練階段的結果。可以發現,蒸餾損害了 NeRF 重建品質,而微調不僅恢復還略微提高了 NeRF 品質,同時大幅提高了 STF 算繪品質。 

OpenAI文字繪製3D模型再升級,數秒內就能完成建模,比Point·E更好用

對比 Point・E 

研究者提出的潛在擴散模型與 Point・E. 具有相同架構、訓練資料集和條件模式。與 Point・E 進行比較更有利於區分生成隱式神經表示而不是顯示表示的影響。下圖 4 在基於樣本的評估指標上對這些方法進行了比較。 

OpenAI文字繪製3D模型再升級,數秒內就能完成建模,比Point·E更好用

下圖 5 中顯示了定性樣本,可以看到這些模型通常為相同的文本 prompt 生成品質不同的樣本。在訓練結束之前,文本條件 Shap・E 在評估中開始變差。

OpenAI文字繪製3D模型再升級,數秒內就能完成建模,比Point·E更好用

研究者發現 Shap・E 和 Point・E 傾向於共用相似的失敗案例,如下圖 6 (a) 所示。這表明訓練資料、模型架構和條件圖像對生成樣本的影響大於選擇的表示空間。 

我們可以觀察到兩個圖像條件模型之間仍然存在一些定性差異,例如在下圖 6 (b) 的第一行中,Point・E 忽略了長凳上的小縫隙,而 Shap・E 試圖對它們進行建模。本文假設會出現這種特殊的差異,因為點雲不能很好地表示薄特徵或間隙。此外在表 1 中觀察發現,當應用于 Point・E 樣本時,3D 編碼器略微降低了 CLIP R-Precision。

 

OpenAI文字繪製3D模型再升級,數秒內就能完成建模,比Point·E更好用

與其他方法比較 

下表 2 中,研究者在 CLIP R-Precision 度量標準上將 shape・E 與更廣泛的 3D 生成技術進行了比較。 

OpenAI文字繪製3D模型再升級,數秒內就能完成建模,比Point·E更好用

局限與展望

 

雖然 Shap-E 可以理解許多具有簡單屬性的單個物件 prompt,但它在組合概念方面的能力有限。下圖 7 中可發現,這個模型很難將多個屬性綁定到不同的物件,並且當請求兩個以上的物件時,無法有效生成正確的物件數量。這可能是配對訓練資料不足導致的結果,通過收集或生成更大的標注 3D 資料集或許可以解決。

 

OpenAI文字繪製3D模型再升級,數秒內就能完成建模,比Point·E更好用

此外,Shap・E 產生可識別的 3D 資產,但這些通常看起來粗糙或缺乏細節。下圖 3 顯示編碼器有時會丟失詳細的紋理(例如仙人掌上的條紋),這表明改進的編碼器可能會恢復一些損失的生成品質。

OpenAI文字繪製3D模型再升級,數秒內就能完成建模,比Point·E更好用

更多技術和實驗細節請參閱原論文。

加入電腦王Facebook粉絲團

Viewing all articles
Browse latest Browse all 5910

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>