当前位置:网站首页>【点云处理之论文狂读前沿版11】—— Unsupervised Point Cloud Pre-training via Occlusion Completion
【点云处理之论文狂读前沿版11】—— Unsupervised Point Cloud Pre-training via Occlusion Completion
2022-07-03 08:53:00 【LingbinBu】
OcCo:Unsupervised Point Cloud Pre-training via Occlusion Completion
摘要
- 方法: 提出一种用于点云的预训练方法Occlusion Completion (OcCo)
- 技术细节:
- mask相机视角里被遮挡的点
- 学习一个encoder-decoder模型,用于重建被遮挡的点
- 使用encoder的权值作为下游点云任务的初始化
- 应用: object classification & part-based and semantic segmentation
- 代码:https://github.com/hansen7/OcCo (支持PyTorch和TensorFlow)

引言
OcCo有着如下的性质:
- 在小样本学习(few-shot learning)实验中能够提高采样效率
- 在分类和分割任务中能提高泛化性
- 在微调后能更容易找到局部最小值
- 通过network dissection能够描述更具语义的表示
- 在jittering, translation 和 rotation 变换下仍能保持更好的分类质量

方法
记 P \mathcal{P} P为3D欧式空间中的一组点云, P = { p 1 , p 2 , … , p n } \mathcal{P}=\left\{p_{1}, p_{2}, \ldots, p_{n}\right\} P={ p1,p2,…,pn},其中每个点 p i p_{i} pi是包含坐标 ( x i , y i , z i ) \left(x_{i}, y_{i}, z_{i}\right) (xi,yi,zi)和其他特征(颜色和法向量)的向量。先从occlusion mapping o ( ⋅ ) o(\cdot) o(⋅)开始描述,然后再介绍ompletion model c ( ⋅ ) c(\cdot) c(⋅),伪代码和结构细节在附录里展示。
Generating Occlusions
定义一个randomised occlusion mapping o : P → P o: \mathbb{P} \rightarrow \mathbb{P} o:P→P ,其中 P \mathbb{P} P是点云空间,描述的是从全部点云 P \mathcal{P} P 到遮挡点云 P ~ \tilde{\mathcal{P}} P~之间的映射。该映射通过移除 P \mathbb{P} P中那些无法从特定视点看到的点来构建 P ~ \tilde{\mathcal{P}} P~,步骤如下:
- 世界坐标系中的完整点云根据相机的视点被投射到相机坐标系中的坐标上
- 确定该视点下被遮挡的点
- 再将相机坐标系中的点反投影到世界坐标系
Viewing the point cloud from a camera
通过针孔相机定义从3D世界坐标系到特定相机坐标系之间的映射:

