PyTorch 應用于3D 點云數據處理匯總和點云配準示例演示

PyTorch 已廣泛應用于 3D 點云數據處理,特別是在深度學習驅動的任務中如:
分類、分割、配準、重建、姿態估計、SLAM、目標檢測 等。
傳統 3D 點云處理以 PCL、Open3D 為主,深度學習方法中,PyTorch 是構建神經網絡處理點云的核心框架。


一、為什么用 PyTorch 處理點云?

  • 靈活:自定義神經網絡模塊、圖卷積、注意力機制
  • 強大社區支持:如 PyTorch3D、OpenPCDet、PointNet++ 實現
  • 支持 GPU 加速
  • 可結合 Open3D、PyTorch3D 實現可視化與微分幾何計算

二、典型任務 + PyTorch 方案

任務類型應用PyTorch 實現
點云分類對整個點云進行類別判定PointNet、DGCNN、PointMLP
點云語義/實例分割每個點的類別預測PointNet++, RandLA-Net
點云目標檢測檢測3D目標框OpenPCDet、SECOND、PV-RCNN
點云配準/匹配匹配兩個點云的位姿PointNetLK、Deep Closest Point
點云補全/重建補全缺失的點云部分FoldingNet、PCN

三、常用工具包與庫(PyTorch生態)

庫名簡介功能特點
PyTorch3DFacebook 出品 3D工具點云、網格、體素、渲染、對齊、Chamfer 距離等
Open3D + Torch可視化/幾何庫與 PyTorch 協同訓練(支持 Tensor 轉換)
torch-points3d多模型集成庫集成 PointNet/PointNet++/KPConv/DGCNN
KaolinNVIDIA 出品圖形學與幾何學習整合,支持點云與三角網格
TorchSparse / TorchPointsKernels稀疏卷積庫高效稀疏點云卷積,適合大型點云處理

四、代碼示例:用 PointNet 做點云分類(簡化版)

