3D點雲重建原理及Pytorch實現

3D點雲重建原理及Pytorch實現

Pytorch: Learning Efficient Point Cloud Generation for Dense 3D Object Reconstruction
一種Pytorch實現方法:學習高效的點雲生成方法用於稠密三維物體重建
Article:
https://chenhsuanlin.bitbucket.io/3D-point-cloud-generation/paper.pdf
Original
TF implementation: https://github.com/chenhsuanlin/3D-point-cloud-generation
一.論文概要
傳統的三維對象生成建模方法是利用三維卷積運算的深度網絡來訓練3D預測,這與經典的二維方法是直接類似的。然而,這些方法在試圖預測三維形狀時計算上是浪費的,因爲只有表面上的信息纔是豐富的。本文提出了一種新的三維生成模型框架,以有效地生成密集點雲形式的目標形狀。使用二維卷積運算從多個角度預測三維結構,並將幾何推理與二維投影優化相結合。引入僞渲染器(pseudo renderer)這一可微模塊來近似真實的渲染操作,以合成新的深度圖進行優化。對單圖像三維物體重建任務的實驗結果表明,在形狀相似性和預測密度方面,優於最新的方法。
神經網絡pipeline
在這裏插入圖片描述
二.貢獻總結如下:
•主張具有二維卷積運算的深網絡能夠生成密集的點雲,從而在未加密的三維空間中塑造三維物體的表面。
•引入一個僞渲染管道作爲真實渲染的可微近似。進一步利用僞渲染深度圖像進行二維投影優化,以學習生成密集的三維形狀。
•展示了的方法在單圖像三維重建問題上的有效性,這顯著優於最新方法。
三.主要原理

  1. Pseudo-rendering概念
    前向繪製是計算機圖形學中一個古老而成熟的概念。真實渲染通常是通過在每個像素位置使用Z緩衝區來保持相機的有效可見值(RGB或深度)來實現的。雖然這是可並行的,可以在gpu上有效地運行,但通常是不可微的,不能直接利用和納入深度學習框架。在這裏,給出了這種操作的可微逼近的一個解。
    在這裏插入圖片描述
  2. 實驗
    1)進行二維優化。
    從新的角度論證了第二階段網絡優化訓練的必要性。比較了表3中聯合2D投影優化步驟前後網絡的性能。看到,雖然只在固定視點上進行優化會導致更多生成的點更接近真值曲面,但也會在形狀精度損失中創建大量噪聲點。圖7展示了進行優化消除大部分噪聲點的效果,說明了這種額外步驟的必要性。
    變形過渡是平滑的,並且具有合理的插值形狀,這表明結構生成可以從編碼潛在向量的凸組合中生成有意義的三維預測。結構生成還能夠根據潛在空間中的算法結果生成合理的新形狀-從圖6觀察到桌子高度/形狀以及椅子扶手/靠背的語義特徵替換。結果表明,在潛在向量中編碼的高層語義信息是可操作的,可以通過結構生成對生成的稠密點雲進行解析。
    2)生成表徵分析
    通過觀察潛在空間中操作的三維預測來分析學習到的生成表示。以前的研究已經證明,深度生成網絡可以通過在潛在空間中執行線性操作來生成有意義的像素/體素預測(Radford、Metz和Chintala 2015;Dosovitskiy,To bias Spring enberg,and Brox2015;Wu etal.2016);這裏,探索在未加密空間中對稠密點雲進行這種操作的可能性。在圖5中顯示了由嵌入在潛在空間中的嵌入向量生成的密集形狀。
    3)主要實驗數據
    表2中列出了量化結果,其中按類別顯示數據。本文方法在兩個指標上都達到了較低的總體誤差。
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    四.代碼實施步驟

Original TF implementation: https://github.com/chenhsuanlin/3D-point-cloud-generation

訓練/評估網絡

必要條件

此代碼是用Python3(Python3)開發的。需要Pythorch 0.4+。

數據集

(在TF的repo中提供)可以通過運行命令下載數據集(8.8GB)

wget https://cmu.box.com/shared/static/s4lkm5ej7sh4px72vesr17b1gxam4hgy.gz

此文件包括:

訓練/測試分割文件(從透視變換網絡)

輸入RGB圖像(從透視變換網絡)

用於訓練的預渲染深度圖像

測試分離的地面真值點雲(密度爲100K點)

下載後,在主目錄下運行

run tar -zxf s4lkm5ej7sh4px72vesr17b1gxam4hgy.gz

文件將被提取到data目錄。(使用此數據集包,可引用相關論文。)

運行代碼

以下腳本提供了運行代碼的示例。

網絡預訓練:scripts/train-stg1.sh

進行二維優化微調:scripts/train-stg2.sh

在測試集上求值:scripts/evaluate.sh

計算錯誤度量:scripts/evaluate_dist.sh

檢查點存儲在models/experimentsruns/{experiments}中,摘要存儲在runs/{experiments}中,計算的點雲存儲在results{GROUP}中。執行python3 train-stg1.py–help可以找到可選參數列表。

繪製真實深度圖像

(在TF的repo中提供)提供了用於呈現深度圖像的代碼以供監督。

先決條件

此代碼要求以下內容:

Blender作爲渲染引擎。此代碼是使用Blender 2.78開發的。安裝後,請確保該命令blender是可調用的(用於which blender檢查安裝)。
用於將.exr轉換爲.mat文件的OpenEXR Python綁定。

數據集

原始ShapeNet數據集可以在這裏下載。此呈現代碼是爲使用ShapeNetCore v2開發的。(提供的深度圖像是從ShapeNetCore v1渲染的。)

運行代碼

在渲染中,運行/運行.sh03001627 8爲固定和任意視點渲染深度圖像,並將其轉換爲.mat文件。這將轉換ShapeNet椅子類別(03001627)中具有8個固定視點的所有對象。呈現的文件將存儲在輸出目錄中。

評估CAD模型密集點雲的生成

(在TF的repo中提供)還提供了代碼來將CAD模型的頂點加密到指定的數字。此代碼可以獨立運行;只需要ShapeNet數據集。重複將頂點添加到三角形網格最長邊的中心,然後重新對網格進行三角剖分的過程。這將創建(通常)均勻緻密的CAD模型。

運行代碼

在緻密下,運行

run ./run.sh 03001627

進行加密,加密的CAD模型將存儲在output目錄中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章