其中 ( x , y , z ) (x, y, z) (x,y,z)是原始点云在世界坐标系中的坐标,相机视点被旋转矩阵 R \mathbf{R} R和平移向量 t \mathbf{t} t决定。相机内参 K \mathbf{K} K由焦距 f f f,skewness γ \gamma γ,成像的宽 w w w,高 h h h决定。在给定上述参数后,就可以计算点在相机坐标系中的坐标 ( x c a m , y c a m , z c a m ) \left(x_{\mathrm{cam}}, y_{\mathrm{cam}}, z_{\mathrm{cam}}\right) (xcam,ycam,zcam)。
Determining occluded points
通过两种方式处理点 ( x c a m , y c a m , z c a m ) \left(x_{\mathrm{cam}}, y_{\mathrm{cam}}, z_{\mathrm{cam}}\right) (xcam,ycam,zcam) :
- 相机坐标系中的3D点 ( x c a m , y c a m , z c a m ) \left(x_{\mathrm{cam}}, y_{\mathrm{cam}}, z_{\mathrm{cam}}\right) (xcam,ycam,zcam)
- 深度为 z c a m z_{\mathrm{cam}} zcam的2D像素坐标 ( f x c a m / z c a m , f y c a m / z c a m ) \left(f x_{\mathrm{cam}} / z_{\mathrm{cam}}, f y_{\mathrm{cam}} / z_{\mathrm{cam}}\right) (fxcam/zcam,fycam/zcam)
通过这种方式,如果一些通过投影得到的点有相同的像素坐标,但是深度值却不相同,那么这些点间可能会存在遮挡关系。为了确定哪些点是被遮挡了,我们首先利用Delaunay triangulation来重建一个polygon mesh,然后移除属于hidden surface的点,这个hidden surface通过 z-buffering决定。
Mapping back from camera frame to world frame
一旦移除掉遮挡的点,我们就可以重新将点投射原先的世界坐标系中,使用的原理是公式1的逆变换。因此randomised occlusion mapping o ( ⋅ ) o(\cdot) o(⋅)的构造步骤如下:
- 固定一组初始点云 P \mathcal{P} P
- 给定相机的内参矩阵 K \mathbf{K} K,多个视点下的外参 [ [ R 1 ∣ t 1 ] , … , [ R V ∣ t V ] ] \left[\left[\mathbf{R}_{1} \mid \mathbf{t}_{1}\right], \ldots,\left[\mathbf{R}_{V} \mid \mathbf{t}_{V}\right]\right] [[R1∣t1],…,[RV∣tV]],其中 V V V表示视点的数量
- 对于每个视点 v ∈ [ V ] v \in[V] v∈[V],使用公式1将 P \mathcal{P} P都投射到对应的相机坐标系中
- 找到遮挡点并移除这些点
- 将剩下来的点反投影到世界坐标系中,对于每个视点 v ∈ [ V ] v \in[V] v∈[V],都得到最终的遮挡点云 P ~ v \tilde{\mathcal{P}}_{v} P~v
The Completion Task
给定通过遮挡映射 o ( ⋅ ) o(\cdot) o(⋅)得到的点云 P ~ \tilde{\mathcal{P}} P~,补全任务的目标便是从 P ~ \tilde{\mathcal{P}} P~学习一个completion mapping c : P → P c: \mathbb{P} \rightarrow \mathbb{P} c:P→P,用于补全点云 P ^ \hat{\mathcal{P}} P^。如果满足 E P ~ ∼ o ( P ) ℓ ( c ( P ~ ) , P ) → 0 \mathbb{E}_{\tilde{\mathcal{P}} \sim o(\mathcal{P})} \ell(c(\tilde{\mathcal{P}}), \mathcal{P}) \rightarrow 0 EP~∼o(P)ℓ(c(P~),P)→0,那么说明completion mapping 是准确的,其中 ℓ ( ⋅ , ⋅ ) \ell(\cdot, \cdot) ℓ(⋅,⋅)为损失函数。补全模型的结构是一个encoder-decoder的网络,encoder将遮挡的网络映射为一个向量,decoder对点云进行补全。在预训练后,encoder的权重可以作为下游任务的初始值。
实验
OcCo Pre-Training Setup
在所有的实验中都使用ModelNet40作为预训练数据集。相机的内参设置为 { f = 1000 , γ = 0 , w = 1600 , h = 1200 } \left\{ {f=1000,\gamma=0,w=1600,h=1200} \right\} { f=1000,γ=0,w=1600,h=1200} 。对于每组点云,随机选择10组视点,视点旋转不同,平移设置为0。
completion model中,encoder可以设置为PointNet, PCN 和 DGCNN。decoder选择folding操作,重建步骤分为两步,第一步将1024维的遮挡向量转换成包含1024个点的coarse点云 P ^ coarse \hat{\mathcal{P}}_{\text {coarse }} P^coarse ,然后对 P ^ coarse \hat{\mathcal{P}}_{\text {coarse }} P^coarse 中的每个点都使用 4 × 4 4 \times 4 4×4的2D网格重建带有16384个点的fine形状 P ^ fine \hat{\mathcal{P}}_{\text {fine }} P^fine ,使用Chamfer Distance (CD)作为预测 P ^ \hat{\mathcal{P}} P^和ground truth P \mathcal{P} P之间的损失函数:
C D ( P ^ , P ) = 1 ∣ P ^ ∣ ∑ x ^ ∈ P ^ min x ∈ P ∥ x ^ − x ∥ 2 + 1 ∣ P ∣ ∑ x ∈ P min x ^ ∈ P ^ ∥ x − x ^ ∥ 2 \begin{aligned} \mathrm{CD}(\hat{\mathcal{P}}, \mathcal{P}) &= \frac{1}{|\hat{\mathcal{P}}|} \sum_{\hat{x} \in \hat{\mathcal{P}}} \min _{x \in \mathcal{P}}\|\hat{x}-x\|_{2}+\frac{1}{|\mathcal{P}|} \sum_{x \in \mathcal{P}} \min _{\hat{x} \in \hat{\mathcal{P}}}\|x-\hat{x}\|_{2} \end{aligned} CD(P^,P)=∣P^∣1x^∈P^∑x∈Pmin∥x^−x∥2+∣P∣1x∈P∑x^∈P^min∥x−x^∥2
最终的补全模型损失是coarse和fine形状的Chamfer distances加权和:
ℓ : = CD ( P ^ coarse , P coarse ) + α C D ( P ^ fine , P fine ) \ell:=\operatorname{CD}\left(\hat{\mathcal{P}}_{\text {coarse }}, \mathcal{P}_{\text {coarse }}\right)+\alpha \mathrm{CD}\left(\hat{\mathcal{P}}_{\text {fine }}, \mathcal{P}_{\text {fine }}\right) ℓ:=CD(P^coarse ,Pcoarse )+αCD(P^fine ,Pfine )