1?、準備一個點云數據(如 .txt.ply

# 模擬一個點云 [B, N, 3]
import torch
pointcloud = torch.rand((16, 1024, 3))  # batch = 16, 每個樣本1024點

2?、定義一個簡化 PointNet 模型

import torch.nn as nn
import torch.nn.functional as Fclass SimplePointNet(nn.Module):def __init__(self, num_classes):super().__init__()self.conv1 = nn.Conv1d(3, 64, 1)self.conv2 = nn.Conv1d(64, 128, 1)self.conv3 = nn.Conv1d(128, 1024, 1)self.fc1 = nn.Linear(1024, 512)self.fc2 = nn.Linear(512, num_classes)def forward(self, x):  # x: [B, N, 3]x = x.transpose(2, 1)          # -> [B, 3, N]x = F.relu(self.conv1(x))      # [B, 64, N]x = F.relu(self.conv2(x))      # [B, 128, N]x = F.relu(self.conv3(x))      # [B, 1024, N]x = torch.max(x, 2)[0]         # [B, 1024]x = F.relu(self.fc1(x))        # [B, 512]x = self.fc2(x)                # [B, num_classes]return x

3?、使用模型分類

model = SimplePointNet(num_classes=40)
out = model(pointcloud)  # 輸出為 [16, 40]
pred = torch.argmax(out, dim=1)

五、點云處理核心技術點(適配 PyTorch)

問題技術路線 / 實現
點的順序不變性max-pooling / attention
點云不規則 & 稀疏使用 k-NN 圖、球鄰域(如 PointNet++, DGCNN)
下采樣/插值FPS、ball query + 特征插值(Open3D / torch)
損失函數設計Chamfer Distance, EMD, Cross Entropy
數據增強旋轉、縮放、抖動等(torch + numpy 實現)

六、應用建議與擴展方向

推薦項目模板

  • PointNet-PyTorch
  • Pointnet2_PyTorch
  • OpenPCDet(檢測任務)

進階任務

  • 點云配準(PointNetLK、DCP)
  • 體素網格表示(VoxelNet)
  • 稀疏卷積網絡(SPConv、TorchSparse)

七、總結

類型工具庫適合任務
點云分類PointNet, DGCNNShapeNet, ModelNet40
分割PointNet++, KPConvS3DIS, SemanticKITTI
檢測OpenPCDetKITTI、NuScenes
配準DCP, PointNetLK點云位姿估計
可視化Open3D + PyTorch點云顯示、訓練監控

八、使用 DCP 進行配準示例演示

使用 DCP(Deep Closest Point) 進行點云配準,是近年來一種較為流行的 基于深度學習的剛性配準方法,它擺脫了傳統 ICP 的點-點最近鄰和初始化限制,適用于姿態估計、SLAM 前端對齊、三維建圖等任務。


1、DCP 是什么?

DCP 全稱:Deep Closest Point,由 Yew 和 Lee 在 2019 年提出(CVPR 論文)。

  • 目標:估計兩個點云之間的剛性變換(R, t)

  • 與傳統 ICP 區別:

  • 不依賴初始配準

  • 利用深度網絡提取點的上下文特征

  • 使用注意力機制完成點對匹配

  • 基于特征匹配估計變換


2、整體流程框架

點云A → 特征提取 → 特征匹配 → SVD估計變換 → 應用變換 → 配準B到A
點云B → 特征提取 →   ↑
  • 特征提取器:PointNet / DGCNN(默認用 DGCNN)
  • 匹配方法:Transformer 或注意力匹配
  • 位姿估計:基于匹配特征的 SVD 求解(Umeyama 算法)

3、環境依賴與安裝

git clone https://github.com/WangYueFt/dcp.git
cd dcp
pip install -r requirements.txt
# 依賴 PyTorch、torchvision、numpy、scikit-learn、tqdm 等

4、代碼核心解析

1?、加載兩個點云(例如:ShapeNet 數據)
src = torch.rand((1, 1024, 3)).cuda()  # 源點云
tgt = torch.rand((1, 1024, 3)).cuda()  # 目標點云
2?、調用 DCP 模型
from models.dcp import DCPmodel = DCP(emb_nn='dgcnn', pointer='transformer').cuda()
model.eval()with torch.no_grad():est_R, est_t = model(src, tgt)  # 輸出剛體變換aligned_src = torch.matmul(src, est_R.transpose(2,1)) + est_t
3?、配準效果可視化(Open3D)
import open3d as o3d
import numpy as npdef to_o3d(pc, color):pcd = o3d.geometry.PointCloud()pcd.points = o3d.utility.Vector3dVector(pc)pcd.paint_uniform_color(color)return pcdsrc_np = src.squeeze(0).cpu().numpy()
tgt_np = tgt.squeeze(0).cpu().numpy()
aligned_np = aligned_src.squeeze(0).cpu().numpy()o3d.visualization.draw_geometries([to_o3d(src_np, [1, 0, 0]),      # 紅色:原始源點云to_o3d(tgt_np, [0, 1, 0]),      # 綠色:目標點云to_o3d(aligned_np, [0, 0, 1])   # 藍色:配準后的源點云
])

5、DCP 模型結構簡要

1. 特征提取(DGCNN) → 全局上下文
2. Transformer 注意力機制 → 匹配源與目標特征
3. 匹配點對求殘差 → 使用 SVD 估計 R, t

6、性能特點

項目DCPICP
對初始化敏感? 免初始化? 需要初始化
特征提取? 深度上下文特征? 僅幾何距離
擴展性? 可擴展至非剛性匹配?
訓練需求? 需訓練? 無需訓練
速度中等偏快(GPU)快(CPU)

7、擴展方向建議

場景建議方法
多幀點云連續配準將 DCP 作為配準前端,配合 GTSAM 優化
點云 + 圖像聯合配準融合 RGB-D 輸入,擴展為多模態 DCP
稠密點云(>100k)先 voxel 下采樣,再用 DCP
無監督訓練 / 弱監督DCP 可以引入 Chamfer 損失代替監督位姿

8、小結

優點缺點
魯棒特征提取 + 注意力匹配? 需要訓練數據
免初始化剛體配準? 訓練時間較長
易與傳統系統整合(輸出變換矩陣)? 對大點云需加速優化

附:項目地址推薦

  • 官方 GitHub(作者原版)
    https://github.com/WangYueFt/dcp

  • 配套 DGCNN 實現
    https://github.com/WangYueFt/dgcnn


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94167.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94167.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94167.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ABP VNext + Quartz.NET vs Hangfire:靈活調度與任務管理

ABP VNext Quartz.NET vs Hangfire:靈活調度與任務管理 🚀 📚 目錄ABP VNext Quartz.NET vs Hangfire:靈活調度與任務管理 🚀? TL;DR🛠 環境與依賴🔧 Quartz.NET 在 ABP 中接入1. 安裝與模塊…

[硬件電路-148]:數字電路 - 什么是CMOS電平、TTL電平?還有哪些其他電平標準?發展歷史?

1. CMOS電平定義: CMOS(Complementary Metal-Oxide-Semiconductor)電平基于互補金屬氧化物半導體工藝,由PMOS和NMOS晶體管組成。其核心特點是低功耗、高抗干擾性和寬電源電壓范圍(通常為3V~18V)。關鍵參數&…

0基礎網站開發技術教學(二) --(前端篇 2)--

書接上回說到的前端3種主語言以及其用法,這期我們再來探討一下javascript的一些編碼技術。 一) 自定義函數 假如你要使用一個功能,正常來說直接敲出來便可。可如果這個功能你要用不止一次呢?難道你每次都敲出來嗎?這個時侯,就要用到我們的自…

