有壹個新的深度學習研究領域,專註於將DL技術應用於3D幾何和計算機圖形應用。這個長期的研究收集證明了這壹點。對於想嘗試壹些3D深度學習的PyTorch用戶來說,高嶺土庫值得研究。對於TensorFlow用戶,有TensorFlow圖形。壹個特別熱門的子領域是3D模型的生成。3D模型的創造性組合、從圖像快速生成3D模型以及為其他機器學習應用和模擬創建合成數據只是3D模型生成的無數用例中的幾個。
然而,在3D深度學習研究領域,為您的數據選擇正確的表示方法是成功的壹半。在計算機視覺中,數據的結構非常簡單:圖像由密集的像素組成,這些像素整齊而均勻地排列在壹個精確的網格中。在3D數據的世界裏沒有這樣的壹致性。3D模型可以表示為體素、點雲、網格、多視圖圖像集等等。這些輸入表示也有它們自己的缺點。比如體素的計算成本雖然高,但是輸出分辨率很低。點雲沒有對曲面或其法線的概念進行編碼,所以僅從點雲不可能唯壹推斷出拓撲。網格也不會唯壹地編碼拓撲,因為任何網格都可以細分以產生相似的表面。PolyGen是壹種用於網格的神經生成模型,它聯合估計模型的面和頂點來直接生成網格。DeepMind GitHub上提供了官方實現。
現在經典的點網論文提供了點雲數據建模的藍圖,比如三維模型的頂點。它是壹種通用算法,不對3D模型的表面或職業進行建模,因此單獨使用PointNet無法生成唯壹的防水網格。3D-R2N2采用的體素方法將大家熟悉的2D卷積擴展到3D,從RGB圖像中自然生成防水網格。然而,在更高的空間分辨率下,體素表示的計算成本非常高,這有效地限制了它可以生成的網格的大小。
Pixel2Mesh可以通過變形模板網格(通常是橢球體)從單幅圖像中預測3D模型的頂點和面。目標模型必須與模板網格同胚,所以使用凸模板網格(如橢球體)會在椅子、燈等高度非凸的物體上引入很多偽臉。拓撲修改網絡(TMN)通過引入兩個新階段來叠代Pixel2Mesh:拓撲修改階段用於修剪會增加模型重建誤差的錯誤曲面,邊界細化階段用於平滑曲面修剪引入的鋸齒狀邊界。如果妳有興趣的話,我強烈推薦同時觀看AtlasNet和層次表面預測。
雖然變形和細化模板網格的常用方法表現良好,但它們都是從模型拓撲的主要假設出發的。就其核心而言,3D模型只是3D空間中的壹組頂點,這些頂點通過各種面進行分組和連接。能否避開中間表示,直接預測這些頂點和面?
PolyGen采用了壹種相當獨特的方法來完成模型生成任務,將3D模型表示為嚴格有序的頂點和面序列,而不是圖像、體素或點雲。這種嚴格的排序使他們能夠應用基於註意力的序列建模方法來生成3D網格,就像伯特或GPT模型對文本所做的那樣。
PolyGen有兩個總體目標:首先,為3D模型生成壹組合理的頂點(可能基於圖像、體素或類標簽),然後生成壹系列面,壹個接壹個地將頂點連接在壹起,為該模型提供合理的表面。組合模型將網格上的分布p(M)表示為兩個模型的聯合分布:頂點模型p(V)表示頂點,曲面模型p(F|V)表示以頂點為條件的曲面。
頂點模型是試圖預測序列中的下壹個標記的解碼器,該序列以前壹個標記為條件(並且可選地以圖像、體素字段或類標簽為條件)。人臉模型由壹個編碼器和壹個解碼器指針網絡組成,代表頂點序列上的分布。指針網絡有效地壹次“選擇”壹個頂點來添加到前面的序列並構建模型。該模型基於先前的面序列和整個頂點序列。因為PolyGen架構相當復雜,並且依賴於各種概念,所以本文將僅限於頂點模型。
流行的ShapeNetCore數據集中的每個模型都可以表示為壹組頂點和面。每個頂點由壹個(x,y,z)坐標組成,該坐標描述了3D網格中的壹個點。每個面都是壹個索引列表,指向構成面的角的頂點。對於三角形面,這個列表有3個索引長。對於N面,此列表的長度是可變的。原始數據集非常大,所以為了節省時間,我在這裏提供了預處理數據集的壹個較輕的子集,供大家實驗。該子集僅包含來自五個形狀類別的模型,並且在轉換為N多邊形(如下所述)後具有少於800個頂點。
為了使序列建模方法起作用,數據必須以受約束和確定性的方式表達,以盡可能地消除可變性。為此,作者簡化了數據集。首先,他們將所有輸入模型從三角形(連接三個頂點的面)轉換為N多邊形(連接N個頂點的面),並用Blender的平面提取修改器合並這些面。這提供了同壹拓撲的更緊湊的表示,並減少了三角剖分中的模糊性,因為大型網格並不總是具有唯壹的三角剖分。出於篇幅考慮,本文不討論Blender腳本,但是有很多資源,包括官方文檔和GitHub上的這組優秀例子,都很好地涵蓋了這個話題。我提供的數據集已經提前提取了。
若要繼續,請下載此示例cube.obj文件。這個模型是壹個有8個頂點和6個面的基本立方體。下面的簡單代碼片段從單個。obj文件。
其次,頂點從z軸(本例中為垂直軸)開始按升序排序,然後是y軸,最後是x軸。通過這種方式,模型頂點從下到上被表示。在普通多邊形模型中,頂點被連接成壹維序列向量。對於更大的模型,這個向量最終會得到壹個很長的序列向量。作者在論文的附錄E中描述了壹些減輕這壹負擔的修改。
為了對壹系列頂點進行排序,我們可以使用字典排序。這與在字典中排序單詞是壹樣的。排序兩個單詞,妳會看第壹個字母,然後看第二個字母是否有平局,以此類推。對於“土豚”和“蘋果”這兩個詞,第壹個字母是“a”和“a”,所以我們移到第二個字母“a”和“p”來告訴我“土豚”在“蘋果”之前。在這種情況下,我們的“字母”是依次排列的z,y,x坐標。
最後,將頂點坐標歸壹化,然後量化,以將其轉換為離散的8位值。這種方法已經被用於在像素遞歸神經網絡和WaveNet中模擬音頻信號,使得它們可以對頂點值應用分類分布。在最初的WaveNet論文中,作者評論說“分類分布更加靈活,並且更容易對任意分布建模,因為它不對它們的形狀做任何假設。”這種品質對於建模復雜的依賴關系非常重要,例如3D模型中頂點之間的對稱性。
頂點模型由壹個解碼器網絡組成,它具有transformer模型的所有標準功能:輸入嵌入、18 transformer解碼器層的堆棧、層規範化,以及最後在所有可能的序列標記上表示的softmax分布。給定長度為n的平坦頂點序列Vseq,目標是最大化具有給定模型參數的數據序列的對數似然性:
與LSTM不同,transformer模型可以並行處理順序輸入,同時仍然支持來自序列壹部分的信息為另壹部分提供上下文。這壹切都要歸功於他們的註意力模塊。三維模型的頂點包含各種對稱性和遠地點之間復雜的依賴關系。例如,考慮壹個典型的桌子,其中模型對角的桌腿互為鏡像。註意模塊允許對這些類型的模式進行建模。
嵌入層是壹種常用技術,用於在序列建模中將有限數量的標簽轉換為特征集。在語言模型中,“國家”和“民族”這兩個詞的含義可能非常相似,但與“蘋果”這兩個詞相差甚遠。當單詞由獨特的標記表示時,不存在固有的相似或不同的概念。嵌入層將這些標記轉換成矢量表示,可以模擬有意義的距離感。
多邊形將相同的原理應用於頂點。該模型使用三種類型的嵌入層:坐標指示輸入標記是X、Y還是Z坐標,值指示標記的值,以及位置編碼頂點的順序。每個都向模型傳遞了壹條關於令牌的信息。因為我們的頂點是壹次在壹個軸上輸入的,所以坐標嵌入為模型提供了基本的坐標信息,使其可以知道給定值對應的坐標類型。
值嵌入對我們之前創建的量化頂點值進行編碼。我們還需要壹些序列控制點:額外的開始和停止標簽分別標記序列的開始和結束,並將標簽填充到最大序列長度。
通過位置嵌入來恢復由於並行化而丟失的給定序列位置n的位置信息。也可以用位置編碼,壹種不需要學習的封閉表達形式。在經典的Transformer論文“註意力是妳所需要的全部”中,作者定義了壹種位置編碼,它由不同頻率的正弦和余弦函數組成。他們通過實驗證實,位置嵌入的性能和位置編碼壹樣好,但編碼的優點是比訓練中遇到的序列長。關於位置編碼的精彩視覺解釋,請查看這篇博文。
在生成所有這些標簽序列之後,最後要做的事情是創建壹些嵌入層並組合它們。每個嵌入層需要知道預期輸入字典的大小和輸出的嵌入維數。每壹層的嵌入維數是256,也就是說我們可以用加法把它們組合起來。字典的大小取決於輸入可以擁有的唯壹值的數量。對於值嵌入,它是量化值的數量加上控制標誌的數量。對於坐標嵌入,是每個坐標x、y、z壹個,而不是以上任何壹個(控制標記)。最後,位置嵌入對於每個可能的位置或最大序列長度都需要壹個。
PolyGen還廣泛使用無效的預測遮罩,以確保它生成的頂點和面部序列編碼有效的3D模型。例如,必須強制執行“Z坐標不減少”和“停止標記只能出現在完整的頂點(Z、Y和X標記的三元組)之後”等規則,以防止模型生成無效的網格。作者在論文的附錄F中提供了他們使用的口罩的詳細列表。這些約束僅在預測時實施,因為它們實際上會損害訓練性能。
和很多序列預測模型壹樣,這個模型是自回歸的,也就是說給定時間步的輸出是下壹個時間步可能值的分布。整個序列壹次預測壹個標記,並且在每壹步,模型查看前壹時間步中的所有標記以選擇其下壹個標記。解碼策略決定了它如何從這個分布中選擇下壹個令牌。
如果使用次優解碼策略,生成的模型有時會陷入重復循環或產生質量差的序列。我們都看到生成的文本看起來像廢話。PolyGen使用壹種稱為內核采樣的解碼策略來生成高質量的序列。原始論文在文本生成的上下文中應用了這種方法,但是它也可以應用於頂點。前提很簡單:只從softmax分布中* * *享有top-p概率質量的標簽中隨機選擇下壹個標簽。這被應用於推理以生成網格,同時避免序列退化。內核采樣的PyTorch實現參見這壹點。
除了無條件生成模型,PolyGen還支持使用類別標簽、圖像和體素進行輸入調整。這些可以指導生成具有特定類型、外觀或形狀的網格。類別標簽通過嵌入進行投影,然後添加到每個註意塊中的自我註意層。對於圖像和體素,編碼器創建壹組嵌入,然後用於與轉換器解碼器的交叉註意。
PolyGen模型描述了壹個強大、高效和靈活的框架,用於有條件地生成三維網格。序列生成可以在各種條件和輸入類型下完成,從圖像到體素到簡單的類標簽,甚至只是壹個起始標簽。代表網格頂點分布的頂點模型只是聯合分布問題的壹部分。我打算在以後的文章中介紹面部模型。同時,我鼓勵妳去看看DeepMind的TensorFlow實現,並嘗試生成壹個條件模型!
原文鏈接:/blog/polygen-3d-models/