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
二.貢獻總結如下:
?主張具有二維卷積運算的深網絡能夠生成密集的點云,從而在未加密的三維空間中塑造三維物體的表面。
?引入一個偽渲染管道作為真實渲染的可微近似。進一步利用偽渲染深度圖像進行二維投影優化,以學習生成密集的三維形狀。
?展示了的方法在單圖像三維重建問題上的有效性,這顯著優于最新方法。
三.主要原理
- Pseudo-rendering概念
前向繪制是計算機圖形學中一個古老而成熟的概念。真實渲染通常是通過在每個像素位置使用Z緩沖區來保持相機的有效可見值(RGB或深度)來實現的。雖然這是可并行的,可以在gpu上有效地運行,但通常是不可微的,不能直接利用和納入深度學習框架。在這里,給出了這種操作的可微逼近的一個解。
- 實驗
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/experiments中,摘要存儲在runs/{experiments}中,摘要存儲在runs/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目錄中。
總結
以上是生活随笔為你收集整理的3D点云重建原理及Pytorch实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GPU加速计算
- 下一篇: PointRCNN: 点云的3D目标生成