前端 拼多多4399筆試題目

拼多多 3 選擇題 opacity|visibity|display區別 在CSS中,opacity: 0 和 visibility: hidden 都可以讓元素不可見,但它們的行為不同: ? opacity: 0(透明度為0) 元素仍然占據空間(不移除文檔流&#xff0…

數琨創享:全球汽車高端制造企業 QMS質量管理平臺案例

01.行業領軍者的質量升級使命在全球汽車產業鏈加速升級的浪潮中,質量管控能力已成為企業核心競爭力的關鍵。作為工信部認證的制造業單項冠軍示范企業,萬向集團始終以“全球制造、全球市場、做行業領跑者”為戰略愿景。面對奔馳、寶馬、大眾等“9N”高端客…

GaussDB 約束的使用舉例

1 not null 約束not null 約束強制列不接受 null 值。not null 約束強制字段始終包含值。這意味著,如果不向字段添加值,就無法插入新記錄或者更新記錄。GaussDB使用pg_get_tabledef()函數獲取customers表結構,如:csdn> set sea…

自動駕駛中的傳感器技術13——Camera(4)

1、自駕Camera開發的方案是否歸一化對于OEM,或者自駕方案商如Mobileye如果進行Camera的開發,一般建議采用Tesla的系統化最優方案,所有Camera統一某個或者某兩個MP設計(增加CIS議價權,減少Camera PCBA的設計維護數量&am…

開源利器:glTF Compressor——高效優化3D模型的終極工具

在3D圖形開發領域,glTF(GL Transmission Format)已成為Web和移動端3D內容的通用標準。然而,3D模型的文件體積和紋理質量往往面臨權衡難題。Shopify最新開源的glTF Compressor工具,為開發者提供了一套精細化、自動化的解決方案,讓3D模型優化既高效又精準。本文將深入解析這…

LeetCode Hot 100,快速學習,不斷更

工作做多了有時候需要回歸本心,認真刷題記憶一下算法。那就用我這練習時長兩年半的代碼農民工來嘗試著快速解析LeetCode 100吧 快速解析 哈希 1. 兩數之和 - 力扣(LeetCode) 這題很簡單啊,思路也很多 1. 暴力搜索,…

MySQL的子查詢:

目錄 子查詢的相關概念: 子查詢的分類: 角度1: 單行子查詢: 單行比較操作符: 子查詢的空值情況: 多行子查詢: 多行比較操作符: ANY和ALL的區別: 子查詢為空值的…

Python批處理深度解析:構建高效大規模數據處理系統

引言:批處理的現代價值在大數據時代,批處理(Batch Processing) 作為數據處理的核心范式,正經歷著復興。盡管實時流處理備受關注,但批處理在數據倉庫構建、歷史數據分析、報表生成等場景中仍不可替代。Pytho…

是德科技的BenchVue和納米軟件的ATECLOUD有哪些區別?

是德科技的BenchVue和納米軟件的ATECLOUD雖然都是針對儀器儀表測試的軟件,但是在功能設計、測試場景、技術架構等方面有著明顯的差異。BenchVue(是德科技)由全球領先的測試測量設備供應商開發,專注于高端儀器控制與數據分析&#…

線上redis的使用

一.String1.緩存玩家單個數據,但是我覺得還是用hash好2.結合過期時間,比如:某個東西結算了,redis記錄一下,并設置過期時間3.分布式鎖二.Hash1.緩存一個單位的數據,比如:聯盟信息2.被封禁的列表,…

【實踐記錄】github倉庫的更新

首先登錄,參考:記一次github連接本地git_如何連接github-CSDN博客 SSH: git config --global user.name "GitHubUsername" git config --global user.email "emailexample.com" ssh-keygen -t ed25519 -C "emailex…

Nature圖形復現—Graphpad繪制帶P值的含數據點的小提琴圖

帶 P 值的含數據點的小提琴圖是一種科研數據可視化圖表,它同時呈現數據的分布特征、原始觀測值和統計顯著性:通過小提琴形狀展示概率密度分布(反映數據集中趨勢和離散程度),疊加抖動散點顯示所有原始數據點&#xff08…

mongodb源代碼分析createCollection命令由create.idl變成create_gen.cpp過程

mongodb命令db.createCollection(name, options)創建一個新集合。由于 MongoDB 在命令中首次引用集合時會隱式創建集合,因此此方法主要用于創建使用特定選項的新集合。例如,您使用db.createCollection()創建:固定大小集合;集群化集…

達夢(DM8)常用管理SQL命令(3)

達夢(DM8)常用管理SQL命令(3) 1.表空間 -- 查看表空間信息 SQL> SELECT * FROM v$tablespace;-- 查看數據文件 SQL> SELECT * FROM v$datafile;-- 表空間使用情況 SQL> SELECT df.tablespace_name "表空間名稱",df.bytes/1024/1024 "總大小(MB)&q…

【Django】-5- ORM的其他用法

一、🚀 ORM 新增數據魔法!核心目標教你用 Django ORM 給數據庫 新增數據 !就像給數據庫 “生小數據寶寶”👶方法 1:實例化 Model save(一步步喂數據)obj Feedback() # 實例化 obj.quality d…

Flink Checkpoint機制:大數據流處理的堅固護盾

引言在大數據技術蓬勃發展的當下,數據處理框架層出不窮,Flink 憑借其卓越的流批一體化處理能力,在大數據流處理領域占據了舉足輕重的地位 。它以高吞吐量、低延遲和精準的一次性語義等特性,成為眾多企業處理實時數據的首選工具。在…

【STM32-HAL】 SPI通信與Flash數據寫入實戰

文章目錄1.參考教程2. 4種時間模式3. 3個編程接口3.1 HAL_StatusTypeDef HAL_SPI_Transmit(...) :3.1.1 參數說明3.1.2 例子3.2 HAL_StatusTypeDef HAL_SPI_Receive(...) :3.2.1參數說明3.2.2 例子3.3 HAL_StatusTypeDef HAL_SPI_TransmitReceive(...) &…