Fine-Tuning Setup
Few-shot learning
小样本学习的目标是使用十分有限的数据训练精确的模型,在训练时,随机选择 K K K个classes,每个category都包含 N N N个样本。

Object classification

Part segmentation

Semantic segmentation


分析
Visualisation of optimisation landscape

Visualisation of learned features

Unsupervised mutual information probe

Detection of semantic concepts


讨论
在未来,设计一个显示考虑遮挡步骤的补全模型会更有趣。该模型可能收敛的更快,需要更少的参数,在训练时也可以当作很强的偏置。
生词
- a flurry of 许多的
边栏推荐
- 剑指 Offer II 091. 粉刷房子
- 常见渗透测试靶场
- 我們有個共同的名字,XX工
- Memory search acwing 901 skiing
- Sword finger offer II 091 Paint the house
- On a un nom en commun, maître XX.
- Get the link behind? Parameter value after question mark
- Using DLV to analyze the high CPU consumption of golang process
- LeetCode 508. The most frequent subtree elements and
- [point cloud processing paper crazy reading classic version 8] - o-cnn: octree based revolutionary neural networks for 3D shape analysis
猜你喜欢

【点云处理之论文狂读经典版11】—— Mining Point Cloud Local Structures by Kernel Correlation and Graph Pooling

How to use Jupiter notebook

With low code prospect, jnpf is flexible and easy to use, and uses intelligence to define a new office mode

樹形DP AcWing 285. 沒有上司的舞會

状态压缩DP AcWing 291. 蒙德里安的梦想

Debug debugging - Visual Studio 2022

Complex character + number pyramid

LeetCode 241. 为运算表达式设计优先级

LeetCode 513. Find the value in the lower left corner of the tree

PIC16F648A-E/SS PIC16 8位 微控制器,7KB(4Kx14)
随机推荐
传统办公模式的“助推器”,搭建OA办公系统,原来就这么简单!
【点云处理之论文狂读前沿版10】—— MVTN: Multi-View Transformation Network for 3D Shape Recognition
网络安全必会的基础知识
Vs2019 configuration opencv3 detailed graphic tutorial and implementation of test code
too many open files解决方案
Bert install no package metadata was found for the 'sacraments' distribution
AcWing 787. 归并排序(模板)
剑指 Offer II 029. 排序的循环链表
树形DP AcWing 285. 没有上司的舞会
DOM render mount patch responsive system
Digital statistics DP acwing 338 Counting problem
Parameters of convolutional neural network
LeetCode 508. 出现次数最多的子树元素和
Sword finger offer II 029 Sorted circular linked list
[point cloud processing paper crazy reading classic version 9] - pointwise revolutionary neural networks
Vscode connect to remote server
Introduction to the usage of getopts in shell
推荐一个 yyds 的低代码开源项目
The "booster" of traditional office mode, Building OA office system, was so simple!
String splicing method in shell