一、点云数据特征
- 无序性:只是点而已,排列顺序不影响
- 近密远疏的特性:扫描与视角不同导致
- 非结构化数据,直接CNN有点难
二、PointNet
1. PointNet基本出发点
- 由于点的无序性导致,需要模型具有置换不变性
f
(
x
1
,
x
2
,
.
.
.
.
.
.
,
x
n
)
≡
f
(
x
π
1
,
x
π
2
,
.
.
.
.
.
.
,
x
π
n
)
,
x
i
∈
R
D
f(x_1,x_2,......,x_n) \equiv f(x_{\pi _1}, x_{\pi _2},......,x_{\pi _n}), x_i\in\mathbb{R}^D
f(x1?,x2?,......,xn?)≡f(xπ1??,xπ2??,......,xπn??),xi?∈RD - 直接使用Max函数(简单粗暴)----- 损失太多特征 ----- 升维然后再做Max操作(其实就是神经网络的隐层)
f
(
x
1
,
x
2
,
.
.
.
.
.
.
,
x
n
)
≡
γ
°
f
(
h
(
x
1
)
,
h
(
x
2
)
,
.
.
.
.
.
.
,
h
(
x
n
)
)
,
x
i
∈
R
D
f(x_1,x_2,......,x_n) \equiv \gamma \circ f(h(x _1), h(x _2),......,h(x _n)), x_i\in\mathbb{R}^D
f(x1?,x2?,......,xn?)≡γ°f(h(x1?),h(x2?),......,h(xn?)),xi?∈RD
2. 基本模型架构
- 分别对每个点进行特征提取(卷积或者全连接),再MAX得到全局进行输出
2. 整体网络架构
- 分类就是得到整体特征再输出;分割就是各个点特征输出结果
3. PointNet有哪些问题
- 根当下主流网络不符,没有局部特征,要不自己,要么一个整体
- 没有关系概念,局部样本点之间肯定存在关系的,没有考虑到
- PointNet++版本要从局部入手,多利用局部特征
- 注:pointNet ++整体思想不便,只不过再特征提取处使用类似图卷积的方式来整合特征
4. PointNet++
1. 基本出发点
- 基于半径选择局部区域(类似得到很多个簇)
- 针对得到的每个区域进行特征提取(卷积)
- 要解决的问题1:如何选择区域(簇中心点选择)
- 要解决的问题2:簇半径大小如何定义,每个簇中选择多少个样本点
2. 步骤
- 第一步先确定好每一个局部区域,接下来对局部区域执行pointnet
1). 采样:最远采样点(farthest point sampling)
- 先随机选择一个点A,计算所有点到点A的距离,选择到点A距离最远的一个点B
- 计算所有点到A的距离
d
A
i
d_{A_i}
dAi??,计算所有点到B的距离
d
B
i
d_{B_i}
dBi??,取两者中小的
d
i
=
m
i
n
(
d
A
i
,
d
B
i
)
d_i = min(d_{A_i},d_{B_i})
di?=min(dAi??,dBi??),取距离最大的点C。
- 其他采样点类似
2). 分组:gouping
- 分组后每个组中的点的个数必须一致,少:取离簇中心最近的点进行复制多份,多:将里簇中心最远的多个点舍去。
- 实际计算时是选择多种半径,多种样本点个数,得到的多个特征进行拼接,目的是特征更丰富。eg:半径 = (0.1, 0.2, 0.4);对应簇的样本个数(16, 32, 64)
3). 对各组进行特征提取
- 先进性纬度变换
b
?
n
p
o
i
n
t
s
?
n
s
a
m
p
l
e
?
f
e
a
t
u
r
e
s
b *npoints * nsample * features
b?npoints?nsample?features
(
8
?
128
(
簇
个
数
)
?
1
(
每
个
簇
中
点
的
个
数
)
?
6
(
纬
度
)
?
>
8
?
6
?
16
?
128
(
顺
序
变
化
)
)
(8*128(簇个数)*1(每个簇中点的个数)*6(纬度) -> 8*6*16*128(顺序变化))
(8?128(簇个数)?1(每个簇中点的个数)?6(纬度)?>8?6?16?128(顺序变化))
- 进行卷积操作(eg:in=6,out=64),得到(86416*128)
- 得到每个簇的特征,一个簇对应一个特征
- 在对所有簇进行MAX,得到一个特征
- 继续做多组采样,分组,卷积,将得到的特征进行拼接
- 最终都得到batch中心点个数特征(但是特征个数可能不同)
- 执行拼接操作
3. 分类整体网络架构
4. 分割整体网络架构
5. 遇到的问题
- PointNet ++ 容易受样本点个数的影响
6. 改进的设计
|