Skip to content

Commit f41e873

Browse files
committed
updates
1 parent e569de0 commit f41e873

File tree

4 files changed

+213
-4
lines changed

4 files changed

+213
-4
lines changed

src/3DVL/图解PointNet++.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
icon: file
3+
category:
4+
- 3D-VL
5+
tag:
6+
- 3D-VL
7+
- point cloud
8+
- 编辑中
9+
footer: 技术共建,知识共享
10+
date: 2025-05-25
11+
cover: assets/cover/PointNet.png
12+
author:
13+
- BinaryOracle
14+
---
15+
16+
`图解PointNet++`
17+
18+
<!-- more -->
19+
20+
# 图解PointNet++
21+

src/3DVL/图解PointNet.md

Lines changed: 189 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ category:
44
- 3D-VL
55
tag:
66
- 3D-VL
7+
- point cloud
78
- 编辑中
89
footer: 技术共建,知识共享
910
date: 2025-05-25
@@ -16,4 +17,191 @@ author:
1617

1718
<!-- more -->
1819

19-
# 图解PointNet
20+
# 图解PointNet
21+
22+
> 论文: [https://arxiv.org/abs/1612.00593](https://arxiv.org/abs/1612.00593)
23+
> TensorFlow 版本代码: [https://github.com/charlesq34/pointnet](https://github.com/charlesq34/pointnet)
24+
> Pytorch 版本代码: [https://github.com/fxia22/pointnet.pytorch](https://github.com/fxia22/pointnet.pytorch)
25+
26+
## 核心
27+
28+
问题背景: 点云是三维几何数据的一种重要表示形式,但由于其无序性和非规则性,传统卷积神经网络难以直接处理。
29+
30+
❌ 传统方法的缺陷 :
31+
32+
- 将点云转换为体素网格(voxel grid)或图像视图(multi-view rendering), 这些方法会导致信息损失、计算量大、不灵活等问题。
33+
34+
🌟 PointNet 的创新点 :
35+
36+
- 直接以点集作为输入,避免了复杂的预处理;
37+
38+
- 设计了一个统一架构,适用于分类、物体分割和场景语义解析;
39+
40+
- 利用对称函数(如最大池化)实现点集顺序不变性;
41+
42+
- 引入 T-Net(空间变换网络)标准化输入点云和特征空间。
43+
44+
## 难点
45+
46+
1. 点云的无序性(Unordered): 点云是点的集合,没有固定顺序;模型必须对输入点的排列顺序不敏感(permutation invariant)。
47+
48+
2. 点之间存在相互作用(Interaction among points): 点与点之间有空间关系,需要捕捉局部结构。
49+
50+
3. 对几何变换的不变性(Invariance under transformations): 模型输出应不受刚性变换影响(如旋转、平移)。
51+
52+
4. 输入点云可能缺失或包含噪声(Missing or noisy points): 实际采集的点云常有遮挡、稀疏、异常值等问题。
53+
54+
## 解决方案
55+
56+
✅ 难点 1:点云的无序性 → **使用对称函数(Symmetric Function)**
57+
58+
- 使用 **max pooling** 作为对称函数,聚合所有点的信息;
59+
60+
- 所有点经过共享参数的 MLP 提取特征;
61+
62+
- 最终输出与点的顺序无关;
63+
64+
原理说明:
65+
66+
```python
67+
f({x1, ..., xn}) ≈ g(h(x1), ..., h(xn)) = γ(MAX(h(x1), ..., h(xn)))
68+
```
69+
70+
其中:
71+
72+
- `h(xi)` 是每个点的高维特征;
73+
74+
- `MAX` 是 max pooling 函数;
75+
76+
- `γ` 是后续的全连接网络;
77+
78+
- 整个函数 f 是对称的,即对点顺序不敏感。
79+
80+
效果:
81+
82+
- 实验证明 max pooling 比排序、RNN、average pooling 更有效;
83+
84+
- PointNet 可以处理任意顺序的点集;
85+
86+
---
87+
88+
✅ 难点 2:点之间的相互作用 → **设计局部 + 全局信息融合机制**
89+
90+
- 在分割任务中,将全局特征与每个点的局部特征拼接起来;
91+
92+
- 这样每个点在预测标签时都能看到整个物体的上下文;
93+
94+
95+
效果:
96+
97+
- 显著提升了分割性能;
98+
99+
- 让模型既关注局部细节,又理解整体结构;
100+
101+
---
102+
103+
✅ 难点 3:对几何变换的不变性 → **引入 T-Net(空间变换网络)**
104+
105+
- 引入两个空间变换网络:
106+
107+
- **STN3d**:对输入点云做刚性变换(3×3 矩阵);
108+
109+
- **STNkd**:对特征空间做变换(64×64 矩阵);
110+
111+
- 加入正则项约束变换矩阵接近正交:
112+
113+
```python
114+
L_reg = ||I - A @ A^T||_F^2
115+
```
116+
117+
效果:
118+
119+
- PointNet 对点云的旋转、平移等变换具有鲁棒性;
120+
121+
- 提升了模型的泛化能力和稳定性;
122+
123+
---
124+
125+
✅ 难点 4:输入点云可能缺失或含有异常点 → **理论分析保证模型鲁棒性**
126+
127+
- 理论上证明 PointNet 学到的是一个“关键点集”(critical point set),即只依赖一小部分关键点就能判断整体形状;
128+
129+
- 即使丢失一些点或加入异常点,只要关键点还在,结果就不会变;
130+
131+
定理表明:
132+
133+
- 小扰动不会改变函数输出;
134+
135+
- 网络输出由一个有限子集 CS 决定(大小不超过 bottleneck 维度 K);
136+
137+
- CS 是关键点集合,NS 是最大可容忍的点云范围;
138+
139+
实验验证:
140+
141+
- 即使 50% 的点缺失,分类准确率仅下降约 3.7%;
142+
143+
- 对异常点也有一定容忍能力;
144+
145+
---
146+
✅ 总结: **PointNet 通过 max pooling 实现对称性,结合 T-Net 实现变换不变性,并通过局部+全局特征融合机制实现强大的点云建模能力,解决了点云处理中的四大技术难点,为后续三维深度学习奠定了基础。**
147+
148+
149+
150+
151+
152+
## 背景知识扫盲(可选)
153+
154+
### 点云
155+
156+
点云: 是一种表示三维空间中物体或场景的方式,它由大量带有位置信息的点组成。
157+
158+
每个点通常包含:
159+
- 坐标信息 :x, y, z(3D 空间中的位置)。
160+
- 可选属性:颜色(RGB)、法向量(Normal)、强度(Intensity)、时间戳等。
161+
162+
表示形式:
163+
- 点云(Point Cloud): 原始点集合:每个点有(x, y, z)坐标; 可选颜色、法向量等属性, 简洁、轻便; 保留原始几何信息,无序性、非结构化、难以用 CNN 处理。
164+
165+
- 体素网格 (voxel grids) : 将空间划分成立方体格子,每个格子表示是否有物体; 结构规整,适合 3D CNN; 计算复杂度高、稀疏性强、精度受限。
166+
167+
- 多视角图像(Multi-View Images): 从多个角度渲染点云或 3D 模型为 2D 图像; 可使用成熟的 2D CNN 方法; 丢失部分几何信息,依赖视角选择。
168+
169+
- 网格(Mesh): 由三角形面片组成的 3D 模型; 包含表面细节,适合渲染; 难以自动构建,拓扑复杂。
170+
171+
172+
### 对称函数
173+
174+
对称函数(Symmetric Function)是一种对输入顺序不敏感的函数;换句话说,无论你如何打乱输入元素的顺序,输出结果都保持不变。
175+
176+
🧠 **数学定义:**
177+
178+
设$f(x_1, x_2, ..., x_n)$是一个函数,如果对于任意排列$\sigma$(permutation),都有:
179+
180+
$$
181+
f(x_1, x_2, ..., x_n) = f(x_{\sigma(1)}, x_{\sigma(2)}, ..., x_{\sigma(n)})
182+
$$
183+
184+
那么$f$就是一个 **对称函数**
185+
186+
PointNet 处理的是点云数据,而点云是无序集合(unordered set) ,即:
187+
188+
- 点云中点的顺序不影响整体形状。
189+
190+
- 所以模型必须具有对点顺序的不变性(permutation invariance)。
191+
192+
- 这就要求网络中的某些关键操作必须是对称函数 ,才能保证整个网络输出与输入点的顺序无关。
193+
194+
195+
📦 常见的对称函数:
196+
197+
| 函数 | 描述 | 是否可微 | 应用场景 |
198+
|------|------|----------|-----------|
199+
| **最大池化(Max Pooling)** | 取所有点的最大值:$\max(x_1, x_2, ..., x_n)$| ✅ 是 | PointNet 中的核心操作 |
200+
| **平均池化(Average Pooling)** | 取所有点的平均值:$\frac{1}{n}\sum_{i=1}^{n} x_i$| ✅ 是 | 特征融合、平滑处理 |
201+
| **求和(Summation)** | 所有点相加:$\sum x_i$| ✅ 是 | 构建全局特征向量 |
202+
| **乘积(Product)** | 所有点相乘:$\prod x_i$| ⚠️ 对数值变化敏感 | 不常用,但可用于特定任务 |
203+
| **最小池化(Min Pooling)** | 取最小值:$\min(x_1, x_2, ..., x_n)$| ✅ 是 | 异常检测等特殊场景 |
204+
| **Softmax + 加权和(Attention-based Sum)** | 根据注意力机制加权求和,权重由 softmax 得出 | ✅ 是 | DGCNN、Transformer 中使用 |
205+
| **统计量(如方差、标准差)** | 计算点集的分布特性 | ✅ 是 | 特征增强、异常检测 |
206+
| **集合函数近似器(如 Deep Sets)** | 使用神经网络直接学习对称函数 | ✅ 是 | 更复杂的对称函数建模 |
207+

src/3DVL/图解PointNet/1.png

245 KB
Loading

src/LLM/图解BERT.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ wget https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-
4040
export BERT_BASE_DIR=/Users/zhandaohong/Read_Bert_Code/chinese_L-12_H-768_A-12
4141

4242
python convert_tf_checkpoint_to_pytorch.py \
43-
--tf_checkpoint_path $BERT_BASE_DIR/bert_model.ckpt \
44-
--bert_config_file $BERT_BASE_DIR/bert_config.json \
45-
--pytorch_dump_path $BERT_BASE_DIR/pytorch_model.bin
43+
--tf_checkpoint_path$BERT_BASE_DIR/bert_model.ckpt \
44+
--bert_config_file$BERT_BASE_DIR/bert_config.json \
45+
--pytorch_dump_path$BERT_BASE_DIR/pytorch_model.bin
4646
```
4747

4848
转化成功之后,将模型放入到仓库对应位置:

0 commit comments

Comments
 (0)